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-sass.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-sass.js')
| -rw-r--r-- | public/prism/prism-sass.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/public/prism/prism-sass.js b/public/prism/prism-sass.js new file mode 100644 index 0000000..ae562b9 --- /dev/null +++ b/public/prism/prism-sass.js @@ -0,0 +1,76 @@ +(function (Prism) { + Prism.languages.sass = Prism.languages.extend('css', { + // Sass comments don't need to be closed, only indented + comment: { + pattern: /^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m, + lookbehind: true, + greedy: true, + }, + }); + + Prism.languages.insertBefore('sass', 'atrule', { + // We want to consume the whole line + 'atrule-line': { + // Includes support for = and + shortcuts + pattern: /^(?:[ \t]*)[@+=].+/m, + greedy: true, + inside: { + atrule: /(?:@[\w-]+|[+=])/, + }, + }, + }); + delete Prism.languages.sass.atrule; + + var variable = /\$[-\w]+|#\{\$[-\w]+\}/; + var operator = [ + /[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/, + { + pattern: /(\s)-(?=\s)/, + lookbehind: true, + }, + ]; + + Prism.languages.insertBefore('sass', 'property', { + // We want to consume the whole line + 'variable-line': { + pattern: /^[ \t]*\$.+/m, + greedy: true, + inside: { + punctuation: /:/, + variable: variable, + operator: operator, + }, + }, + // We want to consume the whole line + 'property-line': { + pattern: /^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m, + greedy: true, + inside: { + property: [ + /[^:\s]+(?=\s*:)/, + { + pattern: /(:)[^:\s]+/, + lookbehind: true, + }, + ], + punctuation: /:/, + variable: variable, + operator: operator, + important: Prism.languages.sass.important, + }, + }, + }); + delete Prism.languages.sass.property; + delete Prism.languages.sass.important; + + // Now that whole lines for other patterns are consumed, + // what's left should be selectors + Prism.languages.insertBefore('sass', 'punctuation', { + selector: { + pattern: + /^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m, + lookbehind: true, + greedy: true, + }, + }); +})(Prism); |
