From 30f7f8a3f2264efbe55e46227c0165af7d782a8f Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 2 Sep 2014 13:42:59 +0400 Subject: [PATCH] add es6 template string highlighting to javascript mode --- lib/ace/edit_session/bracket_match.js | 2 ++ lib/ace/mode/javascript_highlight_rules.js | 35 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/ace/edit_session/bracket_match.js b/lib/ace/edit_session/bracket_match.js index 825f6924..064ee3dc 100644 --- a/lib/ace/edit_session/bracket_match.js +++ b/lib/ace/edit_session/bracket_match.js @@ -117,6 +117,7 @@ function BracketMatch() { typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") + .replace(/\b(?:end|start|begin)\b/, "") + ")+" ); } @@ -173,6 +174,7 @@ function BracketMatch() { typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") + .replace(/\b(?:end|start|begin)\b/, "") + ")+" ); } diff --git a/lib/ace/mode/javascript_highlight_rules.js b/lib/ace/mode/javascript_highlight_rules.js index b5393b13..252a4f3b 100644 --- a/lib/ace/mode/javascript_highlight_rules.js +++ b/lib/ace/mode/javascript_highlight_rules.js @@ -193,6 +193,39 @@ var JavaScriptHighlightRules = function() { token : "punctuation.operator", regex : /\?|\:|\,|\;|\./, next : "start" + }, { + regex: "[{}]", onMatch: function(val, state, stack) { + console.log(val, state, stack) + this.next = ""; + if (val == "{" && stack.length) { + stack.unshift("start", state); + return "paren"; + } + if (val == "}" && stack.length) { + stack.shift(); + this.next = stack.shift(); + if (this.next.indexOf("string") != -1) + return "paren.quasi.end"; + } + return "paren"; + } + }, { + token : "string.quasi.start", + regex : /`/, + push : [{ + token : "constant.language.escape", + regex : escapedRe + }, { + token : "paren.quasi.start", + regex : /\${/, + push : "start" + }, { + token : "string.quasi.end", + regex : /`/, + next : "pop" + }, { + defaultToken: "string.quasi" + }] }, { token : "paren.lparen", regex : /[\[({]/, @@ -357,6 +390,8 @@ var JavaScriptHighlightRules = function() { this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); + + this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules);