Skip to content

Commit 49eb9c7

Browse files
committed
Fix: Parser breaks when an end parenthesis occurs in a quoted string
Closes #56 Closes #77
1 parent e491792 commit 49eb9c7

2 files changed

Lines changed: 31 additions & 7 deletions

File tree

lib/parse.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ CSSOM.parse = function parse(token) {
237237
}
238238
break;
239239

240-
case '(':
240+
case "(":
241241
if (state === 'value') {
242242
// ie css expression mode
243243
if (buffer.trim() === 'expression') {
@@ -250,17 +250,19 @@ CSSOM.parse = function parse(token) {
250250
i = info.idx;
251251
}
252252
} else {
253-
index = token.indexOf(')', i + 1);
254-
if (index === -1) {
255-
parseError('Unmatched "("');
256-
}
257-
buffer += token.slice(i, index + 1);
258-
i = index;
253+
state = 'value-parenthesis';
254+
buffer += character;
259255
}
260256
} else {
261257
buffer += character;
262258
}
259+
break;
263260

261+
case ")":
262+
if (state === 'value-parenthesis') {
263+
state = 'value';
264+
}
265+
buffer += character;
264266
break;
265267

266268
case "!":

spec/parse.spec.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,28 @@ var TESTS = [
401401
return result;
402402
})()
403403
},
404+
{
405+
input: "body{background-image: url(')');}",
406+
result: (function() {
407+
var result = {
408+
cssRules: [
409+
{
410+
selectorText: 'body',
411+
parentRule: null,
412+
style: {
413+
0: 'background-image',
414+
'background-image': "url(')')",
415+
length: 1
416+
}
417+
}
418+
],
419+
parentStyleSheet: null
420+
};
421+
result.cssRules[0].parentStyleSheet = result;
422+
result.cssRules[0].style.parentRule = result.cssRules[0];
423+
return result;
424+
})()
425+
},
404426
{
405427
input: ".gradient{background: -moz-linear-gradient(/*);*/top, #1E5799 0%, #7db9e8 100%)}",
406428
result: (function() {

0 commit comments

Comments
 (0)