diff --git a/lib/liquid/block.rb b/lib/liquid/block.rb index e0ad332..e6dac4d 100644 --- a/lib/liquid/block.rb +++ b/lib/liquid/block.rb @@ -28,8 +28,8 @@ module Liquid @body.nodelist end - def unknown_tag(tag, _params, _tokens) - Block.raise_unknown_tag(tag, block_name, block_delimiter, parse_context) + def unknown_tag(tag_name, _markup, _tokenizer) + Block.raise_unknown_tag(tag_name, block_name, block_delimiter, parse_context) end # @api private diff --git a/lib/liquid/document.rb b/lib/liquid/document.rb index e0818ec..2e47ffb 100644 --- a/lib/liquid/document.rb +++ b/lib/liquid/document.rb @@ -19,16 +19,15 @@ module Liquid @body.nodelist end - def parse(tokens, parse_context) - @body.parse(tokens, parse_context) do |end_tag_name, _end_tag_params| - unknown_tag(end_tag_name, parse_context) if end_tag_name + def parse(tokenizer, parse_context) + while parse_body(tokenizer) end rescue SyntaxError => e e.line_number ||= parse_context.line_number raise end - def unknown_tag(tag, parse_context) + def unknown_tag(tag, _markup, _tokenizer) case tag when 'else', 'end' raise SyntaxError, parse_context.locale.t("errors.syntax.unexpected_outer_tag", tag: tag) @@ -50,5 +49,16 @@ module Liquid def new_body parse_context.new_block_body end + + def parse_body(tokenizer) + @body.parse(tokenizer, parse_context) do |unknown_tag_name, unknown_tag_markup| + if unknown_tag_name + unknown_tag(unknown_tag_name, unknown_tag_markup, tokenizer) + true + else + false + end + end + end end end