lib/liquid/block_body.rb in liquid-4.0.0.rc2 vs lib/liquid/block_body.rb in liquid-4.0.0.rc3

- old
+ new

@@ -1,9 +1,9 @@ module Liquid class BlockBody - FullToken = /\A#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}\z/om - ContentOfVariable = /\A#{VariableStart}(.*)#{VariableEnd}\z/om + FullToken = /\A#{TagStart}#{WhitespaceControl}?\s*(\w+)\s*(.*?)#{WhitespaceControl}?#{TagEnd}\z/om + ContentOfVariable = /\A#{VariableStart}#{WhitespaceControl}?(.*?)#{WhitespaceControl}?#{VariableEnd}\z/om TAGSTART = "{%".freeze VARSTART = "{{".freeze attr_reader :nodelist @@ -16,10 +16,11 @@ parse_context.line_number = tokenizer.line_number while token = tokenizer.shift unless token.empty? case when token.start_with?(TAGSTART) + whitespace_handler(token, parse_context) if token =~ FullToken tag_name = $1 markup = $2 # fetch the tag from registered blocks if tag = registered_tags[tag_name] @@ -33,20 +34,35 @@ end else raise_missing_tag_terminator(token, parse_context) end when token.start_with?(VARSTART) + whitespace_handler(token, parse_context) @nodelist << create_variable(token, parse_context) @blank = false else + if parse_context.trim_whitespace + token.lstrip! + end + parse_context.trim_whitespace = false @nodelist << token @blank &&= !!(token =~ /\A\s*\z/) end end parse_context.line_number = tokenizer.line_number end yield nil, nil + end + + def whitespace_handler(token, parse_context) + if token[2] == WhitespaceControl + previous_token = @nodelist.last + if previous_token.is_a? String + previous_token.rstrip! + end + end + parse_context.trim_whitespace = (token[-3] == WhitespaceControl) end def blank? @blank end