UNPKG

1.54 kBJavaScriptView Raw
1(function (Prism) {
2 Prism.languages.latte = {
3 'comment': /^\{\*[\s\S]*/,
4 'latte-tag': {
5 // https://latte.nette.org/en/tags
6 pattern: /(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i,
7 lookbehind: true,
8 alias: 'important'
9 },
10 'delimiter': {
11 pattern: /^\{\/?|\}$/,
12 alias: 'punctuation'
13 },
14 'php': {
15 pattern: /\S(?:[\s\S]*\S)?/,
16 alias: 'language-php',
17 inside: Prism.languages.php
18 }
19 };
20
21 var markupLatte = Prism.languages.extend('markup', {});
22 Prism.languages.insertBefore('inside', 'attr-value', {
23 'n-attr': {
24 pattern: /n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,
25 inside: {
26 'attr-name': {
27 pattern: /^[^\s=]+/,
28 alias: 'important'
29 },
30 'attr-value': {
31 pattern: /=[\s\S]+/,
32 inside: {
33 'punctuation': [
34 /^=/,
35 {
36 pattern: /^(\s*)["']|["']$/,
37 lookbehind: true
38 }
39 ],
40 'php': {
41 pattern: /\S(?:[\s\S]*\S)?/,
42 inside: Prism.languages.php
43 }
44 }
45 },
46 }
47 },
48 }, markupLatte.tag);
49
50 Prism.hooks.add('before-tokenize', function (env) {
51 if (env.language !== 'latte') {
52 return;
53 }
54 var lattePattern = /\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g;
55 Prism.languages['markup-templating'].buildPlaceholders(env, 'latte', lattePattern);
56 env.grammar = markupLatte;
57 });
58
59 Prism.hooks.add('after-tokenize', function (env) {
60 Prism.languages['markup-templating'].tokenizePlaceholders(env, 'latte');
61 });
62
63}(Prism));