| 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;
 
 
  |