From 2a5e44eba29fbf1c40ec98ed6840759adc1f43d9 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 9 Sep 2012 17:43:09 +0400 Subject: [PATCH] better highlighting of js regexps --- lib/ace/mode/javascript_highlight_rules.js | 22 ++++++++++++++----- .../mode/javascript_highlight_rules_test.js | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/ace/mode/javascript_highlight_rules.js b/lib/ace/mode/javascript_highlight_rules.js index 8edebde7..bad7e526 100644 --- a/lib/ace/mode/javascript_highlight_rules.js +++ b/lib/ace/mode/javascript_highlight_rules.js @@ -243,6 +243,7 @@ var JavaScriptHighlightRules = function() { ], "regex": [ { + // escapes token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { @@ -251,13 +252,21 @@ var JavaScriptHighlightRules = function() { regex: "/\\w*", next: "start", merge: true + }, { + // invalid operators + token : "invalid", + regex: /\{\d+,?(?:\d+)?}[+*]|[+*^$?][+*]|\?\?/ // |[^$][?] + }, { + // operators + token : "constant.language.escape", + regex: /\(\?[:=!]|\)|\{\d+,?(?:\d+)?}|[+*]\?|[(|)$^+*?]/ }, { token: "string.regexp", - regex: "[^\\\\/\\[]+", + regex: /{|[^\[\\{()$^+*?\/]+/, merge: true }, { - token: "string.regexp.charachterclass", - regex: "\\[", + token: "constant.language.escape", + regex: /\[\^?/, next: "regex_character_class", merge: true }, { @@ -271,13 +280,16 @@ var JavaScriptHighlightRules = function() { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { - token: "string.regexp.charachterclass", + token: "constant.language.escape", regex: "]", next: "regex", merge: true + }, { + token: "constant.language.escape", + regex: "-", }, { token: "string.regexp.charachterclass", - regex: "[^\\\\\\]]+", + regex: /[^\]\-\\]+/, merge: true }, { token: "empty", diff --git a/lib/ace/mode/javascript_highlight_rules_test.js b/lib/ace/mode/javascript_highlight_rules_test.js index 0f2ba006..36647b0f 100644 --- a/lib/ace/mode/javascript_highlight_rules_test.js +++ b/lib/ace/mode/javascript_highlight_rules_test.js @@ -134,7 +134,7 @@ module.exports = { assert.equal("string.regexp", tokens[2].type); var tokens = this.tokenizer.getLineTokens("a = 1 + /2 + 1/b", "start").tokens; - assert.equal(9, tokens.length); + assert.equal(11, tokens.length); assert.equal("string.regexp", tokens[8].type); var tokens = this.tokenizer.getLineTokens("a=/a/ / /a/", "start").tokens;