require "csv" # :nodoc: class CSV::Lexer::StringBased < CSV::Lexer def initialize(string : String, separator : Char = DEFAULT_SEPARATOR, quote_char : Char = DEFAULT_QUOTE_CHAR) super(separator, quote_char) @reader = Char::Reader.new(string) if @reader.current_char == '\n' @line_number += 1 @column_number = 0 end end def rewind : Nil super @reader.pos = 0 if @reader.current_char == '\n' @line_number += 1 @column_number = 0 end end private def consume_unquoted_cell start_pos = @reader.pos end_pos = start_pos while true case next_char when @separator end_pos = @reader.pos check_last_empty_column break when '\r', '\n', '\0' end_pos = @reader.pos break when @quote_char raise "Unexpected quote" end end @reader.string.byte_slice(start_pos, end_pos - start_pos) end private def next_char_no_column_increment @reader.next_char end private def current_char @reader.current_char end end