From: Jakub Pawlowicz Date: Thu, 18 Sep 2014 09:25:08 +0000 (+0200) Subject: Adds metadata support to EscapeStore. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=73bc96e5ba5928f79aaa035a346eb600835b6371;p=clean-css.git Adds metadata support to EscapeStore. --- diff --git a/lib/text/escape-store.js b/lib/text/escape-store.js index 8c2f07f9..24a38ae8 100644 --- a/lib/text/escape-store.js +++ b/lib/text/escape-store.js @@ -4,23 +4,24 @@ module.exports = function EscapeStore(placeholderRoot) { var placeholderToData = {}; var dataToPlaceholder = {}; var count = 0; - var nextPlaceholder = function() { - return '__' + placeholderRoot + (count++) + '__'; + var nextPlaceholder = function(metadata) { + return '__' + placeholderRoot + (count++) + metadata + '__'; }; - var pattern = '(__' + placeholderRoot + '\\d{1,}__)'; + var pattern = '(__' + placeholderRoot + '\\d{1,}\\(?[^_\\)]*\\)?__)'; return { placeholderPattern: pattern, placeholderRegExp: new RegExp(pattern, 'g'), - store: function(data) { - var placeholder = dataToPlaceholder[data]; - if (!placeholder) { - placeholder = nextPlaceholder(); - placeholderToData[placeholder] = data; - dataToPlaceholder[data] = placeholder; - } + store: function(data, metadata) { + var encodedMetadata = metadata ? + '(' + metadata.join(',') + ')' : + ''; + + var placeholder = nextPlaceholder(encodedMetadata); + placeholderToData[placeholder] = data; + dataToPlaceholder[data] = placeholder; return placeholder; }, diff --git a/test/text/escape-store-test.js b/test/text/escape-store-test.js index 5d66e0aa..9b3de0f2 100644 --- a/test/text/escape-store-test.js +++ b/test/text/escape-store-test.js @@ -4,7 +4,7 @@ var EscapeStore = require('../../lib/text/escape-store'); vows.describe('escape-store') .addBatch({ - 'data': { + 'no metadata': { topic: new EscapeStore('TEST'), store: function (escapeStore) { var placeholder = escapeStore.store('data'); @@ -14,6 +14,26 @@ vows.describe('escape-store') var data = escapeStore.restore('__ESCAPED_TEST_CLEAN_CSS0__'); assert.equal(data, 'data'); } + }, + 'with metadata': { + topic: new EscapeStore('TEST'), + store: function (escapeStore) { + var placeholder = escapeStore.store('data', ['brown', 'fox', 'jumped', 'over']); + assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__'); + }, + restore: function (escapeStore) { + var data = escapeStore.restore('__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__'); + assert.equal(data, 'data'); + } + }, + 'same data with different metadata': { + topic: new EscapeStore('TEST'), + 'store first': function (escapeStore) { + escapeStore.store('data1', [0, 1, 2]); + var placeholder = escapeStore.store('data1', [1, 2, 3]); + + assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS1(1,2,3)__'); + } } }) .export(module);