run(urlsProcessor, 'escape');
run(freeTextProcessor, 'escape');
- function restoreEscapes(data) {
- data = freeTextProcessor.restore(data);
+ function restoreEscapes(data, prefixContent) {
+ data = freeTextProcessor.restore(data, prefixContent);
data = urlsProcessor.restore(data);
data = options.rebase ? rebaseUrls(data, context) : data;
data = expressionsProcessor.restore(data);
var value = fromString ? element : element[0];
if (value.indexOf('_') > -1)
- value = context.restore(value);
+ value = context.restore(value, prefixContentFrom(context.output));
track(value, fromString ? null : element, context);
context.output.push(value);
}
+function prefixContentFrom(values) {
+ var content = [];
+
+ for (var i = values.length - 1; i >= 0; i--) {
+ var value = values[i];
+ content.unshift(value);
+
+ if (value == '{' || value == ';')
+ break;
+ }
+
+ return content.join('');
+}
+
function track(value, element, context) {
if (element)
trackAllMappings(element, context);
});
};
-function normalize(text, data, cursor) {
- // FIXME: this is a hack
- var lastSemicolon = data.lastIndexOf(';', cursor);
- var lastOpenBrace = data.lastIndexOf('{', cursor);
+function normalize(text, data, prefixContext, cursor) {
+ // FIXME: this is even a bigger hack now - see #407
+ var searchIn = data;
+ if (prefixContext) {
+ searchIn = prefixContext + data.substring(0, data.indexOf('__ESCAPED_FREE_TEXT_CLEAN_CSS'));
+ cursor = searchIn.length;
+ }
+
+ var lastSemicolon = searchIn.lastIndexOf(';', cursor);
+ var lastOpenBrace = searchIn.lastIndexOf('{', cursor);
var lastOne = 0;
if (lastSemicolon > -1 && lastOpenBrace > -1)
else
lastOne = lastSemicolon;
- var context = data.substring(lastOne + 1, cursor);
+ var context = searchIn.substring(lastOne + 1, cursor);
if (/\[[\w\d\-]+[\*\|\~\^\$]?=$/.test(context)) {
text = text
return text;
}
-FreeTextProcessor.prototype.restore = function (data) {
+FreeTextProcessor.prototype.restore = function (data, prefixContext) {
var tempData = [];
var cursor = 0;
break;
tempData.push(data.substring(cursor, nextMatch.start));
- var text = normalize(this.matches.restore(nextMatch.match), data, nextMatch.start);
+ var text = normalize(this.matches.restore(nextMatch.match), data, prefixContext, nextMatch.start);
tempData.push(text);
cursor = nextMatch.end;