File: jinja2.js

package info (click to toggle)
ipython 2.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 28,032 kB
  • ctags: 15,433
  • sloc: python: 73,792; makefile: 428; sh: 297
file content (52 lines) | stat: -rw-r--r-- 2,053 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
CodeMirror.defineMode("jinja2", function() {
    var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif",
                    "extends", "filter", "endfilter", "firstof", "for",
                    "endfor", "if", "endif", "ifchanged", "endifchanged",
                    "ifequal", "endifequal", "ifnotequal",
                    "endifnotequal", "in", "include", "load", "not", "now", "or",
                    "parsed", "regroup", "reversed", "spaceless",
                    "endspaceless", "ssi", "templatetag", "openblock",
                    "closeblock", "openvariable", "closevariable",
                    "openbrace", "closebrace", "opencomment",
                    "closecomment", "widthratio", "url", "with", "endwith",
                    "get_current_language", "trans", "noop", "blocktrans",
                    "endblocktrans", "get_available_languages",
                    "get_current_language_bidi", "plural"];
    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);
        }
    };
});