var readSources = require('./reader/read-sources');
var basicOptimize = require('./optimizer/basic');
var advancedOptimize = require('./optimizer/advanced');
-var simpleStringify = require('./stringifier/simple');
-var sourceMapStringify = require('./stringifier/source-maps');
+var serializeStyles = require('./writer/simple');
+var serializeStylesAndSourceMap = require('./writer/source-maps');
var CleanCSS = module.exports = function CleanCSS(options) {
options = options || {};
return runner(context.localOnly)(function () {
return readSources(input, context, function (tokens) {
- var stringify = context.options.sourceMap ?
- sourceMapStringify :
- simpleStringify;
+ var serialize = context.options.sourceMap ?
+ serializeStylesAndSourceMap :
+ serializeStyles;
var optimizedTokens = optimize(tokens, context);
- var optimizedStyles = stringify(optimizedTokens, context);
+ var optimizedStyles = serialize(optimizedTokens, context);
var output = withMetadata(optimizedStyles, context);
return callback ?
// IMPORTANT: Mind Token class and this code is not related!
// Properties will be tokenized in one step, see #429
-var stringifyRules = require('../stringifier/one-time').rules;
-var stringifyValue = require('../stringifier/one-time').value;
+var serializeRules = require('../writer/one-time').rules;
+var serializeValue = require('../writer/one-time').value;
var Token = require('../tokenizer/token');
function extractProperties(token) {
var i, l;
if (token[0] == Token.RULE) {
- inSpecificSelector = !/[\.\+>~]/.test(stringifyRules(token[1]));
+ inSpecificSelector = !/[\.\+>~]/.test(serializeRules(token[1]));
for (i = 0, l = token[2].length; i < l; i++) {
property = token[2][i];
if (name.indexOf('--') === 0)
continue;
- value = stringifyValue(property, i);
+ value = serializeValue(property, i);
properties.push([
name,
var optimizeProperties = require('../properties/optimizer');
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
var tidyRules = require('./tidy-rules');
var isSpecial = require('./is-special');
continue;
}
- if (lastToken[0] == Token.RULE && stringifyRules(token[1]) == stringifyRules(lastToken[1])) {
+ if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) {
var joinAt = [lastToken[2].length];
Array.prototype.push.apply(lastToken[2], token[2]);
optimizeProperties(token[1], lastToken[2], joinAt, true, context);
token[2] = [];
- } else if (lastToken[0] == Token.RULE && stringifyBody(token[2]) == stringifyBody(lastToken[2]) &&
- !isSpecial(options, stringifyRules(token[1])) && !isSpecial(options, stringifyRules(lastToken[1]))) {
+ } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2]) &&
+ !isSpecial(options, serializeRules(token[1])) && !isSpecial(options, serializeRules(lastToken[1]))) {
lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, context.warnings);
token[2] = [];
} else {
var canReorder = require('./reorderable').canReorder;
var extractProperties = require('./extract-properties');
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeRules = require('../writer/one-time').rules;
var Token = require('../tokenizer/token');
function mergeMediaQueries(tokens) {
continue;
}
- var key = stringifyRules(token[1]);
+ var key = serializeRules(token[1]);
var candidate = candidates[key];
if (!candidate) {
candidate = [];
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
var tidyRules = require('./tidy-rules');
var isSpecial = require('./is-special');
}
function isBemElement(token) {
- var asString = stringifyRules(token[1]);
+ var asString = serializeRules(token[1]);
return asString.indexOf('__') > -1 || asString.indexOf('--') > -1;
}
}
function removeAnyUnsafeElements(left, candidates) {
- var leftSelector = withoutModifier(stringifyRules(left[1]));
+ var leftSelector = withoutModifier(serializeRules(left[1]));
for (var body in candidates) {
var right = candidates[body];
- var rightSelector = withoutModifier(stringifyRules(right[1]));
+ var rightSelector = withoutModifier(serializeRules(right[1]));
if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1)
delete candidates[body];
if (token[0] != Token.RULE)
continue;
- if (token[2].length > 0 && (!options.semanticMerging && unsafeSelector(stringifyRules(token[1]))))
+ if (token[2].length > 0 && (!options.semanticMerging && unsafeSelector(serializeRules(token[1]))))
candidates = {};
if (token[2].length > 0 && options.semanticMerging && isBemElement(token))
removeAnyUnsafeElements(token, candidates);
- var candidateBody = stringifyBody(token[2]);
+ var candidateBody = serializeBody(token[2]);
var oldToken = candidates[candidateBody];
- if (oldToken && !isSpecial(options, stringifyRules(token[1])) && !isSpecial(options, stringifyRules(oldToken[1]))) {
+ if (oldToken && !isSpecial(options, serializeRules(token[1])) && !isSpecial(options, serializeRules(oldToken[1]))) {
token[1] = token[2].length > 0 ?
tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, context.warnings) :
oldToken[1].concat(token[1]);
candidates[candidateBody] = null;
}
- candidates[stringifyBody(token[2])] = token;
+ candidates[serializeBody(token[2])] = token;
}
}
var optimizeProperties = require('../properties/optimizer');
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeRules = require('../writer/one-time').rules;
var extractProperties = require('./extract-properties');
var canReorder = require('./reorderable').canReorder;
if (tokens[i][2].length === 0)
continue;
- var selector = stringifyRules(tokens[i][1]);
+ var selector = serializeRules(tokens[i][1]);
allSelectors[selector] = [i].concat(allSelectors[selector] || []);
if (allSelectors[selector].length == 2)
var optimizeProperties = require('../properties/optimizer');
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
var isSpecial = require('./is-special');
var cloneArray = require('../utils/clone-array');
continue;
}
- var selectorAsString = stringifyRules(token[1]);
+ var selectorAsString = serializeRules(token[1]);
var isComplexAndNotSpecial = token[1].length > 1 && !isSpecial(options, selectorAsString);
var wrappedSelectors = wrappedSelectorsFrom(token[1]);
var selectors = isComplexAndNotSpecial ?
callback: collectReducedBodies
}, options, context);
- if (stringifyBody(reducedBodies[reducedBodies.length - 1]) != stringifyBody(reducedBodies[0]))
+ if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0]))
continue allSelectors;
}
-var stringifyAll = require('../stringifier/one-time').all;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeAll = require('../writer/one-time').all;
+var serializeRules = require('../writer/one-time').rules;
var Token = require('../tokenizer/token');
continue;
}
- key = stringifyRules(token[1]) + '%' + stringifyAll(token[2]);
+ key = serializeRules(token[1]) + '%' + serializeAll(token[2]);
candidate = candidates[key];
if (candidate) {
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
var Token = require('../tokenizer/token');
if (token[0] != Token.RULE)
continue;
- id = stringifyRules(token[1]);
+ id = serializeRules(token[1]);
if (matched[id] && matched[id].length == 1)
moreThanOnce.push(id);
for (var j = matched[id].length - 1; j >= 0; j--) {
token = tokens[matched[id][j]];
- body = stringifyBody(token[2]);
+ body = serializeBody(token[2]);
if (bodies.indexOf(body) > -1)
token[2] = [];
var extractProperties = require('./extract-properties');
var canReorderSingle = require('./reorderable').canReorderSingle;
-var stringifyBody = require('../stringifier/one-time').body;
-var stringifyRules = require('../stringifier/one-time').rules;
+var serializeBody = require('../writer/one-time').body;
+var serializeRules = require('../writer/one-time').rules;
var tidyRuleDuplicates = require('./tidy-rule-duplicates');
var isSpecial = require('./is-special');
var cloneArray = require('../utils/clone-array');
function cacheId(cachedTokens) {
var id = [];
for (var i = 0, l = cachedTokens.length; i < l; i++) {
- id.push(stringifyRules(cachedTokens[i][1]));
+ id.push(serializeRules(cachedTokens[i][1]));
}
return id.join(ID_JOIN_CHARACTER);
}
var mergeableTokens = [];
for (var i = sourceTokens.length - 1; i >= 0; i--) {
- if (isSpecial(options, stringifyRules(sourceTokens[i][1])))
+ if (isSpecial(options, serializeRules(sourceTokens[i][1])))
continue;
mergeableTokens.unshift(sourceTokens[i]);
function sizeDifference(tokensVariant, propertySize, propertiesCount) {
var allSelectorsSize = 0;
for (var i = tokensVariant.length - 1; i >= 0; i--) {
- allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? stringifyRules(tokensVariant[i][1]).length : -1;
+ allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? serializeRules(tokensVariant[i][1]).length : -1;
}
return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;
}
var mergeablePropertyName = mergeableProperty[1][1];
var propertyName = property[0];
var propertyBody = property[4];
- if (mergeablePropertyName == propertyName && stringifyBody([mergeableProperty]) == propertyBody) {
+ if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {
mergeableToken[2].splice(j, 1);
break;
}
var compactShorthands = require('./shorthand-compactor');
var removeUnused = require('./remove-unused');
var restoreFromOptimizing = require('./restore-from-optimizing');
-var stringifyProperty = require('../stringifier/one-time').property;
+var serializeProperty = require('../writer/one-time').property;
var shorthands = {
'animation-delay': ['animation'],
var left = properties[position - 1];
var right = properties[position];
- return stringifyProperty(left.all, left.position) == stringifyProperty(right.all, right.position);
+ return serializeProperty(left.all, left.position) == serializeProperty(right.all, right.position);
}
propertyLoop:
var everyCombination = require('./every-combination');
var sameVendorPrefixesIn = require('./vendor-prefixes').same;
-var stringifyProperty = require('../stringifier/one-time').property;
+var serializeProperty = require('../writer/one-time').property;
var Token = require('../tokenizer/token');
var Marker = require('../tokenizer/marker');
Token.PROPERTY,
[Token.PROPERTY_NAME, property.name]
].concat(property.value);
- return stringifyProperty([fakeAsArray], 0).length;
+ return serializeProperty([fakeAsArray], 0).length;
}
function moreSameShorthands(properties, startAt, name) {
+++ /dev/null
-var all = require('./helpers').all;
-
-function store(token, stringifyContext) {
- stringifyContext.output.push(typeof token == 'string' ? token : token[1]);
-}
-
-function stringify(tokens, context) {
- var stringifyContext = {
- keepBreaks: context.options.keepBreaks,
- output: [],
- spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
- store: store
- };
-
- all(tokens, stringifyContext, false);
-
- return {
- styles: stringifyContext.output.join('')
- };
-}
-
-module.exports = stringify;
--- /dev/null
+var all = require('./helpers').all;
+
+function store(token, serializeContext) {
+ serializeContext.output.push(typeof token == 'string' ? token : token[1]);
+}
+
+function serializeStyles(tokens, context) {
+ var serializeContext = {
+ keepBreaks: context.options.keepBreaks,
+ output: [],
+ spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
+ store: store
+ };
+
+ all(tokens, serializeContext, false);
+
+ return {
+ styles: serializeContext.output.join('')
+ };
+}
+
+module.exports = serializeStyles;
var isWindows = process.platform == 'win32';
var UNKNOWN_SOURCE = '$stdin';
-function store(element, stringifyContext) {
+function store(element, serializeContext) {
var fromString = typeof element == 'string';
var value = fromString ? element : element[1];
var mappings = fromString ? null : element[2];
- track(value, mappings, stringifyContext);
- stringifyContext.output.push(value);
+ track(value, mappings, serializeContext);
+ serializeContext.output.push(value);
}
-function track(value, mappings, stringifyContext) {
+function track(value, mappings, serializeContext) {
var parts = value.split('\n');
if (mappings) {
- trackAllMappings(mappings, stringifyContext);
+ trackAllMappings(mappings, serializeContext);
}
- stringifyContext.line += parts.length - 1;
- stringifyContext.column = parts.length > 1 ? 0 : (stringifyContext.column + parts.pop().length);
+ serializeContext.line += parts.length - 1;
+ serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
}
-function trackAllMappings(mappings, stringifyContext) {
+function trackAllMappings(mappings, serializeContext) {
for (var i = 0, l = mappings.length; i < l; i++) {
- trackMapping(mappings[i], stringifyContext);
+ trackMapping(mappings[i], serializeContext);
}
}
-function trackMapping(mapping, stringifyContext) {
+function trackMapping(mapping, serializeContext) {
var line = mapping[0];
var column = mapping[1];
var originalSource = mapping[2];
source = source.replace(/\\/g, '/');
}
- stringifyContext.outputMap.addMapping({
+ serializeContext.outputMap.addMapping({
generated: {
- line: stringifyContext.line,
- column: stringifyContext.column
+ line: serializeContext.line,
+ column: serializeContext.column
},
source: storedSource,
original: {
}
});
- if (stringifyContext.inlineSources && (originalSource in stringifyContext.sourcesContent)) {
- stringifyContext.outputMap.setSourceContent(storedSource, stringifyContext.sourcesContent[originalSource]);
+ if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) {
+ serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]);
}
}
-function stringify(tokens, context) {
- var stringifyContext = {
+function serializeStylesAndSourceMap(tokens, context) {
+ var serializeContext = {
column: 0,
keepBreaks: context.options.keepBreaks,
inlineSources: context.options.sourceMapInlineSources,
store: store
};
- all(tokens, stringifyContext, false);
+ all(tokens, serializeContext, false);
return {
- sourceMap: stringifyContext.outputMap,
- styles: stringifyContext.output.join('')
+ sourceMap: serializeContext.outputMap,
+ styles: serializeContext.output.join('')
};
}
-module.exports = stringify;
+module.exports = serializeStylesAndSourceMap;