glyph_imager 0.0.3

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 (47) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +53 -0
  6. data/VERSION +1 -0
  7. data/glyph_imager.gemspec +90 -0
  8. data/lib/glyph_imager.rb +102 -0
  9. data/test/fonts/DejaVuSerif.ttf +0 -0
  10. data/test/helper.rb +10 -0
  11. data/test/test_glyph_imager.rb +62 -0
  12. data/vendor/graphics_utf +157 -0
  13. data/vendor/ttf-ruby-0.1/AUTHORS +1 -0
  14. data/vendor/ttf-ruby-0.1/COPYING +340 -0
  15. data/vendor/ttf-ruby-0.1/README +49 -0
  16. data/vendor/ttf-ruby-0.1/TODO +23 -0
  17. data/vendor/ttf-ruby-0.1/VERSION +1 -0
  18. data/vendor/ttf-ruby-0.1/lib/ttf/datatypes.rb +189 -0
  19. data/vendor/ttf-ruby-0.1/lib/ttf/encodings.rb +140 -0
  20. data/vendor/ttf-ruby-0.1/lib/ttf/exceptions.rb +28 -0
  21. data/vendor/ttf-ruby-0.1/lib/ttf/font_loader.rb +290 -0
  22. data/vendor/ttf-ruby-0.1/lib/ttf/fontchunk.rb +77 -0
  23. data/vendor/ttf-ruby-0.1/lib/ttf/table/cmap.rb +408 -0
  24. data/vendor/ttf-ruby-0.1/lib/ttf/table/cvt.rb +49 -0
  25. data/vendor/ttf-ruby-0.1/lib/ttf/table/fpgm.rb +48 -0
  26. data/vendor/ttf-ruby-0.1/lib/ttf/table/gasp.rb +88 -0
  27. data/vendor/ttf-ruby-0.1/lib/ttf/table/glyf.rb +452 -0
  28. data/vendor/ttf-ruby-0.1/lib/ttf/table/head.rb +86 -0
  29. data/vendor/ttf-ruby-0.1/lib/ttf/table/hhea.rb +96 -0
  30. data/vendor/ttf-ruby-0.1/lib/ttf/table/hmtx.rb +98 -0
  31. data/vendor/ttf-ruby-0.1/lib/ttf/table/kern.rb +186 -0
  32. data/vendor/ttf-ruby-0.1/lib/ttf/table/loca.rb +75 -0
  33. data/vendor/ttf-ruby-0.1/lib/ttf/table/maxp.rb +81 -0
  34. data/vendor/ttf-ruby-0.1/lib/ttf/table/name.rb +222 -0
  35. data/vendor/ttf-ruby-0.1/lib/ttf/table/os2.rb +172 -0
  36. data/vendor/ttf-ruby-0.1/lib/ttf/table/post.rb +120 -0
  37. data/vendor/ttf-ruby-0.1/lib/ttf/table/prep.rb +27 -0
  38. data/vendor/ttf-ruby-0.1/lib/ttf/table/vhea.rb +45 -0
  39. data/vendor/ttf-ruby-0.1/lib/ttf/table/vmtx.rb +36 -0
  40. data/vendor/ttf-ruby-0.1/lib/ttf.rb +20 -0
  41. data/vendor/ttf-ruby-0.1/setup.rb +1558 -0
  42. data/vendor/ttf-ruby-0.1/tools/README +44 -0
  43. data/vendor/ttf-ruby-0.1/tools/ttfcairoglyphviewer +229 -0
  44. data/vendor/ttf-ruby-0.1/tools/ttfdump +396 -0
  45. data/vendor/ttf-ruby-0.1/tools/ttfglyph2svg +144 -0
  46. data/vendor/ttf-ruby-0.1/tools/ttfsubset +273 -0
  47. metadata +120 -0
@@ -0,0 +1,144 @@
1
+ # ttfglyph2svg
2
+ # Copyright (C) 2006 Mathieu Blondel
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ $LOAD_PATH.unshift("../lib/")
19
+
20
+ require 'ttf'
21
+
22
+ def puts_svg_header
23
+ puts <<XML
24
+ <?xml version="1.0" standalone="no"?>
25
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
26
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
27
+
28
+ <svg width="100%" height="100%" version="1.1"
29
+ xmlns="http://www.w3.org/2000/svg">
30
+ XML
31
+ end
32
+
33
+ def puts_svg_footer
34
+ puts "</svg>"
35
+ end
36
+
37
+ def puts_simple_glyph(glyph)
38
+ points = glyph.points
39
+
40
+
41
+
42
+ puts "<g>"
43
+
44
+ print "<path d=\""
45
+
46
+ start_new_contour = true
47
+ i = 0
48
+ max_y = 0
49
+
50
+ while i < points.length
51
+
52
+ max_y = points[i].abs_y if points[i].abs_y > max_y
53
+
54
+ if start_new_contour
55
+ # The -y is needed because the directions of the y-axis
56
+ # with SVG and TrueType are opposed.
57
+ print "M#{points[i].abs_x} #{-(points[i].abs_y)}"
58
+ first_point = points[i]
59
+ end
60
+
61
+ if points[i].end_of_contour?
62
+ print "Z"
63
+ start_new_contour = true
64
+ i += 1
65
+ else
66
+ if points[i].on_curve? and points[i + 1].on_curve?
67
+ print "L#{points[i + 1].abs_x} #{-(points[i + 1].abs_y)}"
68
+ i += 1
69
+ else
70
+ if points[i + 1].end_of_contour?
71
+ # Close the contour
72
+ print "Q#{points[i + 1].abs_x} " + \
73
+ "#{-(points[i + 1].abs_y)} " + \
74
+ "#{first_point.abs_x} #{-(first_point.abs_y)}"
75
+ i += 1
76
+ elsif points[i + 2].on_curve?
77
+ print "Q#{points[i + 1].abs_x} " + \
78
+ "#{-(points[i + 1].abs_y)} " + \
79
+ "#{points[i + 2].abs_x} #{-(points[i + 2].abs_y)}"
80
+ i += 2
81
+ else
82
+ # This is an implied on-curve point
83
+ impl_x = (points[i + 2].abs_x - points[i + 1].abs_x) / 2
84
+ impl_x += points[i + 1].abs_x
85
+ impl_y = (points[i + 2].abs_y - points[i + 1].abs_y) / 2
86
+ impl_y += points[i + 1].abs_y
87
+
88
+ print "Q#{points[i + 1].abs_x} " + \
89
+ "#{-(points[i + 1].abs_y)} " + \
90
+ "#{impl_x} #{-(impl_y)}"
91
+ i += 1
92
+ end
93
+ end
94
+
95
+ start_new_contour = false
96
+ end
97
+
98
+ end
99
+
100
+
101
+
102
+ puts "\" transform=\"translate(0, #{max_y + 10})\" " + \
103
+ "style=\"fill:black;stroke:black;\"/>/>"
104
+
105
+ puts "</g>"
106
+ end
107
+
108
+ def puts_composite_glyph(font, glyph)
109
+ glyph_offsets = font.get_table(:loca).glyph_offsets
110
+ glyph.components.each do |gc|
111
+ gc = font.get_table(:glyf).get_glyph_at_offset(glyph_offsets[gc.index])
112
+ if gc.composite?
113
+ puts_composite_glyph(font, gc)
114
+ else
115
+ puts_simple_glyph(gc)
116
+ end
117
+ end
118
+ end
119
+
120
+ font = Font::TTF::File.new(ARGV[0])
121
+
122
+ enc_tbl = font.get_table(:cmap).encoding_tables.find do |t|
123
+ t.class == Font::TTF::Table::Cmap::EncodingTable4
124
+ end
125
+
126
+ if ARGV[1] == "-g"
127
+ offs = font.get_table(:loca).glyph_offsets[ARGV[2].to_i]
128
+ glyph = font.get_table(:glyf).get_glyph_at_offset(offs)
129
+ elsif ARGV[1] == "-c"
130
+ char_code = ARGV[2].unpack("U")[0]
131
+ glyph = enc_tbl.get_glyph_for_unicode(char_code)
132
+ else
133
+ exit!
134
+ end
135
+
136
+ puts_svg_header
137
+
138
+ if glyph.simple?
139
+ puts_simple_glyph(glyph)
140
+ else
141
+ puts_composite_glyph(font, glyph)
142
+ end
143
+
144
+ puts_svg_footer
@@ -0,0 +1,273 @@
1
+ # ttfsubset
2
+ # Copyright (C) 2006 Mathieu Blondel
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ $KCODE = "u"
19
+
20
+ $LOAD_PATH.unshift("../lib/")
21
+
22
+ require 'ttf'
23
+
24
+ =begin
25
+
26
+ We are going to reduce the number of glyphs.
27
+
28
+ Required tables concerned are:
29
+ - cmap
30
+ - glyf
31
+ - hmtx
32
+ - loca
33
+ - maxp
34
+ - post
35
+
36
+ Optional tables concerned are:
37
+ - vmtx
38
+
39
+ Non-supported tables should be removed because they may become incorrect
40
+ if number of @glyphs changed.
41
+
42
+ =end
43
+
44
+ class UnsupportedFont < Exception
45
+ end
46
+
47
+ class Subsetter
48
+
49
+ def add_glyph(glyph, glyph_id, char_code)
50
+ unless @old_to_new_glyph_id.include? glyph_id
51
+ @glyphs << glyph
52
+ new_glyph_id = @glyphs.length - 1
53
+ @glyph_ids << new_glyph_id
54
+
55
+ @old_to_new_glyph_id[glyph_id] = new_glyph_id
56
+ @charmaps[char_code] = new_glyph_id
57
+ #$stderr.puts "Old Glyph #{glyph_id} => New Glyph #{new_glyph_id}"
58
+ #$stderr.puts "Char Code #{char_code} " + \
59
+ # "(#{[char_code].pack("U")}) " + \
60
+ # "=> New Glyph #{new_glyph_id}\n\n"
61
+ @hmetrics << @hmtx_tbl.hmetrics[glyph_id]
62
+ @postscript_names << @post_tbl.names[glyph_id] \
63
+ if @post_tbl.names.include? glyph_id
64
+ end
65
+ end
66
+
67
+ def add_composite_glyph(glyph, glyph_id, char_code)
68
+ glyph_offsets = @font.get_table(:loca).glyph_offsets
69
+ glyph.components.each do |gc|
70
+ offs = glyph_offsets[gc.index]
71
+ gc_glyph = @font.get_table(:glyf).get_glyph_at_offset(offs)
72
+ gc_cc = @enc_tbl.get_unicode_for_glyph_id(gc.index)
73
+
74
+ if gc_glyph.composite?
75
+ add_composite_glyph(gc_glyph, gc.index, gc_cc)
76
+ else
77
+ add_glyph(gc_glyph, gc.index, gc_cc)
78
+ end
79
+ gc.index = @old_to_new_glyph_id[gc.index]
80
+ end
81
+ add_glyph(glyph, glyph_id, char_code)
82
+ end
83
+
84
+ def initialize(filename, input_chars)
85
+
86
+ @font = Font::TTF::File.new(filename)
87
+ @subset = Font::TTF::File.new
88
+
89
+ @enc_tbl = @font.get_table(:cmap).encoding_tables.find do |t|
90
+ t.class == Font::TTF::Table::Cmap::EncodingTable4
91
+ end
92
+
93
+ raise UnsupportedFont, "Needs an encoding table 4 (unicode)" \
94
+ if @enc_tbl.nil? or not @enc_tbl.unicode?
95
+
96
+ @charmaps = {}
97
+ @glyphs = []
98
+ @glyph_ids = []
99
+ @hmetrics = []
100
+ @postscript_names = []
101
+
102
+ @hmtx_tbl = @font.get_table(:hmtx)
103
+ @post_tbl = @font.get_table(:post)
104
+
105
+ # Glyph 0 (unsupported chars match to this glyph)
106
+
107
+ @glyph_ids << 0
108
+ @glyphs << @font.get_table(:glyf).get_glyph_at_offset(0)
109
+ @hmetrics << @hmtx_tbl.hmetrics[0]
110
+ @postscript_names << @post_tbl.names[0] if @post_tbl.names.include? 0
111
+ @charmaps[0] = 0
112
+
113
+ ascii_range = (0..255).to_a
114
+
115
+ @old_to_new_glyph_id = {}
116
+
117
+ @input_chars = input_chars
118
+
119
+ @input_chars.each do |char_code|
120
+ glyph_id = @enc_tbl.get_glyph_id_for_unicode(char_code)
121
+
122
+ if glyph_id != 0
123
+ # glyph_id == 0 means character is not supported by @font
124
+ glyph = @enc_tbl.get_glyph_for_unicode(char_code)
125
+
126
+ if glyph.simple?
127
+ add_glyph(glyph, glyph_id, char_code)
128
+ else
129
+ add_composite_glyph(glyph, glyph_id, char_code)
130
+ end
131
+ end
132
+ end
133
+
134
+ # Cmap
135
+ subset_cmap_tbl = @subset.get_new_table(:cmap)
136
+ subset_enc_tbl = subset_cmap_tbl.get_new_encoding_table4
137
+ subset_enc_tbl.platform_id = \
138
+ Font::TTF::Encodings::Platform::UNICODE
139
+ subset_enc_tbl.encoding_id = \
140
+ Font::TTF::Encodings::UnicodeEncoding::UNICODE
141
+
142
+ subset_enc_tbl.charmaps = @charmaps
143
+ subset_cmap_tbl.encoding_tables << subset_enc_tbl
144
+
145
+ #subset_enc_tbl.charmaps.each do |char_code, glyph_id|
146
+ #$stderr.puts "Char #{char_code} => Glyph #{glyph_id}"
147
+ #end
148
+
149
+ glyph_id_array = [0] * 255
150
+ @charmaps.each do |char_code, glyph_id|
151
+ if char_code <= 255
152
+ glyph_id_array[char_code] = glyph_id
153
+ end
154
+ end
155
+
156
+ subset_enc_tbl0 = subset_cmap_tbl.get_new_encoding_table0
157
+ subset_enc_tbl0.glyph_id_array = glyph_id_array
158
+ subset_cmap_tbl.encoding_tables << subset_enc_tbl0
159
+
160
+ subset_enc_tbl = subset_cmap_tbl.get_new_encoding_table4
161
+ subset_enc_tbl.platform_id = \
162
+ Font::TTF::Encodings::Platform::MICROSOFT
163
+ subset_enc_tbl.encoding_id = \
164
+ Font::TTF::Encodings::MicrosoftEncoding::UNICODE
165
+ subset_enc_tbl.charmaps = @charmaps
166
+ subset_cmap_tbl.encoding_tables << subset_enc_tbl
167
+
168
+ @subset.set_table(subset_cmap_tbl)
169
+
170
+ # Glyf needs Maxp and Post that's why we put them before
171
+
172
+ # Maxp
173
+ @subset.set_table(@font.get_table(:maxp))
174
+
175
+ # Post
176
+ subset_post_tbl = @font.get_table(:post)
177
+ subset_post_tbl.names = @postscript_names
178
+ @subset.set_table(subset_post_tbl)
179
+
180
+ # Glyf
181
+ subset_glyf_tbl = @subset.get_new_table(:glyf)
182
+ subset_glyf_tbl.glyphs = @glyphs
183
+ @subset.set_table(subset_glyf_tbl)
184
+
185
+ # Head
186
+ @subset.set_table(@font.get_table(:head))
187
+
188
+ # Hhea
189
+ @subset.set_table(@font.get_table(:hhea))
190
+
191
+ # Hmtx
192
+ subset_hmtx_tbl = @subset.get_new_table(:hmtx)
193
+ subset_hmtx_tbl.hmetrics = @hmetrics
194
+ @subset.set_table(subset_hmtx_tbl)
195
+
196
+ # Loca
197
+ @subset.set_table(@subset.get_new_table(:loca))
198
+
199
+ # Name
200
+ name_tbl = @font.get_table(:name)
201
+ name_tbl.name_records.find_all do |nr|
202
+ [Font::TTF::Table::Name::NameRecord::UNIQUE_FONT_IDENTIFIER,
203
+ Font::TTF::Table::Name::NameRecord::FONT_FAMILY_NAME,
204
+ Font::TTF::Table::Name::NameRecord::FULL_FONT_NAME,
205
+ Font::TTF::Table::Name::NameRecord::POSTSCRIPT_NAME].include? \
206
+ nr.name_id and (nr.unicode? or nr.roman?)
207
+ end.each do |nr|
208
+ nr.utf8_str += "_subset"
209
+ end
210
+ @subset.set_table(name_tbl)
211
+
212
+ # OS/2
213
+ os2_tbl = @font.get_table(:"OS/2")
214
+ os2_tbl.us_first_char_index = @input_chars.first
215
+ os2_tbl.us_last_char_index = @input_chars.last
216
+ @subset.set_table(os2_tbl)
217
+
218
+ # Kerning
219
+
220
+ if @font.table_list.include? :kern
221
+ kern_tbl = @font.get_table(:kern)
222
+ subtbl = kern_tbl.subtables.find { |stbl| stbl.format == 0 }
223
+
224
+ kerning_pairs = []
225
+
226
+ unless subtbl.nil?
227
+ subtbl.kerning_pairs.each do |kp|
228
+ if @old_to_new_glyph_id.include? kp.left and \
229
+ @old_to_new_glyph_id.include? kp.right
230
+ kp.left = @old_to_new_glyph_id[kp.left]
231
+ kp.right = @old_to_new_glyph_id[kp.right]
232
+ kerning_pairs << kp
233
+ end
234
+ end
235
+ end
236
+
237
+ unless kerning_pairs.empty?
238
+ subset_kern_tbl = @subset.get_new_table(:kern)
239
+ subset_kern_subtbl = subset_kern_tbl.get_new_kerning_subtable0
240
+ subset_kern_subtbl.kerning_pairs = kerning_pairs
241
+ subset_kern_tbl.subtables << subset_kern_subtbl
242
+ @subset.set_table(subset_kern_tbl)
243
+ end
244
+ end
245
+
246
+ # Optional tables which are important for font hinting (grid-fitting)
247
+ [:cvt, :fpgm, :gasp, :prep].each do |tbl|
248
+ @subset.set_table(@font.get_table(tbl)) if @font.table_list.include? tbl
249
+ end
250
+
251
+ end
252
+
253
+ def dump
254
+ @subset.dump
255
+ end
256
+
257
+ end
258
+
259
+ require 'pathname'
260
+
261
+ input_chars = $stdin.readlines.join.unpack("U*").uniq.sort
262
+ ARGV.each_with_index do |filename, i|
263
+ begin
264
+ subset_path = "subset_" + Pathname.new(filename).basename
265
+ puts "Creating " + subset_path + "..."
266
+ File.new(subset_path,
267
+ File::CREAT|File::RDWR).write(Subsetter.new(filename,
268
+ input_chars).dump)
269
+ rescue UnsupportedFont, Font::TTF::MalformedFont,
270
+ Font::TTF::TableMissing => e
271
+ puts e
272
+ end
273
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: glyph_imager
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 3
9
+ version: 0.0.3
10
+ platform: ruby
11
+ authors:
12
+ - William Melody
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-27 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: thoughtbot-shoulda
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ description: Generate images of glyphs for a specified character in a specified font
33
+ email: hi@williammelody.com
34
+ executables: []
35
+
36
+ extensions: []
37
+
38
+ extra_rdoc_files:
39
+ - LICENSE
40
+ - README.rdoc
41
+ files:
42
+ - .document
43
+ - .gitignore
44
+ - LICENSE
45
+ - README.rdoc
46
+ - Rakefile
47
+ - VERSION
48
+ - glyph_imager.gemspec
49
+ - lib/glyph_imager.rb
50
+ - test/fonts/DejaVuSerif.ttf
51
+ - test/helper.rb
52
+ - test/test_glyph_imager.rb
53
+ - vendor/graphics_utf
54
+ - vendor/ttf-ruby-0.1/AUTHORS
55
+ - vendor/ttf-ruby-0.1/COPYING
56
+ - vendor/ttf-ruby-0.1/README
57
+ - vendor/ttf-ruby-0.1/TODO
58
+ - vendor/ttf-ruby-0.1/VERSION
59
+ - vendor/ttf-ruby-0.1/lib/ttf.rb
60
+ - vendor/ttf-ruby-0.1/lib/ttf/datatypes.rb
61
+ - vendor/ttf-ruby-0.1/lib/ttf/encodings.rb
62
+ - vendor/ttf-ruby-0.1/lib/ttf/exceptions.rb
63
+ - vendor/ttf-ruby-0.1/lib/ttf/font_loader.rb
64
+ - vendor/ttf-ruby-0.1/lib/ttf/fontchunk.rb
65
+ - vendor/ttf-ruby-0.1/lib/ttf/table/cmap.rb
66
+ - vendor/ttf-ruby-0.1/lib/ttf/table/cvt.rb
67
+ - vendor/ttf-ruby-0.1/lib/ttf/table/fpgm.rb
68
+ - vendor/ttf-ruby-0.1/lib/ttf/table/gasp.rb
69
+ - vendor/ttf-ruby-0.1/lib/ttf/table/glyf.rb
70
+ - vendor/ttf-ruby-0.1/lib/ttf/table/head.rb
71
+ - vendor/ttf-ruby-0.1/lib/ttf/table/hhea.rb
72
+ - vendor/ttf-ruby-0.1/lib/ttf/table/hmtx.rb
73
+ - vendor/ttf-ruby-0.1/lib/ttf/table/kern.rb
74
+ - vendor/ttf-ruby-0.1/lib/ttf/table/loca.rb
75
+ - vendor/ttf-ruby-0.1/lib/ttf/table/maxp.rb
76
+ - vendor/ttf-ruby-0.1/lib/ttf/table/name.rb
77
+ - vendor/ttf-ruby-0.1/lib/ttf/table/os2.rb
78
+ - vendor/ttf-ruby-0.1/lib/ttf/table/post.rb
79
+ - vendor/ttf-ruby-0.1/lib/ttf/table/prep.rb
80
+ - vendor/ttf-ruby-0.1/lib/ttf/table/vhea.rb
81
+ - vendor/ttf-ruby-0.1/lib/ttf/table/vmtx.rb
82
+ - vendor/ttf-ruby-0.1/setup.rb
83
+ - vendor/ttf-ruby-0.1/tools/README
84
+ - vendor/ttf-ruby-0.1/tools/ttfcairoglyphviewer
85
+ - vendor/ttf-ruby-0.1/tools/ttfdump
86
+ - vendor/ttf-ruby-0.1/tools/ttfglyph2svg
87
+ - vendor/ttf-ruby-0.1/tools/ttfsubset
88
+ has_rdoc: true
89
+ homepage: http://github.com/alphabetum/glyph_imager
90
+ licenses: []
91
+
92
+ post_install_message:
93
+ rdoc_options:
94
+ - --charset=UTF-8
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ segments:
109
+ - 0
110
+ version: "0"
111
+ requirements: []
112
+
113
+ rubyforge_project:
114
+ rubygems_version: 1.3.6
115
+ signing_key:
116
+ specification_version: 3
117
+ summary: Generate images of glyphs for a specified character in a specified font
118
+ test_files:
119
+ - test/helper.rb
120
+ - test/test_glyph_imager.rb