| (function(Prism) { |
| |
| // Ignore comments starting with { to privilege string interpolation highlighting |
| var comment = /#(?!\{).+/, |
| interpolation = { |
| pattern: /#\{[^}]+\}/, |
| alias: 'variable' |
| }; |
| |
| Prism.languages.coffeescript = Prism.languages.extend('javascript', { |
| 'comment': comment, |
| 'string': [ |
| |
| // Strings are multiline |
| { |
| pattern: /'(?:\\?[^\\])*?'/, |
| greedy: true, |
| }, |
| |
| { |
| // Strings are multiline |
| pattern: /"(?:\\?[^\\])*?"/, |
| 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' |
| }, |
| rest: 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)); |