Class: Prawn::Font::CMap

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

Overview

:nodoc:

Instance Method Summary collapse

Constructor Details

#initializeCMap

Returns a new instance of CMap.



13
14
15
# File 'lib/prawn/font/cmap.rb', line 13

def initialize
  @codes = {}
end

Instance Method Details

#[](c) ⇒ Object



17
18
19
# File 'lib/prawn/font/cmap.rb', line 17

def [](c)
  @codes[c]
end

#[]=(c, v) ⇒ Object



21
22
23
# File 'lib/prawn/font/cmap.rb', line 21

def []=(c, v)
  @codes[c] = v
end

#to_sObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/prawn/font/cmap.rb', line 25

def to_s
  # TODO: learn what all this means. I just copied the basic structure
  #       from an existing PDF
  # TODO: make this more efficient. The mapping can be specified in
  #       ranges instead of one -> one
  res =  "12 dict begin\n"
  res << "begincmap\n"
  res << "/CIDSystemInfo\n"
  res << "<< /Registry (Adobe)\n"
  res << "/Ordering (UCS)\n"
  res << "/Supplement 0\n"
  res << ">> def\n"
  res << "/CMapName /Adobe-Identity-UCS def\n"
  res << "/CMapType 2 def\n"
  res << "begincodespacerange\n"
  res << "<0000> <ffff>\n"
  res << "endcodespacerange\n"
  res << "9 beginbfchar\n"
  @codes.keys.sort.each do |key|
    val = @codes[key]
    ccode = val.to_s(16)
    ccode = ("0" * (4 - ccode.size)) + ccode
    unicode = key.to_s(16)
    unicode = ("0" * (4 - unicode.size)) + unicode
    res << "<#{ccode}> <#{unicode}>\n"
  end
  res << "endbfchar\n"
  res << "endcmap\n"
  res << "CMapName currentdict /CMap defineresource pop\n"
  res << "end\n"
  res << "end\n"
end