ttfunk 1.5.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +60 -0
- data/README.md +2 -1
- data/lib/ttfunk.rb +45 -0
- data/lib/ttfunk/aggregate.rb +15 -0
- data/lib/ttfunk/bin_utils.rb +47 -0
- data/lib/ttfunk/bit_field.rb +31 -0
- data/lib/ttfunk/collection.rb +3 -1
- data/lib/ttfunk/directory.rb +6 -0
- data/lib/ttfunk/encoded_string.rb +97 -0
- data/lib/ttfunk/max.rb +25 -0
- data/lib/ttfunk/min.rb +25 -0
- data/lib/ttfunk/one_based_array.rb +36 -0
- data/lib/ttfunk/otf_encoder.rb +61 -0
- data/lib/ttfunk/placeholder.rb +13 -0
- data/lib/ttfunk/reader.rb +34 -32
- data/lib/ttfunk/resource_file.rb +7 -5
- data/lib/ttfunk/sci_form.rb +29 -0
- data/lib/ttfunk/sub_table.rb +38 -0
- data/lib/ttfunk/subset.rb +2 -0
- data/lib/ttfunk/subset/base.rb +61 -120
- data/lib/ttfunk/subset/code_page.rb +89 -0
- data/lib/ttfunk/subset/mac_roman.rb +5 -42
- data/lib/ttfunk/subset/unicode.rb +12 -6
- data/lib/ttfunk/subset/unicode_8bit.rb +14 -12
- data/lib/ttfunk/subset/windows_1252.rb +5 -47
- data/lib/ttfunk/subset_collection.rb +4 -0
- data/lib/ttfunk/sum.rb +20 -0
- data/lib/ttfunk/table.rb +4 -0
- data/lib/ttfunk/table/cff.rb +69 -0
- data/lib/ttfunk/table/cff/charset.rb +212 -0
- data/lib/ttfunk/table/cff/charsets.rb +14 -0
- data/lib/ttfunk/table/cff/charsets/expert.rb +189 -0
- data/lib/ttfunk/table/cff/charsets/expert_subset.rb +119 -0
- data/lib/ttfunk/table/cff/charsets/iso_adobe.rb +241 -0
- data/lib/ttfunk/table/cff/charsets/standard_strings.rb +404 -0
- data/lib/ttfunk/table/cff/charstring.rb +487 -0
- data/lib/ttfunk/table/cff/charstrings_index.rb +39 -0
- data/lib/ttfunk/table/cff/dict.rb +266 -0
- data/lib/ttfunk/table/cff/encoding.rb +220 -0
- data/lib/ttfunk/table/cff/encodings.rb +12 -0
- data/lib/ttfunk/table/cff/encodings/expert.rb +206 -0
- data/lib/ttfunk/table/cff/encodings/standard.rb +181 -0
- data/lib/ttfunk/table/cff/fd_selector.rb +150 -0
- data/lib/ttfunk/table/cff/font_dict.rb +79 -0
- data/lib/ttfunk/table/cff/font_index.rb +29 -0
- data/lib/ttfunk/table/cff/header.rb +33 -0
- data/lib/ttfunk/table/cff/index.rb +125 -0
- data/lib/ttfunk/table/cff/one_based_index.rb +31 -0
- data/lib/ttfunk/table/cff/path.rb +66 -0
- data/lib/ttfunk/table/cff/private_dict.rb +84 -0
- data/lib/ttfunk/table/cff/subr_index.rb +19 -0
- data/lib/ttfunk/table/cff/top_dict.rb +230 -0
- data/lib/ttfunk/table/cff/top_index.rb +16 -0
- data/lib/ttfunk/table/cmap.rb +4 -4
- data/lib/ttfunk/table/cmap/format00.rb +1 -2
- data/lib/ttfunk/table/cmap/format04.rb +11 -3
- data/lib/ttfunk/table/cmap/format06.rb +2 -0
- data/lib/ttfunk/table/cmap/format10.rb +2 -0
- data/lib/ttfunk/table/cmap/format12.rb +2 -0
- data/lib/ttfunk/table/cmap/subtable.rb +12 -8
- data/lib/ttfunk/table/dsig.rb +50 -0
- data/lib/ttfunk/table/glyf.rb +11 -9
- data/lib/ttfunk/table/glyf/compound.rb +14 -7
- data/lib/ttfunk/table/glyf/path_based.rb +47 -0
- data/lib/ttfunk/table/glyf/simple.rb +21 -15
- data/lib/ttfunk/table/head.rb +43 -5
- data/lib/ttfunk/table/hhea.rb +47 -4
- data/lib/ttfunk/table/hmtx.rb +11 -4
- data/lib/ttfunk/table/kern.rb +3 -0
- data/lib/ttfunk/table/kern/format0.rb +3 -0
- data/lib/ttfunk/table/loca.rb +2 -0
- data/lib/ttfunk/table/maxp.rb +144 -10
- data/lib/ttfunk/table/name.rb +75 -37
- data/lib/ttfunk/table/os2.rb +327 -4
- data/lib/ttfunk/table/post.rb +8 -1
- data/lib/ttfunk/table/post/format10.rb +2 -0
- data/lib/ttfunk/table/post/format20.rb +5 -1
- data/lib/ttfunk/table/post/format30.rb +2 -0
- data/lib/ttfunk/table/post/format40.rb +2 -0
- data/lib/ttfunk/table/sbix.rb +2 -0
- data/lib/ttfunk/table/simple.rb +2 -0
- data/lib/ttfunk/table/vorg.rb +54 -0
- data/lib/ttfunk/ttf_encoder.rb +220 -0
- metadata +88 -20
- metadata.gz.sig +0 -0
- data/lib/ttfunk/encoding/mac_roman.rb +0 -100
- data/lib/ttfunk/encoding/windows_1252.rb +0 -76
data/lib/ttfunk/table/post.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../table'
|
2
4
|
|
3
5
|
module TTFunk
|
@@ -17,6 +19,7 @@ module TTFunk
|
|
17
19
|
|
18
20
|
def self.encode(post, mapping)
|
19
21
|
return nil unless post.exists?
|
22
|
+
|
20
23
|
post.recode(mapping)
|
21
24
|
end
|
22
25
|
|
@@ -82,7 +85,11 @@ module TTFunk
|
|
82
85
|
end
|
83
86
|
|
84
87
|
def parse_format!
|
85
|
-
warn
|
88
|
+
warn(
|
89
|
+
Kernel.format(
|
90
|
+
'postscript table format 0x%08X is not supported', @format
|
91
|
+
)
|
92
|
+
)
|
86
93
|
end
|
87
94
|
end
|
88
95
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'format10'
|
2
4
|
require 'stringio'
|
3
5
|
|
@@ -9,6 +11,8 @@ module TTFunk
|
|
9
11
|
|
10
12
|
def glyph_for(code)
|
11
13
|
index = @glyph_name_index[code]
|
14
|
+
return '.notdef' unless index
|
15
|
+
|
12
16
|
if index <= 257
|
13
17
|
POSTSCRIPT_GLYPHS[index]
|
14
18
|
else
|
@@ -25,7 +29,7 @@ module TTFunk
|
|
25
29
|
|
26
30
|
strings = StringIO.new(io.read(offset + length - io.pos))
|
27
31
|
until strings.eof?
|
28
|
-
length = strings.read(1).
|
32
|
+
length = strings.read(1).unpack1('C')
|
29
33
|
@names << strings.read(length)
|
30
34
|
end
|
31
35
|
end
|
data/lib/ttfunk/table/sbix.rb
CHANGED
data/lib/ttfunk/table/simple.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../table'
|
4
|
+
|
5
|
+
module TTFunk
|
6
|
+
class Table
|
7
|
+
class Vorg < Table
|
8
|
+
TAG = 'VORG'
|
9
|
+
|
10
|
+
attr_reader :major_version, :minor_version
|
11
|
+
attr_reader :default_vert_origin_y, :count
|
12
|
+
|
13
|
+
def self.encode(vorg)
|
14
|
+
return nil unless vorg
|
15
|
+
|
16
|
+
''.b.tap do |table|
|
17
|
+
table << [
|
18
|
+
vorg.major_version, vorg.minor_version,
|
19
|
+
vorg.default_vert_origin_y, vorg.count
|
20
|
+
].pack('n*')
|
21
|
+
|
22
|
+
vorg.origins.each_pair do |glyph_id, vert_origin_y|
|
23
|
+
table << [glyph_id, vert_origin_y].pack('n*')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def for(glyph_id)
|
29
|
+
@origins.fetch(glyph_id, default_vert_origin_y)
|
30
|
+
end
|
31
|
+
|
32
|
+
def tag
|
33
|
+
TAG
|
34
|
+
end
|
35
|
+
|
36
|
+
def origins
|
37
|
+
@origins ||= {}
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def parse!
|
43
|
+
@major_version, @minor_version = read(4, 'n*')
|
44
|
+
@default_vert_origin_y = read_signed(1).first
|
45
|
+
@count = read(2, 'n').first
|
46
|
+
|
47
|
+
count.times do
|
48
|
+
glyph_id = read(2, 'n').first
|
49
|
+
origins[glyph_id] = read_signed(1).first
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,220 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TTFunk
|
4
|
+
class TTFEncoder
|
5
|
+
OPTIMAL_TABLE_ORDER = [
|
6
|
+
'head', 'hhea', 'maxp', 'OS/2', 'hmtx', 'LTSH', 'VDMX',
|
7
|
+
'hdmx', 'cmap', 'fpgm', 'prep', 'cvt ', 'loca', 'glyf',
|
8
|
+
'kern', 'name', 'post', 'gasp', 'PCLT'
|
9
|
+
].freeze
|
10
|
+
|
11
|
+
attr_reader :original, :subset, :options
|
12
|
+
|
13
|
+
def initialize(original, subset, options = {})
|
14
|
+
@original = original
|
15
|
+
@subset = subset
|
16
|
+
@options = options
|
17
|
+
end
|
18
|
+
|
19
|
+
def encode
|
20
|
+
# https://www.microsoft.com/typography/otspec/otff.htm#offsetTable
|
21
|
+
search_range = 2**Math.log2(tables.length).floor * 16
|
22
|
+
entry_selector = Math.log2(2**Math.log2(tables.length).floor).to_i
|
23
|
+
range_shift = tables.length * 16 - search_range
|
24
|
+
range_shift = 0 if range_shift < 0
|
25
|
+
|
26
|
+
newfont = EncodedString.new
|
27
|
+
|
28
|
+
newfont << [
|
29
|
+
original.directory.scaler_type,
|
30
|
+
tables.length,
|
31
|
+
search_range,
|
32
|
+
entry_selector,
|
33
|
+
range_shift
|
34
|
+
].pack('Nn*')
|
35
|
+
|
36
|
+
# Tables are supposed to be listed in ascending order whereas there is a
|
37
|
+
# known optimal order for table data.
|
38
|
+
tables.keys.sort.each do |tag|
|
39
|
+
newfont << [tag, checksum(tables[tag])].pack('A4N')
|
40
|
+
newfont << Placeholder.new(tag, length: 4)
|
41
|
+
newfont << [tables[tag].length].pack('N')
|
42
|
+
end
|
43
|
+
|
44
|
+
optimal_table_order.each do |optimal_tag|
|
45
|
+
next unless tables.include?(optimal_tag)
|
46
|
+
|
47
|
+
newfont.resolve_placeholder(optimal_tag, [newfont.length].pack('N'))
|
48
|
+
newfont << tables[optimal_tag]
|
49
|
+
newfont.align!(4)
|
50
|
+
end
|
51
|
+
|
52
|
+
sum = checksum(newfont)
|
53
|
+
adjustment = 0xB1B0AFBA - sum
|
54
|
+
newfont.resolve_placeholder(:checksum, [adjustment].pack('N'))
|
55
|
+
|
56
|
+
newfont.string
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def optimal_table_order
|
62
|
+
OPTIMAL_TABLE_ORDER +
|
63
|
+
(tables.keys - ['DSIG'] - OPTIMAL_TABLE_ORDER) +
|
64
|
+
['DSIG']
|
65
|
+
end
|
66
|
+
|
67
|
+
# "mandatory" tables. Every font should ("should") have these
|
68
|
+
|
69
|
+
def cmap_table
|
70
|
+
@cmap_table ||= subset.new_cmap_table
|
71
|
+
end
|
72
|
+
|
73
|
+
def glyf_table
|
74
|
+
@glyf_table ||= TTFunk::Table::Glyf.encode(
|
75
|
+
glyphs, new_to_old_glyph, old_to_new_glyph
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
def loca_table
|
80
|
+
@loca_table ||= TTFunk::Table::Loca.encode(
|
81
|
+
glyf_table[:offsets]
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
def hmtx_table
|
86
|
+
@hmtx_table ||= TTFunk::Table::Hmtx.encode(
|
87
|
+
original.horizontal_metrics, new_to_old_glyph
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def hhea_table
|
92
|
+
@hhea_table = TTFunk::Table::Hhea.encode(
|
93
|
+
original.horizontal_header, hmtx_table, original, new_to_old_glyph
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
def maxp_table
|
98
|
+
@maxp_table ||= TTFunk::Table::Maxp.encode(
|
99
|
+
original.maximum_profile, old_to_new_glyph
|
100
|
+
)
|
101
|
+
end
|
102
|
+
|
103
|
+
def post_table
|
104
|
+
@post_table ||= TTFunk::Table::Post.encode(
|
105
|
+
original.postscript, new_to_old_glyph
|
106
|
+
)
|
107
|
+
end
|
108
|
+
|
109
|
+
def name_table
|
110
|
+
@name_table ||= TTFunk::Table::Name.encode(
|
111
|
+
original.name, glyf_table.fetch(:table, '')
|
112
|
+
)
|
113
|
+
end
|
114
|
+
|
115
|
+
def head_table
|
116
|
+
@head_table ||= TTFunk::Table::Head.encode(
|
117
|
+
original.header, loca_table, new_to_old_glyph
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
121
|
+
# "optional" tables. Fonts may omit these if they do not need them.
|
122
|
+
# Because they apply globally, we can simply copy them over, without
|
123
|
+
# modification, if they exist.
|
124
|
+
|
125
|
+
def os2_table
|
126
|
+
@os2_table ||= TTFunk::Table::OS2.encode(original.os2, subset)
|
127
|
+
end
|
128
|
+
|
129
|
+
def cvt_table
|
130
|
+
@cvt_table ||= TTFunk::Table::Simple.new(original, 'cvt ').raw
|
131
|
+
end
|
132
|
+
|
133
|
+
def fpgm_table
|
134
|
+
@fpgm_table ||= TTFunk::Table::Simple.new(original, 'fpgm').raw
|
135
|
+
end
|
136
|
+
|
137
|
+
def prep_table
|
138
|
+
@prep_table ||= TTFunk::Table::Simple.new(original, 'prep').raw
|
139
|
+
end
|
140
|
+
|
141
|
+
def gasp_table
|
142
|
+
@gasp_table ||= TTFunk::Table::Simple.new(original, 'gasp').raw
|
143
|
+
end
|
144
|
+
|
145
|
+
def kern_table
|
146
|
+
# for PDFs, the kerning info is all included in the PDF as the text is
|
147
|
+
# drawn. Thus, the PDF readers do not actually use the kerning info in
|
148
|
+
# embedded fonts. If the library is used for something else, the
|
149
|
+
# generated subfont may need a kerning table... in that case, you need
|
150
|
+
# to opt into it.
|
151
|
+
if options[:kerning]
|
152
|
+
@kern_table ||= TTFunk::Table::Kern.encode(
|
153
|
+
original.kerning, old_to_new_glyph
|
154
|
+
)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def vorg_table
|
159
|
+
@vorg_table ||= TTFunk::Table::Vorg.encode(
|
160
|
+
original.vertical_origins
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
164
|
+
def dsig_table
|
165
|
+
@dsig_table ||= TTFunk::Table::Dsig.encode(
|
166
|
+
original.digital_signature
|
167
|
+
)
|
168
|
+
end
|
169
|
+
|
170
|
+
def tables
|
171
|
+
@tables ||= {
|
172
|
+
'cmap' => cmap_table[:table],
|
173
|
+
'glyf' => glyf_table[:table],
|
174
|
+
'loca' => loca_table[:table],
|
175
|
+
'kern' => kern_table,
|
176
|
+
'hmtx' => hmtx_table[:table],
|
177
|
+
'hhea' => hhea_table,
|
178
|
+
'maxp' => maxp_table,
|
179
|
+
'OS/2' => os2_table,
|
180
|
+
'post' => post_table,
|
181
|
+
'name' => name_table,
|
182
|
+
'head' => head_table,
|
183
|
+
'prep' => prep_table,
|
184
|
+
'fpgm' => fpgm_table,
|
185
|
+
'cvt ' => cvt_table,
|
186
|
+
'VORG' => vorg_table,
|
187
|
+
'DSIG' => dsig_table,
|
188
|
+
'gasp' => gasp_table
|
189
|
+
}.reject { |_tag, table| table.nil? }
|
190
|
+
end
|
191
|
+
|
192
|
+
def glyphs
|
193
|
+
subset.glyphs
|
194
|
+
end
|
195
|
+
|
196
|
+
def new_to_old_glyph
|
197
|
+
subset.new_to_old_glyph
|
198
|
+
end
|
199
|
+
|
200
|
+
def old_to_new_glyph
|
201
|
+
subset.old_to_new_glyph
|
202
|
+
end
|
203
|
+
|
204
|
+
def checksum(data)
|
205
|
+
align(raw(data), 4).unpack('N*').reduce(0, :+) & 0xFFFF_FFFF
|
206
|
+
end
|
207
|
+
|
208
|
+
def raw(data)
|
209
|
+
data.respond_to?(:unresolved_string) ? data.unresolved_string : data
|
210
|
+
end
|
211
|
+
|
212
|
+
def align(data, width)
|
213
|
+
if data.length % width > 0
|
214
|
+
data + "\0" * (width - data.length % width)
|
215
|
+
else
|
216
|
+
data
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ttfunk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregory Brown
|
@@ -9,14 +9,15 @@ authors:
|
|
9
9
|
- Daniel Nelson
|
10
10
|
- Jonathan Greenberg
|
11
11
|
- James Healy
|
12
|
+
- Cameron Dutro
|
12
13
|
autorequire:
|
13
14
|
bindir: bin
|
14
15
|
cert_chain:
|
15
16
|
- |
|
16
17
|
-----BEGIN CERTIFICATE-----
|
17
|
-
|
18
|
+
MIIDMjCCAhqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MQ0wCwYDVQQDDARhbGV4
|
18
19
|
MRkwFwYKCZImiZPyLGQBGRYJcG9pbnRsZXNzMRMwEQYKCZImiZPyLGQBGRYDb25l
|
19
|
-
|
20
|
+
MB4XDTE5MTIwMjEwMjAzNVoXDTIwMTIwMTEwMjAzNVowPzENMAsGA1UEAwwEYWxl
|
20
21
|
eDEZMBcGCgmSJomT8ixkARkWCXBvaW50bGVzczETMBEGCgmSJomT8ixkARkWA29u
|
21
22
|
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM85Us8YQr55o/rMl+J+
|
22
23
|
ula89ODiqjdc0kk+ibzRLCpfaFUJWxEMrhFiApRCopFDMeGXHXjBkfBYsRMFVs0M
|
@@ -24,17 +25,16 @@ cert_chain:
|
|
24
25
|
K6f/TAggK0+/K1j1NjT+WSVaMBuyomM067ejwhiQkEA3+tT3oT/paEXCOfEtxOdX
|
25
26
|
1F8VFd2MbmMK6CGgHbFLApfyDBtDx+ydplGZ3IMZg2nPqwYXTPJx+IuRO21ssDad
|
26
27
|
gBMIAvL3wIeezJk2xONvhYg0K5jbIQOPB6zD1/9E6Q0LrwSBDkz5oyOn4PRZxgZ/
|
27
|
-
|
28
|
-
jBJVt6ie5r83L/
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
5u3JK+T0toNEYkMuV6W8NU+gVyo=
|
28
|
+
OiMCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFE+A
|
29
|
+
jBJVt6ie5r83L/znvqjF1RuuMA0GCSqGSIb3DQEBCwUAA4IBAQBE9BhVReOpWN3A
|
30
|
+
S5L3I9rCVg3aj5/7Z2K3Op6Q1VlCgv9UR+r8wqox9NxA94HAsmOexr5tmRVHO4WC
|
31
|
+
nEZRHK9j4MzjKKChiRxLgWh78o/Mwvn2QT6cGCtUzfboWuVKACB5oJyAmfwomhUw
|
32
|
+
4/zDsx6J4v1dDLy3vNu062uYbFLf94qRAo34r5cMt2Z3bC68zrbcRxfUE8fOudkt
|
33
|
+
u8IGMi8WtDe3DkNUiV3rZ1XOdcg5q5vJye4wsy+TJ3733jrdqa+XnI7r8joFuJry
|
34
|
+
NAnYg0X9IoxXQRCJn85h0SOQBU63TUfKDrERXDy0NLZT6sErDnpx84+ygqpxVAD+
|
35
|
+
4qo2amfe
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date:
|
37
|
+
date: 2020-01-04 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: rake
|
@@ -70,14 +70,42 @@ dependencies:
|
|
70
70
|
requirements:
|
71
71
|
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
73
|
+
version: '0.68'
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
78
|
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
80
|
+
version: '0.68'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rubocop-performance
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1.1'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '1.1'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubocop-rspec
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.32'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '1.32'
|
81
109
|
- !ruby/object:Gem::Dependency
|
82
110
|
name: yard
|
83
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,6 +127,7 @@ email:
|
|
99
127
|
- dnelson@bluejade.com
|
100
128
|
- greenberg@entryway.net
|
101
129
|
- jimmy@deefa.com
|
130
|
+
- camertron@gmail.com
|
102
131
|
executables: []
|
103
132
|
extensions: []
|
104
133
|
extra_rdoc_files: []
|
@@ -110,20 +139,56 @@ files:
|
|
110
139
|
- LICENSE
|
111
140
|
- README.md
|
112
141
|
- lib/ttfunk.rb
|
142
|
+
- lib/ttfunk/aggregate.rb
|
143
|
+
- lib/ttfunk/bin_utils.rb
|
144
|
+
- lib/ttfunk/bit_field.rb
|
113
145
|
- lib/ttfunk/collection.rb
|
114
146
|
- lib/ttfunk/directory.rb
|
115
|
-
- lib/ttfunk/
|
116
|
-
- lib/ttfunk/
|
147
|
+
- lib/ttfunk/encoded_string.rb
|
148
|
+
- lib/ttfunk/max.rb
|
149
|
+
- lib/ttfunk/min.rb
|
150
|
+
- lib/ttfunk/one_based_array.rb
|
151
|
+
- lib/ttfunk/otf_encoder.rb
|
152
|
+
- lib/ttfunk/placeholder.rb
|
117
153
|
- lib/ttfunk/reader.rb
|
118
154
|
- lib/ttfunk/resource_file.rb
|
155
|
+
- lib/ttfunk/sci_form.rb
|
156
|
+
- lib/ttfunk/sub_table.rb
|
119
157
|
- lib/ttfunk/subset.rb
|
120
158
|
- lib/ttfunk/subset/base.rb
|
159
|
+
- lib/ttfunk/subset/code_page.rb
|
121
160
|
- lib/ttfunk/subset/mac_roman.rb
|
122
161
|
- lib/ttfunk/subset/unicode.rb
|
123
162
|
- lib/ttfunk/subset/unicode_8bit.rb
|
124
163
|
- lib/ttfunk/subset/windows_1252.rb
|
125
164
|
- lib/ttfunk/subset_collection.rb
|
165
|
+
- lib/ttfunk/sum.rb
|
126
166
|
- lib/ttfunk/table.rb
|
167
|
+
- lib/ttfunk/table/cff.rb
|
168
|
+
- lib/ttfunk/table/cff/charset.rb
|
169
|
+
- lib/ttfunk/table/cff/charsets.rb
|
170
|
+
- lib/ttfunk/table/cff/charsets/expert.rb
|
171
|
+
- lib/ttfunk/table/cff/charsets/expert_subset.rb
|
172
|
+
- lib/ttfunk/table/cff/charsets/iso_adobe.rb
|
173
|
+
- lib/ttfunk/table/cff/charsets/standard_strings.rb
|
174
|
+
- lib/ttfunk/table/cff/charstring.rb
|
175
|
+
- lib/ttfunk/table/cff/charstrings_index.rb
|
176
|
+
- lib/ttfunk/table/cff/dict.rb
|
177
|
+
- lib/ttfunk/table/cff/encoding.rb
|
178
|
+
- lib/ttfunk/table/cff/encodings.rb
|
179
|
+
- lib/ttfunk/table/cff/encodings/expert.rb
|
180
|
+
- lib/ttfunk/table/cff/encodings/standard.rb
|
181
|
+
- lib/ttfunk/table/cff/fd_selector.rb
|
182
|
+
- lib/ttfunk/table/cff/font_dict.rb
|
183
|
+
- lib/ttfunk/table/cff/font_index.rb
|
184
|
+
- lib/ttfunk/table/cff/header.rb
|
185
|
+
- lib/ttfunk/table/cff/index.rb
|
186
|
+
- lib/ttfunk/table/cff/one_based_index.rb
|
187
|
+
- lib/ttfunk/table/cff/path.rb
|
188
|
+
- lib/ttfunk/table/cff/private_dict.rb
|
189
|
+
- lib/ttfunk/table/cff/subr_index.rb
|
190
|
+
- lib/ttfunk/table/cff/top_dict.rb
|
191
|
+
- lib/ttfunk/table/cff/top_index.rb
|
127
192
|
- lib/ttfunk/table/cmap.rb
|
128
193
|
- lib/ttfunk/table/cmap/format00.rb
|
129
194
|
- lib/ttfunk/table/cmap/format04.rb
|
@@ -131,8 +196,10 @@ files:
|
|
131
196
|
- lib/ttfunk/table/cmap/format10.rb
|
132
197
|
- lib/ttfunk/table/cmap/format12.rb
|
133
198
|
- lib/ttfunk/table/cmap/subtable.rb
|
199
|
+
- lib/ttfunk/table/dsig.rb
|
134
200
|
- lib/ttfunk/table/glyf.rb
|
135
201
|
- lib/ttfunk/table/glyf/compound.rb
|
202
|
+
- lib/ttfunk/table/glyf/path_based.rb
|
136
203
|
- lib/ttfunk/table/glyf/simple.rb
|
137
204
|
- lib/ttfunk/table/head.rb
|
138
205
|
- lib/ttfunk/table/hhea.rb
|
@@ -150,6 +217,8 @@ files:
|
|
150
217
|
- lib/ttfunk/table/post/format40.rb
|
151
218
|
- lib/ttfunk/table/sbix.rb
|
152
219
|
- lib/ttfunk/table/simple.rb
|
220
|
+
- lib/ttfunk/table/vorg.rb
|
221
|
+
- lib/ttfunk/ttf_encoder.rb
|
153
222
|
homepage: https://prawnpdf.org
|
154
223
|
licenses:
|
155
224
|
- Nonstandard
|
@@ -164,15 +233,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
233
|
requirements:
|
165
234
|
- - "~>"
|
166
235
|
- !ruby/object:Gem::Version
|
167
|
-
version: '2.
|
236
|
+
version: '2.4'
|
168
237
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
238
|
requirements:
|
170
239
|
- - ">="
|
171
240
|
- !ruby/object:Gem::Version
|
172
241
|
version: '0'
|
173
242
|
requirements: []
|
174
|
-
|
175
|
-
rubygems_version: 2.6.11
|
243
|
+
rubygems_version: 3.0.3
|
176
244
|
signing_key:
|
177
245
|
specification_version: 4
|
178
246
|
summary: TrueType Font Metrics Parser
|