123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- /**********************************************************
- * This script provides syntax highlighting support for
- * the N-Triples format.
- * N-Triples format specification:
- * https://www.w3.org/TR/n-triples/
- ***********************************************************/
- /*
- 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);
- }
- }
- };
- });
- // define the registered Media Type for n-triples:
- // https://www.w3.org/TR/n-triples/#n-triples-mediatype
- CodeMirror.defineMIME("application/n-triples", "ntriples");
- // N-Quads is based on the N-Triples format (so same highlighting works)
- // https://www.w3.org/TR/n-quads/
- CodeMirror.defineMIME("application/n-quads", "ntriples");
- // previously used, though technically incorrect media type for n-triples
- CodeMirror.defineMIME("text/n-triples", "ntriples");
- });
|