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
@@ -1,37 +0,0 @@
1
- require 'ttfunk/reader'
2
-
3
- module TTFunk
4
- class Table
5
- class Glyf
6
- class Simple
7
- attr_reader :raw
8
- attr_reader :number_of_contours
9
- attr_reader :x_min, :y_min, :x_max, :y_max
10
-
11
- def initialize(raw, number_of_contours, x_min, y_min, x_max, y_max)
12
- @raw = raw
13
- @number_of_contours = number_of_contours
14
- @x_min, @y_min = x_min, y_min
15
- @x_max, @y_max = x_max, y_max
16
-
17
- # Because TTFunk is, at this time, a library for simply pulling
18
- # metrics out of font files, or for writing font subsets, we don't
19
- # really care what the contours are for simple glyphs. We just
20
- # care that we've got an entire glyph's definition. Also, a
21
- # bounding box could be nice to know. Since we've got all that
22
- # at this point, we don't need to worry about parsing the full
23
- # contents of the glyph.
24
- end
25
-
26
- def compound?
27
- false
28
- end
29
-
30
- def recode(mapping)
31
- raw
32
- end
33
- end
34
- end
35
- end
36
- end
37
-
@@ -1,44 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Head < TTFunk::Table
6
- attr_reader :version
7
- attr_reader :font_revision
8
- attr_reader :checksum_adjustment
9
- attr_reader :magic_number
10
- attr_reader :flags
11
- attr_reader :units_per_em
12
- attr_reader :created
13
- attr_reader :modified
14
- attr_reader :x_min
15
- attr_reader :y_min
16
- attr_reader :x_max
17
- attr_reader :y_max
18
- attr_reader :mac_style
19
- attr_reader :lowest_rec_ppem
20
- attr_reader :font_direction_hint
21
- attr_reader :index_to_loc_format
22
- attr_reader :glyph_data_format
23
-
24
- def self.encode(head, loca)
25
- table = head.raw
26
- table[8,4] = "\0\0\0\0" # set checksum adjustment to 0 initially
27
- table[-4,2] = [loca[:type]].pack("n") # set index_to_loc_format
28
- return table
29
- end
30
-
31
- private
32
-
33
- def parse!
34
- @version, @font_revision, @check_sum_adjustment, @magic_number,
35
- @flags, @units_per_em, @created, @modified = read(36, "N4n2q2")
36
-
37
- @x_min, @y_min, @x_max, @y_max = read_signed(4)
38
-
39
- @mac_style, @lowest_rec_ppem, @font_direction_hint,
40
- @index_to_loc_format, @glyph_data_format = read(10, "n*")
41
- end
42
- end
43
- end
44
- end
@@ -1,41 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Hhea < Table
6
- attr_reader :version
7
- attr_reader :ascent
8
- attr_reader :descent
9
- attr_reader :line_gap
10
- attr_reader :advance_width_max
11
- attr_reader :min_left_side_bearing
12
- attr_reader :min_right_side_bearing
13
- attr_reader :x_max_extent
14
- attr_reader :carot_slope_rise
15
- attr_reader :carot_slope_run
16
- attr_reader :metric_data_format
17
- attr_reader :number_of_metrics
18
-
19
- def self.encode(hhea, hmtx)
20
- raw = hhea.raw
21
- raw[-2,2] = [hmtx[:number_of_metrics]].pack("n")
22
- return raw
23
- end
24
-
25
- private
26
-
27
- def parse!
28
- @version = read(4, "N").first
29
- @ascent, @descent, @line_gap = read_signed(3)
30
- @advance_width_max = read(2, "n").first
31
-
32
- @min_left_side_bearing, @min_right_side_bearing, @x_max_extent,
33
- @carot_slope_rise, @carot_slope_run, @caret_offset,
34
- reserved, reserved, reserved, reserved,
35
- @metric_data_format = read_signed(11)
36
-
37
- @number_of_metrics = read(2, "n").first
38
- end
39
- end
40
- end
41
- end
@@ -1,47 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Hmtx < Table
6
- attr_reader :metrics
7
- attr_reader :left_side_bearings
8
- attr_reader :widths
9
-
10
- def self.encode(hmtx, mapping)
11
- metrics = mapping.keys.sort.map do |new_id|
12
- metric = hmtx.for(mapping[new_id])
13
- [metric.advance_width, metric.left_side_bearing]
14
- end
15
-
16
- { :number_of_metrics => metrics.length,
17
- :table => metrics.flatten.pack("n*") }
18
- end
19
-
20
- HorizontalMetric = Struct.new(:advance_width, :left_side_bearing)
21
-
22
- def for(glyph_id)
23
- @metrics[glyph_id] ||
24
- HorizontalMetric.new(@metrics.last.advance_width,
25
- @left_side_bearings[glyph_id - @metrics.length])
26
- end
27
-
28
- private
29
-
30
- def parse!
31
- @metrics = []
32
-
33
- file.horizontal_header.number_of_metrics.times do
34
- advance = read(2, "n").first
35
- lsb = read_signed(1).first
36
- @metrics.push HorizontalMetric.new(advance, lsb)
37
- end
38
-
39
- lsb_count = file.maximum_profile.num_glyphs - file.horizontal_header.number_of_metrics
40
- @left_side_bearings = read_signed(lsb_count)
41
-
42
- @widths = @metrics.map { |metric| metric.advance_width }
43
- @widths += [@widths.last] * @left_side_bearings.length
44
- end
45
- end
46
- end
47
- end
@@ -1,79 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Kern < Table
6
- attr_reader :version
7
- attr_reader :tables
8
-
9
- def self.encode(kerning, mapping)
10
- return nil unless kerning.exists? && kerning.tables.any?
11
- tables = kerning.tables.map { |table| table.recode(mapping) }.compact
12
- return nil if tables.empty?
13
-
14
- [0, tables.length, tables.join].pack("nnA*")
15
- end
16
-
17
- private
18
-
19
- def parse!
20
- @version, num_tables = read(4, "n*")
21
- @tables = []
22
-
23
- if @version == 1 # Mac OS X fonts
24
- @version = (@version << 16) + num_tables
25
- num_tables = read(4, "N").first
26
- parse_version_1_tables(num_tables)
27
- else
28
- parse_version_0_tables(num_tables)
29
- end
30
- end
31
-
32
- def parse_version_0_tables(num_tables)
33
- # It looks like some MS fonts report their kerning subtable lengths
34
- # wrong. In one case, the length was reported to be some 19366, and yet
35
- # the table also claimed to hold 14148 pairs (each pair consisting of 6 bytes).
36
- # You do the math!
37
- #
38
- # We're going to assume that the microsoft fonts hold only a single kerning
39
- # subtable, which occupies the entire length of the kerning table. Worst
40
- # case, we lose any other subtables that the font contains, but it's better
41
- # than reading a truncated kerning table.
42
- #
43
- # And what's more, it appears to work. So.
44
- version, length, coverage = read(6, "n*")
45
- format = coverage >> 8
46
-
47
- add_table format, :version => version, :length => length,
48
- :coverage => coverage, :data => raw[10..-1],
49
- :vertical => (coverage & 0x1 == 0),
50
- :minimum => (coverage & 0x2 != 0),
51
- :cross => (coverage & 0x4 != 0),
52
- :override => (coverage & 0x8 != 0)
53
- end
54
-
55
- def parse_version_1_tables(num_tables)
56
- num_tables.times do
57
- length, coverage, tuple_index = read(8, "Nnn")
58
- format = coverage & 0x0FF
59
-
60
- add_table format, :length => length, :coverage => coverage,
61
- :tuple_index => tuple_index, :data => io.read(length-8),
62
- :vertical => (coverage & 0x8000 != 0),
63
- :cross => (coverage & 0x4000 != 0),
64
- :variation => (coverage & 0x2000 != 0)
65
- end
66
- end
67
-
68
- def add_table(format, attributes={})
69
- if format == 0
70
- @tables << Kern::Format0.new(attributes)
71
- else
72
- # silently ignore unsupported kerning tables
73
- end
74
- end
75
- end
76
- end
77
- end
78
-
79
- require 'ttfunk/table/kern/format0'
@@ -1,62 +0,0 @@
1
- require 'ttfunk/reader'
2
-
3
- module TTFunk
4
- class Table
5
- class Kern
6
- class Format0
7
- include Reader
8
-
9
- attr_reader :attributes
10
- attr_reader :pairs
11
-
12
- def initialize(attributes={})
13
- @attributes = attributes
14
-
15
- num_pairs, search_range, entry_selector, range_shift, *pairs =
16
- attributes.delete(:data).unpack("n*")
17
-
18
- @pairs = {}
19
- num_pairs.times do |i|
20
- break if i*3+2 > pairs.length # sanity check, in case there's a bad length somewhere
21
- left = pairs[i*3]
22
- right = pairs[i*3+1]
23
- value = to_signed(pairs[i*3+2])
24
- @pairs[[left, right]] = value
25
- end
26
- end
27
-
28
- def vertical?
29
- @attributes[:vertical]
30
- end
31
-
32
- def horizontal?
33
- !vertical?
34
- end
35
-
36
- def cross_stream?
37
- @attributes[:cross]
38
- end
39
-
40
- def recode(mapping)
41
- subset = []
42
- pairs.each do |(left, right), value|
43
- if mapping[left] && mapping[right]
44
- subset << [mapping[left], mapping[right], value]
45
- end
46
- end
47
-
48
- return nil if subset.empty?
49
-
50
- num_pairs = subset.length
51
- search_range = 2 * 2 ** (Math.log(num_pairs) / Math.log(2)).to_i
52
- entry_selector = (Math.log(search_range / 2) / Math.log(2)).to_i
53
- range_shift = (2 * num_pairs) - search_range
54
-
55
- [attributes[:version], num_pairs * 6 + 14, attributes[:coverage],
56
- num_pairs, search_range, entry_selector, range_shift, subset].
57
- flatten.pack("n*")
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,43 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Loca < Table
6
- attr_reader :offsets
7
-
8
- # Accepts an array of offsets, with each index corresponding to the
9
- # glyph id with that index.
10
- #
11
- # Returns a hash containing:
12
- #
13
- # * :table - the string representing the table's contents
14
- # * :type - the type of offset (to be encoded in the 'head' table)
15
- def self.encode(offsets)
16
- if offsets.any? { |ofs| ofs > 0xFFFF }
17
- { :type => 1, :table => offsets.pack("N*") }
18
- else
19
- { :type => 0, :table => offsets.map { |o| o/2 }.pack("n*") }
20
- end
21
- end
22
-
23
- def index_of(glyph_id)
24
- @offsets[glyph_id]
25
- end
26
-
27
- def size_of(glyph_id)
28
- @offsets[glyph_id+1] - @offsets[glyph_id]
29
- end
30
-
31
- private
32
-
33
- def parse!
34
- type = file.header.index_to_loc_format == 0 ? "n" : "N"
35
- @offsets = read(length, "#{type}*")
36
-
37
- if file.header.index_to_loc_format == 0
38
- @offsets.map! { |v| v * 2 }
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,40 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Maxp < Table
6
- attr_reader :version
7
- attr_reader :num_glyphs
8
- attr_reader :max_points
9
- attr_reader :max_contours
10
- attr_reader :max_component_points
11
- attr_reader :max_component_contours
12
- attr_reader :max_zones
13
- attr_reader :max_twilight_points
14
- attr_reader :max_storage
15
- attr_reader :max_function_defs
16
- attr_reader :max_instruction_defs
17
- attr_reader :max_stack_elements
18
- attr_reader :max_size_of_instructions
19
- attr_reader :max_component_elements
20
- attr_reader :max_component_depth
21
-
22
- def self.encode(maxp, mapping)
23
- num_glyphs = mapping.length
24
- raw = maxp.raw
25
- raw[4,2] = [num_glyphs].pack("n")
26
- return raw
27
- end
28
-
29
- private
30
-
31
- def parse!
32
- @version, @num_glyphs, @max_points, @max_contours, @max_component_points,
33
- @max_component_contours, @max_zones, @max_twilight_points, @max_storage,
34
- @max_function_defs, @max_instruction_defs, @max_stack_elements,
35
- @max_size_of_instructions, @max_component_elements, @max_component_depth =
36
- read(length, "Nn*")
37
- end
38
- end
39
- end
40
- end
@@ -1,119 +0,0 @@
1
- require 'ttfunk/table'
2
-
3
- module TTFunk
4
- class Table
5
- class Name < Table
6
- class String < ::String
7
- attr_reader :platform_id
8
- attr_reader :encoding_id
9
- attr_reader :language_id
10
-
11
- def initialize(text, platform_id, encoding_id, language_id)
12
- super(text)
13
- @platform_id = platform_id
14
- @encoding_id = encoding_id
15
- @language_id = language_id
16
- end
17
- end
18
-
19
- attr_reader :strings
20
-
21
- attr_reader :copyright
22
- attr_reader :font_family
23
- attr_reader :font_subfamily
24
- attr_reader :unique_subfamily
25
- attr_reader :font_name
26
- attr_reader :version
27
- attr_reader :trademark
28
- attr_reader :manufacturer
29
- attr_reader :designer
30
- attr_reader :description
31
- attr_reader :vendor_url
32
- attr_reader :designer_url
33
- attr_reader :license
34
- attr_reader :license_url
35
- attr_reader :preferred_family
36
- attr_reader :preferred_subfamily
37
- attr_reader :compatible_full
38
- attr_reader :sample_text
39
-
40
- @@subset_tag = "AAAAAA"
41
-
42
- def self.encode(names)
43
- tag = @@subset_tag.dup
44
- @@subset_tag.succ!
45
-
46
- postscript_name = Name::String.new("#{tag}+#{names.postscript_name}", 1, 0, 0)
47
-
48
- strings = names.strings.dup
49
- strings[6] = [postscript_name]
50
- str_count = strings.inject(0) { |sum, (id, list)| sum + list.length }
51
-
52
- table = [0, str_count, 6 + 12 * str_count].pack("n*")
53
- strtable = ""
54
-
55
- strings.each do |id, list|
56
- list.each do |string|
57
- table << [string.platform_id, string.encoding_id, string.language_id, id, string.length, strtable.length].pack("n*")
58
- strtable << string
59
- end
60
- end
61
-
62
- table << strtable
63
- end
64
-
65
- def postscript_name
66
- return @postscript_name if @postscript_name
67
- font_family.first || "unnamed"
68
- end
69
-
70
- private
71
-
72
- def parse!
73
- format, count, string_offset = read(6, "n*")
74
-
75
- entries = []
76
- count.times do
77
- platform, encoding, language, id, length, start_offset = read(12, "n*")
78
- entries << {
79
- :platform_id => platform,
80
- :encoding_id => encoding,
81
- :language_id => language,
82
- :name_id => id,
83
- :length => length,
84
- :offset => offset + string_offset + start_offset
85
- }
86
- end
87
-
88
- @strings = Hash.new { |h,k| h[k] = [] }
89
-
90
- count.times do |i|
91
- io.pos = entries[i][:offset]
92
- text = io.read(entries[i][:length])
93
- @strings[entries[i][:name_id]] << Name::String.new(text,
94
- entries[i][:platform_id], entries[i][:encoding_id], entries[i][:language_id])
95
- end
96
-
97
- @copyright = @strings[0]
98
- @font_family = @strings[1]
99
- @font_subfamily = @strings[2]
100
- @unique_subfamily = @strings[3]
101
- @font_name = @strings[4]
102
- @version = @strings[5]
103
- @postscript_name = @strings[6].first # should only be ONE postscript name
104
- @trademark = @strings[7]
105
- @manufacturer = @strings[8]
106
- @designer = @strings[9]
107
- @description = @strings[10]
108
- @vendor_url = @strings[11]
109
- @designer_url = @strings[12]
110
- @license = @strings[13]
111
- @license_url = @strings[14]
112
- @preferred_family = @strings[15]
113
- @preferred_subfamily = @strings[17]
114
- @compatible_full = @strings[18]
115
- @sample_text = @strings[19]
116
- end
117
- end
118
- end
119
- end