UNPKG

1.73 kBJavaScriptView Raw
1// Django/Jinja2 syntax definition for Prism.js <http://prismjs.com> syntax highlighter.
2// Mostly it works OK but can paint code incorrectly on complex html/template tag combinations.
3
4(function (Prism) {
5
6 Prism.languages.django = {
7 'comment': /^{#[\s\S]*?#}$/,
8 'tag': {
9 pattern: /(^{%[+-]?\s*)\w+/,
10 lookbehind: true,
11 alias: 'keyword'
12 },
13 'delimiter': {
14 pattern: /^{[{%][+-]?|[+-]?[}%]}$/,
15 alias: 'punctuation'
16 },
17 'string': {
18 pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
19 greedy: true
20 },
21 'filter': {
22 pattern: /(\|)\w+/,
23 lookbehind: true,
24 alias: 'function'
25 },
26 'test': {
27 pattern: /(\bis\s+(?:not\s+)?)(?!not\b)\w+/,
28 lookbehind: true,
29 alias: 'function'
30 },
31 'function': /\b[a-z_]\w+(?=\s*\()/i,
32 'keyword': /\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\b/,
33 'operator': /[-+*/%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
34 'number': /\b\d+(?:\.\d+)?\b/,
35 'boolean': /[Tt]rue|[Ff]alse|[Nn]one/,
36 'variable': /\b\w+?\b/,
37 'punctuation': /[{}[\](),.:;]/
38 };
39
40
41 var pattern = /{{[\s\S]*?}}|{%[\s\S]*?%}|{#[\s\S]*?#}/g;
42 var markupTemplating = Prism.languages['markup-templating'];
43
44 Prism.hooks.add('before-tokenize', function (env) {
45 markupTemplating.buildPlaceholders(env, 'django', pattern);
46 });
47 Prism.hooks.add('after-tokenize', function (env) {
48 markupTemplating.tokenizePlaceholders(env, 'django');
49 });
50
51 // Add an Jinja2 alias
52 Prism.languages.jinja2 = Prism.languages.django;
53 Prism.hooks.add('before-tokenize', function (env) {
54 markupTemplating.buildPlaceholders(env, 'jinja2', pattern);
55 });
56 Prism.hooks.add('after-tokenize', function (env) {
57 markupTemplating.tokenizePlaceholders(env, 'jinja2');
58 });
59
60})(Prism);