move a few things away in to-be-integrated/
[myslice.git] / to-be-integrated / third-party / codemirror-3.15 / mode / ntriples / ntriples.js
1 /**********************************************************
2 * This script provides syntax highlighting support for
3 * the Ntriples format.
4 * Ntriples format specification:
5 *     http://www.w3.org/TR/rdf-testcases/#ntriples
6 ***********************************************************/
7
8 /*
9     The following expression defines the defined ASF grammar transitions.
10
11     pre_subject ->
12         {
13         ( writing_subject_uri | writing_bnode_uri )
14             -> pre_predicate
15                 -> writing_predicate_uri
16                     -> pre_object
17                         -> writing_object_uri | writing_object_bnode |
18                           (
19                             writing_object_literal
20                                 -> writing_literal_lang | writing_literal_type
21                           )
22                             -> post_object
23                                 -> BEGIN
24          } otherwise {
25              -> ERROR
26          }
27 */
28 CodeMirror.defineMode("ntriples", function() {
29
30   var Location = {
31     PRE_SUBJECT         : 0,
32     WRITING_SUB_URI     : 1,
33     WRITING_BNODE_URI   : 2,
34     PRE_PRED            : 3,
35     WRITING_PRED_URI    : 4,
36     PRE_OBJ             : 5,
37     WRITING_OBJ_URI     : 6,
38     WRITING_OBJ_BNODE   : 7,
39     WRITING_OBJ_LITERAL : 8,
40     WRITING_LIT_LANG    : 9,
41     WRITING_LIT_TYPE    : 10,
42     POST_OBJ            : 11,
43     ERROR               : 12
44   };
45   function transitState(currState, c) {
46     var currLocation = currState.location;
47     var ret;
48
49     // Opening.
50     if     (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI;
51     else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI;
52     else if(currLocation == Location.PRE_PRED    && c == '<') ret = Location.WRITING_PRED_URI;
53     else if(currLocation == Location.PRE_OBJ     && c == '<') ret = Location.WRITING_OBJ_URI;
54     else if(currLocation == Location.PRE_OBJ     && c == '_') ret = Location.WRITING_OBJ_BNODE;
55     else if(currLocation == Location.PRE_OBJ     && c == '"') ret = Location.WRITING_OBJ_LITERAL;
56
57     // Closing.
58     else if(currLocation == Location.WRITING_SUB_URI     && c == '>') ret = Location.PRE_PRED;
59     else if(currLocation == Location.WRITING_BNODE_URI   && c == ' ') ret = Location.PRE_PRED;
60     else if(currLocation == Location.WRITING_PRED_URI    && c == '>') ret = Location.PRE_OBJ;
61     else if(currLocation == Location.WRITING_OBJ_URI     && c == '>') ret = Location.POST_OBJ;
62     else if(currLocation == Location.WRITING_OBJ_BNODE   && c == ' ') ret = Location.POST_OBJ;
63     else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ;
64     else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ;
65     else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ;
66
67     // Closing typed and language literal.
68     else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG;
69     else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE;
70
71     // Spaces.
72     else if( c == ' ' &&
73              (
74                currLocation == Location.PRE_SUBJECT ||
75                currLocation == Location.PRE_PRED    ||
76                currLocation == Location.PRE_OBJ     ||
77                currLocation == Location.POST_OBJ
78              )
79            ) ret = currLocation;
80
81     // Reset.
82     else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT;
83
84     // Error
85     else ret = Location.ERROR;
86
87     currState.location=ret;
88   }
89
90   return {
91     startState: function() {
92        return {
93            location : Location.PRE_SUBJECT,
94            uris     : [],
95            anchors  : [],
96            bnodes   : [],
97            langs    : [],
98            types    : []
99        };
100     },
101     token: function(stream, state) {
102       var ch = stream.next();
103       if(ch == '<') {
104          transitState(state, ch);
105          var parsedURI = '';
106          stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} );
107          state.uris.push(parsedURI);
108          if( stream.match('#', false) ) return 'variable';
109          stream.next();
110          transitState(state, '>');
111          return 'variable';
112       }
113       if(ch == '#') {
114         var parsedAnchor = '';
115         stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;});
116         state.anchors.push(parsedAnchor);
117         return 'variable-2';
118       }
119       if(ch == '>') {
120           transitState(state, '>');
121           return 'variable';
122       }
123       if(ch == '_') {
124           transitState(state, ch);
125           var parsedBNode = '';
126           stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;});
127           state.bnodes.push(parsedBNode);
128           stream.next();
129           transitState(state, ' ');
130           return 'builtin';
131       }
132       if(ch == '"') {
133           transitState(state, ch);
134           stream.eatWhile( function(c) { return c != '"'; } );
135           stream.next();
136           if( stream.peek() != '@' && stream.peek() != '^' ) {
137               transitState(state, '"');
138           }
139           return 'string';
140       }
141       if( ch == '@' ) {
142           transitState(state, '@');
143           var parsedLang = '';
144           stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;});
145           state.langs.push(parsedLang);
146           stream.next();
147           transitState(state, ' ');
148           return 'string-2';
149       }
150       if( ch == '^' ) {
151           stream.next();
152           transitState(state, '^');
153           var parsedType = '';
154           stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} );
155           state.types.push(parsedType);
156           stream.next();
157           transitState(state, '>');
158           return 'variable';
159       }
160       if( ch == ' ' ) {
161           transitState(state, ch);
162       }
163       if( ch == '.' ) {
164           transitState(state, ch);
165       }
166     }
167   };
168 });
169
170 CodeMirror.defineMIME("text/n-triples", "ntriples");