From bb1f0ca17f040ade59103eae71cd8b87c6956857 Mon Sep 17 00:00:00 2001 From: "alexander.akait" Date: Fri, 14 Apr 2023 02:35:53 +0300 Subject: [PATCH] fix: logic with espaced --- cspell.json | 1 + lib/css/CssParser.js | 8 +- lib/css/walkCssTokens.js | 42 ++- .../ConfigCacheTestCases.longtest.js.snap | 256 +++++++++++++++++- .../ConfigTestCases.basictest.js.snap | 4 + test/configCases/css/urls/spacing.css | 7 + 6 files changed, 301 insertions(+), 17 deletions(-) diff --git a/cspell.json b/cspell.json index 8cff705dd..82552043a 100644 --- a/cspell.json +++ b/cspell.json @@ -192,6 +192,7 @@ "queryloader", "querystrings", "RBDT", + "reconsume", "recurse", "redeclaration", "reexecuted", diff --git a/lib/css/CssParser.js b/lib/css/CssParser.js index 2b105e28f..3993abc75 100644 --- a/lib/css/CssParser.js +++ b/lib/css/CssParser.js @@ -384,12 +384,13 @@ class CssParser extends Parser { break; } default: { + // TODO move escaped parsing to tokenizer const lastFunction = functionStack[functionStack.length - 1]; if ( lastFunction && - (lastFunction[0].toLowerCase() === "url" || - /^(-\w+-)?image-set$/i.test(lastFunction[0])) + (lastFunction[0].replace(/\\/g, "").toLowerCase() === "url" || + /^(-\w+-)?image-set$/i.test(lastFunction[0].replace(/\\/g, ""))) ) { let value = normalizeUrl(input.slice(start + 1, end - 1), true); @@ -402,7 +403,8 @@ class CssParser extends Parser { break; } - const isUrl = lastFunction[0].toLowerCase() === "url"; + const isUrl = + lastFunction[0].replace(/\\/g, "").toLowerCase() === "url"; const dep = new CssUrlDependency( value, [start, end], diff --git a/lib/css/walkCssTokens.js b/lib/css/walkCssTokens.js index a8ca9ac46..fa29a0e31 100644 --- a/lib/css/walkCssTokens.js +++ b/lib/css/walkCssTokens.js @@ -37,7 +37,7 @@ const CC_TAB = "\t".charCodeAt(0); const CC_SPACE = " ".charCodeAt(0); const CC_SLASH = "/".charCodeAt(0); -const CC_BACK_SLASH = "\\".charCodeAt(0); +const CC_REVERSE_SOLIDUS = "\\".charCodeAt(0); const CC_ASTERISK = "*".charCodeAt(0); const CC_LEFT_PARENTHESIS = "(".charCodeAt(0); @@ -144,7 +144,7 @@ const _consumeString = (input, pos, end) => { // bad string return pos; } - if (cc === CC_BACK_SLASH) { + if (cc === CC_REVERSE_SOLIDUS) { // we don't need to fully parse the escaped code point // just skip over a potential new line pos++; @@ -165,6 +165,12 @@ const _isIdentifierStartCode = cc => { ); }; +const _isTwoCodePointsAreValidEscape = (first, second) => { + if (first !== CC_REVERSE_SOLIDUS) return false; + if (_isNewLine(second)) return false; + return true; +}; + const _isDigit = cc => { return cc >= CC_0 && cc <= CC_9; }; @@ -175,13 +181,13 @@ const _startsIdentifier = (input, pos) => { if (pos === input.length) return false; const cc = input.charCodeAt(pos + 1); if (cc === CC_HYPHEN_MINUS) return true; - if (cc === CC_BACK_SLASH) { + if (cc === CC_REVERSE_SOLIDUS) { const cc = input.charCodeAt(pos + 2); return !_isNewLine(cc); } return _isIdentifierStartCode(cc); } - if (cc === CC_BACK_SLASH) { + if (cc === CC_REVERSE_SOLIDUS) { const cc = input.charCodeAt(pos + 1); return !_isNewLine(cc); } @@ -222,7 +228,7 @@ const consumeMinus = (input, pos, callbacks) => { return callbacks.identifier(input, start, pos); } } - } else if (cc === CC_BACK_SLASH) { + } else if (cc === CC_REVERSE_SOLIDUS) { if (pos + 1 === input.length) return pos; const cc = input.charCodeAt(pos + 1); if (_isNewLine(cc)) return pos; @@ -306,7 +312,7 @@ const consumePotentialUrl = (input, pos, callbacks) => { const contentStart = pos; let contentEnd; for (;;) { - if (cc === CC_BACK_SLASH) { + if (cc === CC_REVERSE_SOLIDUS) { pos++; if (pos === input.length) return pos; pos++; @@ -425,7 +431,7 @@ const consumeComma = (input, pos, callbacks) => { const _consumeIdentifier = (input, pos) => { for (;;) { const cc = input.charCodeAt(pos); - if (cc === CC_BACK_SLASH) { + if (cc === CC_REVERSE_SOLIDUS) { pos++; if (pos === input.length) return pos; pos++; @@ -499,7 +505,6 @@ const consumeLessThan = (input, pos, callbacks) => { return pos + 1; }; -/** @type {CharHandler} */ const consumeAt = (input, pos, callbacks) => { const start = pos; pos++; @@ -513,6 +518,25 @@ const consumeAt = (input, pos, callbacks) => { return pos; }; +/** @type {CharHandler} */ +const consumeReverseSolidus = (input, pos, callbacks) => { + const start = pos; + pos++; + + // If the input stream starts with a valid escape, reconsume the current input code point, consume an ident-like token, and return it. + if ( + _isTwoCodePointsAreValidEscape( + input.charCodeAt(start), + input.charCodeAt(pos) + ) + ) { + return consumeOtherIdentifier(input, pos - 1, callbacks); + } + + // Otherwise, this is a parse error. Return a with its value set to the current input code point. + return pos; +}; + const CHAR_MAP = Array.from({ length: 0x80 }, (_, cc) => { // https://drafts.csswg.org/css-syntax/#consume-token switch (cc) { @@ -558,6 +582,8 @@ const CHAR_MAP = Array.from({ length: 0x80 }, (_, cc) => { return consumeLessThan; case CC_AT_SIGN: return consumeAt; + case CC_REVERSE_SOLIDUS: + return consumeReverseSolidus; case CC_LOWER_U: case CC_UPPER_U: return consumePotentialUrl; diff --git a/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap b/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap index af7e390a3..1864b0908 100644 --- a/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap +++ b/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap @@ -1,19 +1,263 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ConfigCacheTestCases css urls exported tests should be able to handle styles in spacing.css 1`] = ` +exports[`ConfigCacheTestCases css urls exported tests should be able to handle styles in div.css 1`] = ` Object { + "--foo": " url(img.09a1a1112c577c279435.png)", + "--foo-bar": " \\"http://www.example.com/pinkish.gif\\"", + "/* TODO fix me */ + /*a146": " url('./img.png', 'foo', './img.png', url('./img.png'));*/ + /*a147: image-set(url('./img.png', 'foo', './img.png', url('./img.png')) 1x, url(\\"./img2x.png\\") 2x);*/ +", "a": " url(img.09a1a1112c577c279435.png)", + "a1": " url(img.09a1a1112c577c279435.png)", + "a10": " green url( img\\\\ img.09a1a1112c577c279435.png ) xyz", + "a100": " url(img\\\\)img.09a1a1112c577c279435.png)", + "a101": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a102": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a103": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a104": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a105": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a106": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a107": " url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png)", + "a108": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a109": " url(img\\\\'img.09a1a1112c577c279435.png)", + "a11": " green url( img\\\\ img.09a1a1112c577c279435.png ) xyz", + "a110": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a111": " url(img\\\\)img.09a1a1112c577c279435.png)", + "a112": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a113": " url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png)", + "a114": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a115": " url(img\\\\'img.09a1a1112c577c279435.png)", + "a116": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a117": " url(img\\\\)img.09a1a1112c577c279435.png)", + "a118": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a119": " url(img.09a1a1112c577c279435.png)", + "a12": " green url(img.09a1a1112c577c279435.png) xyz", + "a120": " url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png)", + "a121": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a122": " url(img\\\\'img.09a1a1112c577c279435.png)", + "a123": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a124": " url(img\\\\)img.09a1a1112c577c279435.png)", + "a125": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a126": " url(img.09a1a1112c577c279435.png)", + "a127": " url(img.09a1a1112c577c279435.png)", + "a128": " url(img\\\\'img.09a1a1112c577c279435.png)", + "a129": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a13": " green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz", + "a130": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a131": " url(img.09a1a1112c577c279435.png)", + "a132": " url(img.09a1a1112c577c279435.png)", + "a133": " url(img.09a1a1112c577c279435.png?foo=bar)", + "a134": " url(img.09a1a1112c577c279435.png?foo=bar)", + "a135": " url(img.09a1a1112c577c279435.png?foo=bar#hash)", + "a136": " url(img.09a1a1112c577c279435.png?foo=bar#hash)", + "a137": " url(img.09a1a1112c577c279435.png?foo=bar)", + "a138": " url(img.09a1a1112c577c279435.png?bar=foo)", + "a139": " url(img.09a1a1112c577c279435.png?foo=bar#foo)", + "a14": " url(\\"data:image/svg+xml;charset=utf-8,\\")", + "a140": " url(img.09a1a1112c577c279435.png?bar=foo#bar)", + "a141": " url(img.09a1a1112c577c279435.png?foo=1&bar=2)", + "a142": " url(img.09a1a1112c577c279435.png?foo=2&bar=1)", + "a143": " url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20width%3D%22191px%22%20height%3D%22191px%22%20viewBox%3D%220%200%20191%20191%22%20enable-background%3D%22new%200%200%20191%20191%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M95.5%2C0C42.8%2C0%2C0%2C42.8%2C0%2C95.5S42.8%2C191%2C95.5%2C191S191%2C148.2%2C191%2C95.5S148.2%2C0%2C95.5%2C0z%20M95.5%2C187.6%0A%09c-50.848%2C0-92.1-41.25-92.1-92.1c0-50.848%2C41.252-92.1%2C92.1-92.1c50.85%2C0%2C92.1%2C41.252%2C92.1%2C92.1%0A%09C187.6%2C146.35%2C146.35%2C187.6%2C95.5%2C187.6z%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M92.9%2C10v8.6H91v-6.5c-0.1%2C0.1-0.2%2C0.2-0.4%2C0.3c-0.2%2C0.1-0.3%2C0.2-0.4%2C0.2c-0.1%2C0-0.3%2C0.1-0.5%2C0.2%0A%09%09c-0.2%2C0.1-0.3%2C0.1-0.5%2C0.1v-1.6c0.5-0.1%2C0.9-0.3%2C1.4-0.5c0.5-0.2%2C0.8-0.5%2C1.2-0.7h1.1V10z%22%2F%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M97.1%2C17.1h3.602v1.5h-5.6V18c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.6%2C0.5-0.9c0.2-0.3%2C0.5-0.5%2C0.7-0.7%0A%09%09c0.2-0.2%2C0.5-0.4%2C0.7-0.6c0.199-0.2%2C0.5-0.3%2C0.6-0.5c0.102-0.2%2C0.301-0.3%2C0.5-0.5c0.2-0.2%2C0.2-0.3%2C0.301-0.5%0A%09%09c0.101-0.2%2C0.101-0.3%2C0.101-0.5c0-0.4-0.101-0.6-0.3-0.8c-0.2-0.2-0.4-0.3-0.801-0.3c-0.699%2C0-1.399%2C0.3-2.101%2C0.9v-1.6%0A%09%09c0.7-0.5%2C1.5-0.7%2C2.5-0.7c0.399%2C0%2C0.8%2C0.1%2C1.101%2C0.2c0.301%2C0.1%2C0.601%2C0.3%2C0.899%2C0.5c0.3%2C0.2%2C0.399%2C0.5%2C0.5%2C0.8%0A%09%09c0.101%2C0.3%2C0.2%2C0.6%2C0.2%2C1s-0.102%2C0.7-0.2%2C1c-0.099%2C0.3-0.3%2C0.6-0.5%2C0.8c-0.2%2C0.2-0.399%2C0.5-0.7%2C0.7c-0.3%2C0.2-0.5%2C0.4-0.8%2C0.6%0A%09%09c-0.2%2C0.1-0.399%2C0.3-0.5%2C0.4s-0.3%2C0.3-0.5%2C0.4s-0.2%2C0.3-0.3%2C0.4C97.1%2C17%2C97.1%2C17%2C97.1%2C17.1z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M15%2C95.4c0%2C0.7-0.1%2C1.4-0.2%2C2c-0.1%2C0.6-0.4%2C1.1-0.7%2C1.5C13.8%2C99.3%2C13.4%2C99.6%2C12.9%2C99.8s-1%2C0.3-1.5%2C0.3%0A%09%09c-0.7%2C0-1.3-0.1-1.8-0.3v-1.5c0.4%2C0.3%2C1%2C0.4%2C1.6%2C0.4c0.6%2C0%2C1.1-0.2%2C1.5-0.7c0.4-0.5%2C0.5-1.1%2C0.5-1.9l0%2C0%0A%09%09C12.8%2C96.7%2C12.3%2C96.9%2C11.5%2C96.9c-0.3%2C0-0.7-0.102-1-0.2c-0.3-0.101-0.5-0.3-0.8-0.5c-0.3-0.2-0.4-0.5-0.5-0.8%0A%09%09c-0.1-0.3-0.2-0.7-0.2-1c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.7%2C0.6-0.9c0.3-0.2%2C0.6-0.5%2C0.9-0.6c0.3-0.1%2C0.8-0.2%2C1.2-0.2%0A%09%09c0.5%2C0%2C0.9%2C0.1%2C1.2%2C0.3c0.3%2C0.2%2C0.7%2C0.4%2C0.9%2C0.8s0.5%2C0.7%2C0.6%2C1.2S15%2C94.8%2C15%2C95.4z%20M13.1%2C94.4c0-0.2%2C0-0.4-0.1-0.6%0A%09%09c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2%2C0-0.3%2C0-0.4%2C0.1s-0.3%2C0.2-0.3%2C0.3%0A%09%09c0%2C0.1-0.2%2C0.3-0.2%2C0.4c0%2C0.1-0.1%2C0.4-0.1%2C0.6c0%2C0.2%2C0%2C0.4%2C0.1%2C0.6c0.1%2C0.2%2C0.1%2C0.3%2C0.2%2C0.4c0.1%2C0.1%2C0.2%2C0.2%2C0.4%2C0.3%0A%09%09c0.2%2C0.1%2C0.3%2C0.1%2C0.5%2C0.1c0.2%2C0%2C0.3%2C0%2C0.4-0.1s0.2-0.2%2C0.3-0.3c0.1-0.1%2C0.2-0.2%2C0.2-0.4C13%2C94.7%2C13.1%2C94.6%2C13.1%2C94.4z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M176%2C99.7V98.1c0.6%2C0.4%2C1.2%2C0.602%2C2%2C0.602c0.5%2C0%2C0.8-0.102%2C1.1-0.301c0.301-0.199%2C0.4-0.5%2C0.4-0.801%0A%09%09c0-0.398-0.2-0.699-0.5-0.898c-0.3-0.2-0.8-0.301-1.3-0.301h-0.802V95h0.701c1.101%2C0%2C1.601-0.4%2C1.601-1.1c0-0.7-0.4-1-1.302-1%0A%09%09c-0.6%2C0-1.1%2C0.2-1.6%2C0.5v-1.5c0.6-0.3%2C1.301-0.4%2C2.1-0.4c0.9%2C0%2C1.5%2C0.2%2C2%2C0.6s0.701%2C0.9%2C0.701%2C1.5c0%2C1.1-0.601%2C1.8-1.701%2C2.1l0%2C0%0A%09%09c0.602%2C0.1%2C1.102%2C0.3%2C1.4%2C0.6s0.5%2C0.8%2C0.5%2C1.3c0%2C0.801-0.3%2C1.4-0.9%2C1.9c-0.6%2C0.5-1.398%2C0.7-2.398%2C0.7%0A%09%09C177.2%2C100.1%2C176.5%2C100%2C176%2C99.7z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M98.5%2C179.102c0%2C0.398-0.1%2C0.799-0.2%2C1.199C98.2%2C180.7%2C98%2C181%2C97.7%2C181.2s-0.601%2C0.5-0.9%2C0.601%0A%09%09c-0.3%2C0.1-0.7%2C0.199-1.2%2C0.199c-0.5%2C0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.399-0.9-0.8c-0.2-0.4-0.5-0.7-0.6-1.2%0A%09%09c-0.1-0.5-0.2-1-0.2-1.601c0-0.699%2C0.1-1.399%2C0.3-2c0.2-0.601%2C0.4-1.101%2C0.8-1.5c0.4-0.399%2C0.7-0.699%2C1.2-1c0.5-0.3%2C1-0.3%2C1.6-0.3%0A%09%09c0.6%2C0%2C1.2%2C0.101%2C1.5%2C0.199v1.5c-0.4-0.199-0.9-0.399-1.4-0.399c-0.3%2C0-0.6%2C0.101-0.8%2C0.2c-0.2%2C0.101-0.5%2C0.3-0.7%2C0.5%0A%09%09c-0.2%2C0.199-0.3%2C0.5-0.4%2C0.8c-0.1%2C0.301-0.2%2C0.7-0.2%2C1.101l0%2C0c0.4-0.601%2C1-0.8%2C1.8-0.8c0.3%2C0%2C0.7%2C0.1%2C0.9%2C0.199%0A%09%09c0.2%2C0.101%2C0.5%2C0.301%2C0.7%2C0.5c0.199%2C0.2%2C0.398%2C0.5%2C0.5%2C0.801C98.5%2C178.2%2C98.5%2C178.7%2C98.5%2C179.102z%20M96.7%2C179.2%0A%09%09c0-0.899-0.4-1.399-1.1-1.399c-0.2%2C0-0.3%2C0-0.5%2C0.1c-0.2%2C0.101-0.3%2C0.201-0.4%2C0.301c-0.1%2C0.101-0.2%2C0.199-0.2%2C0.4%0A%09%09c0%2C0.199-0.1%2C0.299-0.1%2C0.5c0%2C0.199%2C0%2C0.398%2C0.1%2C0.6s0.1%2C0.3%2C0.2%2C0.5c0.1%2C0.199%2C0.2%2C0.199%2C0.4%2C0.3c0.2%2C0.101%2C0.3%2C0.101%2C0.5%2C0.101%0A%09%09c0.2%2C0%2C0.3%2C0%2C0.5-0.101c0.2-0.101%2C0.301-0.199%2C0.301-0.3c0-0.1%2C0.199-0.301%2C0.199-0.399C96.6%2C179.7%2C96.7%2C179.4%2C96.7%2C179.2z%22%2F%3E%0A%3C%2Fg%3E%0A%3Ccircle%20fill%3D%22%23636363%22%20cx%3D%2295%22%20cy%3D%2295%22%20r%3D%227%22%2F%3E%0A%3C%2Fsvg%3E%0A) 50% 50%/191px no-repeat", + "a144": " url(img.09a1a1112c577c279435.png)", + "a145": " url(img.09a1a1112c577c279435.png)", + "a148": " url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E')", + "a149": " url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E')", + "a15": " url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E)", + "a150": " url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E')", + "a151": " url('data:image/svg+xml;utf8,')", + "a152": " url(img.09a1a1112c577c279435.png)", + "a153": " url(img.09a1a1112c577c279435.png)", + "a154": " url(other.09a1a1112c577c279435.png)", + "a155": " url(img.09a1a1112c577c279435.png)", + "a156": " url(\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\\")", + "a157": " url('data:image/svg+xml;utf8,')", + "a158": " src(\\"http://www.example.com/pinkish.gif\\")", + "a159": " src(var(--foo))", + "a16": " url('data:image/svg+xml;charset=utf-8,#filter')", + "a160": " url(img.09a1a1112c577c279435.png param(--color var(--primary-color)))", + "a161": " src(\\"img.png\\" param(--color var(--primary-color)))", + "a162": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a163": " url(img.09a1a1112c577c279435.png)", + "a164": " url( img.png bug)", + "a165": " url(imgn.09a1a1112c577c279435.png)", + "a166": " url('data:image/svg+xml;utf8,')", + "a167": " url(http://example.com/image.jpg)", + "a168": " url(http://example.com/image.jpg)", + "a169": " url(data:,)", + "a17": " url(\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter\\")", + "a170": " url(data:,)", + "a171": " image(ltr 'img.png#xywh=0,0,16,16', red)", + "a172": " image-set( + linear-gradient(blue, white) 1x, + linear-gradient(blue, green) 2x + )", + "a173": " image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") + )", + "a174": " image-set( + url(img.09a1a1112c577c279435.png) 1x, + url(img.09a1a1112c577c279435.png) 2x + )", + "a175": " image-set( + url(img.09a1a1112c577c279435.png) 1x, + url(img.09a1a1112c577c279435.png) 2x, + url(img.09a1a1112c577c279435.png) 3x + )", + "a176": " image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") + ) \\"img.png\\"", + "a177": " image-set( + url(img.09a1a1112c577c279435.png) 1x type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) 2x type(\\"image/png\\") + )", + "a178": " image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") 1x, + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") 2x + )", + "a179": " -webkit-image-set( + url(img.09a1a1112c577c279435.png) 1x + )", + "a18": " url(#highlight)", + "a180": " -webkit-image-set( + url(img.09a1a1112c577c279435.png var(--foo, \\"test.png\\")) 1x + )", + "a181": " src( \\"img.png\\" )", + "a182": " src('img.png')", + "a183": " src('img.png' var(--foo, \\"test.png\\"))", + "a184": " src(var(--foo, \\"test.png\\"))", + "a185": " src(\\" img.png \\")", + "a186": " image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x)", + "a187": " image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x)", + "a188": " image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x)", + "a189": " image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x)", + "a19": " url('#line-marker')", + "a190": " image-set(url(img.09a1a1112c577c279435.png)1x)", + "a191": " image-set(url(img.09a1a1112c577c279435.png)1x/* test*/,/* test*/url(img.09a1a1112c577c279435.png)2x)", + "a197": " \\\\u\\\\r\\\\l(img.09a1a1112c577c279435.png)", + "a198": " \\\\image-\\\\set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x)", + "a199": " \\\\-webk\\\\it-image-set(url(img.09a1a1112c577c279435.png)1x)", + "a2": " url(img.09a1a1112c577c279435.png)", + "a200": "-webkit-image-set(url(img.09a1a1112c577c279435.png)1x)", + "a22": " \\"do not use url(path)\\"", + "a23": " 'do not \\"use\\" url(path)'", + "a24": " -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) +", + "a25": " image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) +", + "a26": " green url() xyz", + "a27": " green url('') xyz", + "a28": " green url(\\"\\") xyz", + "a29": " green url(' ') xyz", + "a3": " url(img.09a1a1112c577c279435.png)", + "a30": " green url( + ) xyz", + "a4": " url(img.09a1a1112c577c279435.png#hash)", + "a40": " green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz", + "a41": " green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz", + "a42": " url(img.09a1a1112c577c279435.png?foo)", + "a43": " url(img.09a1a1112c577c279435.png?foo=bar)", + "a44": " url(img.09a1a1112c577c279435.png?foo=bar#hash)", + "a45": " url(img.09a1a1112c577c279435.png?foo=bar#hash)", + "a46": " url(img.09a1a1112c577c279435.png?)", + "a47": " url(img.09a1a1112c577c279435.png) url(\\"data:image/svg+xml;charset=utf-8,\\") url(img.09a1a1112c577c279435.png)", + "a48": " __URL__()", + "a49": " url(img-simple.09a1a1112c577c279435.png)", + "a5": " url( + img.09a1a1112c577c279435.png + )", + "a50": " url(img-simple.09a1a1112c577c279435.png)", + "a51": " url(img-simple.09a1a1112c577c279435.png)", + "a52": " url(img.09a1a1112c577c279435.png)", + "a53": " url(img.09a1a1112c577c279435.png)", + "a55": " -webkit-image-set()", + "a56": " image-set()", + "a58": " image-set('')", + "a59": " image-set(\\"\\")", + "a6": " green url( img.09a1a1112c577c279435.png ) xyz", + "a60": " image-set(\\"\\" 1x)", + "a61": " image-set(url())", + "a62": " image-set( + url() + )", + "a63": " image-set(URL())", + "a64": " image-set(url(''))", + "a65": " image-set(url(\\"\\"))", + "a66": " image-set(url('') 1x)", + "a67": " image-set(1x)", + "a68": " image-set( + 1x + )", + "a69": " image-set(calc(1rem + 1px) 1x)", + "a7": " green url( img.09a1a1112c577c279435.png ) xyz", + "a70": " -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x)", + "a71": " image-set(url(img1x.09a1a1112c577c279435.png) 1x)", + "a72": " image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x)", + "a73": " image-set(url(img\\\\ img.09a1a1112c577c279435.png) 1x, url(img\\\\ img.09a1a1112c577c279435.png) 2x)", + "a74": " image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x), + image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x)", + "a75": " image-set( + url(img1x.09a1a1112c577c279435.png) 1x, + url(img2x.09a1a1112c577c279435.png) 2x, + url(img3x.09a1a1112c577c279435.png) 600dpi + )", + "a76": " image-set(url(img1x.09a1a1112c577c279435.png?foo=bar) 1x)", + "a77": " image-set(url(img1x.09a1a1112c577c279435.png#hash) 1x)", + "a78": " image-set(url(img1x.09a1a1112c577c279435.png?#iefix) 1x)", + "a79": " -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x)", + "a8": " green url(img.09a1a1112c577c279435.png) xyz", + "a80": " -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x)", + "a81": " -webkit-image-set( + url(img1x.09a1a1112c577c279435.png) 1x + )", + "a82": " image-set(url(img1x.09a1a1112c577c279435.png) 1x)", + "a83": " image-set( + url(img1x.09a1a1112c577c279435.png) 1x + )", + "a84": " image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x)", + "a85": " image-set( + url(img1x.09a1a1112c577c279435.png) 1x, + url(img2x.09a1a1112c577c279435.png) 2x, + url(img3x.09a1a1112c577c279435.png) 600dpi + )", + "a86": " image-set(url(img\\\\ img.09a1a1112c577c279435.png) 1x, url(img\\\\ img.09a1a1112c577c279435.png) 2x)", + "a87": " image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x)", + "a88": " url(imgimg.09a1a1112c577c279435.png)", + "a89": " url(img\\\\'img.09a1a1112c577c279435.png)", + "a9": " green url(img.09a1a1112c577c279435.png) url(other-img.09a1a1112c577c279435.png) xyz", + "a90": " url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png)", + "a91": " url(img\\\\(img.09a1a1112c577c279435.png)", + "a92": " url(img\\\\)img.09a1a1112c577c279435.png)", + "a93": " url(img\\\\ img.09a1a1112c577c279435.png)", + "a94": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a95": " image-set( + url(imgimg.09a1a1112c577c279435.png) 1x, + url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png) 2x, + url(img\\\\'img.09a1a1112c577c279435.png) 3x, + url(img\\\\(img.09a1a1112c577c279435.png) 4x, + url(img\\\\)img.09a1a1112c577c279435.png) 5x, + url(img\\\\ img.09a1a1112c577c279435.png) 6x, + url(\\"img'() img.09a1a1112c577c279435.png\\") 7x + )", + "a96": " url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png)", + "a97": " url(\\"img'() img.09a1a1112c577c279435.png\\")", + "a98": " url(img\\\\'img.09a1a1112c577c279435.png)", + "a99": " url(img\\\\(img.09a1a1112c577c279435.png)", "b": " url(img.09a1a1112c577c279435.png)", "c": " url(img.09a1a1112c577c279435.png)", "d": " url(img.09a1a1112c577c279435.png#hash)", - "e": " url(img.09a1a1112c577c279435.png)", - "f": " green url(img.09a1a1112c577c279435.png) xyz", - "g": " green url(img.09a1a1112c577c279435.png) xyz", + "e": " url( + img.09a1a1112c577c279435.png + )", + "f": " green url( img.09a1a1112c577c279435.png ) xyz", + "g": " green url( img.09a1a1112c577c279435.png ) xyz", "getPropertyValue": [Function], "h": " green url(img.09a1a1112c577c279435.png) xyz", "i": " green url(img.09a1a1112c577c279435.png) url(img.09a1a1112c577c279435.png) xyz", - "j": " green url(img\\\\ img.09a1a1112c577c279435.png) xyz", - "k": " green url(img\\\\ img.09a1a1112c577c279435.png) xyz", + "j": " green url( img\\\\ img.09a1a1112c577c279435.png ) xyz", + "k": " green url( img\\\\ img.09a1a1112c577c279435.png ) xyz", "l": " green url(img.09a1a1112c577c279435.png) xyz", "m": " green url(img.09a1a1112c577c279435.png) xyz", "n": " green url(img.09a1a1112c577c279435.png) xyz", diff --git a/test/__snapshots__/ConfigTestCases.basictest.js.snap b/test/__snapshots__/ConfigTestCases.basictest.js.snap index 1043cbbef..1370850dc 100644 --- a/test/__snapshots__/ConfigTestCases.basictest.js.snap +++ b/test/__snapshots__/ConfigTestCases.basictest.js.snap @@ -136,7 +136,11 @@ Object { "a19": " url('#line-marker')", "a190": " image-set(url(img.09a1a1112c577c279435.png)1x)", "a191": " image-set(url(img.09a1a1112c577c279435.png)1x/* test*/,/* test*/url(img.09a1a1112c577c279435.png)2x)", + "a197": " \\\\u\\\\r\\\\l(img.09a1a1112c577c279435.png)", + "a198": " \\\\image-\\\\set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x)", + "a199": " \\\\-webk\\\\it-image-set(url(img.09a1a1112c577c279435.png)1x)", "a2": " url(img.09a1a1112c577c279435.png)", + "a200": "-webkit-image-set(url(img.09a1a1112c577c279435.png)1x)", "a22": " \\"do not use url(path)\\"", "a23": " 'do not \\"use\\" url(path)'", "a24": " -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) diff --git a/test/configCases/css/urls/spacing.css b/test/configCases/css/urls/spacing.css index 2c1419dac..ff6418dfe 100644 --- a/test/configCases/css/urls/spacing.css +++ b/test/configCases/css/urls/spacing.css @@ -592,3 +592,10 @@ div { } } } + +div { + a197: \u\r\l("img.png"); + a198: \image-\set("img.png"1x,"img.png"2x,"img.png"3x); + a199: \-webk\it-image-set("img.png"1x); + a200:-webkit-image-set("img.png"1x); +}