Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/mode/ntriples/ntriples.js
1293 views
/**********************************************************1* This script provides syntax highlighting support for2* the Ntriples format.3* Ntriples format specification:4* http://www.w3.org/TR/rdf-testcases/#ntriples5***********************************************************/67/*8The following expression defines the defined ASF grammar transitions.910pre_subject ->11{12( writing_subject_uri | writing_bnode_uri )13-> pre_predicate14-> writing_predicate_uri15-> pre_object16-> writing_object_uri | writing_object_bnode |17(18writing_object_literal19-> writing_literal_lang | writing_literal_type20)21-> post_object22-> BEGIN23} otherwise {24-> ERROR25}26*/27CodeMirror.defineMode("ntriples", function() {2829var Location = {30PRE_SUBJECT : 0,31WRITING_SUB_URI : 1,32WRITING_BNODE_URI : 2,33PRE_PRED : 3,34WRITING_PRED_URI : 4,35PRE_OBJ : 5,36WRITING_OBJ_URI : 6,37WRITING_OBJ_BNODE : 7,38WRITING_OBJ_LITERAL : 8,39WRITING_LIT_LANG : 9,40WRITING_LIT_TYPE : 10,41POST_OBJ : 11,42ERROR : 1243};44function transitState(currState, c) {45var currLocation = currState.location;46var ret;4748// Opening.49if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI;50else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI;51else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI;52else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI;53else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE;54else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL;5556// Closing.57else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED;58else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED;59else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ;60else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ;61else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ;62else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ;63else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ;64else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ;6566// Closing typed and language literal.67else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG;68else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE;6970// Spaces.71else if( c == ' ' &&72(73currLocation == Location.PRE_SUBJECT ||74currLocation == Location.PRE_PRED ||75currLocation == Location.PRE_OBJ ||76currLocation == Location.POST_OBJ77)78) ret = currLocation;7980// Reset.81else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT;8283// Error84else ret = Location.ERROR;8586currState.location=ret;87}8889return {90startState: function() {91return {92location : Location.PRE_SUBJECT,93uris : [],94anchors : [],95bnodes : [],96langs : [],97types : []98};99},100token: function(stream, state) {101var ch = stream.next();102if(ch == '<') {103transitState(state, ch);104var parsedURI = '';105stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} );106state.uris.push(parsedURI);107if( stream.match('#', false) ) return 'variable';108stream.next();109transitState(state, '>');110return 'variable';111}112if(ch == '#') {113var parsedAnchor = '';114stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;});115state.anchors.push(parsedAnchor);116return 'variable-2';117}118if(ch == '>') {119transitState(state, '>');120return 'variable';121}122if(ch == '_') {123transitState(state, ch);124var parsedBNode = '';125stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;});126state.bnodes.push(parsedBNode);127stream.next();128transitState(state, ' ');129return 'builtin';130}131if(ch == '"') {132transitState(state, ch);133stream.eatWhile( function(c) { return c != '"'; } );134stream.next();135if( stream.peek() != '@' && stream.peek() != '^' ) {136transitState(state, '"');137}138return 'string';139}140if( ch == '@' ) {141transitState(state, '@');142var parsedLang = '';143stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;});144state.langs.push(parsedLang);145stream.next();146transitState(state, ' ');147return 'string-2';148}149if( ch == '^' ) {150stream.next();151transitState(state, '^');152var parsedType = '';153stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} );154state.types.push(parsedType);155stream.next();156transitState(state, '>');157return 'variable';158}159if( ch == ' ' ) {160transitState(state, ch);161}162if( ch == '.' ) {163transitState(state, ch);164}165}166};167});168169CodeMirror.defineMIME("text/n-triples", "ntriples");170171172