class PDF::Reader::CMap

def decode(c)

def decode(c)
  # TODO: implement the conversion
  Error.assert_equal(c.class, Fixnum)
  @map[c]
end

def initialize(data)

def initialize(data)
  @map = {}
  in_char_mode = false
  in_range_mode = false
  data.each_line do |l|
    if l.include?("beginbfchar")
      in_char_mode = true 
    elsif l.include?("endbfchar")
      in_char_mode = false 
    elsif l.include?("beginbfrange")
      in_range_mode = true 
    elsif l.include?("endbfrange")
      in_range_mode = false 
    end
    if in_char_mode
      process_bfchar_line(l)
    elsif in_range_mode
      process_bfrange_line(l)
    end
  end
end

def process_bfchar_line(l)

def process_bfchar_line(l)
  m, find, replace = *l.match(/<([0-9a-fA-F]+)> <([0-9a-fA-F]+)>/)
  @map["0x#{find}".hex] = "0x#{replace}".hex if find && replace
end

def process_bfrange_line(l)

def process_bfrange_line(l)
  m, start_code, end_code, dst = *l.match(/<([0-9a-fA-F]+)> <([0-9a-fA-F]+)> <([0-9a-fA-F]+)>/)
  if start_code && end_code && dst
    start_code = "0x#{start_code}".hex
    end_code   = "0x#{end_code}".hex
    dst        = "0x#{dst}".hex
    incr       = 0
    # add all values in the range to our mapping
    (start_code..end_code).each do |val|
      @map[val] = dst + incr
      incr += 1
      # ensure a single range does not exceed 255 chars
      raise PDF::Reader::MalformedPDFError, "a CMap bfrange cann't exceed 255 chars" if incr > 255
    end
  end
end