var Splitter = require('../utils/splitter');
var flatBlock = /(^@(font\-face|page|\-ms\-viewport|\-o\-viewport|viewport)|\\@.+?)/;
+var WHITESPACE = /\s/g;
+var MULTI_WHITESPACE = /\s{2,}/g;
+var WHITESPACE_COLON = / ?: ?/g;
+var WHITESPACE_SEMICOLON = / ?; ?/g;
+var WHITESPACE_COMMA = / ?, ?/g;
+var WHITESPACE_PREFIX = /([\(,]) /g;
+var WHITESPACE_SUFFIX = / ([\),])/g;
+var MULTI_SEMICOLON = /;{2,}/g;
+var TRAILING_SEMICOLON = /;$/;
function Tokenizer(minifyContext) {
this.minifyContext = minifyContext;
};
function extractProperties(string) {
- return string
- .replace(/\s{2,}/g, ' ')
- .replace(/ ?: ?/g, ':')
- .replace(/([\(,]) /g, '$1')
- .replace(/ ([\),])/g, '$1')
- .split(';')
- .map(function (value) { return value.trim(); })
- .filter(function (value) { return value.length > 0; });
+ var extracted = string
+ .replace(WHITESPACE, ' ')
+ .replace(MULTI_WHITESPACE, ' ')
+ .replace(WHITESPACE_COLON, ':')
+ .replace(WHITESPACE_PREFIX, '$1')
+ .replace(WHITESPACE_SUFFIX, '$1')
+ .replace(WHITESPACE_SEMICOLON, ';')
+ .replace(MULTI_SEMICOLON, ';')
+ .trim()
+ .replace(TRAILING_SEMICOLON, '');
+
+ return extracted.length > 0 ?
+ extracted.split(';') :
+ [];
}
function extractSelectors(string) {
- string = string
- .replace(/(\s{2,}|\s)/g, ' ')
- .replace(/, /g, ',');
+ var extracted = string
+ .replace(WHITESPACE, ' ')
+ .replace(MULTI_WHITESPACE, ' ')
+ .replace(WHITESPACE_COMMA, ',')
+ .trim();
- return new Splitter(',').split(string)
- .map(function (value) { return value.trim(); });
+ return new Splitter(',').split(extracted);
}
function extractBlock(string) {
return string
- .replace(/\s/g, ' ')
- .replace(/\s{2,}/g, ' ')
+ .replace(WHITESPACE, ' ')
+ .replace(MULTI_WHITESPACE, ' ')
.trim();
}