From 49985ff49b0037460ea6d6ffd836a337eec19dd4 Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Fri, 19 Sep 2014 10:48:12 +0200 Subject: [PATCH] Adds #nextMatch method to EscapeStore. --- lib/text/escape-store.js | 19 +++++++++++++------ test/text/escape-store-test.js | 12 ++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/text/escape-store.js b/lib/text/escape-store.js index 24a38ae8..db7405b4 100644 --- a/lib/text/escape-store.js +++ b/lib/text/escape-store.js @@ -1,19 +1,15 @@ module.exports = function EscapeStore(placeholderRoot) { placeholderRoot = 'ESCAPED_' + placeholderRoot + '_CLEAN_CSS'; + var placeholderBrace = '__'; var placeholderToData = {}; var dataToPlaceholder = {}; var count = 0; var nextPlaceholder = function(metadata) { - return '__' + placeholderRoot + (count++) + metadata + '__'; + return placeholderBrace + placeholderRoot + (count++) + metadata + placeholderBrace; }; - var pattern = '(__' + placeholderRoot + '\\d{1,}\\(?[^_\\)]*\\)?__)'; return { - placeholderPattern: pattern, - - placeholderRegExp: new RegExp(pattern, 'g'), - store: function(data, metadata) { var encodedMetadata = metadata ? '(' + metadata.join(',') + ')' : @@ -26,6 +22,17 @@ module.exports = function EscapeStore(placeholderRoot) { return placeholder; }, + nextMatch: function (data, cursor) { + var next = {}; + + next.start = data.indexOf(placeholderRoot, cursor) - placeholderBrace.length; + next.end = data.indexOf(placeholderBrace, next.start + placeholderBrace.length) + placeholderBrace.length; + if (next.start > -1 && next.end > -1) + next.match = data.substring(next.start, next.end); + + return next; + }, + restore: function(placeholder) { return placeholderToData[placeholder]; } diff --git a/test/text/escape-store-test.js b/test/text/escape-store-test.js index 9b3de0f2..beec42e2 100644 --- a/test/text/escape-store-test.js +++ b/test/text/escape-store-test.js @@ -10,6 +10,12 @@ vows.describe('escape-store') var placeholder = escapeStore.store('data'); assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS0__'); }, + match: function (escapeStore) { + var next = escapeStore.nextMatch('prefix__ESCAPED_TEST_CLEAN_CSS0__suffix'); + assert.equal(next.start, 6); + assert.equal(next.end, 33); + assert.equal(next.match, '__ESCAPED_TEST_CLEAN_CSS0__'); + }, restore: function (escapeStore) { var data = escapeStore.restore('__ESCAPED_TEST_CLEAN_CSS0__'); assert.equal(data, 'data'); @@ -21,6 +27,12 @@ vows.describe('escape-store') var placeholder = escapeStore.store('data', ['brown', 'fox', 'jumped', 'over']); assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__'); }, + match: function (escapeStore) { + var next = escapeStore.nextMatch('prefix__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__suffix'); + assert.equal(next.start, 6); + assert.equal(next.end, 56); + assert.equal(next.match, '__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'); -- 2.34.1