From: Jakub Pawlowicz Date: Sat, 4 Oct 2014 22:56:48 +0000 (+0100) Subject: Adds faster tokenizer extraction. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=8270da8c4027738f20c2613b92388042281ad9db;p=clean-css.git Adds faster tokenizer extraction. --- diff --git a/lib/selectors/tokenizer.js b/lib/selectors/tokenizer.js index a0906fad..7b6e9a9c 100644 --- a/lib/selectors/tokenizer.js +++ b/lib/selectors/tokenizer.js @@ -2,6 +2,15 @@ var Chunker = require('../utils/chunker'); 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; @@ -24,29 +33,36 @@ Tokenizer.prototype.toTokens = function (data) { }; 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(); }