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