class ComponentEmbeddedRuby::Lexer::StringReader

Attributes

can_interpolate[R]
input_reader[R]
quote_type[R]

Public Class Methods

new(input_reader, quote_type:, can_interpolate:) click to toggle source
# File lib/component_embedded_ruby/lexer/string_reader.rb, line 6
def initialize(input_reader, quote_type:, can_interpolate:)
  @input_reader = input_reader
  @quote_type = quote_type
  @can_interpolate = can_interpolate
end

Public Instance Methods

read_until_closing_quote() click to toggle source
# File lib/component_embedded_ruby/lexer/string_reader.rb, line 12
def read_until_closing_quote
  string = ""

  previous_char = nil
  current_char = input_reader.current_char

  loop do
    input_reader.next
    previous_char = current_char
    current_char = input_reader.current_char

    string += current_char
    break if current_char == quote_type && string[-1] != "\\"

    if can_interpolate && string[-2..-1] == '#{' && string[-3] != "\\"
      string += RubyCodeReader.new(input_reader).read_until_closing_tag
      string += "}"
    end
  end

  string
end