summaryrefslogtreecommitdiffstats
path: root/public/prism/prism-latte.js
blob: dbf91bba8146d279e8dcdd7f01f5490699a0b74f (plain)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(function (Prism) {
  Prism.languages.latte = {
    comment: /^\{\*[\s\S]*/,
    'latte-tag': {
      // https://latte.nette.org/en/tags
      pattern: /(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i,
      lookbehind: true,
      alias: 'important',
    },
    delimiter: {
      pattern: /^\{\/?|\}$/,
      alias: 'punctuation',
    },
    php: {
      pattern: /\S(?:[\s\S]*\S)?/,
      alias: 'language-php',
      inside: Prism.languages.php,
    },
  };

  var markupLatte = Prism.languages.extend('markup', {});
  Prism.languages.insertBefore(
    'inside',
    'attr-value',
    {
      'n-attr': {
        pattern: /n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,
        inside: {
          'attr-name': {
            pattern: /^[^\s=]+/,
            alias: 'important',
          },
          'attr-value': {
            pattern: /=[\s\S]+/,
            inside: {
              punctuation: [
                /^=/,
                {
                  pattern: /^(\s*)["']|["']$/,
                  lookbehind: true,
                },
              ],
              php: {
                pattern: /\S(?:[\s\S]*\S)?/,
                inside: Prism.languages.php,
              },
            },
          },
        },
      },
    },
    markupLatte.tag
  );

  Prism.hooks.add('before-tokenize', function (env) {
    if (env.language !== 'latte') {
      return;
    }
    var lattePattern =
      /\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g;
    Prism.languages['markup-templating'].buildPlaceholders(
      env,
      'latte',
      lattePattern
    );
    env.grammar = markupLatte;
  });

  Prism.hooks.add('after-tokenize', function (env) {
    Prism.languages['markup-templating'].tokenizePlaceholders(env, 'latte');
  });
})(Prism);