From: Jakub Pawlowicz Date: Thu, 15 Dec 2016 16:20:01 +0000 (+0100) Subject: Moves all writing-related code to `writer` folder. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=8e927f7b9eb59ab6114ad0586be8047a84ae6b13;p=clean-css.git Moves all writing-related code to `writer` folder. Why: * To make it clearer what it does. --- diff --git a/lib/clean.js b/lib/clean.js index 9c6ac071..fd5685f1 100644 --- a/lib/clean.js +++ b/lib/clean.js @@ -17,8 +17,8 @@ var inputSourceMapTracker = require('./reader/input-source-map-tracker'); 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 || {}; @@ -91,12 +91,12 @@ CleanCSS.prototype.minify = function (input, callback) { 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 ? diff --git a/lib/optimizer/extract-properties.js b/lib/optimizer/extract-properties.js index 4077061f..93d49ca6 100644 --- a/lib/optimizer/extract-properties.js +++ b/lib/optimizer/extract-properties.js @@ -2,8 +2,8 @@ // 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) { @@ -15,7 +15,7 @@ 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]; @@ -30,7 +30,7 @@ function extractProperties(token) { if (name.indexOf('--') === 0) continue; - value = stringifyValue(property, i); + value = serializeValue(property, i); properties.push([ name, diff --git a/lib/optimizer/merge-adjacent.js b/lib/optimizer/merge-adjacent.js index 988e376e..f10397d0 100644 --- a/lib/optimizer/merge-adjacent.js +++ b/lib/optimizer/merge-adjacent.js @@ -1,7 +1,7 @@ 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'); @@ -20,13 +20,13 @@ function mergeAdjacent(tokens, context) { 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 { diff --git a/lib/optimizer/merge-media-queries.js b/lib/optimizer/merge-media-queries.js index fcf9ed24..711dfa2d 100644 --- a/lib/optimizer/merge-media-queries.js +++ b/lib/optimizer/merge-media-queries.js @@ -1,7 +1,7 @@ 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) { @@ -14,7 +14,7 @@ function mergeMediaQueries(tokens) { continue; } - var key = stringifyRules(token[1]); + var key = serializeRules(token[1]); var candidate = candidates[key]; if (!candidate) { candidate = []; diff --git a/lib/optimizer/merge-non-adjacent-by-body.js b/lib/optimizer/merge-non-adjacent-by-body.js index b5eda742..467f7d45 100644 --- a/lib/optimizer/merge-non-adjacent-by-body.js +++ b/lib/optimizer/merge-non-adjacent-by-body.js @@ -1,5 +1,5 @@ -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'); @@ -10,7 +10,7 @@ function unsafeSelector(value) { } function isBemElement(token) { - var asString = stringifyRules(token[1]); + var asString = serializeRules(token[1]); return asString.indexOf('__') > -1 || asString.indexOf('--') > -1; } @@ -19,11 +19,11 @@ function withoutModifier(selector) { } 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]; @@ -40,15 +40,15 @@ function mergeNonAdjacentByBody(tokens, context) { 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]); @@ -57,7 +57,7 @@ function mergeNonAdjacentByBody(tokens, context) { candidates[candidateBody] = null; } - candidates[stringifyBody(token[2])] = token; + candidates[serializeBody(token[2])] = token; } } diff --git a/lib/optimizer/merge-non-adjacent-by-selector.js b/lib/optimizer/merge-non-adjacent-by-selector.js index a9188a8a..1b2ef1e5 100644 --- a/lib/optimizer/merge-non-adjacent-by-selector.js +++ b/lib/optimizer/merge-non-adjacent-by-selector.js @@ -1,5 +1,5 @@ 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; @@ -16,7 +16,7 @@ function mergeNonAdjacentBySelector(tokens, context) { 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) diff --git a/lib/optimizer/reduce-non-adjacent.js b/lib/optimizer/reduce-non-adjacent.js index caa93bad..282cf8d7 100644 --- a/lib/optimizer/reduce-non-adjacent.js +++ b/lib/optimizer/reduce-non-adjacent.js @@ -1,6 +1,6 @@ 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'); @@ -20,7 +20,7 @@ function reduceNonAdjacent(tokens, context) { 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 ? @@ -122,7 +122,7 @@ function reduceComplexNonAdjacentCases(tokens, candidates, options, context) { callback: collectReducedBodies }, options, context); - if (stringifyBody(reducedBodies[reducedBodies.length - 1]) != stringifyBody(reducedBodies[0])) + if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0])) continue allSelectors; } diff --git a/lib/optimizer/remove-duplicate-media-queries.js b/lib/optimizer/remove-duplicate-media-queries.js index 9d243dd4..ffde8a3c 100644 --- a/lib/optimizer/remove-duplicate-media-queries.js +++ b/lib/optimizer/remove-duplicate-media-queries.js @@ -1,5 +1,5 @@ -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'); @@ -16,7 +16,7 @@ function removeDuplicateMediaQueries(tokens) { continue; } - key = stringifyRules(token[1]) + '%' + stringifyAll(token[2]); + key = serializeRules(token[1]) + '%' + serializeAll(token[2]); candidate = candidates[key]; if (candidate) { diff --git a/lib/optimizer/remove-duplicates.js b/lib/optimizer/remove-duplicates.js index fab62b94..fb777472 100644 --- a/lib/optimizer/remove-duplicates.js +++ b/lib/optimizer/remove-duplicates.js @@ -1,5 +1,5 @@ -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'); @@ -14,7 +14,7 @@ function removeDuplicates(tokens) { if (token[0] != Token.RULE) continue; - id = stringifyRules(token[1]); + id = serializeRules(token[1]); if (matched[id] && matched[id].length == 1) moreThanOnce.push(id); @@ -30,7 +30,7 @@ function removeDuplicates(tokens) { 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] = []; diff --git a/lib/optimizer/restructure.js b/lib/optimizer/restructure.js index 0694167d..e8753d93 100644 --- a/lib/optimizer/restructure.js +++ b/lib/optimizer/restructure.js @@ -1,7 +1,7 @@ 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'); @@ -70,7 +70,7 @@ function restructure(tokens, context) { 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); } @@ -80,7 +80,7 @@ function restructure(tokens, context) { 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]); @@ -144,7 +144,7 @@ function restructure(tokens, context) { 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; } @@ -165,7 +165,7 @@ function restructure(tokens, context) { 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; } diff --git a/lib/properties/optimizer.js b/lib/properties/optimizer.js index 565158b1..f7057a53 100644 --- a/lib/properties/optimizer.js +++ b/lib/properties/optimizer.js @@ -5,7 +5,7 @@ var compactOverrides = require('./override-compactor'); 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'], @@ -99,7 +99,7 @@ function _optimize(properties, mergeAdjacent, aggressiveMerging, validator) { 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: diff --git a/lib/properties/override-compactor.js b/lib/properties/override-compactor.js index 2efb8293..89180b4f 100644 --- a/lib/properties/override-compactor.js +++ b/lib/properties/override-compactor.js @@ -7,7 +7,7 @@ var restoreFromOptimizing = require('./restore-from-optimizing'); 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'); @@ -107,7 +107,7 @@ function lengthOf(property) { 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) { diff --git a/lib/stringifier/simple.js b/lib/stringifier/simple.js deleted file mode 100644 index b3a497ca..00000000 --- a/lib/stringifier/simple.js +++ /dev/null @@ -1,22 +0,0 @@ -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; diff --git a/lib/stringifier/helpers.js b/lib/writer/helpers.js similarity index 100% rename from lib/stringifier/helpers.js rename to lib/writer/helpers.js diff --git a/lib/stringifier/one-time.js b/lib/writer/one-time.js similarity index 100% rename from lib/stringifier/one-time.js rename to lib/writer/one-time.js diff --git a/lib/writer/simple.js b/lib/writer/simple.js new file mode 100644 index 00000000..7b3ffbd0 --- /dev/null +++ b/lib/writer/simple.js @@ -0,0 +1,22 @@ +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; diff --git a/lib/stringifier/source-maps.js b/lib/writer/source-maps.js similarity index 55% rename from lib/stringifier/source-maps.js rename to lib/writer/source-maps.js index 14de1804..094efd95 100644 --- a/lib/stringifier/source-maps.js +++ b/lib/writer/source-maps.js @@ -6,33 +6,33 @@ var isRemoteResource = require('../utils/is-remote-resource'); 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]; @@ -43,10 +43,10 @@ function trackMapping(mapping, stringifyContext) { 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: { @@ -55,13 +55,13 @@ function trackMapping(mapping, stringifyContext) { } }); - 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, @@ -73,12 +73,12 @@ function stringify(tokens, context) { 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;