[2.2.8 / 2014-xx-xx](https://github.com/GoalSmashers/clean-css/compare/v2.2.7...v2.2.8)
==================
+* Fixed issue [#313](https://github.com/GoalSmashers/clean-css/issues/313) - processing comment marks in urls.
* Fixed issue [#315](https://github.com/GoalSmashers/clean-css/issues/315) - rgba/hsla -> transparent in gradients.
[2.2.7 / 2014-07-10](https://github.com/GoalSmashers/clean-css/compare/v2.2.6...v2.2.7)
this.data = data;
};
- var findCommentEnd = function(data, matched, cursor) {
+ var findQuoteEnd = function(data, matched, cursor, oldCursor) {
var commentStartMark = '/*';
var commentEndMark = '*/';
var escapeMark = '\\';
+ var blockEndMark = '}';
+ var dataPrefix = data.substring(oldCursor, cursor);
+ var commentEndedAt = dataPrefix.lastIndexOf(commentEndMark, cursor);
+ var commentStartedAt = dataPrefix.lastIndexOf(commentStartMark, cursor);
var commentStarted = false;
+ if (commentEndedAt >= cursor && commentStartedAt > -1)
+ commentStarted = true;
+ if (commentStartedAt < cursor && commentStartedAt > commentEndedAt)
+ commentStarted = true;
+
+ if (commentStarted) {
+ var commentEndsAt = data.indexOf(commentEndMark, cursor);
+ if (commentEndsAt > -1)
+ return commentEndsAt;
+
+ commentEndsAt = data.indexOf(blockEndMark, cursor);
+ return commentEndsAt > -1 ? commentEndsAt - 1 : data.length;
+ }
+
while (true) {
if (data[cursor] === undefined)
break;
- if (!commentStarted && data[cursor] == commentEndMark[1] && data[cursor - 1] == commentEndMark[0])
- break;
if (data[cursor] == matched && data[cursor - 1] != escapeMark)
break;
- if (data[cursor] == commentStartMark[1] && data[cursor - 1] == commentStartMark[0])
- commentStarted = true;
cursor++;
}
if (nextStart == -1)
break;
- nextEnd = findCommentEnd(data, matchedMark, nextStart + 1);
+ nextEnd = findQuoteEnd(data, matchedMark, nextStart + 1, cursor);
if (nextEnd == -1)
break;
'of an unknown file with extra whitespace': [
"@import url( /fake.css );",
"@import url(/fake.css);"
- ]
+ ],
+ 'of comment chars within import url': "@import 'necolas/normalize.css@*/normalize.css';"
}, { processImport: false }),
'@import with no import and no advanced': cssContext({
'empty body': [