From 281e3ea9c8e6cc46e3b6b5d8851bb62d874cd4d7 Mon Sep 17 00:00:00 2001 From: Michael Green Date: Tue, 8 May 2012 16:27:50 -0700 Subject: [PATCH] add interpolate once flag to regexes that never change --- lib/liquid.rb | 18 +++++++++--------- lib/liquid/block.rb | 8 ++++---- lib/liquid/htmltags.rb | 2 +- lib/liquid/tags/assign.rb | 2 +- lib/liquid/tags/case.rb | 4 ++-- lib/liquid/tags/cycle.rb | 8 ++++---- lib/liquid/tags/for.rb | 2 +- lib/liquid/tags/if.rb | 4 ++-- lib/liquid/tags/include.rb | 4 ++-- lib/liquid/variable.rb | 8 ++++---- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/liquid.rb b/lib/liquid.rb index 3be44ab..3a30a69 100644 --- a/lib/liquid.rb +++ b/lib/liquid.rb @@ -32,17 +32,17 @@ module Liquid VariableEnd = /\}\}/ VariableIncompleteEnd = /\}\}?/ QuotedString = /"[^"]*"|'[^']*'/ - QuotedFragment = /#{QuotedString}|(?:[^\s,\|'"]|#{QuotedString})+/ + QuotedFragment = /#{QuotedString}|(?:[^\s,\|'"]|#{QuotedString})+/o StrictQuotedFragment = /"[^"]+"|'[^']+'|[^\s|:,]+/ - FirstFilterArgument = /#{FilterArgumentSeparator}(?:#{StrictQuotedFragment})/ - OtherFilterArgument = /#{ArgumentSeparator}(?:#{StrictQuotedFragment})/ - SpacelessFilter = /^(?:'[^']+'|"[^"]+"|[^'"])*#{FilterSeparator}(?:#{StrictQuotedFragment})(?:#{FirstFilterArgument}(?:#{OtherFilterArgument})*)?/ - Expression = /(?:#{QuotedFragment}(?:#{SpacelessFilter})*)/ - TagAttributes = /(\w+)\s*\:\s*(#{QuotedFragment})/ + FirstFilterArgument = /#{FilterArgumentSeparator}(?:#{StrictQuotedFragment})/o + OtherFilterArgument = /#{ArgumentSeparator}(?:#{StrictQuotedFragment})/o + SpacelessFilter = /^(?:'[^']+'|"[^"]+"|[^'"])*#{FilterSeparator}(?:#{StrictQuotedFragment})(?:#{FirstFilterArgument}(?:#{OtherFilterArgument})*)?/o + Expression = /(?:#{QuotedFragment}(?:#{SpacelessFilter})*)/o + TagAttributes = /(\w+)\s*\:\s*(#{QuotedFragment})/o AnyStartingTag = /\{\{|\{\%/ - PartialTemplateParser = /#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableIncompleteEnd}/ - TemplateParser = /(#{PartialTemplateParser}|#{AnyStartingTag})/ - VariableParser = /\[[^\]]+\]|#{VariableSegment}+\??/ + PartialTemplateParser = /#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableIncompleteEnd}/o + TemplateParser = /(#{PartialTemplateParser}|#{AnyStartingTag})/o + VariableParser = /\[[^\]]+\]|#{VariableSegment}+\??/o end require 'liquid/drop' diff --git a/lib/liquid/block.rb b/lib/liquid/block.rb index c96b94c..a98874f 100644 --- a/lib/liquid/block.rb +++ b/lib/liquid/block.rb @@ -1,10 +1,10 @@ module Liquid class Block < Tag - IsTag = /^#{TagStart}/ - IsVariable = /^#{VariableStart}/ - FullToken = /^#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}$/ - ContentOfVariable = /^#{VariableStart}(.*)#{VariableEnd}$/ + IsTag = /^#{TagStart}/o + IsVariable = /^#{VariableStart}/o + FullToken = /^#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}$/o + ContentOfVariable = /^#{VariableStart}(.*)#{VariableEnd}$/o def parse(tokens) @nodelist ||= [] diff --git a/lib/liquid/htmltags.rb b/lib/liquid/htmltags.rb index dfb8c76..16efb71 100644 --- a/lib/liquid/htmltags.rb +++ b/lib/liquid/htmltags.rb @@ -1,6 +1,6 @@ module Liquid class TableRow < Block - Syntax = /(\w+)\s+in\s+(#{QuotedFragment}+)/ + Syntax = /(\w+)\s+in\s+(#{QuotedFragment}+)/o def initialize(tag_name, markup, tokens) if markup =~ Syntax diff --git a/lib/liquid/tags/assign.rb b/lib/liquid/tags/assign.rb index 1ce66b4..3540b76 100644 --- a/lib/liquid/tags/assign.rb +++ b/lib/liquid/tags/assign.rb @@ -9,7 +9,7 @@ module Liquid # {{ foo }} # class Assign < Tag - Syntax = /(#{VariableSignature}+)\s*=\s*(.*)\s*/ + Syntax = /(#{VariableSignature}+)\s*=\s*(.*)\s*/o def initialize(tag_name, markup, tokens) if markup =~ Syntax diff --git a/lib/liquid/tags/case.rb b/lib/liquid/tags/case.rb index 9597059..4e2fb2c 100644 --- a/lib/liquid/tags/case.rb +++ b/lib/liquid/tags/case.rb @@ -1,7 +1,7 @@ module Liquid class Case < Block - Syntax = /(#{QuotedFragment})/ - WhenSyntax = /(#{QuotedFragment})(?:(?:\s+or\s+|\s*\,\s*)(#{QuotedFragment}.*))?/ + Syntax = /(#{QuotedFragment})/o + WhenSyntax = /(#{QuotedFragment})(?:(?:\s+or\s+|\s*\,\s*)(#{QuotedFragment}.*))?/o def initialize(tag_name, markup, tokens) @blocks = [] diff --git a/lib/liquid/tags/cycle.rb b/lib/liquid/tags/cycle.rb index 1df692e..9b3f342 100644 --- a/lib/liquid/tags/cycle.rb +++ b/lib/liquid/tags/cycle.rb @@ -13,8 +13,8 @@ module Liquid #
Item five
# class Cycle < Tag - SimpleSyntax = /^#{QuotedFragment}+/ - NamedSyntax = /^(#{QuotedFragment})\s*\:\s*(.*)/ + SimpleSyntax = /^#{QuotedFragment}+/o + NamedSyntax = /^(#{QuotedFragment})\s*\:\s*(.*)/o def initialize(tag_name, markup, tokens) case markup @@ -48,7 +48,7 @@ module Liquid def variables_from_string(markup) markup.split(',').collect do |var| - var =~ /\s*(#{QuotedFragment})\s*/ + var =~ /\s*(#{QuotedFragment})\s*/o $1 ? $1 : nil end.compact end @@ -56,4 +56,4 @@ module Liquid end Template.register_tag('cycle', Cycle) -end \ No newline at end of file +end diff --git a/lib/liquid/tags/for.rb b/lib/liquid/tags/for.rb index 214253a..5a288ef 100644 --- a/lib/liquid/tags/for.rb +++ b/lib/liquid/tags/for.rb @@ -44,7 +44,7 @@ module Liquid # forloop.last:: Returns true if the item is the last item. # class For < Block - Syntax = /(\w+)\s+in\s+(#{QuotedFragment}+)\s*(reversed)?/ + Syntax = /(\w+)\s+in\s+(#{QuotedFragment}+)\s*(reversed)?/o def initialize(tag_name, markup, tokens) if markup =~ Syntax diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb index 3b77732..7f23dde 100644 --- a/lib/liquid/tags/if.rb +++ b/lib/liquid/tags/if.rb @@ -13,8 +13,8 @@ module Liquid # class If < Block SyntaxHelp = "Syntax Error in tag 'if' - Valid syntax: if [expression]" - Syntax = /(#{QuotedFragment})\s*([=!<>a-z_]+)?\s*(#{QuotedFragment})?/ - ExpressionsAndOperators = /(?:\b(?:\s?and\s?|\s?or\s?)\b|(?:\s*(?!\b(?:\s?and\s?|\s?or\s?)\b)(?:#{QuotedFragment}|\S+)\s*)+)/ + Syntax = /(#{QuotedFragment})\s*([=!<>a-z_]+)?\s*(#{QuotedFragment})?/o + ExpressionsAndOperators = /(?:\b(?:\s?and\s?|\s?or\s?)\b|(?:\s*(?!\b(?:\s?and\s?|\s?or\s?)\b)(?:#{QuotedFragment}|\S+)\s*)+)/o def initialize(tag_name, markup, tokens) @blocks = [] diff --git a/lib/liquid/tags/include.rb b/lib/liquid/tags/include.rb index 9ea7323..f7400ab 100644 --- a/lib/liquid/tags/include.rb +++ b/lib/liquid/tags/include.rb @@ -1,6 +1,6 @@ module Liquid class Include < Tag - Syntax = /(#{QuotedFragment}+)(\s+(?:with|for)\s+(#{QuotedFragment}+))?/ + Syntax = /(#{QuotedFragment}+)(\s+(?:with|for)\s+(#{QuotedFragment}+))?/o def initialize(tag_name, markup, tokens) if markup =~ Syntax @@ -62,4 +62,4 @@ module Liquid end Template.register_tag('include', Include) -end \ No newline at end of file +end diff --git a/lib/liquid/variable.rb b/lib/liquid/variable.rb index e9ef63e..837c588 100644 --- a/lib/liquid/variable.rb +++ b/lib/liquid/variable.rb @@ -11,21 +11,21 @@ module Liquid # {{ user | link }} # class Variable - FilterParser = /(?:#{FilterSeparator}|(?:\s*(?!(?:#{FilterSeparator}))(?:#{QuotedFragment}|\S+)\s*)+)/ + FilterParser = /(?:#{FilterSeparator}|(?:\s*(?!(?:#{FilterSeparator}))(?:#{QuotedFragment}|\S+)\s*)+)/o attr_accessor :filters, :name def initialize(markup) @markup = markup @name = nil @filters = [] - if match = markup.match(/\s*(#{QuotedFragment})(.*)/) + if match = markup.match(/\s*(#{QuotedFragment})(.*)/o) @name = match[1] - if match[2].match(/#{FilterSeparator}\s*(.*)/) + if match[2].match(/#{FilterSeparator}\s*(.*)/o) filters = Regexp.last_match(1).scan(FilterParser) filters.each do |f| if matches = f.match(/\s*(\w+)/) filtername = matches[1] - filterargs = f.scan(/(?:#{FilterArgumentSeparator}|#{ArgumentSeparator})\s*(#{QuotedFragment})/).flatten + filterargs = f.scan(/(?:#{FilterArgumentSeparator}|#{ArgumentSeparator})\s*(#{QuotedFragment})/o).flatten @filters << [filtername.to_sym, filterargs] end end