Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/mode/asterisk/asterisk.js
1293 views
1
/*
2
* =====================================================================================
3
*
4
* Filename: mode/asterisk/asterisk.js
5
*
6
* Description: CodeMirror mode for Asterisk dialplan
7
*
8
* Created: 05/17/2012 09:20:25 PM
9
* Revision: none
10
*
11
* Author: Stas Kobzar ([email protected]),
12
* Company: Modulis.ca Inc.
13
*
14
* =====================================================================================
15
*/
16
17
CodeMirror.defineMode("asterisk", function() {
18
var atoms = ["exten", "same", "include","ignorepat","switch"],
19
dpcmd = ["#include","#exec"],
20
apps = [
21
"addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi",
22
"alarmreceiver","amd","answer","authenticate","background","backgrounddetect",
23
"bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent",
24
"changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge",
25
"congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge",
26
"dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility",
27
"datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa",
28
"dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy",
29
"externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif",
30
"goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete",
31
"ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus",
32
"jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme",
33
"meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete",
34
"minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode",
35
"mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish",
36
"originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce",
37
"parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones",
38
"privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten",
39
"readfile","receivefax","receivefax","receivefax","record","removequeuemember",
40
"resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun",
41
"saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax",
42
"sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags",
43
"setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel",
44
"slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground",
45
"speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound",
46
"speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor",
47
"stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec",
48
"trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate",
49
"vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring",
50
"waitforsilence","waitmusiconhold","waituntil","while","zapateller"
51
];
52
53
function basicToken(stream,state){
54
var cur = '';
55
var ch = '';
56
ch = stream.next();
57
// comment
58
if(ch == ";") {
59
stream.skipToEnd();
60
return "comment";
61
}
62
// context
63
if(ch == '[') {
64
stream.skipTo(']');
65
stream.eat(']');
66
return "header";
67
}
68
// string
69
if(ch == '"') {
70
stream.skipTo('"');
71
return "string";
72
}
73
if(ch == "'") {
74
stream.skipTo("'");
75
return "string-2";
76
}
77
// dialplan commands
78
if(ch == '#') {
79
stream.eatWhile(/\w/);
80
cur = stream.current();
81
if(dpcmd.indexOf(cur) !== -1) {
82
stream.skipToEnd();
83
return "strong";
84
}
85
}
86
// application args
87
if(ch == '$'){
88
var ch1 = stream.peek();
89
if(ch1 == '{'){
90
stream.skipTo('}');
91
stream.eat('}');
92
return "variable-3";
93
}
94
}
95
// extension
96
stream.eatWhile(/\w/);
97
cur = stream.current();
98
if(atoms.indexOf(cur) !== -1) {
99
state.extenStart = true;
100
switch(cur) {
101
case 'same': state.extenSame = true; break;
102
case 'include':
103
case 'switch':
104
case 'ignorepat':
105
state.extenInclude = true;break;
106
default:break;
107
}
108
return "atom";
109
}
110
}
111
112
return {
113
startState: function() {
114
return {
115
extenStart: false,
116
extenSame: false,
117
extenInclude: false,
118
extenExten: false,
119
extenPriority: false,
120
extenApplication: false
121
};
122
},
123
token: function(stream, state) {
124
125
var cur = '';
126
var ch = '';
127
if(stream.eatSpace()) return null;
128
// extension started
129
if(state.extenStart){
130
stream.eatWhile(/[^\s]/);
131
cur = stream.current();
132
if(/^=>?$/.test(cur)){
133
state.extenExten = true;
134
state.extenStart = false;
135
return "strong";
136
} else {
137
state.extenStart = false;
138
stream.skipToEnd();
139
return "error";
140
}
141
} else if(state.extenExten) {
142
// set exten and priority
143
state.extenExten = false;
144
state.extenPriority = true;
145
stream.eatWhile(/[^,]/);
146
if(state.extenInclude) {
147
stream.skipToEnd();
148
state.extenPriority = false;
149
state.extenInclude = false;
150
}
151
if(state.extenSame) {
152
state.extenPriority = false;
153
state.extenSame = false;
154
state.extenApplication = true;
155
}
156
return "tag";
157
} else if(state.extenPriority) {
158
state.extenPriority = false;
159
state.extenApplication = true;
160
ch = stream.next(); // get comma
161
if(state.extenSame) return null;
162
stream.eatWhile(/[^,]/);
163
return "number";
164
} else if(state.extenApplication) {
165
stream.eatWhile(/,/);
166
cur = stream.current();
167
if(cur === ',') return null;
168
stream.eatWhile(/\w/);
169
cur = stream.current().toLowerCase();
170
state.extenApplication = false;
171
if(apps.indexOf(cur) !== -1){
172
return "def strong";
173
}
174
} else{
175
return basicToken(stream,state);
176
}
177
178
return null;
179
}
180
};
181
});
182
183
CodeMirror.defineMIME("text/x-asterisk", "asterisk");
184
185