jinja2.js
42 lines
| 1.3 KiB
| application/javascript
|
JavascriptLexer
Matthias BUSSONNIER
|
r8053 | CodeMirror.defineMode("jinja2", function(config, parserConf) { | ||
var keywords = ["block", "endblock", "for", "endfor", "in", "true", "false", | ||||
"loop", "none", "self", "super", "if", "as", "not", "and", | ||||
"else", "import", "with", "without", "context"]; | ||||
keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); | ||||
function tokenBase (stream, state) { | ||||
var ch = stream.next(); | ||||
if (ch == "{") { | ||||
if (ch = stream.eat(/\{|%|#/)) { | ||||
stream.eat("-"); | ||||
state.tokenize = inTag(ch); | ||||
return "tag"; | ||||
} | ||||
} | ||||
} | ||||
function inTag (close) { | ||||
if (close == "{") { | ||||
close = "}"; | ||||
} | ||||
return function (stream, state) { | ||||
var ch = stream.next(); | ||||
if ((ch == close || (ch == "-" && stream.eat(close))) | ||||
&& stream.eat("}")) { | ||||
state.tokenize = tokenBase; | ||||
return "tag"; | ||||
} | ||||
if (stream.match(keywords)) { | ||||
return "keyword"; | ||||
} | ||||
return close == "#" ? "comment" : "string"; | ||||
}; | ||||
} | ||||
return { | ||||
startState: function () { | ||||
return {tokenize: tokenBase}; | ||||
}, | ||||
token: function (stream, state) { | ||||
return state.tokenize(stream, state); | ||||
} | ||||
}; | ||||
}); | ||||