class HTOTConv::Parser::SimpleText

Public Class Methods

option_help() click to toggle source
# File lib/htot_conv/parser/simple_text.rb, line 7
def self.option_help
  {
    :indent => {
      :default => "\t",
      :pat => String,
      :desc => "indent character (default: TAB)",
    },
    :delimiter => {
      :default => nil,
      :pat => String,
      :desc => "separator character of additional data",
    },
    :preserve_empty_line => {
      :default => false,
      :pat => FalseClass,
      :desc => "preserve empty line as a level-1 item (default: no)",
    },
    :key_header => {
      :default => [],
      :pat => Array,
      :desc => "key header",
    },
    :value_header => {
      :default => [],
      :pat => Array,
      :desc => "value header",
    },
  }
end

Public Instance Methods

parse(input) click to toggle source
# File lib/htot_conv/parser/simple_text.rb, line 37
def parse(input)
  indent_regexp = Regexp.new("^(?<indents>(#{Regexp.escape(@option[:indent])})*)")
  delimiter_regexp = (@option[:delimiter].kind_of?(String))? Regexp.new(Regexp.escape(@option[:delimiter])) : @option[:delimiter]
  outline = HTOTConv::Outline.new
  outline.key_header = @option[:key_header]
  outline.value_header = @option[:value_header]

  input.each_line do |line|
    next if ((line.chomp == "") && (!@option[:preserve_empty_line]))

    level = 1
    value = []
    if (@option[:indent] || '').length > 0
      indents = indent_regexp.match(line)[:indents]
      level = 1 + indents.length / @option[:indent].length
      line = line.sub(indent_regexp, "")
    end

    line = line.strip
    if delimiter_regexp
      key = line.split(delimiter_regexp)[0]
      value = line.split(delimiter_regexp)[1..-1] || []
    else
      key = line
    end

    outline.add_item(key, level, value)
  end

  outline
end