lib/liquid/tokenizer.rb in liquid-4.0.4 vs lib/liquid/tokenizer.rb in liquid-5.0.0

- old
+ new

@@ -1,30 +1,38 @@ +# frozen_string_literal: true + module Liquid class Tokenizer - attr_reader :line_number + attr_reader :line_number, :for_liquid_tag - def initialize(source, line_numbers = false) - @source = source - @line_number = line_numbers ? 1 : nil - @tokens = tokenize + def initialize(source, line_numbers = false, line_number: nil, for_liquid_tag: false) + @source = source + @line_number = line_number || (line_numbers ? 1 : nil) + @for_liquid_tag = for_liquid_tag + @tokens = tokenize end def shift - token = @tokens.shift - @line_number += token.count("\n") if @line_number && token + (token = @tokens.shift) || return + + if @line_number + @line_number += @for_liquid_tag ? 1 : token.count("\n") + end + token end private def tokenize - @source = @source.source if @source.respond_to?(:source) return [] if @source.to_s.empty? + return @source.split("\n") if @for_liquid_tag + tokens = @source.split(TemplateParser) # removes the rogue empty element at the beginning of the array - tokens.shift if tokens[0] && tokens[0].empty? + tokens.shift if tokens[0]&.empty? tokens end end end