summaryrefslogtreecommitdiffstats
path: root/public/prism/prism-coffeescript.js
blob: c1ca019aa7bfbfc4b28dd3e06f464c926938bd14 (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
(function (Prism) {
  // Ignore comments starting with { to privilege string interpolation highlighting
  var comment = /#(?!\{).+/;
  var interpolation = {
    pattern: /#\{[^}]+\}/,
    alias: 'variable',
  };

  Prism.languages.coffeescript = Prism.languages.extend('javascript', {
    comment: comment,
    string: [
      // Strings are multiline
      {
        pattern: /'(?:\\[\s\S]|[^\\'])*'/,
        greedy: true,
      },

      {
        // Strings are multiline
        pattern: /"(?:\\[\s\S]|[^\\"])*"/,
        greedy: true,
        inside: {
          interpolation: interpolation,
        },
      },
    ],
    keyword:
      /\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,
    'class-member': {
      pattern: /@(?!\d)\w+/,
      alias: 'variable',
    },
  });

  Prism.languages.insertBefore('coffeescript', 'comment', {
    'multiline-comment': {
      pattern: /###[\s\S]+?###/,
      alias: 'comment',
    },

    // Block regexp can contain comments and interpolation
    'block-regex': {
      pattern: /\/{3}[\s\S]*?\/{3}/,
      alias: 'regex',
      inside: {
        comment: comment,
        interpolation: interpolation,
      },
    },
  });

  Prism.languages.insertBefore('coffeescript', 'string', {
    'inline-javascript': {
      pattern: /`(?:\\[\s\S]|[^\\`])*`/,
      inside: {
        delimiter: {
          pattern: /^`|`$/,
          alias: 'punctuation',
        },
        script: {
          pattern: /[\s\S]+/,
          alias: 'language-javascript',
          inside: Prism.languages.javascript,
        },
      },
    },

    // Block strings
    'multiline-string': [
      {
        pattern: /'''[\s\S]*?'''/,
        greedy: true,
        alias: 'string',
      },
      {
        pattern: /"""[\s\S]*?"""/,
        greedy: true,
        alias: 'string',
        inside: {
          interpolation: interpolation,
        },
      },
    ],
  });

  Prism.languages.insertBefore('coffeescript', 'keyword', {
    // Object property
    property: /(?!\d)\w+(?=\s*:(?!:))/,
  });

  delete Prism.languages.coffeescript['template-string'];

  Prism.languages.coffee = Prism.languages.coffeescript;
})(Prism);