summaryrefslogtreecommitdiffstats
path: root/public/prism/prism-crystal.js
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2021-12-30 19:47:21 +0100
committerArmand Philippot <git@armandphilippot.com>2021-12-30 19:47:21 +0100
commita98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch)
tree542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-crystal.js
parentab355897a12b7bda1089a44de326d41455a0f7a3 (diff)
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-crystal.js')
-rw-r--r--public/prism/prism-crystal.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/public/prism/prism-crystal.js b/public/prism/prism-crystal.js
new file mode 100644
index 0000000..a84b288
--- /dev/null
+++ b/public/prism/prism-crystal.js
@@ -0,0 +1,55 @@
+(function (Prism) {
+ Prism.languages.crystal = Prism.languages.extend('ruby', {
+ keyword: [
+ /\b(?:__DIR__|__END_LINE__|__FILE__|__LINE__|abstract|alias|annotation|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|ifdef|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|ptr|require|rescue|return|select|self|sizeof|struct|super|then|type|typeof|undef|uninitialized|union|unless|until|when|while|with|yield)\b/,
+ {
+ pattern: /(\.\s*)(?:is_a|responds_to)\?/,
+ lookbehind: true,
+ },
+ ],
+ number:
+ /\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\da-fA-F_]*[\da-fA-F]|(?:\d(?:[\d_]*\d)?)(?:\.[\d_]*\d)?(?:[eE][+-]?[\d_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/,
+ operator: [/->/, Prism.languages.ruby.operator],
+ punctuation: /[(){}[\].,;\\]/,
+ });
+
+ Prism.languages.insertBefore('crystal', 'string-literal', {
+ attribute: {
+ pattern: /@\[.*?\]/,
+ inside: {
+ delimiter: {
+ pattern: /^@\[|\]$/,
+ alias: 'punctuation',
+ },
+ attribute: {
+ pattern: /^(\s*)\w+/,
+ lookbehind: true,
+ alias: 'class-name',
+ },
+ args: {
+ pattern: /\S(?:[\s\S]*\S)?/,
+ inside: Prism.languages.crystal,
+ },
+ },
+ },
+ expansion: {
+ pattern: /\{(?:\{.*?\}|%.*?%)\}/,
+ inside: {
+ content: {
+ pattern: /^(\{.)[\s\S]+(?=.\}$)/,
+ lookbehind: true,
+ inside: Prism.languages.crystal,
+ },
+ delimiter: {
+ pattern: /^\{[\{%]|[\}%]\}$/,
+ alias: 'operator',
+ },
+ },
+ },
+ char: {
+ pattern:
+ /'(?:[^\\\r\n]{1,2}|\\(?:.|u(?:[A-Fa-f0-9]{1,4}|\{[A-Fa-f0-9]{1,6}\})))'/,
+ greedy: true,
+ },
+ });
+})(Prism);