diff options
| author | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
| commit | a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch) | |
| tree | 542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-apex.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-apex.js')
| -rw-r--r-- | public/prism/prism-apex.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/public/prism/prism-apex.js b/public/prism/prism-apex.js new file mode 100644 index 0000000..670331f --- /dev/null +++ b/public/prism/prism-apex.js @@ -0,0 +1,77 @@ +(function (Prism) { + var keywords = + /\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i; + + var className = + /\b(?:(?=[a-z_]\w*\s*[<\[])|(?!<keyword>))[A-Z_]\w*(?:\s*\.\s*[A-Z_]\w*)*\b(?:\s*(?:\[\s*\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*/.source.replace( + /<keyword>/g, + function () { + return keywords.source; + } + ); + /** @param {string} pattern */ + function insertClassName(pattern) { + return RegExp( + pattern.replace(/<CLASS-NAME>/g, function () { + return className; + }), + 'i' + ); + } + + var classNameInside = { + keyword: keywords, + punctuation: /[()\[\]{};,:.<>]/, + }; + + Prism.languages.apex = { + comment: Prism.languages.clike.comment, + string: Prism.languages.clike.string, + sql: { + pattern: /((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i, + lookbehind: true, + greedy: true, + alias: 'language-sql', + inside: Prism.languages.sql, + }, + + annotation: { + pattern: /@\w+\b/, + alias: 'punctuation', + }, + 'class-name': [ + { + pattern: insertClassName( + /(\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\s+\w+\s+on)\s+)<CLASS-NAME>/ + .source + ), + lookbehind: true, + inside: classNameInside, + }, + { + // cast + pattern: insertClassName(/(\(\s*)<CLASS-NAME>(?=\s*\)\s*[\w(])/.source), + lookbehind: true, + inside: classNameInside, + }, + { + // variable/parameter declaration and return types + pattern: insertClassName(/<CLASS-NAME>(?=\s*\w+\s*[;=,(){:])/.source), + inside: classNameInside, + }, + ], + trigger: { + pattern: /(\btrigger\s+)\w+\b/i, + lookbehind: true, + alias: 'class-name', + }, + keyword: keywords, + function: /\b[a-z_]\w*(?=\s*\()/i, + + boolean: /\b(?:false|true)\b/i, + + number: /(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i, + operator: /[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<<?=?|>{1,3}=?/, + punctuation: /[()\[\]{};,.]/, + }; +})(Prism); |
