From a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 30 Dec 2021 19:47:21 +0100 Subject: chore: add prismjs for syntax highlighting --- public/prism/prism-haxe.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 public/prism/prism-haxe.js (limited to 'public/prism/prism-haxe.js') diff --git a/public/prism/prism-haxe.js b/public/prism/prism-haxe.js new file mode 100644 index 0000000..028459f --- /dev/null +++ b/public/prism/prism-haxe.js @@ -0,0 +1,80 @@ +Prism.languages.haxe = Prism.languages.extend('clike', { + string: { + // Strings can be multi-line + pattern: /"(?:[^"\\]|\\[\s\S])*"/, + greedy: true, + }, + 'class-name': [ + { + pattern: + /(\b(?:abstract|class|enum|extends|implements|interface|new|typedef)\s+)[A-Z_]\w*/, + lookbehind: true, + }, + // based on naming convention + /\b[A-Z]\w*/, + ], + // The final look-ahead prevents highlighting of keywords if expressions such as "haxe.macro.Expr" + keyword: + /\bthis\b|\b(?:abstract|as|break|case|cast|catch|class|continue|default|do|dynamic|else|enum|extends|extern|final|for|from|function|if|implements|import|in|inline|interface|macro|new|null|operator|overload|override|package|private|public|return|static|super|switch|throw|to|try|typedef|untyped|using|var|while)(?!\.)\b/, + function: { + pattern: /\b[a-z_]\w*(?=\s*(?:<[^<>]*>\s*)?\()/i, + greedy: true, + }, + operator: /\.{3}|\+\+|--|&&|\|\||->|=>|(?:<{1,3}|[-+*/%!=&|^])=?|[?:~]/, +}); + +Prism.languages.insertBefore('haxe', 'string', { + 'string-interpolation': { + pattern: /'(?:[^'\\]|\\[\s\S])*'/, + greedy: true, + inside: { + interpolation: { + pattern: /(^|[^\\])\$(?:\w+|\{[^{}]+\})/, + lookbehind: true, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{?|\}$/, + alias: 'punctuation', + }, + expression: { + pattern: /[\s\S]+/, + inside: Prism.languages.haxe, + }, + }, + }, + string: /[\s\S]+/, + }, + }, +}); + +Prism.languages.insertBefore('haxe', 'class-name', { + regex: { + pattern: /~\/(?:[^\/\\\r\n]|\\.)+\/[a-z]*/, + greedy: true, + inside: { + 'regex-flags': /\b[a-z]+$/, + 'regex-source': { + pattern: /^(~\/)[\s\S]+(?=\/$)/, + lookbehind: true, + alias: 'language-regex', + inside: Prism.languages.regex, + }, + 'regex-delimiter': /^~\/|\/$/, + }, + }, +}); + +Prism.languages.insertBefore('haxe', 'keyword', { + preprocessor: { + pattern: /#(?:else|elseif|end|if)\b.*/, + alias: 'property', + }, + metadata: { + pattern: /@:?[\w.]+/, + alias: 'symbol', + }, + reification: { + pattern: /\$(?:\w+|(?=\{))/, + alias: 'important', + }, +}); -- cgit v1.2.3