| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | var placeholderBrace = '__';function EscapeStore(placeholderRoot) {  this.placeholderRoot = 'ESCAPED_' + placeholderRoot + '_CLEAN_CSS';  this.placeholderToData = {};  this.dataToPlaceholder = {};  this.count = 0;  this.restoreMatcher = new RegExp(this.placeholderRoot + '(\\d+)');}EscapeStore.prototype._nextPlaceholder = function (metadata) {  return {    index: this.count,    value: placeholderBrace + this.placeholderRoot + this.count++ + metadata + placeholderBrace  };};EscapeStore.prototype.store = function (data, metadata) {  var encodedMetadata = metadata ?    '(' + metadata.join(',') + ')' :    '';  var placeholder = this.dataToPlaceholder[data];  if (!placeholder) {    var nextPlaceholder = this._nextPlaceholder(encodedMetadata);    placeholder = nextPlaceholder.value;    this.placeholderToData[nextPlaceholder.index] = data;    this.dataToPlaceholder[data] = nextPlaceholder.value;  }  if (metadata)    placeholder = placeholder.replace(/\([^\)]+\)/, encodedMetadata);  return placeholder;};EscapeStore.prototype.nextMatch = function (data, cursor) {  var next = {};  next.start = data.indexOf(this.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;};EscapeStore.prototype.restore = function (placeholder) {  var index = this.restoreMatcher.exec(placeholder)[1];  return this.placeholderToData[index];};module.exports = EscapeStore;
 |