From 9aeab2dbb69e0eae005cc3279d155929180d22c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=A3=E9=87=8C=E5=A5=BD=E8=84=8F=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5?= <453491931@qq.com> Date: Sat, 9 May 2020 02:42:24 +0800 Subject: [PATCH] CSS Extras: Renamed `attr-{name,value}` tokens and added tokens for combinators and selector lists (#2373) --- components/prism-css-extras.js | 12 +- components/prism-css-extras.min.js | 2 +- .../selector_attribute_feature.test | 70 ++++---- .../css!+css-extras/selector_feature.test | 34 +++- .../selector_n-th_feature.test | 164 +++++++++--------- .../selector_pseudo-class_feature.test | 118 ++++++------- 6 files changed, 219 insertions(+), 181 deletions(-) diff --git a/components/prism-css-extras.js b/components/prism-css-extras.js index 1b6ab8c027..f62c47bbd2 100644 --- a/components/prism-css-extras.js +++ b/components/prism-css-extras.js @@ -27,11 +27,11 @@ 'punctuation': /\|$/ } }, - 'attribute': { + 'attr-name': { pattern: /^(\s*)[-\w\xA0-\uFFFF]+/, lookbehind: true }, - 'value': [ + 'attr-value': [ string, { pattern: /(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/, @@ -55,7 +55,13 @@ lookbehind: true } ], - 'punctuation': /[()]/ + 'combinator': />|\+|~|\|\|/, + + // the `tag` token has been existed and removed. + // because we can't find a perfect tokenize to match it. + // if you want to add it, please read https://github.com/PrismJS/prism/pull/2373 first. + + 'punctuation': /[(),]/, } }; diff --git a/components/prism-css-extras.min.js b/components/prism-css-extras.min.js index 00ed486bf1..81ee713413 100644 --- a/components/prism-css-extras.min.js +++ b/components/prism-css-extras.min.js @@ -1 +1 @@ -!function(e){var a,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector,inside:a={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-:.\w]+/,id:/#[-:.\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},attribute:{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},value:[n,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],punctuation:/[()]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=a,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}});var r={pattern:/(\d)(?:%|[a-z]+)/,lookbehind:!0},i={pattern:/(^|[^\w.-])-?\d*\.?\d+/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#(?:[\da-f]{1,2}){3,4}\b/i,alias:"color"},color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:i,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:i})}(Prism); \ No newline at end of file +!function(e){var a,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector,inside:a={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-:.\w]+/,id:/#[-:.\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=a,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}});var r={pattern:/(\d)(?:%|[a-z]+)/,lookbehind:!0},i={pattern:/(^|[^\w.-])-?\d*\.?\d+/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#(?:[\da-f]{1,2}){3,4}\b/i,alias:"color"},color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:i,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:i})}(Prism); \ No newline at end of file diff --git a/tests/languages/css!+css-extras/selector_attribute_feature.test b/tests/languages/css!+css-extras/selector_attribute_feature.test index 25d1259f2b..fe2587b7a6 100644 --- a/tests/languages/css!+css-extras/selector_attribute_feature.test +++ b/tests/languages/css!+css-extras/selector_attribute_feature.test @@ -28,7 +28,7 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["punctuation", "]"] ]] ]], @@ -38,9 +38,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -50,9 +50,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "\"val\""], + ["attr-value", "\"val\""], ["punctuation", "]"] ]] ]], @@ -62,9 +62,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "'val'"], + ["attr-value", "'val'"], ["punctuation", "]"] ]] ]], @@ -74,9 +74,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "|="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -86,9 +86,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "~="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -98,9 +98,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "|="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -110,9 +110,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "^="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -122,9 +122,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "$="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -134,9 +134,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "*="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -150,7 +150,7 @@ "foo", ["punctuation", "|"] ]], - ["attribute", "attr"], + ["attr-name", "attr"], ["punctuation", "]"] ]], ["attribute", [ @@ -159,7 +159,7 @@ "*", ["punctuation", "|"] ]], - ["attribute", "attr"], + ["attr-name", "attr"], ["punctuation", "]"] ]], ["attribute", [ @@ -167,7 +167,7 @@ ["namespace", [ ["punctuation", "|"] ]], - ["attribute", "attr"], + ["attr-name", "attr"], ["punctuation", "]"] ]] ]], @@ -181,9 +181,9 @@ "foo", ["punctuation", "|"] ]], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "|="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -193,9 +193,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "val"], + ["attr-value", "val"], ["case-sensitivity", "i"], ["punctuation", "]"] ]] @@ -206,9 +206,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "\"val\""], + ["attr-value", "\"val\""], ["case-sensitivity", "S"], ["punctuation", "]"] ]] @@ -219,7 +219,7 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["punctuation", "]"] ]] ]], @@ -229,9 +229,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "val"], + ["attr-value", "val"], ["punctuation", "]"] ]] ]], @@ -241,9 +241,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "val"], + ["attr-value", "val"], ["case-sensitivity", "i"], ["punctuation", "]"] ]] @@ -254,9 +254,9 @@ ["selector", [ ["attribute", [ ["punctuation", "["], - ["attribute", "attr"], + ["attr-name", "attr"], ["operator", "="], - ["value", "\"i#m :not(a.class)\""], + ["attr-value", "\"i#m :not(a.class)\""], ["punctuation", "]"] ]] ]], diff --git a/tests/languages/css!+css-extras/selector_feature.test b/tests/languages/css!+css-extras/selector_feature.test index d42ec7faa6..ddd6961403 100644 --- a/tests/languages/css!+css-extras/selector_feature.test +++ b/tests/languages/css!+css-extras/selector_feature.test @@ -7,6 +7,14 @@ foo#bar { #foo > .bar:hover:after { +span, +div { + +div > p, +.css-li ~ .css-li, +.previous-selector + .selector, +.selected || td { + ---------------------------------------------------- [ @@ -32,10 +40,34 @@ foo#bar { ["selector", [ ["id", "#foo"], - " > ", + ["combinator", ">"], ["class", ".bar"], ["pseudo-class", ":hover"], ["pseudo-element", ":after"] + ]], ["punctuation", "{"], + + ["selector", [ + "span", + ["punctuation", ","], + "\r\ndiv" + ]], ["punctuation", "{"], + + ["selector", [ + "div ", + ["combinator", ">"], + " p", + ["punctuation", ","], + ["class", ".css-li"], + ["combinator", "~"], + ["class", ".css-li"], + ["punctuation", ","], + ["class", ".previous-selector"], + ["combinator", "+"], + ["class", ".selector"], + ["punctuation", ","], + ["class", ".selected"], + ["combinator", "||"], + " td" ]], ["punctuation", "{"] ] diff --git a/tests/languages/css!+css-extras/selector_n-th_feature.test b/tests/languages/css!+css-extras/selector_n-th_feature.test index 64e5aa7bb5..0b7bcb8e9a 100644 --- a/tests/languages/css!+css-extras/selector_n-th_feature.test +++ b/tests/languages/css!+css-extras/selector_n-th_feature.test @@ -1,82 +1,82 @@ -:nth-child(2n+1) {} -:nth-child(+2n - 1) {} -:nth-child(2n) {} -:nth-child(+5) {} -:nth-child(even) {} -:nth-child(odd) {} - ----------------------------------------------------- - -[ - ["selector", [ - ["pseudo-class", ":nth-child"], - ["punctuation", "("], - ["n-th", [ - ["number", "2n"], - ["operator", "+"], - ["number", "1"] - ]], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":nth-child"], - ["punctuation", "("], - ["n-th", [ - ["operator", "+"], - ["number", "2n"], - ["operator", "-"], - ["number", "1"] - ]], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":nth-child"], - ["punctuation", "("], - ["n-th", [ - ["number", "2n"] - ]], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":nth-child"], - ["punctuation", "("], - ["n-th", [ - ["operator", "+"], - ["number", "5"] - ]], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":nth-child"], - ["punctuation", "("], - ["n-th", "even"], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":nth-child"], - ["punctuation", "("], - ["n-th", "odd"], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"] -] - ----------------------------------------------------- - -Checks for n-th expressions. +:nth-child(2n+1) {} +:nth-child(+2n - 1) {} +:nth-child(2n) {} +:nth-child(+5) {} +:nth-child(even) {} +:nth-child(odd) {} + +---------------------------------------------------- + +[ + ["selector", [ + ["pseudo-class", ":nth-child"], + ["punctuation", "("], + ["n-th", [ + ["number", "2n"], + ["operator", "+"], + ["number", "1"] + ]], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":nth-child"], + ["punctuation", "("], + ["n-th", [ + ["operator", "+"], + ["number", "2n"], + ["operator", "-"], + ["number", "1"] + ]], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":nth-child"], + ["punctuation", "("], + ["n-th", [ + ["number", "2n"] + ]], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":nth-child"], + ["punctuation", "("], + ["n-th", [ + ["operator", "+"], + ["number", "5"] + ]], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":nth-child"], + ["punctuation", "("], + ["n-th", "even"], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":nth-child"], + ["punctuation", "("], + ["n-th", "odd"], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"] +] + +---------------------------------------------------- + +Checks for n-th expressions. diff --git a/tests/languages/css!+css-extras/selector_pseudo-class_feature.test b/tests/languages/css!+css-extras/selector_pseudo-class_feature.test index e4dfe15183..bf2cea6217 100644 --- a/tests/languages/css!+css-extras/selector_pseudo-class_feature.test +++ b/tests/languages/css!+css-extras/selector_pseudo-class_feature.test @@ -1,59 +1,59 @@ -foo:hover {} - -:lang(en) {} - -.bar:not(baz:hover):not(.foo) {} - -:where(p:not(.class)) {} - ----------------------------------------------------- - -[ - ["selector", [ - "foo", - ["pseudo-class", ":hover"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":lang"], - ["punctuation", "("], - "en", - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["class", ".bar"], - ["pseudo-class", ":not"], - ["punctuation", "("], - "baz", - ["pseudo-class", ":hover"], - ["punctuation", ")"], - ["pseudo-class", ":not"], - ["punctuation", "("], - ["class", ".foo"], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"], - - ["selector", [ - ["pseudo-class", ":where"], - ["punctuation", "("], - "p", - ["pseudo-class", ":not"], - ["punctuation", "("], - ["class", ".class"], - ["punctuation", ")"], - ["punctuation", ")"] - ]], - ["punctuation", "{"], - ["punctuation", "}"] -] - ----------------------------------------------------- - -Checks for pseudo-classes inside selectors. +foo:hover {} + +:lang(en) {} + +.bar:not(baz:hover):not(.foo) {} + +:where(p:not(.class)) {} + +---------------------------------------------------- + +[ + ["selector", [ + "foo", + ["pseudo-class", ":hover"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":lang"], + ["punctuation", "("], + "en", + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["class", ".bar"], + ["pseudo-class", ":not"], + ["punctuation", "("], + "baz", + ["pseudo-class", ":hover"], + ["punctuation", ")"], + ["pseudo-class", ":not"], + ["punctuation", "("], + ["class", ".foo"], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"], + + ["selector", [ + ["pseudo-class", ":where"], + ["punctuation", "("], + "p", + ["pseudo-class", ":not"], + ["punctuation", "("], + ["class", ".class"], + ["punctuation", ")"], + ["punctuation", ")"] + ]], + ["punctuation", "{"], + ["punctuation", "}"] +] + +---------------------------------------------------- + +Checks for pseudo-classes inside selectors.