diff --git a/lib/ace/mode/html_highlight_rules.js b/lib/ace/mode/html_highlight_rules.js index 72099723..8c1449c0 100644 --- a/lib/ace/mode/html_highlight_rules.js +++ b/lib/ace/mode/html_highlight_rules.js @@ -46,7 +46,6 @@ var HtmlHighlightRules = function() { // regexp must not have capturing parentheses // regexps are ordered -> the first match is used - function string(state) { return [ { @@ -80,6 +79,36 @@ var HtmlHighlightRules = function() { regex : '.+' }] } + + function tag(states, name, nextState) { + states[name] = [{ + token : "text", + regex : "\\s+" + }, { + token : "meta.tag", + regex : "[-_a-zA-Z0-9:]+", + next : name + "-attribute-list" + }, { + token: "empty", + regex: "", + next : name + "-attribute-list" + }]; + + states[name + "-attribute-list"] = [{ + token : "text", + regex : ">", + next : nextState + }, { + token : "entity.other.attribute-name", + regex : "[-_a-zA-Z0-9:]+" + }, { + token : "constant.numeric", // float + regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + }, { + token : "text", + regex : "\\s+" + }].concat(string("attribute-list")); + }; this.$rules = { start : [ { @@ -115,42 +144,6 @@ var HtmlHighlightRules = function() { regex : "[^<]+" } ], - script : [ { - token : "text", - regex : ">", - next : "js-start" - }, { - token : "keyword", - regex : "[-_a-zA-Z0-9:]+" - }, { - token : "text", - regex : "\\s+" - }].concat(string("script")), - - css : [ { - token : "text", - regex : ">", - next : "css-start" - }, { - token : "keyword", - regex : "[-_a-zA-Z0-9:]+" - }, { - token : "text", - regex : "\\s+" - }].concat(string("style")), - - tag : [ { - token : "text", - regex : ">", - next : "start" - }, { - token : "keyword", - regex : "[-_a-zA-Z0-9:]+" - }, { - token : "text", - regex : "\\s+" - }].concat(string("tag")), - "style-qstring": multiLineString("'", "style"), "style-qqstring": multiLineString('"', "style"), "script-qstring": multiLineString("'", "script"), @@ -183,6 +176,10 @@ var HtmlHighlightRules = function() { } ] }; + tag(this.$rules, "tag", "start"); + tag(this.$rules, "css", "css-start"); + tag(this.$rules, "script", "js-start"); + this.embedRules(JavaScriptHighlightRules, "js-", [{ token: "comment", regex: "\\/\\/.*(?=<\\/script>)",