mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
6.5 KiB
186 lines
6.5 KiB
// CodeMirror, copyright (c) by Marijn Haverbeke and others |
|
// Distributed under an MIT license: http://codemirror.net/LICENSE |
|
|
|
/********************************************************** |
|
* This script provides syntax highlighting support for |
|
* the Ntriples format. |
|
* Ntriples format specification: |
|
* http://www.w3.org/TR/rdf-testcases/#ntriples |
|
***********************************************************/ |
|
|
|
/* |
|
The following expression defines the defined ASF grammar transitions. |
|
|
|
pre_subject -> |
|
{ |
|
( writing_subject_uri | writing_bnode_uri ) |
|
-> pre_predicate |
|
-> writing_predicate_uri |
|
-> pre_object |
|
-> writing_object_uri | writing_object_bnode | |
|
( |
|
writing_object_literal |
|
-> writing_literal_lang | writing_literal_type |
|
) |
|
-> post_object |
|
-> BEGIN |
|
} otherwise { |
|
-> ERROR |
|
} |
|
*/ |
|
|
|
(function(mod) { |
|
if (typeof exports == "object" && typeof module == "object") // CommonJS |
|
mod(require("../../lib/codemirror")); |
|
else if (typeof define == "function" && define.amd) // AMD |
|
define(["../../lib/codemirror"], mod); |
|
else // Plain browser env |
|
mod(CodeMirror); |
|
})(function(CodeMirror) { |
|
"use strict"; |
|
|
|
CodeMirror.defineMode("ntriples", function() { |
|
|
|
var Location = { |
|
PRE_SUBJECT : 0, |
|
WRITING_SUB_URI : 1, |
|
WRITING_BNODE_URI : 2, |
|
PRE_PRED : 3, |
|
WRITING_PRED_URI : 4, |
|
PRE_OBJ : 5, |
|
WRITING_OBJ_URI : 6, |
|
WRITING_OBJ_BNODE : 7, |
|
WRITING_OBJ_LITERAL : 8, |
|
WRITING_LIT_LANG : 9, |
|
WRITING_LIT_TYPE : 10, |
|
POST_OBJ : 11, |
|
ERROR : 12 |
|
}; |
|
function transitState(currState, c) { |
|
var currLocation = currState.location; |
|
var ret; |
|
|
|
// Opening. |
|
if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; |
|
else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; |
|
else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; |
|
else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; |
|
else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; |
|
else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; |
|
|
|
// Closing. |
|
else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; |
|
else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; |
|
else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; |
|
else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; |
|
else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; |
|
else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; |
|
else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; |
|
else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; |
|
|
|
// Closing typed and language literal. |
|
else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; |
|
else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; |
|
|
|
// Spaces. |
|
else if( c == ' ' && |
|
( |
|
currLocation == Location.PRE_SUBJECT || |
|
currLocation == Location.PRE_PRED || |
|
currLocation == Location.PRE_OBJ || |
|
currLocation == Location.POST_OBJ |
|
) |
|
) ret = currLocation; |
|
|
|
// Reset. |
|
else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; |
|
|
|
// Error |
|
else ret = Location.ERROR; |
|
|
|
currState.location=ret; |
|
} |
|
|
|
return { |
|
startState: function() { |
|
return { |
|
location : Location.PRE_SUBJECT, |
|
uris : [], |
|
anchors : [], |
|
bnodes : [], |
|
langs : [], |
|
types : [] |
|
}; |
|
}, |
|
token: function(stream, state) { |
|
var ch = stream.next(); |
|
if(ch == '<') { |
|
transitState(state, ch); |
|
var parsedURI = ''; |
|
stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); |
|
state.uris.push(parsedURI); |
|
if( stream.match('#', false) ) return 'variable'; |
|
stream.next(); |
|
transitState(state, '>'); |
|
return 'variable'; |
|
} |
|
if(ch == '#') { |
|
var parsedAnchor = ''; |
|
stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); |
|
state.anchors.push(parsedAnchor); |
|
return 'variable-2'; |
|
} |
|
if(ch == '>') { |
|
transitState(state, '>'); |
|
return 'variable'; |
|
} |
|
if(ch == '_') { |
|
transitState(state, ch); |
|
var parsedBNode = ''; |
|
stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); |
|
state.bnodes.push(parsedBNode); |
|
stream.next(); |
|
transitState(state, ' '); |
|
return 'builtin'; |
|
} |
|
if(ch == '"') { |
|
transitState(state, ch); |
|
stream.eatWhile( function(c) { return c != '"'; } ); |
|
stream.next(); |
|
if( stream.peek() != '@' && stream.peek() != '^' ) { |
|
transitState(state, '"'); |
|
} |
|
return 'string'; |
|
} |
|
if( ch == '@' ) { |
|
transitState(state, '@'); |
|
var parsedLang = ''; |
|
stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); |
|
state.langs.push(parsedLang); |
|
stream.next(); |
|
transitState(state, ' '); |
|
return 'string-2'; |
|
} |
|
if( ch == '^' ) { |
|
stream.next(); |
|
transitState(state, '^'); |
|
var parsedType = ''; |
|
stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); |
|
state.types.push(parsedType); |
|
stream.next(); |
|
transitState(state, '>'); |
|
return 'variable'; |
|
} |
|
if( ch == ' ' ) { |
|
transitState(state, ch); |
|
} |
|
if( ch == '.' ) { |
|
transitState(state, ch); |
|
} |
|
} |
|
}; |
|
}); |
|
|
|
CodeMirror.defineMIME("text/n-triples", "ntriples"); |
|
|
|
});
|
|
|