class Tins::Unit::FormatParser

def initialize(format, unit_parser)

def initialize(format, unit_parser)
  super format
  @unit_parser = unit_parser
end

def location

def location
  @unit_parser.peek(10).inspect
end

def parse

def parse
  reset
  until eos? || @unit_parser.eos?
    case
    when scan(/%f/)
      @unit_parser.scan_number or
        raise ParserError, "\"%f\" expected at #{location}"
    when scan(/%U/)
      @unit_parser.scan_unit or
        raise ParserError, "\"%U\" expected at #{location}"
    when scan(/%%/)
      @unit_parser.scan_char(?%) or
        raise ParserError, "#{?%.inspect} expected at #{location}"
    else
      char = scan(/./)
      @unit_parser.scan_char(char) or
        raise ParserError, "#{char.inspect} expected at #{location}"
    end
  end
  unless eos? && @unit_parser.eos?
    raise ParserError,
      "format #{string.inspect} and string "\
        "#{@unit_parser.string.inspect} do not match"
  end
  @unit_parser.number
end

def reset

def reset
  super
  @unit_parser.reset
end