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