summaryrefslogtreecommitdiffstats
path: root/public/prism/prism-pascaligo.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/prism/prism-pascaligo.js')
-rw-r--r--public/prism/prism-pascaligo.js87
1 files changed, 87 insertions, 0 deletions
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+(?:<braces>)?|<braces>)/.source.replace(
+ /<braces>/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+)<type>/.source.replace(/<type>/g, function () {
+ return type;
+ }),
+ 'i'
+ ),
+ lookbehind: true,
+ inside: null, // see below
+ },
+ {
+ pattern: RegExp(
+ /<type>(?=\s+is\b)/.source.replace(/<type>/g, function () {
+ return type;
+ }),
+ 'i'
+ ),
+ inside: null, // see below
+ },
+ {
+ pattern: RegExp(
+ /(:\s*)<type>/.source.replace(/<type>/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);