From fc35be599857b1a040fce0a0eddc8bf451635804 Mon Sep 17 00:00:00 2001 From: Zsolt Lengyel Date: Wed, 13 Oct 2021 15:51:21 +0200 Subject: [PATCH] fix(css/scss/less/stylus) support single colon when using pseudo element selector (#3358) Fixes highlightjs/highlight.js#3240 --- CHANGES.md | 2 ++ src/languages/css.js | 2 +- src/languages/less.js | 2 +- src/languages/scss.js | 2 +- src/languages/stylus.js | 2 +- test/markup/css/pseudo.expect.txt | 4 ++-- test/markup/less/css_consistency.expect.txt | 2 ++ test/markup/less/css_consistency.txt | 2 ++ test/markup/scss/css_consistency.expect.txt | 2 ++ test/markup/scss/css_consistency.txt | 2 ++ test/markup/stylus/css_consistency.expect.txt | 2 ++ test/markup/stylus/css_consistency.txt | 2 ++ 12 files changed, 20 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index edd60e83fb..7502834a43 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -37,6 +37,7 @@ Grammars: - enh(scala) add `using` soft keyword (#3330) [Nicolas Stucki][] - enh(fsharp) added `f#` alias (#3337) [Bahnschrift][] - enh(bash) added gnu core utilities (#3342) [katzeprior][] +- fix(css/less/stylus/scss) highlight single-colon psuedo-elements properly (#3240) [zsoltlengyelit][] [Austin Schick]: https://github.com/austin-schick [Josh Goebel]: https://github.com/joshgoebel @@ -47,6 +48,7 @@ Grammars: [Bahnschrift]: https://github.com/Bahnschrift [Melvyn Laïly]: https://github.com/mlaily [katzeprior]: https://github.com/katzeprior +[zsoltlengyelit]: github.com/zsoltlengyelit [Syb Wartna]:https://github.com/waarissyb diff --git a/src/languages/css.js b/src/languages/css.js index ca3952c6c2..e9121740e9 100644 --- a/src/languages/css.js +++ b/src/languages/css.js @@ -58,7 +58,7 @@ export default function(hljs) { begin: ':(' + css.PSEUDO_CLASSES.join('|') + ')' }, { - begin: '::(' + css.PSEUDO_ELEMENTS.join('|') + ')' + begin: ':(:)?(' + css.PSEUDO_ELEMENTS.join('|') + ')' } ] }, diff --git a/src/languages/less.js b/src/languages/less.js index 08001098fc..b1ad793d9a 100644 --- a/src/languages/less.js +++ b/src/languages/less.js @@ -199,7 +199,7 @@ export default function(hljs) { }, { className: 'selector-pseudo', - begin: '::(' + css.PSEUDO_ELEMENTS.join('|') + ')' + begin: ':(:)?(' + css.PSEUDO_ELEMENTS.join('|') + ')' }, { begin: /\(/, diff --git a/src/languages/scss.js b/src/languages/scss.js index 87a07cc4d4..f44f8ee57c 100644 --- a/src/languages/scss.js +++ b/src/languages/scss.js @@ -55,7 +55,7 @@ export default function(hljs) { }, { className: 'selector-pseudo', - begin: '::(' + PSEUDO_ELEMENTS.join('|') + ')' + begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }, VARIABLE, { // pseudo-selector params diff --git a/src/languages/stylus.js b/src/languages/stylus.js index 6d5d4e5985..40ac186cba 100644 --- a/src/languages/stylus.js +++ b/src/languages/stylus.js @@ -96,7 +96,7 @@ export default function(hljs) { }, { className: 'selector-pseudo', - begin: '&?::(' + css.PSEUDO_ELEMENTS.join('|') + ')' + LOOKAHEAD_TAG_END + begin: '&?:(:)?(' + css.PSEUDO_ELEMENTS.join('|') + ')' + LOOKAHEAD_TAG_END }, modes.ATTRIBUTE_SELECTOR_MODE, diff --git a/test/markup/css/pseudo.expect.txt b/test/markup/css/pseudo.expect.txt index 1ea40bb2ab..c6833dcef0 100644 --- a/test/markup/css/pseudo.expect.txt +++ b/test/markup/css/pseudo.expect.txt @@ -1,5 +1,5 @@ -.test:before, -.test:after { +.test:before, +.test:after { color: pink; color: red; } diff --git a/test/markup/less/css_consistency.expect.txt b/test/markup/less/css_consistency.expect.txt index 5df3c49ffc..7d2646167a 100644 --- a/test/markup/less/css_consistency.expect.txt +++ b/test/markup/less/css_consistency.expect.txt @@ -22,7 +22,9 @@ a:visited { color: blue; } div::after { content: "test"; } +div:after { content: "test"; } div::before { content: open-quote; } +div:before { content: open-quote; } span:nth-child(33) { color:red; } p:lang(en) {} diff --git a/test/markup/less/css_consistency.txt b/test/markup/less/css_consistency.txt index 1f2354ba28..fdf6529313 100644 --- a/test/markup/less/css_consistency.txt +++ b/test/markup/less/css_consistency.txt @@ -22,7 +22,9 @@ h1, h2, figcaption, aside, main, form, footer {} a:visited { color: blue; } div::after { content: "test"; } +div:after { content: "test"; } div::before { content: open-quote; } +div:before { content: open-quote; } span:nth-child(33) { color:red; } p:lang(en) {} diff --git a/test/markup/scss/css_consistency.expect.txt b/test/markup/scss/css_consistency.expect.txt index 53fda48980..fa8feaa41c 100644 --- a/test/markup/scss/css_consistency.expect.txt +++ b/test/markup/scss/css_consistency.expect.txt @@ -22,7 +22,9 @@ a:visited { color: blue; } div::after { content: "test"; } +div:after { content: "test"; } div::before { content: open-quote; } +div:before { content: open-quote; } span:nth-child(33) { color:red; } p:lang(en) {} diff --git a/test/markup/scss/css_consistency.txt b/test/markup/scss/css_consistency.txt index 1f2354ba28..fdf6529313 100644 --- a/test/markup/scss/css_consistency.txt +++ b/test/markup/scss/css_consistency.txt @@ -22,7 +22,9 @@ h1, h2, figcaption, aside, main, form, footer {} a:visited { color: blue; } div::after { content: "test"; } +div:after { content: "test"; } div::before { content: open-quote; } +div:before { content: open-quote; } span:nth-child(33) { color:red; } p:lang(en) {} diff --git a/test/markup/stylus/css_consistency.expect.txt b/test/markup/stylus/css_consistency.expect.txt index 53fda48980..fa8feaa41c 100644 --- a/test/markup/stylus/css_consistency.expect.txt +++ b/test/markup/stylus/css_consistency.expect.txt @@ -22,7 +22,9 @@ a:visited { color: blue; } div::after { content: "test"; } +div:after { content: "test"; } div::before { content: open-quote; } +div:before { content: open-quote; } span:nth-child(33) { color:red; } p:lang(en) {} diff --git a/test/markup/stylus/css_consistency.txt b/test/markup/stylus/css_consistency.txt index 1f2354ba28..fdf6529313 100644 --- a/test/markup/stylus/css_consistency.txt +++ b/test/markup/stylus/css_consistency.txt @@ -22,7 +22,9 @@ h1, h2, figcaption, aside, main, form, footer {} a:visited { color: blue; } div::after { content: "test"; } +div:after { content: "test"; } div::before { content: open-quote; } +div:before { content: open-quote; } span:nth-child(33) { color:red; } p:lang(en) {}