aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-sass.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-sass.js
parentab355897a12b7bda1089a44de326d41455a0f7a3 (diff)
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-sass.js')
-rw-r--r--public/prism/prism-sass.js76
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);