diff --git a/src/lib/annotations/annotations.html b/src/lib/annotations/annotations.html
index dcc2fd6a80..a5f3486c07 100644
--- a/src/lib/annotations/annotations.html
+++ b/src/lib/annotations/annotations.html
@@ -101,7 +101,7 @@
'(?:' + ARGUMENTS + '?' + ')' +
'\\)\\s*' + ')';
var BINDING = '(' + IDENT + '\\s*' + ARGUMENT_LIST + '?' + ')'; // Group 3
- var OPEN_BRACKET = '(\\[\\[|{{)' + '\\s*';
+ var OPEN_BRACKET = '(\\[\\[\\\\*|{{\\\\*)' + '\\s*';
var CLOSE_BRACKET = '(?:]]|}})';
var NEGATE = '(?:(!)\\s*)?'; // Group 2
var EXPRESSION = OPEN_BRACKET + NEGATE + BINDING + CLOSE_BRACKET;
@@ -123,31 +123,48 @@
// m[1]: '{{' '[['
// m[2]: '' '!'
// m[3]: 'prop' 'compute(foo,bar)'
+ // Example: "literal1{{\prop}}literal2[[\!compute(foo,bar)]]final"
+ // Regex matches:
+ // Iteration 1: Iteration 2:
+ // m[1]: '{{\' '[[\'
+ // m[2]: '' '!'
+ // m[3]: 'prop' 'compute(foo,bar)'
while ((m = re.exec(text)) !== null) {
// Add literal part
if (m.index > lastIndex) {
parts.push({literal: text.slice(lastIndex, m.index)});
}
- // Add binding part
- // Mode (one-way or two)
- var mode = m[1][0];
- var negate = Boolean(m[2]);
- var value = m[3].trim();
- var customEvent, notifyEvent, colon;
- if (mode == '{' && (colon = value.indexOf('::')) > 0) {
- notifyEvent = value.substring(colon + 2);
- value = value.substring(0, colon);
- customEvent = true;
+ // Check if the expression inside brackets must be treated as literal
+ var treatAsLiteral = m[1][2] === '\\';
+ if (!treatAsLiteral) {
+ // Add binding part
+ // Mode (one-way or two)
+ var mode = m[1][0];
+ var negate = Boolean(m[2]);
+ var value = m[3].trim();
+ var customEvent, notifyEvent, colon;
+ if (mode == '{' && (colon = value.indexOf('::')) > 0) {
+ notifyEvent = value.substring(colon + 2);
+ value = value.substring(0, colon);
+ customEvent = true;
+ }
+ parts.push({
+ compoundIndex: parts.length,
+ value: value,
+ mode: mode,
+ negate: negate,
+ event: notifyEvent,
+ customEvent: customEvent
+ });
+ lastIndex = re.lastIndex;
+ } else {
+ // Add expression as literal
+ var literalExpression = text.slice(m.index, re.lastIndex);
+ // Remove a slash
+ literalExpression = literalExpression.slice(0, 2) + literalExpression.slice(3);
+ parts.push({literal: literalExpression});
+ lastIndex = re.lastIndex;
}
- parts.push({
- compoundIndex: parts.length,
- value: value,
- mode: mode,
- negate: negate,
- event: notifyEvent,
- customEvent: customEvent
- });
- lastIndex = re.lastIndex;
}
// Add a final literal part
if (lastIndex && lastIndex < text.length) {