From 286796ba730e3ecd113e095190f4ef84b4fb2cbf Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Tue, 29 Jul 2014 21:42:20 +0100 Subject: [PATCH] Fixes issue with tokenizer removing first selector after an unknown @ rule. See discussion in #325. --- History.md | 5 +++++ lib/selectors/tokenizer.js | 5 +++-- test/unit-test.js | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/History.md b/History.md index c12d3a17..73d0d906 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,8 @@ +[2.2.12 / 2014-xx-xx](https://github.com/GoalSmashers/clean-css/compare/v2.2.11...v2.2.12) +================== + +* Fixed issue with tokenizer removing first selector after an unknown @ rule. + [2.2.11 / 2014-07-28](https://github.com/GoalSmashers/clean-css/compare/v2.2.10...v2.2.11) ================== diff --git a/lib/selectors/tokenizer.js b/lib/selectors/tokenizer.js index d6749461..ab57d320 100644 --- a/lib/selectors/tokenizer.js +++ b/lib/selectors/tokenizer.js @@ -70,8 +70,9 @@ module.exports = function Tokenizer(data, minifyContext) { var oldMode; if (what == 'special') { - var fragment = chunk.substring(nextSpecial, context.cursor + '@font-face'.length + 1); - var isSingle = fragment.indexOf('@import') === 0 || fragment.indexOf('@charset') === 0; + var firstOpenBraceAt = chunk.indexOf('{', nextSpecial); + var firstSemicolonAt = chunk.indexOf(';', nextSpecial); + var isSingle = firstSemicolonAt > -1 && (firstOpenBraceAt == -1 || firstSemicolonAt < firstOpenBraceAt); if (isSingle) { nextEnd = chunk.indexOf(';', nextSpecial + 1); tokenized.push(chunk.substring(context.cursor, nextEnd + 1)); diff --git a/test/unit-test.js b/test/unit-test.js index c8dd5948..9cc3f53f 100644 --- a/test/unit-test.js +++ b/test/unit-test.js @@ -2049,7 +2049,8 @@ title']{display:block}", 'merging color with backgrounds': [ 'p{background:red;background-image:url(1.png),url(2.png)}', 'p{background:url(1.png),url(2.png) red}' - ] + ], + 'unknown @ rule': '@unknown "test";h1{color:red}' }), 'viewport units': cssContext({ 'shorthand margin with viewport width not changed': 'div{margin:5vw}' -- 2.34.1