Ignore quotes when checking @font-face use (#972)
authorMatthew Bennett <matthew.t.bennett@gmail.com>
Tue, 19 Sep 2017 09:11:07 +0000 (02:11 -0700)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Tue, 19 Sep 2017 09:11:07 +0000 (11:11 +0200)
lib/optimizer/level-2/remove-unused-at-rules.js
test/optimizer/level-2/remove-unused-at-rules-test.js

index 7285991..71d916d 100644 (file)
@@ -8,6 +8,11 @@ var Token = require('../../tokenizer/token');
 var animationNameRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation-name$/;
 var animationRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation$/;
 var keyframeRegex = /^@(\-moz\-|\-o\-|\-webkit\-)?keyframes /;
+var optionalMatchingQuotesRegex = /^(['"]?)(.*)\1$/;
+
+function removeQuotes(value) {
+  return value.replace(optionalMatchingQuotesRegex, '$2');
+}
 
 function removeUnusedAtRules(tokens, context) {
   removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context);
@@ -107,7 +112,7 @@ function matchFontFace(token, atRules) {
       property = token[2][i];
 
       if (property[1][1] == 'font-family') {
-        match = property[2][1].toLowerCase();
+        match = removeQuotes(property[2][1].toLowerCase());
         atRules[match] = atRules[match] || [];
         atRules[match].push(token);
         break;
@@ -134,7 +139,7 @@ function markFontFacesAsUsed(atRules) {
         component = wrappedProperty.components[6];
 
         for (j = 0, m = component.value.length; j < m; j++) {
-          normalizedMatch = component.value[j][1].toLowerCase();
+          normalizedMatch = removeQuotes(component.value[j][1].toLowerCase());
 
           if (normalizedMatch in atRules) {
             delete atRules[normalizedMatch];
@@ -146,7 +151,7 @@ function markFontFacesAsUsed(atRules) {
 
       if (property[1][1] == 'font-family') {
         for (j = 2, m = property.length; j < m; j++) {
-          normalizedMatch = property[j][1].toLowerCase();
+          normalizedMatch = removeQuotes(property[j][1].toLowerCase());
 
           if (normalizedMatch in atRules) {
             delete atRules[normalizedMatch];
index 4e5ddc0..3a5a270 100644 (file)
@@ -40,10 +40,18 @@ vows.describe('remove unused at rules')
         '@font-face{font-family:test}.block{font-family:test}',
         '@font-face{font-family:test}.block{font-family:test}'
       ],
+      'one used quoted declaration in font-family': [
+        '@font-face{font-family:"test test"}.block{font-family:"test test"}',
+        '@font-face{font-family:"test test"}.block{font-family:"test test"}'
+      ],
       'one used declaration in font-family with different case': [
         '@font-face{font-family:test}.block{font-family:Test}',
         '@font-face{font-family:test}.block{font-family:Test}'
       ],
+      'one used quoted declaration in font-family with different quotes': [
+        '@font-face{font-family:"test test"}.block{font-family:\'test test\'}',
+        '@font-face{font-family:"test test"}.block{font-family:\'test test\'}'
+      ],
       'one used declaration in multi-valued font-family': [
         '@font-face{font-family:test}.block{font-family:Arial,test,sans-serif}',
         '@font-face{font-family:test}.block{font-family:Arial,test,sans-serif}'