html5 boiler plate
[scannr.git] / js / flotr2 / examples / lib / codemirror / mode / jinja2 / jinja2.js
blob:a/js/flotr2/examples/lib/codemirror/mode/jinja2/jinja2.js -> blob:b/js/flotr2/examples/lib/codemirror/mode/jinja2/jinja2.js
--- a/js/flotr2/examples/lib/codemirror/mode/jinja2/jinja2.js
+++ b/js/flotr2/examples/lib/codemirror/mode/jinja2/jinja2.js
@@ -1,1 +1,43 @@
+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);
+        }
+    }; 
+});
+