diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index b93d4a6..9efa214 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -15,37 +15,32 @@ module Liquid def parse(tokenizer, parse_context) parse_context.line_number = tokenizer.line_number while token = tokenizer.shift - begin - unless token.empty? - case - when token.start_with?(TAGSTART) - if token =~ FullToken - tag_name = $1 - markup = $2 - # fetch the tag from registered blocks - if tag = registered_tags[tag_name] - new_tag = tag.parse(tag_name, markup, tokenizer, parse_context) - @blank &&= new_tag.blank? - @nodelist << new_tag - else - # end parsing if we reach an unknown tag and let the caller decide - # determine how to proceed - return yield tag_name, markup - end + unless token.empty? + case + when token.start_with?(TAGSTART) + if token =~ FullToken + tag_name = $1 + markup = $2 + # fetch the tag from registered blocks + if tag = registered_tags[tag_name] + new_tag = tag.parse(tag_name, markup, tokenizer, parse_context) + @blank &&= new_tag.blank? + @nodelist << new_tag else - raise_missing_tag_terminator(token, parse_context) + # end parsing if we reach an unknown tag and let the caller decide + # determine how to proceed + return yield tag_name, markup end - when token.start_with?(VARSTART) - @nodelist << create_variable(token, parse_context) - @blank = false else - @nodelist << token - @blank &&= !!(token =~ /\A\s*\z/) + raise_missing_tag_terminator(token, parse_context) end + when token.start_with?(VARSTART) + @nodelist << create_variable(token, parse_context) + @blank = false + else + @nodelist << token + @blank &&= !!(token =~ /\A\s*\z/) end - rescue SyntaxError => e - e.line_number ||= parse_context.line_number - raise end parse_context.line_number = tokenizer.line_number end diff --git a/lib/liquid/parser_switching.rb b/lib/liquid/parser_switching.rb index 631a9a5..363e93e 100644 --- a/lib/liquid/parser_switching.rb +++ b/lib/liquid/parser_switching.rb @@ -8,7 +8,6 @@ module Liquid begin return strict_parse_with_error_context(markup) rescue SyntaxError => e - e.line_number = line_number @options.warnings << e return lax_parse(markup) end @@ -20,6 +19,7 @@ module Liquid def strict_parse_with_error_context(markup) strict_parse(markup) rescue SyntaxError => e + e.line_number = line_number e.markup_context = markup_context(markup) raise e end diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index 07d56b2..57aa291 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -120,6 +120,9 @@ module Liquid @root = Document.parse(tokenize(source), parse_context) @warnings = parse_context.warnings self + rescue SyntaxError => e + e.line_number ||= parse_context.line_number + raise end def registers