Allow multiline CSS at-rules (#1676) Allows for CSS at-rules containing line breaks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
diff --git a/components/prism-css.js b/components/prism-css.js
index 284e010..c196920 100644
--- a/components/prism-css.js
+++ b/components/prism-css.js
@@ -1,7 +1,7 @@
Prism.languages.css = {
'comment': /\/\*[\s\S]*?\*\//,
'atrule': {
- pattern: /@[\w-]+?.*?(?:;|(?=\s*\{))/i,
+ pattern: /@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,
inside: {
'rule': /@[\w-]+/
// See rest below
diff --git a/components/prism-css.min.js b/components/prism-css.min.js
index a4798c6..8e569af 100644
--- a/components/prism-css.min.js
+++ b/components/prism-css.min.js
@@ -1 +1 @@
-Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css,Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<style[\s\S]*?>)[\s\S]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css",greedy:!0}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag));
\ No newline at end of file
+Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css,Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<style[\s\S]*?>)[\s\S]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css",greedy:!0}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag));
\ No newline at end of file
diff --git a/prism.js b/prism.js
index 0acb158..4f177d0 100644
--- a/prism.js
+++ b/prism.js
@@ -622,7 +622,7 @@ Prism.languages.svg = Prism.languages.markup;
Prism.languages.css = {
'comment': /\/\*[\s\S]*?\*\//,
'atrule': {
- pattern: /@[\w-]+?.*?(?:;|(?=\s*\{))/i,
+ pattern: /@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,
inside: {
'rule': /@[\w-]+/
// See rest below
diff --git a/tests/languages/css/atrule_feature.test b/tests/languages/css/atrule_feature.test
index abc75de..1bc84b0 100644
--- a/tests/languages/css/atrule_feature.test
+++ b/tests/languages/css/atrule_feature.test
@@ -1,6 +1,8 @@
@import url(foo.css);
@media print {}
@media (min-width: 640px) and (min-height: 1000px) {}
+@supports (top: 50vmax)
+ or (top: 50vw) {}
@main-color: red;
----------------------------------------------------
@@ -26,13 +28,29 @@
["punctuation", ")"],
" and ",
["punctuation", "("],
- ["property", "min-height"],
- ["punctuation", ":"],
- " 1000px",
- ["punctuation", ")"]
+ ["property", "min-height"],
+ ["punctuation", ":"],
+ " 1000px",
+ ["punctuation", ")"]
]],
["punctuation", "{"],
- ["punctuation", "}"],
+ ["punctuation", "}"],
+ ["atrule", [
+ ["rule", "@supports"],
+ ["punctuation", "("],
+ ["property", "top"],
+ ["punctuation", ":"],
+ " 50vmax",
+ ["punctuation", ")"],
+ "\r\n\tor ",
+ ["punctuation", "("],
+ ["property", "top"],
+ ["punctuation", ":"],
+ " 50vw",
+ ["punctuation", ")"]
+ ]],
+ ["punctuation", "{"],
+ ["punctuation", "}"],
["atrule", [
["rule", "@main-color"],
["punctuation", ":"],