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-pascaligo.js | 87 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 public/prism/prism-pascaligo.js (limited to 'public/prism/prism-pascaligo.js') diff --git a/public/prism/prism-pascaligo.js b/public/prism/prism-pascaligo.js new file mode 100644 index 0000000..337ddef --- /dev/null +++ b/public/prism/prism-pascaligo.js @@ -0,0 +1,87 @@ +(function (Prism) { + // Pascaligo is a layer 2 smart contract language for the tezos blockchain + + var braces = /\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\)/.source; + var type = /(?:\b\w+(?:)?|)/.source.replace( + //g, + function () { + return braces; + } + ); + + var pascaligo = (Prism.languages.pascaligo = { + comment: /\(\*[\s\S]+?\*\)|\/\/.*/, + string: { + pattern: /(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1|\^[a-z]/i, + greedy: true, + }, + 'class-name': [ + { + pattern: RegExp( + /(\btype\s+\w+\s+is\s+)/.source.replace(//g, function () { + return type; + }), + 'i' + ), + lookbehind: true, + inside: null, // see below + }, + { + pattern: RegExp( + /(?=\s+is\b)/.source.replace(//g, function () { + return type; + }), + 'i' + ), + inside: null, // see below + }, + { + pattern: RegExp( + /(:\s*)/.source.replace(//g, function () { + return type; + }) + ), + lookbehind: true, + inside: null, // see below + }, + ], + keyword: { + pattern: + /(^|[^&])\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\b/i, + lookbehind: true, + }, + boolean: { + pattern: /(^|[^&])\b(?:False|True)\b/i, + lookbehind: true, + }, + builtin: { + pattern: /(^|[^&])\b(?:bool|int|list|map|nat|record|string|unit)\b/i, + lookbehind: true, + }, + function: /\b\w+(?=\s*\()/, + number: [ + // Hexadecimal, octal and binary + /%[01]+|&[0-7]+|\$[a-f\d]+/i, + // Decimal + /\b\d+(?:\.\d+)?(?:e[+-]?\d+)?(?:mtz|n)?/i, + ], + operator: + /->|=\/=|\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=|]|\b(?:and|mod|or)\b/, + punctuation: /\(\.|\.\)|[()\[\]:;,.{}]/, + }); + + var classNameInside = [ + 'comment', + 'keyword', + 'builtin', + 'operator', + 'punctuation', + ].reduce(function (accum, key) { + accum[key] = pascaligo[key]; + return accum; + }, {}); + + pascaligo['class-name'].forEach(function (p) { + p.inside = classNameInside; + }); +})(Prism); -- cgit v1.2.3