Add rigid_parse method to include

This commit is contained in:
Charles-P. Clermont
2025-10-27 16:33:31 +01:00
committed by Guilherme Carreiro
parent e58ac0e75b
commit 6a9e46dd19
2 changed files with 81 additions and 18 deletions
+55 -18
View File
@@ -27,24 +27,7 @@ module Liquid
def initialize(tag_name, markup, options)
super
if markup =~ SYNTAX
template_name = Regexp.last_match(1)
variable_name = Regexp.last_match(3)
@alias_name = Regexp.last_match(5)
@variable_name_expr = variable_name ? parse_expression(variable_name) : nil
@template_name_expr = parse_expression(template_name)
@attributes = {}
markup.scan(TagAttributes) do |key, value|
@attributes[key] = parse_expression(value)
end
else
raise SyntaxError, options[:locale].t("errors.syntax.include")
end
parse_with_selected_parser(markup)
end
def parse(_tokens)
@@ -101,6 +84,60 @@ module Liquid
alias_method :parse_context, :options
private :parse_context
def rigid_parse(markup)
p = @parse_context.new_parser(markup)
template_name = p.expression
with_or_for = p.id?("for") || p.id?("with") || nil
if with_or_for
variable_name = p.expression
end
alias_name = nil
if p.consume?(:as)
alias_name = p.consume(:id)
end
@template_name_expr = parse_expression(template_name)
@variable_name_expr = variable_name ? parse_expression(variable_name) : nil
@alias_name = alias_name
# optional comma
p.consume?(:comma)
@attributes = {}
while p.look(:id)
key = p.consume
p.consume(:colon)
@attributes[key] = parse_expression(p.expression)
p.consume?(:comma) # optional comma
end
end
def strict_parse(markup)
lax_parse(markup)
end
def lax_parse(markup)
if markup =~ SYNTAX
template_name = Regexp.last_match(1)
variable_name = Regexp.last_match(3)
@alias_name = Regexp.last_match(5)
@variable_name_expr = variable_name ? parse_expression(variable_name) : nil
@template_name_expr = parse_expression(template_name)
@attributes = {}
markup.scan(TagAttributes) do |key, value|
@attributes[key] = parse_expression(value)
end
else
raise SyntaxError, options[:locale].t("errors.syntax.include")
end
end
class ParseTreeVisitor < Liquid::ParseTreeVisitor
def children
[