В примере с усами есть специальная обработка, потому что он должен обрабатывать 2-символьные разделители (например, в '{{'
и '}}'
есть два символа). Я никогда раньше не использовал CodeMirror, так что это всего лишь предположение, но попробуйте что-то вроде этого:
CodeMirror.defineMode("mymode", function(config, parserConfig) {
var mymodeOverlay = {
token: function(stream, state) {
if (stream.match("{")) {
while ((ch = stream.next()) != null)
if (ch == "}") break;
return "mymode";
}
while (stream.next() != null && !stream.match("{", false)) {}
return null;
}
};
return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mymodeOverlay);
});
Редактировать
работает (хотя подсвечивает слова тоже строчными буквами)
Это должно работать:
token: function(stream, state) {
if (stream.match("{")) {
while ((ch = stream.next()) != null && ch === ch.toUpperCase())
if (ch == "}") break;
return "mymode";
}
while (stream.next() != null && !stream.match("{", false)) {}
return null;
}