diff --git a/components/prism-scss.js b/components/prism-scss.js index 4d1e583c46..aea0ad18d5 100644 --- a/components/prism-scss.js +++ b/components/prism-scss.js @@ -23,7 +23,8 @@ Prism.languages.scss = Prism.languages.extend('css', { // Initial look-ahead is used to prevent matching of blank selectors pattern: /(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m, inside: { - 'placeholder': /%[-_\w]+/ + 'placeholder': /%[-_\w]+/, + 'variable': /\$[-_\w]+|#\{\$[-_\w]+\}/ } } }); @@ -38,7 +39,14 @@ Prism.languages.insertBefore('scss', 'atrule', { ] }); -Prism.languages.insertBefore('scss', 'property', { +Prism.languages.scss.property = { + pattern: /(?:[\w-]|\$[-_\w]+|#\{\$[-_\w]+\})+(?=\s*:)/i, + inside: { + 'variable': /\$[-_\w]+|#\{\$[-_\w]+\}/ + } +}; + +Prism.languages.insertBefore('scss', 'important', { // var and interpolated vars 'variable': /\$[-_\w]+|#\{\$[-_\w]+\}/ }); diff --git a/components/prism-scss.min.js b/components/prism-scss.min.js index bedfa62bb7..ff32ab72c6 100644 --- a/components/prism-scss.min.js +++ b/components/prism-scss.min.js @@ -1 +1 @@ -Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,inside:{placeholder:/%[-_\w]+/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","property",{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-_\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.util.clone(Prism.languages.scss); \ No newline at end of file +Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,inside:{placeholder:/%[-_\w]+/,variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.scss.property={pattern:/(?:[\w-]|\$[-_\w]+|#\{\$[-_\w]+\})+(?=\s*:)/i,inside:{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}},Prism.languages.insertBefore("scss","important",{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-_\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.util.clone(Prism.languages.scss); \ No newline at end of file diff --git a/tests/languages/scss+haml/scss_inclusion.test b/tests/languages/scss+haml/scss_inclusion.test index 3f52393c64..b2c545c45c 100644 --- a/tests/languages/scss+haml/scss_inclusion.test +++ b/tests/languages/scss+haml/scss_inclusion.test @@ -16,7 +16,7 @@ ["filter-name", ":scss"], ["selector", ["#main "]], ["punctuation", "{"], - ["property", "width"], + ["property", ["width"]], ["punctuation", ":"], ["variable", "$width"], ["punctuation", ";"], @@ -27,7 +27,7 @@ ["filter-name", ":scss"], ["selector", ["#main "]], ["punctuation", "{"], - ["property", "width"], + ["property", ["width"]], ["punctuation", ":"], ["variable", "$width"], ["punctuation", ";"], diff --git a/tests/languages/scss/atrule_feature.test b/tests/languages/scss/atrule_feature.test index bb1abf8863..ec9f188661 100644 --- a/tests/languages/scss/atrule_feature.test +++ b/tests/languages/scss/atrule_feature.test @@ -6,7 +6,7 @@ ["atrule", [ ["rule", "@media"], ["punctuation", "("], - ["property", "min-width"], + ["property", ["min-width"]], ["punctuation", ":"], " 600px", ["punctuation", ")"] diff --git a/tests/languages/scss/property_feature.test b/tests/languages/scss/property_feature.test new file mode 100644 index 0000000000..33f13c0a7d --- /dev/null +++ b/tests/languages/scss/property_feature.test @@ -0,0 +1,23 @@ +$bg: background; +$color: color; +div { + $bg: none; + background-#{$color}: blue; + #{$bg}-repeat: no-repeat; +} + +---------------------------------------------------- + +[ + ["property", [["variable", "$bg"]]], ["punctuation", ":"], " background", ["punctuation", ";"], + ["property", [["variable", "$color"]]], ["punctuation", ":"], " color", ["punctuation", ";"], + ["selector", ["div "]], ["punctuation", "{"], + ["property", [["variable", "$bg"]]], ["punctuation", ":"], " none", ["punctuation", ";"], + ["property", ["background-", ["variable", "#{$color}"]]], ["punctuation", ":"], " blue", ["punctuation", ";"], + ["property", [["variable", "#{$bg}"], "-repeat"]], ["punctuation", ":"], " no-repeat", ["punctuation", ";"], + ["punctuation", "}"] +] + +---------------------------------------------------- + +Checks for properties. \ No newline at end of file diff --git a/tests/languages/scss/selector_feature.test b/tests/languages/scss/selector_feature.test index 3749f2262b..c5961f36ef 100644 --- a/tests/languages/scss/selector_feature.test +++ b/tests/languages/scss/selector_feature.test @@ -15,7 +15,7 @@ p, div {} ["selector", ["&:hover "]], ["punctuation", "{"], ["punctuation", "}"], ["selector", ["&-sidebar "]], ["punctuation", "{"], ["punctuation", "}"], ["selector", ["#context a", ["placeholder", "%extreme"]]], ["punctuation", "{"], ["punctuation", "}"], - ["selector", ["#{$selector}:before "]], ["punctuation", "{"], ["punctuation", "}"] + ["selector", [["variable", "#{$selector}"], ":before "]], ["punctuation", "{"], ["punctuation", "}"] ] ---------------------------------------------------- diff --git a/tests/languages/scss/statement_feature.test b/tests/languages/scss/statement_feature.test index 7a85f9c77a..e8e958dbe9 100644 --- a/tests/languages/scss/statement_feature.test +++ b/tests/languages/scss/statement_feature.test @@ -4,7 +4,7 @@ $foo: "bar" !default; ---------------------------------------------------- [ - ["variable", "$foo"], + ["property", [["variable", "$foo"]]], ["punctuation", ":"], ["string", "\"bar\""], ["statement", "!default"],