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