Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/mode/ntriples/ntriples.js
1293 views
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");
171
172