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