prawn 0.4.1 → 0.5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. data/lib/prawn.rb +2 -72
  2. metadata +33 -224
  3. data/COPYING +0 -340
  4. data/LICENSE +0 -56
  5. data/README +0 -40
  6. data/Rakefile +0 -79
  7. data/data/encodings/win_ansi.txt +0 -29
  8. data/data/fonts/Action Man.dfont +0 -0
  9. data/data/fonts/Activa.ttf +0 -0
  10. data/data/fonts/Chalkboard.ttf +0 -0
  11. data/data/fonts/Courier-Bold.afm +0 -342
  12. data/data/fonts/Courier-BoldOblique.afm +0 -342
  13. data/data/fonts/Courier-Oblique.afm +0 -342
  14. data/data/fonts/Courier.afm +0 -342
  15. data/data/fonts/DejaVuSans.ttf +0 -0
  16. data/data/fonts/Dustismo_Roman.ttf +0 -0
  17. data/data/fonts/Helvetica-Bold.afm +0 -2827
  18. data/data/fonts/Helvetica-BoldOblique.afm +0 -2827
  19. data/data/fonts/Helvetica-Oblique.afm +0 -3051
  20. data/data/fonts/Helvetica.afm +0 -3051
  21. data/data/fonts/MustRead.html +0 -19
  22. data/data/fonts/Symbol.afm +0 -213
  23. data/data/fonts/Times-Bold.afm +0 -2588
  24. data/data/fonts/Times-BoldItalic.afm +0 -2384
  25. data/data/fonts/Times-Italic.afm +0 -2667
  26. data/data/fonts/Times-Roman.afm +0 -2419
  27. data/data/fonts/ZapfDingbats.afm +0 -225
  28. data/data/fonts/comicsans.ttf +0 -0
  29. data/data/fonts/gkai00mp.ttf +0 -0
  30. data/data/images/arrow.png +0 -0
  31. data/data/images/arrow2.png +0 -0
  32. data/data/images/barcode_issue.png +0 -0
  33. data/data/images/dice.alpha +0 -0
  34. data/data/images/dice.dat +0 -0
  35. data/data/images/dice.png +0 -0
  36. data/data/images/fractal.jpg +0 -0
  37. data/data/images/letterhead.jpg +0 -0
  38. data/data/images/page_white_text.alpha +0 -0
  39. data/data/images/page_white_text.dat +0 -0
  40. data/data/images/page_white_text.png +0 -0
  41. data/data/images/pigs.jpg +0 -0
  42. data/data/images/rails.dat +0 -0
  43. data/data/images/rails.png +0 -0
  44. data/data/images/ruport.png +0 -0
  45. data/data/images/ruport_data.dat +0 -0
  46. data/data/images/ruport_transparent.png +0 -0
  47. data/data/images/ruport_type0.png +0 -0
  48. data/data/images/stef.jpg +0 -0
  49. data/data/images/web-links.dat +0 -1
  50. data/data/images/web-links.png +0 -0
  51. data/data/shift_jis_text.txt +0 -1
  52. data/examples/bounding_box/bounding_boxes.rb +0 -44
  53. data/examples/bounding_box/lazy_bounding_boxes.rb +0 -28
  54. data/examples/bounding_box/padded_box.rb +0 -24
  55. data/examples/bounding_box/russian_boxes.rb +0 -37
  56. data/examples/general/background.rb +0 -20
  57. data/examples/general/canvas.rb +0 -16
  58. data/examples/general/measurement_units.rb +0 -52
  59. data/examples/general/multi_page_layout.rb +0 -17
  60. data/examples/general/page_geometry.rb +0 -32
  61. data/examples/graphics/basic_images.rb +0 -27
  62. data/examples/graphics/cmyk.rb +0 -13
  63. data/examples/graphics/curves.rb +0 -12
  64. data/examples/graphics/hexagon.rb +0 -14
  65. data/examples/graphics/image_fit.rb +0 -16
  66. data/examples/graphics/image_flow.rb +0 -38
  67. data/examples/graphics/image_position.rb +0 -18
  68. data/examples/graphics/line.rb +0 -33
  69. data/examples/graphics/png_types.rb +0 -23
  70. data/examples/graphics/polygons.rb +0 -17
  71. data/examples/graphics/remote_images.rb +0 -12
  72. data/examples/graphics/ruport_style_helpers.rb +0 -20
  73. data/examples/graphics/stroke_bounds.rb +0 -23
  74. data/examples/m17n/chinese_text_wrapping.rb +0 -20
  75. data/examples/m17n/euro.rb +0 -16
  76. data/examples/m17n/sjis.rb +0 -29
  77. data/examples/m17n/utf8.rb +0 -14
  78. data/examples/m17n/win_ansi_charset.rb +0 -55
  79. data/examples/text/alignment.rb +0 -19
  80. data/examples/text/dfont.rb +0 -49
  81. data/examples/text/family_based_styling.rb +0 -25
  82. data/examples/text/flowing_text_with_header_and_footer.rb +0 -37
  83. data/examples/text/font_calculations.rb +0 -92
  84. data/examples/text/font_size.rb +0 -34
  85. data/examples/text/kerning.rb +0 -31
  86. data/examples/text/simple_text.rb +0 -18
  87. data/examples/text/simple_text_ttf.rb +0 -18
  88. data/examples/text/span.rb +0 -30
  89. data/examples/text/text_box.rb +0 -26
  90. data/examples/text/text_flow.rb +0 -68
  91. data/lib/prawn/compatibility.rb +0 -38
  92. data/lib/prawn/document.rb +0 -309
  93. data/lib/prawn/document/annotations.rb +0 -63
  94. data/lib/prawn/document/bounding_box.rb +0 -368
  95. data/lib/prawn/document/destinations.rb +0 -81
  96. data/lib/prawn/document/internals.rb +0 -126
  97. data/lib/prawn/document/page_geometry.rb +0 -79
  98. data/lib/prawn/document/span.rb +0 -55
  99. data/lib/prawn/document/text.rb +0 -185
  100. data/lib/prawn/document/text/box.rb +0 -76
  101. data/lib/prawn/document/text/wrapping.rb +0 -59
  102. data/lib/prawn/encoding.rb +0 -121
  103. data/lib/prawn/errors.rb +0 -40
  104. data/lib/prawn/font.rb +0 -277
  105. data/lib/prawn/font/afm.rb +0 -202
  106. data/lib/prawn/font/dfont.rb +0 -31
  107. data/lib/prawn/font/ttf.rb +0 -326
  108. data/lib/prawn/graphics.rb +0 -257
  109. data/lib/prawn/graphics/color.rb +0 -140
  110. data/lib/prawn/images.rb +0 -339
  111. data/lib/prawn/images/jpg.rb +0 -45
  112. data/lib/prawn/images/png.rb +0 -199
  113. data/lib/prawn/literal_string.rb +0 -14
  114. data/lib/prawn/measurement_extensions.rb +0 -46
  115. data/lib/prawn/measurements.rb +0 -71
  116. data/lib/prawn/name_tree.rb +0 -165
  117. data/lib/prawn/pdf_object.rb +0 -73
  118. data/lib/prawn/reference.rb +0 -59
  119. data/spec/annotations_spec.rb +0 -90
  120. data/spec/bounding_box_spec.rb +0 -141
  121. data/spec/destinations_spec.rb +0 -15
  122. data/spec/document_spec.rb +0 -193
  123. data/spec/font_spec.rb +0 -234
  124. data/spec/graphics_spec.rb +0 -209
  125. data/spec/images_spec.rb +0 -68
  126. data/spec/jpg_spec.rb +0 -25
  127. data/spec/measurement_units_spec.rb +0 -23
  128. data/spec/name_tree_spec.rb +0 -103
  129. data/spec/pdf_object_spec.rb +0 -112
  130. data/spec/png_spec.rb +0 -196
  131. data/spec/reference_spec.rb +0 -42
  132. data/spec/spec_helper.rb +0 -23
  133. data/spec/text_spec.rb +0 -178
  134. data/vendor/pdf-inspector/README +0 -18
  135. data/vendor/pdf-inspector/lib/pdf/inspector.rb +0 -25
  136. data/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +0 -80
  137. data/vendor/pdf-inspector/lib/pdf/inspector/page.rb +0 -16
  138. data/vendor/pdf-inspector/lib/pdf/inspector/text.rb +0 -31
  139. data/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +0 -19
  140. data/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
  141. data/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
  142. data/vendor/ttfunk/example.rb +0 -45
  143. data/vendor/ttfunk/lib/ttfunk.rb +0 -102
  144. data/vendor/ttfunk/lib/ttfunk/directory.rb +0 -17
  145. data/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +0 -88
  146. data/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +0 -69
  147. data/vendor/ttfunk/lib/ttfunk/reader.rb +0 -44
  148. data/vendor/ttfunk/lib/ttfunk/resource_file.rb +0 -78
  149. data/vendor/ttfunk/lib/ttfunk/subset.rb +0 -18
  150. data/vendor/ttfunk/lib/ttfunk/subset/base.rb +0 -141
  151. data/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +0 -46
  152. data/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +0 -48
  153. data/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +0 -63
  154. data/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +0 -51
  155. data/vendor/ttfunk/lib/ttfunk/subset_collection.rb +0 -72
  156. data/vendor/ttfunk/lib/ttfunk/table.rb +0 -46
  157. data/vendor/ttfunk/lib/ttfunk/table/cmap.rb +0 -34
  158. data/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +0 -54
  159. data/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +0 -126
  160. data/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +0 -79
  161. data/vendor/ttfunk/lib/ttfunk/table/glyf.rb +0 -64
  162. data/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +0 -81
  163. data/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +0 -37
  164. data/vendor/ttfunk/lib/ttfunk/table/head.rb +0 -44
  165. data/vendor/ttfunk/lib/ttfunk/table/hhea.rb +0 -41
  166. data/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +0 -47
  167. data/vendor/ttfunk/lib/ttfunk/table/kern.rb +0 -79
  168. data/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +0 -62
  169. data/vendor/ttfunk/lib/ttfunk/table/loca.rb +0 -43
  170. data/vendor/ttfunk/lib/ttfunk/table/maxp.rb +0 -40
  171. data/vendor/ttfunk/lib/ttfunk/table/name.rb +0 -119
  172. data/vendor/ttfunk/lib/ttfunk/table/os2.rb +0 -78
  173. data/vendor/ttfunk/lib/ttfunk/table/post.rb +0 -91
  174. data/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +0 -43
  175. data/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +0 -35
  176. data/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +0 -23
  177. data/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +0 -17
  178. data/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +0 -17
  179. data/vendor/ttfunk/lib/ttfunk/table/simple.rb +0 -14
Binary file
@@ -1,45 +0,0 @@
1
- $LOAD_PATH << "#{File.dirname(__FILE__)}/lib"
2
- require "ttfunk"
3
-
4
- def character_lookup(file, character)
5
- puts "character : #{character}"
6
-
7
- character_code = character.unpack("U*").first
8
- puts "character code: #{character_code}"
9
-
10
- glyph_id = file.cmap.unicode.first[character_code]
11
- puts "glyph id : #{glyph_id}"
12
-
13
- glyph = file.glyph_outlines.for(glyph_id)
14
- puts "glyph type : %s" % glyph.class.name.split(/::/).last.downcase
15
- puts "glyph size : %db" % glyph.raw.length
16
- puts "glyph bbox : (%d,%d)-(%d,%d)" % [glyph.x_min, glyph.y_min, glyph.x_max, glyph.y_max]
17
-
18
- if glyph.compound?
19
- puts "components : %d %s" % [glyph.glyph_ids.length, glyph.glyph_ids.inspect]
20
- end
21
- end
22
-
23
- file = TTFunk::File.open(ARGV.first || "data/fonts/DejaVuSans.ttf")
24
-
25
- puts "-- FONT ------------------------------------"
26
-
27
- puts "revision : %08x" % file.header.font_revision
28
- puts "name : #{file.name.font_name.join(', ')}"
29
- puts "family : #{file.name.font_family.join(', ')}"
30
- puts "subfamily : #{file.name.font_subfamily.join(', ')}"
31
- puts "postscript: #{file.name.postscript_name}"
32
-
33
- puts "-- FONT METRICS ----------------------------"
34
-
35
- puts "units/em : #{file.header.units_per_em}"
36
- puts "ascent : #{file.ascent}"
37
- puts "descent : #{file.descent}"
38
- puts "line gap : #{file.line_gap}"
39
- puts "bbox : (%d,%d)-(%d,%d)" % file.bbox
40
-
41
- puts "-- SIMPLE CHARACTER -> GLYPH LOOKUP --------"
42
- character_lookup(file, "\xE2\x98\x9C")
43
-
44
- puts "-- COMPOUND CHARACTER -> GLYPH LOOKUP ------"
45
- character_lookup(file, "ë")
@@ -1,102 +0,0 @@
1
- require 'stringio'
2
- require 'ttfunk/directory'
3
- require 'ttfunk/resource_file'
4
-
5
- module TTFunk
6
- class File
7
- attr_reader :contents
8
- attr_reader :directory
9
-
10
- def self.open(file)
11
- new(::File.open(file, "rb") { |f| f.read })
12
- end
13
-
14
- def self.from_dfont(file, which=0)
15
- new(ResourceFile.open(file) { |dfont| dfont["sfnt", which] })
16
- end
17
-
18
- def initialize(contents)
19
- @contents = StringIO.new(contents)
20
- @directory = Directory.new(@contents)
21
- end
22
-
23
-
24
- def ascent
25
- @ascent ||= os2.exists? && os2.ascent || horizontal_header.ascent
26
- end
27
-
28
- def descent
29
- @descent ||= os2.exists? && os2.descent || horizontal_header.descent
30
- end
31
-
32
- def line_gap
33
- @line_gap ||= os2.exists? && os2.line_gap || horizontal_header.line_gap
34
- end
35
-
36
- def bbox
37
- [header.x_min, header.y_min, header.x_max, header.y_max]
38
- end
39
-
40
-
41
- def directory_info(tag)
42
- directory.tables[tag.to_s]
43
- end
44
-
45
- def header
46
- @header ||= TTFunk::Table::Head.new(self)
47
- end
48
-
49
- def cmap
50
- @cmap ||= TTFunk::Table::Cmap.new(self)
51
- end
52
-
53
- def horizontal_header
54
- @horizontal_header ||= TTFunk::Table::Hhea.new(self)
55
- end
56
-
57
- def horizontal_metrics
58
- @horizontal_metrics ||= TTFunk::Table::Hmtx.new(self)
59
- end
60
-
61
- def maximum_profile
62
- @maximum_profile ||= TTFunk::Table::Maxp.new(self)
63
- end
64
-
65
- def kerning
66
- @kerning ||= TTFunk::Table::Kern.new(self)
67
- end
68
-
69
- def name
70
- @name ||= TTFunk::Table::Name.new(self)
71
- end
72
-
73
- def os2
74
- @os2 ||= TTFunk::Table::OS2.new(self)
75
- end
76
-
77
- def postscript
78
- @postscript ||= TTFunk::Table::Post.new(self)
79
- end
80
-
81
- def glyph_locations
82
- @glyph_locations ||= TTFunk::Table::Loca.new(self)
83
- end
84
-
85
- def glyph_outlines
86
- @glyph_outlines ||= TTFunk::Table::Glyf.new(self)
87
- end
88
- end
89
- end
90
-
91
- require "ttfunk/table/cmap"
92
- require "ttfunk/table/glyf"
93
- require "ttfunk/table/head"
94
- require "ttfunk/table/hhea"
95
- require "ttfunk/table/hmtx"
96
- require "ttfunk/table/kern"
97
- require "ttfunk/table/loca"
98
- require "ttfunk/table/maxp"
99
- require "ttfunk/table/name"
100
- require "ttfunk/table/os2"
101
- require "ttfunk/table/post"
102
-
@@ -1,17 +0,0 @@
1
- module TTFunk
2
- class Directory
3
- attr_reader :tables
4
- attr_reader :scaler_type
5
-
6
- def initialize(io)
7
- @scaler_type, table_count, search_range,
8
- entry_selector, range_shift = io.read(12).unpack("Nn*")
9
-
10
- @tables = {}
11
- table_count.times do
12
- tag, checksum, offset, length = io.read(16).unpack("a4N*")
13
- @tables[tag] = { :tag => tag, :checksum => checksum, :offset => offset, :length => length }
14
- end
15
- end
16
- end
17
- end
@@ -1,88 +0,0 @@
1
- module TTFunk
2
- module Encoding
3
- class MacRoman
4
- TO_UNICODE = Hash.new { |h,k| k }
5
- TO_UNICODE.update(
6
- 0x81 => 0x00C5, 0x82 => 0x00C7, 0x83 => 0x00C9, 0x84 => 0x00D1, 0x85 => 0x00D6,
7
- 0x86 => 0x00DC, 0x87 => 0x00E1, 0x88 => 0x00E0, 0x89 => 0x00E2, 0x8A => 0x00E4,
8
- 0x8B => 0x00E3, 0x8C => 0x00E5, 0x8D => 0x00E7, 0x8E => 0x00E9, 0x8F => 0x00E8,
9
- 0x90 => 0x00EA, 0x91 => 0x00EB, 0x92 => 0x00ED, 0x93 => 0x00EC, 0x94 => 0x00EE,
10
- 0x95 => 0x00EF, 0x96 => 0x00F1, 0x97 => 0x00F3, 0x98 => 0x00F2, 0x99 => 0x00F4,
11
- 0x9A => 0x00F6, 0x9B => 0x00F5, 0x9C => 0x00FA, 0x9D => 0x00F9, 0x9E => 0x00FB,
12
- 0x9F => 0x00FC, 0xA0 => 0x2020, 0xA1 => 0x00B0, 0xA4 => 0x00A7, 0xA5 => 0x2022,
13
- 0xA6 => 0x00B6, 0xA7 => 0x00DF, 0xA8 => 0x00AE, 0xAA => 0x2122, 0xAB => 0x00B4,
14
- 0xAC => 0x00A8, 0xAD => 0x2260, 0xAE => 0x00C6, 0xAF => 0x00D8, 0xB0 => 0x221E,
15
- 0xB2 => 0x2264, 0xB3 => 0x2265, 0xB4 => 0x00A5, 0xB6 => 0x2202, 0xB7 => 0x2211,
16
- 0xB8 => 0x220F, 0xB9 => 0x03C0, 0xBA => 0x222B, 0xBB => 0x00AA, 0xBC => 0x00BA,
17
- 0xBD => 0x03A9, 0xBE => 0x00E6, 0xBF => 0x00F8, 0xC0 => 0x00BF, 0xC1 => 0x00A1,
18
- 0xC2 => 0x00AC, 0xC3 => 0x221A, 0xC4 => 0x0192, 0xC5 => 0x2248, 0xC6 => 0x2206,
19
- 0xC7 => 0x00AB, 0xC8 => 0x00BB, 0xC9 => 0x2026, 0xCA => 0x00A0, 0xCB => 0x00C0,
20
- 0xCC => 0x00C3, 0xCD => 0x00D5, 0xCE => 0x0152, 0xCF => 0x0153, 0xD0 => 0x2013,
21
- 0xD1 => 0x2014, 0xD2 => 0x201C, 0xD3 => 0x201D, 0xD4 => 0x2018, 0xD5 => 0x2019,
22
- 0xD6 => 0x00F7, 0xD7 => 0x25CA, 0xD8 => 0x00FF, 0xD9 => 0x0178, 0xDA => 0x2044,
23
- 0xDB => 0x20AC, 0xDC => 0x2039, 0xDD => 0x203A, 0xDE => 0xFB01, 0xDF => 0xFB02,
24
- 0xE0 => 0x2021, 0xE1 => 0x00B7, 0xE2 => 0x201A, 0xE3 => 0x201E, 0xE4 => 0x2030,
25
- 0xE5 => 0x00C2, 0xE6 => 0x00CA, 0xE7 => 0x00C1, 0xE8 => 0x00CB, 0xE9 => 0x00C8,
26
- 0xEA => 0x00CD, 0xEB => 0x00CE, 0xEC => 0x00CF, 0xED => 0x00CC, 0xEE => 0x00D3,
27
- 0xEF => 0x00D4, 0xF0 => 0xF8FF, 0xF1 => 0x00D2, 0xF2 => 0x00DA, 0xF3 => 0x00DB,
28
- 0xF4 => 0x00D9, 0xF5 => 0x0131, 0xF6 => 0x02C6, 0xF7 => 0x02DC, 0xF8 => 0x00AF,
29
- 0xF9 => 0x02D8, 0xFA => 0x02D9, 0xFB => 0x02DA, 0xFC => 0x00B8, 0xFD => 0x02DD,
30
- 0xFE => 0x02DB, 0xFF => 0x02C7
31
- )
32
-
33
- FROM_UNICODE = {}
34
- (0..255).each { |key| FROM_UNICODE[TO_UNICODE[key]] = key }
35
-
36
- # Maps MacRoman codes to their corresponding index in the Postscript glyph
37
- # table (see TTFunk::Table::Post::Format10). If any entry in this array is a string,
38
- # it is a postscript glyph that is not in the standard list, and which should be
39
- # emitted specially in the TTF postscript table ('post', see format 2).
40
- POSTSCRIPT_GLYPH_MAPPING = [
41
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 0x0F
42
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 0x1F
43
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, # 0x2F
44
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, # 0x3F
45
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, # 0x4F
46
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, # 0x5F
47
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, # 0x6F
48
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 0, # 0x7F
49
- 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, # 0x8F
50
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, # 0x9F
51
- 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, # 0xAF
52
- 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, # 0xBF
53
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, # 0xCF
54
- 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, "Euro", 190, 191, 192, 193, # 0xDF
55
- 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, # 0xEF
56
- 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225 # 0xFF
57
- ]
58
-
59
- def self.covers?(character)
60
- !FROM_UNICODE[character].nil?
61
- end
62
-
63
- def self.to_utf8(string)
64
- to_unicode_codepoints(string.unpack("C*")).pack("U*")
65
- end
66
-
67
- def self.to_unicode(string)
68
- to_unicode_codepoints(string.unpack("C*")).pack("n*")
69
- end
70
-
71
- def self.from_utf8(string)
72
- from_unicode_codepoints(string.unpack("U*")).pack("C*")
73
- end
74
-
75
- def self.from_unicode(string)
76
- from_unicode_codepoints(string.unpack("n*")).pack("C*")
77
- end
78
-
79
- def self.to_unicode_codepoints(array)
80
- array.map { |code| TO_UNICODE[code] }
81
- end
82
-
83
- def self.from_unicode_codepoints(array)
84
- array.map { |code| FROM_UNICODE[code] || 0 }
85
- end
86
- end
87
- end
88
- end
@@ -1,69 +0,0 @@
1
- module TTFunk
2
- module Encoding
3
- class Windows1252
4
- TO_UNICODE = Hash.new { |h,k| k }
5
- TO_UNICODE.update(
6
- 0x80 => 0x20AC, 0x82 => 0x201A, 0x83 => 0x0192, 0x84 => 0x201E, 0x85 => 0x2026,
7
- 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02C6, 0x89 => 0x2030, 0x8A => 0x0160,
8
- 0x8B => 0x2039, 0x8C => 0x0152, 0x8E => 0x017D, 0x91 => 0x2018, 0x92 => 0x2019,
9
- 0x93 => 0x201C, 0x94 => 0x201D, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014,
10
- 0x98 => 0x02DC, 0x99 => 0x2122, 0x9A => 0x0161, 0x9B => 0x203A, 0x9C => 0x0152,
11
- 0x9E => 0x017E, 0x9F => 0x0178
12
- )
13
-
14
- FROM_UNICODE = {}
15
- (0..255).each { |key| FROM_UNICODE[TO_UNICODE[key]] = key }
16
-
17
- # Maps Windows-1252 codes to their corresponding index in the Postscript glyph
18
- # table (see TTFunk::Table::Post::Format10). If any entry in this array is a string,
19
- # it is a postscript glyph that is not in the standard list, and which should be
20
- # emitted specially in the TTF postscript table ('post', see format 2).
21
- POSTSCRIPT_GLYPH_MAPPING = [
22
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
25
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
26
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
27
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
28
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
29
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 0,
30
- "Euro", 0, 196, 166, 197, 171, 130, 194, 216, 198, 228, 190, 176, 0, 230, 0,
31
- 0, 182, 183, 180, 181, 135, 178, 179, 217, 140, 229, 191, 177, 0, 231, 186,
32
- 3, 163, 132, 133, 189, 150, 232, 134, 142, 139, 157, 169, 164, 16, 138, 218,
33
- 131, 147, 242, 243, 141, 151, 136, 195, 222, 241, 158, 170, 245, 244, 246, 162,
34
- 173, 201, 199, 174, 98, 99, 144, 100, 203, 101, 200, 202, 207, 204, 205, 206,
35
- 233, 102, 211, 208, 209, 175, 103, 240, 145, 214, 212, 213, 104, 235, 237, 137,
36
- 106, 105, 107, 109, 108, 110, 160, 111, 113, 112, 114, 115, 117, 116, 118, 119,
37
- 234, 120, 122, 121, 123, 125, 124, 184, 161, 127, 126, 128, 129, 236, 238, 186
38
- ]
39
-
40
- def self.covers?(character)
41
- !FROM_UNICODE[character].nil?
42
- end
43
-
44
- def self.to_utf8(string)
45
- to_unicode_codepoints(string.unpack("C*")).pack("U*")
46
- end
47
-
48
- def self.to_unicode(string)
49
- to_unicode_codepoints(string.unpack("C*")).pack("n*")
50
- end
51
-
52
- def self.from_utf8(string)
53
- from_unicode_codepoints(string.unpack("U*")).pack("C*")
54
- end
55
-
56
- def self.from_unicode(string)
57
- from_unicode_codepoints(string.unpack("n*")).pack("C*")
58
- end
59
-
60
- def self.to_unicode_codepoints(array)
61
- array.map { |code| TO_UNICODE[code] }
62
- end
63
-
64
- def self.from_unicode_codepoints(array)
65
- array.map { |code| FROM_UNICODE[code] || 0 }
66
- end
67
- end
68
- end
69
- end
@@ -1,44 +0,0 @@
1
- module TTFunk
2
- module Reader
3
- private
4
-
5
- def io
6
- @file.contents
7
- end
8
-
9
- def read(bytes, format)
10
- io.read(bytes).unpack(format)
11
- end
12
-
13
- def read_signed(count)
14
- read(count*2, "n*").map { |i| to_signed(i) }
15
- end
16
-
17
- def to_signed(n)
18
- (n>=0x8000) ? -((n ^ 0xFFFF) + 1) : n
19
- end
20
-
21
- def parse_from(position)
22
- saved, io.pos = io.pos, position
23
- result = yield position
24
- io.pos = saved
25
- return result
26
- end
27
-
28
- # For debugging purposes
29
- def hexdump(string)
30
- bytes = string.unpack("C*")
31
- bytes.each_with_index do |c, i|
32
- print "%02X" % c
33
- if (i+1) % 16 == 0
34
- puts
35
- elsif (i+1) % 8 == 0
36
- print " "
37
- else
38
- print " "
39
- end
40
- end
41
- puts unless bytes.length % 16 == 0
42
- end
43
- end
44
- end
@@ -1,78 +0,0 @@
1
- module TTFunk
2
- class ResourceFile
3
- attr_reader :map
4
-
5
- def self.open(path)
6
- ::File.open(path, "rb") do |io|
7
- file = new(io)
8
- yield file
9
- end
10
- end
11
-
12
- def initialize(io)
13
- @io = io
14
-
15
- data_offset, map_offset, data_length, map_length = @io.read(16).unpack("N*")
16
-
17
- @map = {}
18
- @io.pos = map_offset + 24 # skip header copy, next map handle, file reference, and attrs
19
- type_list_offset, name_list_offset = @io.read(4).unpack("n*")
20
-
21
- type_list_offset += map_offset
22
- name_list_offset += map_offset
23
-
24
- @io.pos = type_list_offset
25
- max_index = @io.read(2).unpack("n").first
26
- 0.upto(max_index) do
27
- type, max_type_index, ref_list_offset = @io.read(8).unpack("A4nn")
28
- @map[type] = { :list => [], :named => {} }
29
-
30
- parse_from(type_list_offset + ref_list_offset) do
31
- 0.upto(max_type_index) do
32
- id, name_ofs, attr = @io.read(5).unpack("nnC")
33
- data_ofs = @io.read(3)
34
- data_ofs = data_offset + [0, data_ofs].pack("CA*").unpack("N").first
35
- handle = @io.read(4).unpack("N").first
36
-
37
- entry = { :id => id, :attributes => attr, :offset => data_ofs, :handle => handle }
38
-
39
- if name_list_offset + name_ofs < map_offset + map_length
40
- parse_from(name_ofs + name_list_offset) do
41
- len = @io.read(1).unpack("C").first
42
- entry[:name] = @io.read(len)
43
- end
44
- end
45
-
46
- @map[type][:list] << entry
47
- @map[type][:named][entry[:name]] = entry if entry[:name]
48
- end
49
- end
50
- end
51
- end
52
-
53
- def [](type, index=0)
54
- if @map[type]
55
- collection = index.is_a?(Fixnum) ? :list : :named
56
- if @map[type][collection][index]
57
- parse_from(@map[type][collection][index][:offset]) do
58
- length = @io.read(4).unpack("N").first
59
- return @io.read(length)
60
- end
61
- end
62
- end
63
- end
64
-
65
- def resources_for(type)
66
- (@map[type] && @map[type][:named] || {}).keys
67
- end
68
-
69
- private
70
-
71
- def parse_from(offset)
72
- saved, @io.pos = @io.pos, offset
73
- yield
74
- ensure
75
- @io.pos = saved
76
- end
77
- end
78
- end