* No longer accepts splitted value as constructor argument but in split method instead.
* Accepts separator value to split over in constructor.
var FreeTextProcessor = require('./text/free');
var UrlsProcessor = require('./text/urls');
var NameQuotesProcessor = require('./text/name-quotes');
-var CommaSplitter = require('./text/comma-splitter');
+var Splitter = require('./text/splitter');
var SelectorsOptimizer = require('./selectors/optimizer');
// transparent rgba/hsla to 'transparent' unless in compatibility mode
if (!options.compatibility) {
replace(/:([^;]*)(?:rgba|hsla)\(\d+,\d+%?,\d+%?,0\)/g, function (match, prefix) {
- if (new CommaSplitter(match).split().pop().indexOf('gradient(') > -1)
+ if (new Splitter(',').split(match).pop().indexOf('gradient(') > -1)
return match;
return ':' + prefix + 'transparent';
var tokenModule = require('./token');
var validator = require('./validator');
- var CommaSplitter = require('../text/comma-splitter');
+ var Splitter = require('../text/splitter');
// Functions that decide what value can override what.
// The main purpose is to disallow removing CSS fallbacks.
if (token.value.indexOf(',') === -1)
return splitfunc(token);
- var values = new CommaSplitter(token.value).split();
+ var values = new Splitter(',').split(token.value);
var components = [];
for (var i = 0, l = values.length; i < l; i++) {
commaSeparatedMulitpleValues: function (assembleFunction) {
return function(prop, tokens, isImportant) {
var tokenSplitLengths = tokens.map(function (token) {
- return new CommaSplitter(token.value).split().length;
+ return new Splitter(',').split(token.value).length;
});
var partsCount = Math.max.apply(Math, tokenSplitLengths);
merged.push([]);
for (var j = 0; j < tokens.length; j++) {
- var split = new CommaSplitter(tokens[j].value).split();
+ var split = new Splitter(',').split(tokens[j].value);
merged[i].push(split[i] || split[0]);
}
}
+++ /dev/null
-var Splitter = function CommaSplitter (value) {
- this.value = value;
-};
-
-Splitter.prototype.split = function () {
- if (this.value.indexOf(',') === -1)
- return [this.value];
-
- if (this.value.indexOf('(') === -1)
- return this.value.split(',');
-
- var level = 0;
- var cursor = 0;
- var lastStart = 0;
- var len = this.value.length;
- var tokens = [];
-
- while (cursor++ < len) {
- if (this.value[cursor] == '(') {
- level++;
- } else if (this.value[cursor] == ')') {
- level--;
- } else if (this.value[cursor] == ',' && level === 0) {
- tokens.push(this.value.substring(lastStart, cursor));
- lastStart = cursor + 1;
- }
- }
-
- if (lastStart < cursor + 1)
- tokens.push(this.value.substring(lastStart));
-
- return tokens;
-};
-
-module.exports = Splitter;
--- /dev/null
+var Splitter = function Splitter (separator) {
+ this.separator = separator;
+};
+
+Splitter.prototype.split = function (value) {
+ if (value.indexOf(this.separator) === -1)
+ return [value];
+
+ if (value.indexOf('(') === -1)
+ return value.split(this.separator);
+
+ var level = 0;
+ var cursor = 0;
+ var lastStart = 0;
+ var len = value.length;
+ var tokens = [];
+
+ while (cursor++ < len) {
+ if (value[cursor] == '(') {
+ level++;
+ } else if (value[cursor] == ')') {
+ level--;
+ } else if (value[cursor] == this.separator && level === 0) {
+ tokens.push(value.substring(lastStart, cursor));
+ lastStart = cursor + 1;
+ }
+ }
+
+ if (lastStart < cursor + 1)
+ tokens.push(value.substring(lastStart));
+
+ return tokens;
+};
+
+module.exports = Splitter;
+++ /dev/null
-var vows = require('vows');
-var assert = require('assert');
-var CommaSplitter = require('../../lib/text/comma-splitter');
-
-var split = function (value, expectedValue) {
- return function () {
- assert.deepEqual(new CommaSplitter(value).split(), expectedValue);
- };
-};
-
-vows.describe('comma-splitter').addBatch({
- 'empty': split('', ['']),
- 'simple': split('none', ['none']),
- 'comma separated - level 0': split('#000,#fff,#0f0', ['#000', '#fff', '#0f0']),
- 'comma separated - level 1': split('rgb(0,0,0),#fff', ['rgb(0,0,0)', '#fff']),
- 'comma separated - level 2': split('linear-gradient(0,#fff,rgba(0,0,0)),red', ['linear-gradient(0,#fff,rgba(0,0,0))', 'red'])
-}).export(module);
--- /dev/null
+var vows = require('vows');
+var assert = require('assert');
+var Splitter = require('../../lib/text/splitter');
+
+var split = function (value, expectedValue, separator) {
+ return function () {
+ assert.deepEqual(new Splitter(separator).split(value), expectedValue);
+ };
+};
+
+vows.describe('splitter').addBatch({
+ 'empty': split('', [''], ','),
+ 'simple': split('none', ['none'], ','),
+ 'comma separated - level 0': split('#000,#fff,#0f0', ['#000', '#fff', '#0f0'], ','),
+ 'comma separated - level 1': split('rgb(0,0,0),#fff', ['rgb(0,0,0)', '#fff'], ','),
+ 'comma separated - level 2': split('linear-gradient(0,#fff,rgba(0,0,0)),red', ['linear-gradient(0,#fff,rgba(0,0,0))', 'red'], ','),
+ 'space separated - level 0': split('#000 #fff #0f0', ['#000', '#fff', '#0f0'], ' '),
+ 'space separated - level 1': split('rgb(0, 0, 0) #fff', ['rgb(0, 0, 0)', '#fff'], ' '),
+ 'space separated - level 2': split('linear-gradient(0, #fff, rgba(0, 0, 0)) red', ['linear-gradient(0, #fff, rgba(0, 0, 0))', 'red'], ' ')
+}).export(module);