aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-excel-formula.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-excel-formula.js
parentab355897a12b7bda1089a44de326d41455a0f7a3 (diff)
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-excel-formula.js')
-rw-r--r--public/prism/prism-excel-formula.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/public/prism/prism-excel-formula.js b/public/prism/prism-excel-formula.js
new file mode 100644
index 0000000..1338efe
--- /dev/null
+++ b/public/prism/prism-excel-formula.js
@@ -0,0 +1,69 @@
+Prism.languages['excel-formula'] = {
+ comment: {
+ pattern: /(\bN\(\s*)"(?:[^"]|"")*"(?=\s*\))/i,
+ lookbehind: true,
+ greedy: true,
+ },
+ string: {
+ pattern: /"(?:[^"]|"")*"(?!")/,
+ greedy: true,
+ },
+ reference: {
+ // https://www.ablebits.com/office-addins-blog/2015/12/08/excel-reference-another-sheet-workbook/
+
+ // Sales!B2
+ // 'Winter sales'!B2
+ // [Sales.xlsx]Jan!B2:B5
+ // D:\Reports\[Sales.xlsx]Jan!B2:B5
+ // '[Sales.xlsx]Jan sales'!B2:B5
+ // 'D:\Reports\[Sales.xlsx]Jan sales'!B2:B5
+
+ pattern:
+ /(?:'[^']*'|(?:[^\s()[\]{}<>*?"';,$&]*\[[^^\s()[\]{}<>*?"']+\])?\w+)!/,
+ greedy: true,
+ alias: 'string',
+ inside: {
+ operator: /!$/,
+ punctuation: /'/,
+ sheet: {
+ pattern: /[^[\]]+$/,
+ alias: 'function',
+ },
+ file: {
+ pattern: /\[[^[\]]+\]$/,
+ inside: {
+ punctuation: /[[\]]/,
+ },
+ },
+ path: /[\s\S]+/,
+ },
+ },
+ 'function-name': {
+ pattern: /\b[A-Z]\w*(?=\()/i,
+ alias: 'keyword',
+ },
+ range: {
+ pattern:
+ /\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i,
+ alias: 'property',
+ inside: {
+ operator: /:/,
+ cell: /\$?[A-Z]+\$?\d+/i,
+ column: /\$?[A-Z]+/i,
+ row: /\$?\d+/,
+ },
+ },
+ cell: {
+ // Excel is case insensitive, so the string "foo1" could be either a variable or a cell.
+ // To combat this, we match cells case insensitive, if the contain at least one "$", and case sensitive otherwise.
+ pattern: /\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/,
+ alias: 'property',
+ },
+ number: /(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i,
+ boolean: /\b(?:FALSE|TRUE)\b/i,
+ operator: /[-+*/^%=&,]|<[=>]?|>=?/,
+ punctuation: /[[\]();{}|]/,
+};
+
+Prism.languages['xlsx'] = Prism.languages['xls'] =
+ Prism.languages['excel-formula'];