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(',') + ')' :
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];
}
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');
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');