class OptParseGen::ScoptParser
Public Class Methods
new(input)
click to toggle source
# File lib/optparsegen/scopt.rb, line 2 def initialize(input) @tape = input @options = [] @current = OptParseGen::Option.new end
Public Instance Methods
parse()
click to toggle source
# File lib/optparsegen/scopt.rb, line 8 def parse state = :parse_any while state != nil lchomp_until!(is_not_space) state = send(state) end @options end
Private Instance Methods
is_not_space()
click to toggle source
# File lib/optparsegen/scopt.rb, line 20 def is_not_space /[^\s]/ end
is_space()
click to toggle source
# File lib/optparsegen/scopt.rb, line 24 def is_space /\s/ end
lchomp_until!(matches)
click to toggle source
# File lib/optparsegen/scopt.rb, line 28 def lchomp_until!(matches) p = @tape.index(matches) if p == nil @tape.slice!(-1) else @tape.slice!(0, p) end end
parse_any()
click to toggle source
# File lib/optparsegen/scopt.rb, line 37 def parse_any case when @tape.start_with?('-') then @tape.slice!(0, 1) :parse_opt when (p = @tape.index("\n")) != nil then @tape.slice!(0, p) :parse_any else nil end end
parse_opt()
click to toggle source
# File lib/optparsegen/scopt.rb, line 50 def parse_opt if @tape[0] == '-' @tape.slice!(0) :parse_opt_name else :parse_opt_short end end
parse_opt_desc()
click to toggle source
# File lib/optparsegen/scopt.rb, line 98 def parse_opt_desc desc = lchomp_until!("\n") if desc @current.description = desc @options.push(@current) @current = OptParseGen::Option.new :parse_any else raise 'expected description' end end
parse_opt_name()
click to toggle source
# File lib/optparsegen/scopt.rb, line 69 def parse_opt_name name = lchomp_until!(is_space) if name @current.name = name :parse_opt_value_or_desc else raise 'expected option name' end end
parse_opt_short()
click to toggle source
# File lib/optparsegen/scopt.rb, line 59 def parse_opt_short short = lchomp_until!(is_space).chop! if short @current.short = short :parse_any else raise 'expected short option name' end end
parse_opt_value()
click to toggle source
# File lib/optparsegen/scopt.rb, line 87 def parse_opt_value value = lchomp_until!(is_space) if value # TODO: Handle value examples. # @current.value = value :parse_opt_desc else raise 'expected value' end end
parse_opt_value_or_desc()
click to toggle source
# File lib/optparsegen/scopt.rb, line 79 def parse_opt_value_or_desc if @tape.start_with?('<') :parse_opt_value else :parse_opt_desc end end