aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-chaiscript.js
blob: 731a18f40a1cd803de8f5d0a568ca0f0ce768d43 (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
Prism.languages.chaiscript = Prism.languages.extend('clike', {
  string: {
    pattern: /(^|[^\\])'(?:[^'\\]|\\[\s\S])*'/,
    lookbehind: true,
    greedy: true,
  },
  'class-name': [
    {
      // e.g. class Rectangle { ... }
      pattern: /(\bclass\s+)\w+/,
      lookbehind: true,
    },
    {
      // e.g. attr Rectangle::height, def Rectangle::area() { ... }
      pattern: /(\b(?:attr|def)\s+)\w+(?=\s*::)/,
      lookbehind: true,
    },
  ],
  keyword:
    /\b(?:attr|auto|break|case|catch|class|continue|def|default|else|finally|for|fun|global|if|return|switch|this|try|var|while)\b/,
  number: [Prism.languages.cpp.number, /\b(?:Infinity|NaN)\b/],
  operator:
    />>=?|<<=?|\|\||&&|:[:=]?|--|\+\+|[=!<>+\-*/%|&^]=?|[?~]|`[^`\r\n]{1,4}`/,
});

Prism.languages.insertBefore('chaiscript', 'operator', {
  'parameter-type': {
    // e.g. def foo(int x, Vector y) {...}
    pattern: /([,(]\s*)\w+(?=\s+\w)/,
    lookbehind: true,
    alias: 'class-name',
  },
});

Prism.languages.insertBefore('chaiscript', 'string', {
  'string-interpolation': {
    pattern:
      /(^|[^\\])"(?:[^"$\\]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*"/,
    lookbehind: true,
    greedy: true,
    inside: {
      interpolation: {
        pattern:
          /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}/,
        lookbehind: true,
        inside: {
          'interpolation-expression': {
            pattern: /(^\$\{)[\s\S]+(?=\}$)/,
            lookbehind: true,
            inside: Prism.languages.chaiscript,
          },
          'interpolation-punctuation': {
            pattern: /^\$\{|\}$/,
            alias: 'punctuation',
          },
        },
      },
      string: /[\s\S]+/,
    },
  },
});