Class: HexaPDF::Font::CMap::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/hexapdf/font/cmap/parser.rb

Overview

Parses CMap files.

Currently only ToUnicode CMaps are supported.

Instance Method Summary collapse

Instance Method Details

#parse(string) ⇒ Object

Parses the given string and returns a CMap object.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/hexapdf/font/cmap/parser.rb', line 48

def parse(string)
  tokenizer = HexaPDF::Content::Tokenizer.new(string)
  cmap = CMap.new

  while (token = tokenizer.next_token) != HexaPDF::Tokenizer::NO_MORE_TOKENS
    if token.kind_of?(HexaPDF::Tokenizer::Token)
      case token
      when 'beginbfchar'.freeze then parse_bf_char(tokenizer, cmap)
      when 'beginbfrange'.freeze then parse_bf_range(tokenizer, cmap)
      when 'endcmap' then break
      end
    elsif token.kind_of?(Symbol)
      parse_dict_mapping(tokenizer, cmap, token)
    end
  end

  cmap
rescue => e
  raise HexaPDF::Error, "Error parsing CMap: #{e.message}", e.backtrace
end