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);
> true, }, builtin: /\B@(?!\d)\w+(?=\s*\()/, label: { pattern: /(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/, lookbehind: true, }, 'class-name': [ // const Foo = struct {}; /\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/, { // const x: i32 = 9; // var x: Bar; // fn foo(x: bool, y: f32) void {} pattern: RegExp( /(:\s*)<TYPE>(?=\s*(?:<ALIGN>\s*)?[=;,)])|<TYPE>(?=\s*(?:<ALIGN>\s*)?\{)/.source .replace(/<TYPE>/g, literal(TYPE)) .replace(/<ALIGN>/g, literal(ALIGN)) ), lookbehind: true, inside: null, // see below }, { // extern fn foo(x: f64) f64; (optional alignment) pattern: RegExp( /(\)\s*)<TYPE>(?=\s*(?:<ALIGN>\s*)?;)/.source .replace(/<TYPE>/g, literal(TYPE)) .replace(/<ALIGN>/g, literal(ALIGN)) ), lookbehind: true, inside: null, // see below }, ], 'builtin-type': { pattern: /\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\b/, alias: 'keyword', }, keyword: keyword, function: /\b(?!\d)\w+(?=\s*\()/, number: /\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+(?:\.[a-fA-F\d]*)?(?:[pP][+-]?[a-fA-F\d]+)?|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)\b/, boolean: /\b(?:false|true)\b/, operator: /\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/, punctuation: /[.:,;(){}[\]]/, }; Prism.languages.zig['class-name'].forEach(function (obj) { if (obj.inside === null) { obj.inside = Prism.languages.zig; } }); })(Prism);