ttfunk 1.5.1 → 1.6.0
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.
- 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
|