smarty.js 1.9 KB
CodeMirror.defineMode("smarty",function(e,t){function r(e,t){return f=t,e}function i(e,t){function r(r){return t.tokenize=r,r(e,t)}return e.match(d,!0)?e.eat("*")?r(o("comment","*"+s)):(t.tokenize=n,"tag"):(e.next(),null)}function n(e,t){if(e.match(s,!0))return t.tokenize=i,r("tag",null);var n=e.next();if("$"==n)return e.eatWhile(l.validIdentifier),r("variable-2","variable");if("."==n)return r("operator","property");if(l.stringChar.test(n))return t.tokenize=a(n),r("string","string");if(l.operatorChars.test(n))return e.eatWhile(l.operatorChars),r("operator","operator");if("["==n||"]"==n)return r("bracket","bracket");if(/\d/.test(n))return e.eatWhile(/\d/),r("number","number");if("variable"==t.last){if("@"==n)return e.eatWhile(l.validIdentifier),r("property","property");if("|"==n)return e.eatWhile(l.validIdentifier),r("qualifier","modifier")}else{if("whitespace"==t.last)return e.eatWhile(l.validIdentifier),r("attribute","modifier");if("property"==t.last)return e.eatWhile(l.validIdentifier),r("property",null);if(/\s/.test(n))return f="whitespace",null}var o="";"/"!=n&&(o+=n);for(var d="";d=e.eat(l.validIdentifier);)o+=d;var c,m;for(c=0,m=u.length;c<m;c++)if(u[c]==o)return r("keyword","keyword");return/\s/.test(n)?null:r("tag","tag")}function a(e){return function(t,r){for(;!t.eol();)if(t.next()==e){r.tokenize=n;break}return"string"}}function o(e,t){return function(r,n){for(;!r.eol();){if(r.match(t)){n.tokenize=i;break}r.next()}return e}}var f,u=["debug","extends","function","include","literal"],l={operatorChars:/[+\-*&%=<>!?]/,validIdentifier:/[a-zA-Z0-9\_]/,stringChar:/[\'\"]/},d="undefined"!=typeof e.mode.leftDelimiter?e.mode.leftDelimiter:"{",s="undefined"!=typeof e.mode.rightDelimiter?e.mode.rightDelimiter:"}";return{startState:function(){return{tokenize:i,mode:"smarty",last:null}},token:function(e,t){var r=t.tokenize(e,t);return t.last=f,r},electricChars:""}}),CodeMirror.defineMIME("text/x-smarty","smarty");