diff --git a/lib/ace/mode/ruby_highlight_rules.js b/lib/ace/mode/ruby_highlight_rules.js index 44ff305f..13dcd1b2 100644 --- a/lib/ace/mode/ruby_highlight_rules.js +++ b/lib/ace/mode/ruby_highlight_rules.js @@ -188,11 +188,13 @@ var RubyHighlightRules = function() { rules: { heredoc: [{ onMatch: function(value, currentState, stack) { - if (value == stack[1]) { + if (value === stack[1]) { stack.shift(); stack.shift(); + this.next = stack[0] || "start"; return "support.class"; } + this.next = ""; return "string"; }, regex: ".*$", @@ -203,17 +205,27 @@ var RubyHighlightRules = function() { regex: "^ +" }, { onMatch: function(value, currentState, stack) { - if (value == stack[1]) { + if (value === stack[1]) { stack.shift(); stack.shift(); + this.next = stack[0] || "start"; return "support.class"; } + this.next = ""; return "string"; }, regex: ".*$", next: "start" }] } + }, { + regex : "$", + token : "empty", + next : function(currentState, stack) { + if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc") + return stack[0]; + return currentState; + } }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" diff --git a/lib/ace/tokenizer.js b/lib/ace/tokenizer.js index 5a9aaad4..9a54a08c 100644 --- a/lib/ace/tokenizer.js +++ b/lib/ace/tokenizer.js @@ -320,7 +320,11 @@ var Tokenizer = function(rules) { if (token.type) tokens.push(token); - + + if (stack.length > 1) { + if (stack[0] !== currentState) + stack.unshift(currentState); + } return { tokens : tokens, state : stack.length ? stack : currentState