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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/glyph_imager.gemspec +90 -0
- data/lib/glyph_imager.rb +102 -0
- data/test/fonts/DejaVuSerif.ttf +0 -0
- data/test/helper.rb +10 -0
- data/test/test_glyph_imager.rb +62 -0
- data/vendor/graphics_utf +157 -0
- data/vendor/ttf-ruby-0.1/AUTHORS +1 -0
- data/vendor/ttf-ruby-0.1/COPYING +340 -0
- data/vendor/ttf-ruby-0.1/README +49 -0
- data/vendor/ttf-ruby-0.1/TODO +23 -0
- data/vendor/ttf-ruby-0.1/VERSION +1 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/datatypes.rb +189 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/encodings.rb +140 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/exceptions.rb +28 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/font_loader.rb +290 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/fontchunk.rb +77 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/cmap.rb +408 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/cvt.rb +49 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/fpgm.rb +48 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/gasp.rb +88 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/glyf.rb +452 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/head.rb +86 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/hhea.rb +96 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/hmtx.rb +98 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/kern.rb +186 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/loca.rb +75 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/maxp.rb +81 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/name.rb +222 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/os2.rb +172 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/post.rb +120 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/prep.rb +27 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/vhea.rb +45 -0
- data/vendor/ttf-ruby-0.1/lib/ttf/table/vmtx.rb +36 -0
- data/vendor/ttf-ruby-0.1/lib/ttf.rb +20 -0
- data/vendor/ttf-ruby-0.1/setup.rb +1558 -0
- data/vendor/ttf-ruby-0.1/tools/README +44 -0
- data/vendor/ttf-ruby-0.1/tools/ttfcairoglyphviewer +229 -0
- data/vendor/ttf-ruby-0.1/tools/ttfdump +396 -0
- data/vendor/ttf-ruby-0.1/tools/ttfglyph2svg +144 -0
- data/vendor/ttf-ruby-0.1/tools/ttfsubset +273 -0
- 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
|