From 39dbcb15b77f86a522a419af6f3f747b574a4095 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Tue, 7 Aug 2012 12:07:24 -0600 Subject: [PATCH] Include end pattern in compiled regexes. Also Compile regexes for pushed rules. --- src/app/text-mate-grammar.coffee | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/app/text-mate-grammar.coffee b/src/app/text-mate-grammar.coffee index ef366c220..c572395cf 100644 --- a/src/app/text-mate-grammar.coffee +++ b/src/app/text-mate-grammar.coffee @@ -79,10 +79,14 @@ class Rule currentCaptureIndex += 1 + regex.getCaptureCount() @regex = new OnigRegExp('(' + regexComponents.join(')|(') + ')') + pattern.compileRegex() for pattern in @patterns + getRegexPatternPairs: (included=[]) -> return [] if _.include(included, this) included.push(this) regexPatternPairs = [] + + regexPatternPairs.push(@endPattern.getRegexPatternPairs()...) if @endPattern for pattern in @patterns regexPatternPairs.push(pattern.getRegexPatternPairs(included)...) regexPatternPairs @@ -137,10 +141,15 @@ class Pattern getRegexPatternPairs: (included) -> if @include - @grammar.ruleForInclude(@include).getRegexPatternPairs(included) + rule = @grammar.ruleForInclude(@include) + console.log "Could not find rule for include #{@include} in #{@grammar.name} grammar" unless rule + rule?.getRegexPatternPairs(included) ? [] else [[@regex, this]] + compileRegex: -> + @pushRule?.compileRegex() + getNextMatch: (line, position) -> if @include rule = @grammar.ruleForInclude(@include) @@ -172,7 +181,7 @@ class Pattern previousCaptureEndPosition = 0 if tree.captures for capture in tree.captures - continue unless capture.text.length + continue unless capture.text.length # TODO: This can be removed since the tree will have no empty captures currentCaptureStartPosition = capture.position - tree.position if previousCaptureEndPosition < currentCaptureStartPosition