class Reline::Config

def read_lines(lines, file = nil)

def read_lines(lines, file = nil)
  if not lines.empty? and lines.first.encoding != Reline.encoding_system_needs
    begin
      lines = lines.map do |l|
        l.encode(Reline.encoding_system_needs)
      rescue Encoding::UndefinedConversionError
        mes = "The inputrc encoded in #{lines.first.encoding.name} can't be converted to the locale #{Reline.encoding_system_needs.name}."
        raise Reline::ConfigEncodingConversionError.new(mes)
      end
    end
  end
  conditions = [@skip_section, @if_stack]
  @skip_section = nil
  @if_stack = []
  lines.each_with_index do |line, no|
    next if line.match(/\A\s*#/)
    no += 1
    line = line.chomp.lstrip
    if line.start_with?('$')
      handle_directive(line[1..-1], file, no)
      next
    end
    next if @skip_section
    case line
    when /^set +([^ ]+) +([^ ]+)/i
      var, value = $1.downcase, $2
      bind_variable(var, value)
      next
    when /\s*("#{KEYSEQ_PATTERN}+")\s*:\s*(.*)\s*$/o
      key, func_name = $1, $2
      keystroke, func = bind_key(key, func_name)
      next unless keystroke
      @additional_key_bindings[@keymap_label][@keymap_prefix + keystroke] = func
    end
  end
  unless @if_stack.empty?
    raise InvalidInputrc, "#{file}:#{@if_stack.last[1]}: unclosed if"
  end
ensure
  @skip_section, @if_stack = conditions
end