Extract tokenize logic from Template to a RubyTokenizer

This commit is contained in:
Gaurav Chande
2015-06-04 04:39:30 +00:00
parent 3dd6433e2f
commit 8b98f92c7f
4 changed files with 46 additions and 26 deletions
+38
View File
@@ -0,0 +1,38 @@
module Liquid
class Tokenizer
attr_reader :tokens
def initialize(source, line_numbers = false)
@source, @line_numbers = source, line_numbers
@tokens = tokenize
end
def shift
@tokens.shift
end
private
def tokenize
@source = @source.source if @source.respond_to?(:source)
return [] if @source.to_s.empty?
tokens = @source.split(TemplateParser)
tokens = @line_numbers ? calculate_line_numbers(tokens) : tokens
# removes the rogue empty element at the beginning of the array
tokens.shift if tokens[0] && tokens[0].empty?
tokens
end
def calculate_line_numbers(tokens)
current_line = 1
tokens.map do |token|
Token.new(token, current_line).tap do
current_line += token.count("\n")
end
end
end
end
end