File modules/editor/codemirror/mode/jinja2/jinja2.js
Last commit: Sun Dec 17 01:14:09 2017 +0100 Jan Dankert Integration eines weiteren Code-Editors: Codemirror. Demnächst müssen wir hier mal aufräumen und andere Editoren rauswerfen.
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 // Distributed under an MIT license: http://codemirror.net/LICENSE 3 4 (function(mod) { 5 if (typeof exports == "object" && typeof module == "object") // CommonJS 6 mod(require("../../lib/codemirror")); 7 else if (typeof define == "function" && define.amd) // AMD 8 define(["../../lib/codemirror"], mod); 9 else // Plain browser env 10 mod(CodeMirror); 11 })(function(CodeMirror) { 12 "use strict"; 13 14 CodeMirror.defineMode("jinja2", function() { 15 var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", 16 "extends", "filter", "endfilter", "firstof", "for", 17 "endfor", "if", "endif", "ifchanged", "endifchanged", 18 "ifequal", "endifequal", "ifnotequal", 19 "endifnotequal", "in", "include", "load", "not", "now", "or", 20 "parsed", "regroup", "reversed", "spaceless", 21 "endspaceless", "ssi", "templatetag", "openblock", 22 "closeblock", "openvariable", "closevariable", 23 "openbrace", "closebrace", "opencomment", 24 "closecomment", "widthratio", "url", "with", "endwith", 25 "get_current_language", "trans", "endtrans", "noop", "blocktrans", 26 "endblocktrans", "get_available_languages", 27 "get_current_language_bidi", "plural"], 28 operator = /^[+\-*&%=<>!?|~^]/, 29 sign = /^[:\[\(\{]/, 30 atom = ["true", "false"], 31 number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; 32 33 keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); 34 atom = new RegExp("((" + atom.join(")|(") + "))\\b"); 35 36 function tokenBase (stream, state) { 37 var ch = stream.peek(); 38 39 //Comment 40 if (state.incomment) { 41 if(!stream.skipTo("#}")) { 42 stream.skipToEnd(); 43 } else { 44 stream.eatWhile(/\#|}/); 45 state.incomment = false; 46 } 47 return "comment"; 48 //Tag 49 } else if (state.intag) { 50 //After operator 51 if(state.operator) { 52 state.operator = false; 53 if(stream.match(atom)) { 54 return "atom"; 55 } 56 if(stream.match(number)) { 57 return "number"; 58 } 59 } 60 //After sign 61 if(state.sign) { 62 state.sign = false; 63 if(stream.match(atom)) { 64 return "atom"; 65 } 66 if(stream.match(number)) { 67 return "number"; 68 } 69 } 70 71 if(state.instring) { 72 if(ch == state.instring) { 73 state.instring = false; 74 } 75 stream.next(); 76 return "string"; 77 } else if(ch == "'" || ch == '"') { 78 state.instring = ch; 79 stream.next(); 80 return "string"; 81 } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { 82 state.intag = false; 83 return "tag"; 84 } else if(stream.match(operator)) { 85 state.operator = true; 86 return "operator"; 87 } else if(stream.match(sign)) { 88 state.sign = true; 89 } else { 90 if(stream.eat(" ") || stream.sol()) { 91 if(stream.match(keywords)) { 92 return "keyword"; 93 } 94 if(stream.match(atom)) { 95 return "atom"; 96 } 97 if(stream.match(number)) { 98 return "number"; 99 } 100 if(stream.sol()) { 101 stream.next(); 102 } 103 } else { 104 stream.next(); 105 } 106 107 } 108 return "variable"; 109 } else if (stream.eat("{")) { 110 if (stream.eat("#")) { 111 state.incomment = true; 112 if(!stream.skipTo("#}")) { 113 stream.skipToEnd(); 114 } else { 115 stream.eatWhile(/\#|}/); 116 state.incomment = false; 117 } 118 return "comment"; 119 //Open tag 120 } else if (ch = stream.eat(/\{|%/)) { 121 //Cache close tag 122 state.intag = ch; 123 if(ch == "{") { 124 state.intag = "}"; 125 } 126 stream.eat("-"); 127 return "tag"; 128 } 129 } 130 stream.next(); 131 }; 132 133 return { 134 startState: function () { 135 return {tokenize: tokenBase}; 136 }, 137 token: function (stream, state) { 138 return state.tokenize(stream, state); 139 } 140 }; 141 }); 142 });
Downloadmodules/editor/codemirror/mode/jinja2/jinja2.js
History Sun, 17 Dec 2017 01:14:09 +0100 Jan Dankert Integration eines weiteren Code-Editors: Codemirror. Demnächst müssen wir hier mal aufräumen und andere Editoren rauswerfen.