aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-livescript.js
blob: 682b5063c464513566acfe1c7abe62e3d3c79403 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Prism.languages.livescript = {
  comment: [
    {
      pattern: /(^|[^\\])\/\*[\s\S]*?\*\//,
      lookbehind: true,
    },
    {
      pattern: /(^|[^\\])#.*/,
      lookbehind: true,
    },
  ],
  'interpolated-string': {
    /* Look-behind and look-ahead prevents wrong behavior of the greedy pattern
     * forcing it to match """-quoted string when it would otherwise match "-quoted first. */
    pattern: /(^|[^"])("""|")(?:\\[\s\S]|(?!\2)[^\\])*\2(?!")/,
    lookbehind: true,
    greedy: true,
    inside: {
      variable: {
        pattern: /(^|[^\\])#[a-z_](?:-?[a-z]|[\d_])*/m,
        lookbehind: true,
      },
      interpolation: {
        pattern: /(^|[^\\])#\{[^}]+\}/m,
        lookbehind: true,
        inside: {
          'interpolation-punctuation': {
            pattern: /^#\{|\}$/,
            alias: 'variable',
          },
          // See rest below
        },
      },
      string: /[\s\S]+/,
    },
  },
  string: [
    {
      pattern: /('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,
      greedy: true,
    },
    {
      pattern: /<\[[\s\S]*?\]>/,
      greedy: true,
    },
    /\\[^\s,;\])}]+/,
  ],
  regex: [
    {
      pattern: /\/\/(?:\[[^\r\n\]]*\]|\\.|(?!\/\/)[^\\\[])+\/\/[gimyu]{0,5}/,
      greedy: true,
      inside: {
        comment: {
          pattern: /(^|[^\\])#.*/,
          lookbehind: true,
        },
      },
    },
    {
      pattern: /\/(?:\[[^\r\n\]]*\]|\\.|[^/\\\r\n\[])+\/[gimyu]{0,5}/,
      greedy: true,
    },
  ],
  keyword: {
    pattern:
      /(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m,
    lookbehind: true,
  },
  'keyword-operator': {
    pattern:
      /(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?: not|nt)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m,
    lookbehind: true,
    alias: 'operator',
  },
  boolean: {
    pattern: /(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m,
    lookbehind: true,
  },
  argument: {
    // Don't match .&. nor &&
    pattern: /(^|(?!\.&\.)[^&])&(?!&)\d*/m,
    lookbehind: true,
    alias: 'variable',
  },
  number: /\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i,
  identifier: /[a-z_](?:-?[a-z]|[\d_])*/i,
  operator: [
    // Spaced .
    {
      pattern: /( )\.(?= )/,
      lookbehind: true,
    },
    // Full list, in order:
    // .= .~ .. ...
    // .&. .^. .<<. .>>. .>>>.
    // := :: ::=
    // &&
    // || |>
    // < << <<< <<<<
    // <- <-- <-! <--!
    // <~ <~~ <~! <~~!
    // <| <= <?
    // > >> >= >?
    // - -- -> -->
    // + ++
    // @ @@
    // % %%
    // * **
    // ! != !~=
    // !~> !~~>
    // !-> !-->
    // ~ ~> ~~> ~=
    // = ==
    // ^ ^^
    // / ?
    /\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/,
  ],
  punctuation: /[(){}\[\]|.,:;`]/,
};

Prism.languages.livescript['interpolated-string'].inside[
  'interpolation'
].inside.rest = Prism.languages.livescript;