aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-wren.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-wren.js
parentab355897a12b7bda1089a44de326d41455a0f7a3 (diff)
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-wren.js')
-rw-r--r--public/prism/prism-wren.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/public/prism/prism-wren.js b/public/prism/prism-wren.js
new file mode 100644
index 0000000..fa4464a
--- /dev/null
+++ b/public/prism/prism-wren.js
@@ -0,0 +1,104 @@
+// https://wren.io/
+
+Prism.languages.wren = {
+ // Multiline comments in Wren can have nested multiline comments
+ // Comments: // and /* */
+ comment: [
+ {
+ // support 3 levels of nesting
+ // regex: \/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\/
+ pattern:
+ /\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*))*\*\/)*\*\/)*\*\//,
+ greedy: true,
+ },
+ {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: true,
+ greedy: true,
+ },
+ ],
+
+ // Triple quoted strings are multiline but cannot have interpolation (raw strings)
+ // Based on prism-python.js
+ 'triple-quoted-string': {
+ pattern: /"""[\s\S]*?"""/,
+ greedy: true,
+ alias: 'string',
+ },
+
+ // see below
+ 'string-literal': null,
+
+ // #!/usr/bin/env wren on the first line
+ hashbang: {
+ pattern: /^#!\/.+/,
+ greedy: true,
+ alias: 'comment',
+ },
+
+ // Attributes are special keywords to add meta data to classes
+ attribute: {
+ // #! attributes are stored in class properties
+ // #!myvar = true
+ // #attributes are not stored and dismissed at compilation
+ pattern: /#!?[ \t\u3000]*\w+/,
+ alias: 'keyword',
+ },
+ 'class-name': [
+ {
+ // class definition
+ // class Meta {}
+ pattern: /(\bclass\s+)\w+/,
+ lookbehind: true,
+ },
+ // A class must always start with an uppercase.
+ // File.read
+ /\b[A-Z][a-z\d_]*\b/,
+ ],
+
+ // A constant can be a variable, class, property or method. Just named in all uppercase letters
+ constant: /\b[A-Z][A-Z\d_]*\b/,
+
+ null: {
+ pattern: /\bnull\b/,
+ alias: 'keyword',
+ },
+ keyword:
+ /\b(?:as|break|class|construct|continue|else|for|foreign|if|import|in|is|return|static|super|this|var|while)\b/,
+ boolean: /\b(?:false|true)\b/,
+ number: /\b(?:0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,
+
+ // Functions can be Class.method()
+ function: /\b[a-z_]\w*(?=\s*[({])/i,
+
+ operator: /<<|>>|[=!<>]=?|&&|\|\||[-+*/%~^&|?:]|\.{2,3}/,
+ punctuation: /[\[\](){}.,;]/,
+};
+
+Prism.languages.wren['string-literal'] = {
+ // A single quote string is multiline and can have interpolation (similar to JS backticks ``)
+ pattern:
+ /(^|[^\\"])"(?:[^\\"%]|\\[\s\S]|%(?!\()|%\((?:[^()]|\((?:[^()]|\([^)]*\))*\))*\))*"/,
+ lookbehind: true,
+ greedy: true,
+ inside: {
+ interpolation: {
+ // "%(interpolation)"
+ pattern:
+ /((?:^|[^\\])(?:\\{2})*)%\((?:[^()]|\((?:[^()]|\([^)]*\))*\))*\)/,
+ lookbehind: true,
+ inside: {
+ expression: {
+ pattern: /^(%\()[\s\S]+(?=\)$)/,
+ lookbehind: true,
+ inside: Prism.languages.wren,
+ },
+ 'interpolation-punctuation': {
+ pattern: /^%\(|\)$/,
+ alias: 'punctuation',
+ },
+ },
+ },
+ string: /[\s\S]+/,
+ },
+};