| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | 
							- /*
 
-  * =====================================================================================
 
-  *
 
-  *       Filename:  mode/asterisk/asterisk.js
 
-  *
 
-  *    Description:  CodeMirror mode for Asterisk dialplan
 
-  *
 
-  *        Created:  05/17/2012 09:20:25 PM
 
-  *       Revision:  none
 
-  *
 
-  *         Author:  Stas Kobzar (stas@modulis.ca),
 
-  *        Company:  Modulis.ca Inc.
 
-  *
 
-  * =====================================================================================
 
-  */
 
- CodeMirror.defineMode("asterisk", function() {
 
-   var atoms    = ["exten", "same", "include","ignorepat","switch"],
 
-       dpcmd    = ["#include","#exec"],
 
-       apps     = [
 
-                   "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi",
 
-                   "alarmreceiver","amd","answer","authenticate","background","backgrounddetect",
 
-                   "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent",
 
-                   "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge",
 
-                   "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge",
 
-                   "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility",
 
-                   "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa",
 
-                   "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy",
 
-                   "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif",
 
-                   "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete",
 
-                   "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus",
 
-                   "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme",
 
-                   "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete",
 
-                   "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode",
 
-                   "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish",
 
-                   "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce",
 
-                   "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones",
 
-                   "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten",
 
-                   "readfile","receivefax","receivefax","receivefax","record","removequeuemember",
 
-                   "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun",
 
-                   "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax",
 
-                   "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags",
 
-                   "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel",
 
-                   "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground",
 
-                   "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound",
 
-                   "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor",
 
-                   "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec",
 
-                   "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate",
 
-                   "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring",
 
-                   "waitforsilence","waitmusiconhold","waituntil","while","zapateller"
 
-                  ];
 
-   function basicToken(stream,state){
 
-     var cur = '';
 
-     var ch  = '';
 
-     ch = stream.next();
 
-     // comment
 
-     if(ch == ";") {
 
-       stream.skipToEnd();
 
-       return "comment";
 
-     }
 
-     // context
 
-     if(ch == '[') {
 
-       stream.skipTo(']');
 
-       stream.eat(']');
 
-       return "header";
 
-     }
 
-     // string
 
-     if(ch == '"') {
 
-       stream.skipTo('"');
 
-       return "string";
 
-     }
 
-     if(ch == "'") {
 
-       stream.skipTo("'");
 
-       return "string-2";
 
-     }
 
-     // dialplan commands
 
-     if(ch == '#') {
 
-       stream.eatWhile(/\w/);
 
-       cur = stream.current();
 
-       if(dpcmd.indexOf(cur) !== -1) {
 
-         stream.skipToEnd();
 
-         return "strong";
 
-       }
 
-     }
 
-     // application args
 
-     if(ch == '$'){
 
-       var ch1 = stream.peek();
 
-       if(ch1 == '{'){
 
-         stream.skipTo('}');
 
-         stream.eat('}');
 
-         return "variable-3";
 
-       }
 
-     }
 
-     // extension
 
-     stream.eatWhile(/\w/);
 
-     cur = stream.current();
 
-     if(atoms.indexOf(cur) !== -1) {
 
-       state.extenStart = true;
 
-       switch(cur) {
 
-         case 'same': state.extenSame = true; break;
 
-         case 'include':
 
-         case 'switch':
 
-         case 'ignorepat':
 
-           state.extenInclude = true;break;
 
-         default:break;
 
-       }
 
-       return "atom";
 
-     }
 
-   }
 
-   return {
 
-     startState: function() {
 
-       return {
 
-         extenStart: false,
 
-         extenSame:  false,
 
-         extenInclude: false,
 
-         extenExten: false,
 
-         extenPriority: false,
 
-         extenApplication: false
 
-       };
 
-     },
 
-     token: function(stream, state) {
 
-       var cur = '';
 
-       var ch  = '';
 
-       if(stream.eatSpace()) return null;
 
-       // extension started
 
-       if(state.extenStart){
 
-         stream.eatWhile(/[^\s]/);
 
-         cur = stream.current();
 
-         if(/^=>?$/.test(cur)){
 
-           state.extenExten = true;
 
-           state.extenStart = false;
 
-           return "strong";
 
-         } else {
 
-           state.extenStart = false;
 
-           stream.skipToEnd();
 
-           return "error";
 
-         }
 
-       } else if(state.extenExten) {
 
-         // set exten and priority
 
-         state.extenExten = false;
 
-         state.extenPriority = true;
 
-         stream.eatWhile(/[^,]/);
 
-         if(state.extenInclude) {
 
-           stream.skipToEnd();
 
-           state.extenPriority = false;
 
-           state.extenInclude = false;
 
-         }
 
-         if(state.extenSame) {
 
-           state.extenPriority = false;
 
-           state.extenSame = false;
 
-           state.extenApplication = true;
 
-         }
 
-         return "tag";
 
-       } else if(state.extenPriority) {
 
-         state.extenPriority = false;
 
-         state.extenApplication = true;
 
-         ch = stream.next(); // get comma
 
-         if(state.extenSame) return null;
 
-         stream.eatWhile(/[^,]/);
 
-         return "number";
 
-       } else if(state.extenApplication) {
 
-         stream.eatWhile(/,/);
 
-         cur = stream.current();
 
-         if(cur === ',') return null;
 
-         stream.eatWhile(/\w/);
 
-         cur = stream.current().toLowerCase();
 
-         state.extenApplication = false;
 
-         if(apps.indexOf(cur) !== -1){
 
-           return "def strong";
 
-         }
 
-       } else{
 
-         return basicToken(stream,state);
 
-       }
 
-       return null;
 
-     }
 
-   };
 
- });
 
- CodeMirror.defineMIME("text/x-asterisk", "asterisk");
 
 
  |