Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/mode/pegjs/pegjs.js
1294 views
1
CodeMirror.defineMode("pegjs", function (config) {
2
var jsMode = CodeMirror.getMode(config, "javascript");
3
4
function identifier(stream) {
5
return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);
6
}
7
8
return {
9
startState: function () {
10
return {
11
inString: false,
12
stringType: null,
13
inComment: false,
14
inChracterClass: false,
15
braced: 0,
16
lhs: true,
17
localState: null
18
};
19
},
20
token: function (stream, state) {
21
if (stream)
22
23
//check for state changes
24
if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) {
25
state.stringType = stream.peek();
26
stream.next(); // Skip quote
27
state.inString = true; // Update state
28
}
29
if (!state.inString && !state.inComment && stream.match(/^\/\*/)) {
30
state.inComment = true;
31
}
32
33
//return state
34
if (state.inString) {
35
while (state.inString && !stream.eol()) {
36
if (stream.peek() === state.stringType) {
37
stream.next(); // Skip quote
38
state.inString = false; // Clear flag
39
} else if (stream.peek() === '\\') {
40
stream.next();
41
stream.next();
42
} else {
43
stream.match(/^.[^\\\"\']*/);
44
}
45
}
46
return state.lhs ? "property string" : "string"; // Token style
47
} else if (state.inComment) {
48
while (state.inComment && !stream.eol()) {
49
if (stream.match(/\*\//)) {
50
state.inComment = false; // Clear flag
51
} else {
52
stream.match(/^.[^\*]*/);
53
}
54
}
55
return "comment";
56
} else if (state.inChracterClass) {
57
while (state.inChracterClass && !stream.eol()) {
58
if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) {
59
state.inChracterClass = false;
60
}
61
}
62
} else if (stream.peek() === '[') {
63
stream.next();
64
state.inChracterClass = true;
65
return 'bracket';
66
} else if (stream.match(/^\/\//)) {
67
stream.skipToEnd();
68
return "comment";
69
} else if (state.braced || stream.peek() === '{') {
70
if (state.localState === null) {
71
state.localState = jsMode.startState();
72
}
73
var token = jsMode.token(stream, state.localState);
74
var text = stream.current();
75
if (!token) {
76
for (var i = 0; i < text.length; i++) {
77
if (text[i] === '{') {
78
state.braced++;
79
} else if (text[i] === '}') {
80
state.braced--;
81
}
82
};
83
}
84
return token;
85
} else if (identifier(stream)) {
86
if (stream.peek() === ':') {
87
return 'variable';
88
}
89
return 'variable-2';
90
} else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) {
91
stream.next();
92
return 'bracket';
93
} else if (!stream.eatSpace()) {
94
stream.next();
95
}
96
return null;
97
}
98
};
99
}, "javascript");
100
101