in translate/src/modules/translationform/utils/editFieldModes.ts [8:80]
token(stream, state) {
const ch = stream.next();
switch (state.at(-1)) {
case 'expression':
switch (ch) {
case '"':
state.push('literal');
return 'quote';
case '{':
state.push('expression');
return 'brace';
case '}':
state.pop();
return 'brace';
default:
stream.eatWhile(/[^"{}]+/);
return 'name';
}
case 'literal':
switch (ch) {
case '"':
state.pop();
return 'quote';
case '{':
state.push('expression');
return 'brace';
// These will mis-highlight actual } or > in literals,
// but that's a rare enough occurrence when balanced
// with the improved editing experience.
case '}':
state.pop();
state.pop();
return 'brace';
case '>':
state.pop();
state.pop();
return 'bracket';
default:
stream.eatWhile(/[^"{}>]+/);
return 'literal';
}
case 'tag':
switch (ch) {
case '"':
state.push('literal');
return 'quote';
case '{':
state.push('expression');
return 'brace';
case '>':
state.pop();
return 'bracket';
default:
stream.eatWhile(/[^"{>]+/);
return 'tagName';
}
default:
switch (ch) {
case '{':
state.push('expression');
return 'brace';
case '<':
state.push('tag');
return 'bracket';
default:
stream.eatWhile(/[^<{]+/);
return 'string';
}
}
},