fontisan 0.2.0 → 0.2.2
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 +4 -4
- data/.rubocop_todo.yml +119 -308
- data/README.adoc +1525 -1323
- data/Rakefile +45 -47
- data/benchmark/variation_quick_bench.rb +4 -4
- data/docs/FONT_HINTING.adoc +562 -0
- data/docs/VARIABLE_FONT_OPERATIONS.adoc +599 -0
- data/lib/fontisan/cli.rb +92 -34
- data/lib/fontisan/collection/builder.rb +82 -0
- data/lib/fontisan/collection/offset_calculator.rb +2 -0
- data/lib/fontisan/collection/table_deduplicator.rb +76 -0
- data/lib/fontisan/commands/base_command.rb +21 -2
- data/lib/fontisan/commands/convert_command.rb +96 -165
- data/lib/fontisan/commands/info_command.rb +111 -5
- data/lib/fontisan/commands/instance_command.rb +77 -85
- data/lib/fontisan/commands/validate_command.rb +28 -0
- data/lib/fontisan/config/validation_rules.yml +1 -1
- data/lib/fontisan/constants.rb +34 -24
- data/lib/fontisan/converters/format_converter.rb +154 -1
- data/lib/fontisan/converters/outline_converter.rb +101 -34
- data/lib/fontisan/converters/woff_writer.rb +9 -4
- data/lib/fontisan/font_loader.rb +14 -9
- data/lib/fontisan/font_writer.rb +9 -6
- data/lib/fontisan/formatters/text_formatter.rb +45 -1
- data/lib/fontisan/hints/hint_converter.rb +131 -2
- data/lib/fontisan/hints/hint_validator.rb +284 -0
- data/lib/fontisan/hints/postscript_hint_applier.rb +219 -140
- data/lib/fontisan/hints/postscript_hint_extractor.rb +151 -16
- data/lib/fontisan/hints/truetype_hint_applier.rb +90 -44
- data/lib/fontisan/hints/truetype_hint_extractor.rb +134 -11
- data/lib/fontisan/hints/truetype_instruction_analyzer.rb +261 -0
- data/lib/fontisan/hints/truetype_instruction_generator.rb +266 -0
- data/lib/fontisan/loading_modes.rb +6 -4
- data/lib/fontisan/models/collection_brief_info.rb +31 -0
- data/lib/fontisan/models/font_info.rb +3 -30
- data/lib/fontisan/models/hint.rb +183 -12
- data/lib/fontisan/models/outline.rb +4 -1
- data/lib/fontisan/open_type_font.rb +28 -10
- data/lib/fontisan/open_type_font_extensions.rb +54 -0
- data/lib/fontisan/optimizers/pattern_analyzer.rb +2 -1
- data/lib/fontisan/optimizers/subroutine_generator.rb +1 -1
- data/lib/fontisan/pipeline/format_detector.rb +249 -0
- data/lib/fontisan/pipeline/output_writer.rb +159 -0
- data/lib/fontisan/pipeline/strategies/base_strategy.rb +75 -0
- data/lib/fontisan/pipeline/strategies/instance_strategy.rb +93 -0
- data/lib/fontisan/pipeline/strategies/named_strategy.rb +118 -0
- data/lib/fontisan/pipeline/strategies/preserve_strategy.rb +56 -0
- data/lib/fontisan/pipeline/transformation_pipeline.rb +416 -0
- data/lib/fontisan/pipeline/variation_resolver.rb +165 -0
- data/lib/fontisan/subset/table_subsetter.rb +5 -5
- data/lib/fontisan/tables/cff/charstring.rb +58 -3
- data/lib/fontisan/tables/cff/charstring_builder.rb +34 -0
- data/lib/fontisan/tables/cff/charstring_parser.rb +249 -0
- data/lib/fontisan/tables/cff/charstring_rebuilder.rb +172 -0
- data/lib/fontisan/tables/cff/dict_builder.rb +19 -1
- data/lib/fontisan/tables/cff/hint_operation_injector.rb +209 -0
- data/lib/fontisan/tables/cff/offset_recalculator.rb +70 -0
- data/lib/fontisan/tables/cff/private_dict_writer.rb +131 -0
- data/lib/fontisan/tables/cff/table_builder.rb +221 -0
- data/lib/fontisan/tables/cff.rb +2 -0
- data/lib/fontisan/tables/cff2/charstring_parser.rb +14 -8
- data/lib/fontisan/tables/cff2/private_dict_blend_handler.rb +247 -0
- data/lib/fontisan/tables/cff2/region_matcher.rb +200 -0
- data/lib/fontisan/tables/cff2/table_builder.rb +580 -0
- data/lib/fontisan/tables/cff2/table_reader.rb +421 -0
- data/lib/fontisan/tables/cff2/variation_data_extractor.rb +212 -0
- data/lib/fontisan/tables/cff2.rb +10 -5
- data/lib/fontisan/tables/cvar.rb +2 -41
- data/lib/fontisan/tables/glyf/compound_glyph_resolver.rb +2 -1
- data/lib/fontisan/tables/glyf/curve_converter.rb +10 -4
- data/lib/fontisan/tables/glyf/glyph_builder.rb +27 -10
- data/lib/fontisan/tables/gvar.rb +2 -41
- data/lib/fontisan/tables/name.rb +4 -4
- data/lib/fontisan/true_type_font.rb +27 -10
- data/lib/fontisan/true_type_font_extensions.rb +54 -0
- data/lib/fontisan/utilities/checksum_calculator.rb +42 -0
- data/lib/fontisan/validation/checksum_validator.rb +2 -2
- data/lib/fontisan/validation/table_validator.rb +1 -1
- data/lib/fontisan/validation/variable_font_validator.rb +218 -0
- data/lib/fontisan/variation/cache.rb +3 -1
- data/lib/fontisan/variation/converter.rb +121 -13
- data/lib/fontisan/variation/delta_applier.rb +2 -1
- data/lib/fontisan/variation/inspector.rb +2 -1
- data/lib/fontisan/variation/instance_generator.rb +2 -1
- data/lib/fontisan/variation/instance_writer.rb +341 -0
- data/lib/fontisan/variation/optimizer.rb +6 -3
- data/lib/fontisan/variation/subsetter.rb +32 -10
- data/lib/fontisan/variation/tuple_variation_header.rb +51 -0
- data/lib/fontisan/variation/variable_svg_generator.rb +268 -0
- data/lib/fontisan/variation/variation_preserver.rb +291 -0
- data/lib/fontisan/version.rb +1 -1
- data/lib/fontisan/version.rb.orig +9 -0
- data/lib/fontisan/woff2/glyf_transformer.rb +693 -0
- data/lib/fontisan/woff2/hmtx_transformer.rb +164 -0
- data/lib/fontisan/woff2_font.rb +489 -468
- data/lib/fontisan/woff_font.rb +16 -11
- data/lib/fontisan.rb +54 -2
- data/scripts/measure_optimization.rb +15 -7
- metadata +37 -2
data/lib/fontisan/woff_font.rb
CHANGED
|
@@ -450,13 +450,8 @@ module Fontisan
|
|
|
450
450
|
# @param path [String] Path to the font file
|
|
451
451
|
# @return [void]
|
|
452
452
|
def update_checksum_adjustment_in_file(path)
|
|
453
|
-
# Calculate file checksum
|
|
454
|
-
checksum = Utilities::ChecksumCalculator.calculate_file_checksum(path)
|
|
455
|
-
|
|
456
|
-
# Calculate adjustment
|
|
457
|
-
adjustment = Utilities::ChecksumCalculator.calculate_adjustment(checksum)
|
|
458
|
-
|
|
459
453
|
# Find head table position in output file
|
|
454
|
+
head_offset = nil
|
|
460
455
|
File.open(path, "rb") do |io|
|
|
461
456
|
io.seek(4) # Skip sfnt_version
|
|
462
457
|
num_tables = io.read(2).unpack1("n")
|
|
@@ -469,15 +464,25 @@ module Fontisan
|
|
|
469
464
|
io.read(4) # length
|
|
470
465
|
|
|
471
466
|
if tag == Constants::HEAD_TAG
|
|
472
|
-
|
|
473
|
-
File.open(path, "r+b") do |write_io|
|
|
474
|
-
write_io.seek(offset + 8)
|
|
475
|
-
write_io.write([adjustment].pack("N"))
|
|
476
|
-
end
|
|
467
|
+
head_offset = offset
|
|
477
468
|
break
|
|
478
469
|
end
|
|
479
470
|
end
|
|
480
471
|
end
|
|
472
|
+
|
|
473
|
+
return unless head_offset
|
|
474
|
+
|
|
475
|
+
# Use tempfile-based checksum calculation for Windows compatibility
|
|
476
|
+
File.open(path, "r+b") do |io|
|
|
477
|
+
checksum, _tmpfile = Utilities::ChecksumCalculator.calculate_checksum_from_io_with_tempfile(io)
|
|
478
|
+
|
|
479
|
+
# Calculate adjustment
|
|
480
|
+
adjustment = Utilities::ChecksumCalculator.calculate_adjustment(checksum)
|
|
481
|
+
|
|
482
|
+
# Write adjustment to head table (offset 8 within head table)
|
|
483
|
+
io.seek(head_offset + 8)
|
|
484
|
+
io.write([adjustment].pack("N"))
|
|
485
|
+
end
|
|
481
486
|
end
|
|
482
487
|
end
|
|
483
488
|
end
|
data/lib/fontisan.rb
CHANGED
|
@@ -78,6 +78,10 @@ require_relative "fontisan/open_type_collection"
|
|
|
78
78
|
require_relative "fontisan/woff_font"
|
|
79
79
|
require_relative "fontisan/woff2_font"
|
|
80
80
|
|
|
81
|
+
# Font extensions for table-based construction
|
|
82
|
+
require_relative "fontisan/true_type_font_extensions"
|
|
83
|
+
require_relative "fontisan/open_type_font_extensions"
|
|
84
|
+
|
|
81
85
|
# Font loading
|
|
82
86
|
require_relative "fontisan/font_loader"
|
|
83
87
|
|
|
@@ -103,6 +107,7 @@ require_relative "fontisan/models/validation_report"
|
|
|
103
107
|
require_relative "fontisan/models/font_export"
|
|
104
108
|
require_relative "fontisan/models/collection_font_summary"
|
|
105
109
|
require_relative "fontisan/models/collection_info"
|
|
110
|
+
require_relative "fontisan/models/collection_brief_info"
|
|
106
111
|
require_relative "fontisan/models/collection_list_info"
|
|
107
112
|
require_relative "fontisan/models/font_summary"
|
|
108
113
|
require_relative "fontisan/models/table_sharing_info"
|
|
@@ -145,13 +150,19 @@ require_relative "fontisan/variation/interpolator"
|
|
|
145
150
|
require_relative "fontisan/variation/region_matcher"
|
|
146
151
|
require_relative "fontisan/variation/data_extractor"
|
|
147
152
|
require_relative "fontisan/variation/instance_generator"
|
|
148
|
-
require_relative "fontisan/variation/interpolator"
|
|
149
|
-
require_relative "fontisan/variation/region_matcher"
|
|
150
153
|
require_relative "fontisan/variation/metrics_adjuster"
|
|
151
154
|
require_relative "fontisan/variation/converter"
|
|
155
|
+
require_relative "fontisan/variation/variation_preserver"
|
|
152
156
|
require_relative "fontisan/variation/delta_parser"
|
|
153
157
|
require_relative "fontisan/variation/delta_applier"
|
|
154
158
|
require_relative "fontisan/variation/blend_applier"
|
|
159
|
+
require_relative "fontisan/variation/variable_svg_generator"
|
|
160
|
+
|
|
161
|
+
# Pipeline infrastructure
|
|
162
|
+
require_relative "fontisan/pipeline/format_detector"
|
|
163
|
+
require_relative "fontisan/pipeline/variation_resolver"
|
|
164
|
+
require_relative "fontisan/pipeline/output_writer"
|
|
165
|
+
require_relative "fontisan/pipeline/transformation_pipeline"
|
|
155
166
|
|
|
156
167
|
# Optimization infrastructure
|
|
157
168
|
require_relative "fontisan/optimizers/pattern_analyzer"
|
|
@@ -160,6 +171,17 @@ require_relative "fontisan/optimizers/charstring_rewriter"
|
|
|
160
171
|
require_relative "fontisan/optimizers/subroutine_optimizer"
|
|
161
172
|
require_relative "fontisan/optimizers/subroutine_generator"
|
|
162
173
|
|
|
174
|
+
# Hints infrastructure
|
|
175
|
+
require_relative "fontisan/models/hint"
|
|
176
|
+
require_relative "fontisan/hints/truetype_instruction_analyzer"
|
|
177
|
+
require_relative "fontisan/hints/truetype_instruction_generator"
|
|
178
|
+
require_relative "fontisan/hints/truetype_hint_extractor"
|
|
179
|
+
require_relative "fontisan/hints/truetype_hint_applier"
|
|
180
|
+
require_relative "fontisan/hints/postscript_hint_extractor"
|
|
181
|
+
require_relative "fontisan/hints/postscript_hint_applier"
|
|
182
|
+
require_relative "fontisan/hints/hint_converter"
|
|
183
|
+
require_relative "fontisan/hints/hint_validator"
|
|
184
|
+
|
|
163
185
|
# Commands
|
|
164
186
|
require_relative "fontisan/commands/base_command"
|
|
165
187
|
require_relative "fontisan/commands/info_command"
|
|
@@ -197,4 +219,34 @@ module Fontisan
|
|
|
197
219
|
self.logger = Logger.new($stdout).tap do |log|
|
|
198
220
|
log.level = Logger::WARN
|
|
199
221
|
end
|
|
222
|
+
|
|
223
|
+
# Get font information.
|
|
224
|
+
#
|
|
225
|
+
# Supports both full and brief modes. Brief mode uses metadata loading for
|
|
226
|
+
# 5x faster parsing by loading only essential tables (name, head, hhea,
|
|
227
|
+
# maxp, OS/2, post). Returns FontInfo with 13 essential fields in brief mode
|
|
228
|
+
# or all 38 fields in full mode.
|
|
229
|
+
#
|
|
230
|
+
# @param path [String] Path to font file
|
|
231
|
+
# @param brief [Boolean] Use brief mode for fast identification (default: false)
|
|
232
|
+
# @param font_index [Integer] Index for TTC/OTC files (default: 0)
|
|
233
|
+
# @return [Models::FontInfo, Models::CollectionInfo, Models::CollectionBriefInfo] Font information
|
|
234
|
+
#
|
|
235
|
+
# @example Get full info
|
|
236
|
+
# info = Fontisan.info("font.ttf")
|
|
237
|
+
# puts info.family_name
|
|
238
|
+
# puts info.copyright # populated in full mode
|
|
239
|
+
#
|
|
240
|
+
# @example Get brief info (5x faster)
|
|
241
|
+
# info = Fontisan.info("font.ttf", brief: true)
|
|
242
|
+
# puts info.family_name # populated
|
|
243
|
+
# puts info.postscript_name # populated
|
|
244
|
+
# puts info.copyright # nil (not populated in brief mode)
|
|
245
|
+
#
|
|
246
|
+
# @example Serialize to JSON
|
|
247
|
+
# info = Fontisan.info("font.ttf", brief: true)
|
|
248
|
+
# puts info.to_json
|
|
249
|
+
def self.info(path, brief: false, font_index: 0)
|
|
250
|
+
Commands::InfoCommand.new(path, brief: brief, font_index: font_index).run
|
|
251
|
+
end
|
|
200
252
|
end
|
|
@@ -51,21 +51,26 @@ def measure_font(font_path, options = {})
|
|
|
51
51
|
puts "RESULTS"
|
|
52
52
|
puts "-" * 80
|
|
53
53
|
puts "File Sizes:"
|
|
54
|
-
puts " Without optimization: #{format('%10d',
|
|
55
|
-
|
|
54
|
+
puts " Without optimization: #{format('%10d',
|
|
55
|
+
size_unopt)} bytes (#{size_per_glyph_unopt} bytes/glyph)"
|
|
56
|
+
puts " With optimization: #{format('%10d',
|
|
57
|
+
size_opt)} bytes (#{size_per_glyph_opt} bytes/glyph)"
|
|
56
58
|
puts " Bytes saved: #{format('%10d', savings)} bytes"
|
|
57
59
|
puts " Reduction: #{format('%9.2f', reduction_percent)}%"
|
|
58
60
|
|
|
59
61
|
puts "\nProcessing Time:"
|
|
60
62
|
puts " Without optimization: #{format('%.2f', time_unopt)} seconds"
|
|
61
63
|
puts " With optimization: #{format('%.2f', time_opt)} seconds"
|
|
62
|
-
puts " Overhead: #{format('%.2f',
|
|
64
|
+
puts " Overhead: #{format('%.2f',
|
|
65
|
+
time_opt - time_unopt)} seconds"
|
|
63
66
|
|
|
64
67
|
if opt_result
|
|
65
68
|
puts "\nOptimization Details:"
|
|
66
69
|
puts " Patterns found: #{format('%10d', opt_result[:pattern_count])}"
|
|
67
|
-
puts " Patterns selected: #{format('%10d',
|
|
68
|
-
|
|
70
|
+
puts " Patterns selected: #{format('%10d',
|
|
71
|
+
opt_result[:selected_count])}"
|
|
72
|
+
puts " Subroutines: #{format('%10d',
|
|
73
|
+
opt_result[:local_subrs].length)}"
|
|
69
74
|
puts " CFF bias: #{format('%10d', opt_result[:bias])}"
|
|
70
75
|
puts " Est. bytes saved: #{format('%10d', opt_result[:savings])}"
|
|
71
76
|
end
|
|
@@ -103,7 +108,9 @@ def print_summary(results)
|
|
|
103
108
|
end
|
|
104
109
|
|
|
105
110
|
# Calculate averages
|
|
106
|
-
avg_reduction = (results.sum
|
|
111
|
+
avg_reduction = (results.sum do |r|
|
|
112
|
+
r[:reduction_percent]
|
|
113
|
+
end / results.length).round(2)
|
|
107
114
|
total_saved = results.sum { |r| r[:savings] }
|
|
108
115
|
|
|
109
116
|
puts "-" * 80
|
|
@@ -118,7 +125,8 @@ if __FILE__ == $PROGRAM_NAME
|
|
|
118
125
|
|
|
119
126
|
if font_paths.empty?
|
|
120
127
|
# Use fixtures if no arguments provided
|
|
121
|
-
fixtures_dir = File.join(File.dirname(__FILE__), "..", "spec", "fixtures",
|
|
128
|
+
fixtures_dir = File.join(File.dirname(__FILE__), "..", "spec", "fixtures",
|
|
129
|
+
"fonts")
|
|
122
130
|
font_paths = Dir.glob(File.join(fixtures_dir, "*.ttf"))
|
|
123
131
|
end
|
|
124
132
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fontisan
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-12-
|
|
11
|
+
date: 2025-12-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|
|
@@ -117,6 +117,8 @@ files:
|
|
|
117
117
|
- Rakefile
|
|
118
118
|
- benchmark/variation_quick_bench.rb
|
|
119
119
|
- docs/EXTRACT_TTC_MIGRATION.md
|
|
120
|
+
- docs/FONT_HINTING.adoc
|
|
121
|
+
- docs/VARIABLE_FONT_OPERATIONS.adoc
|
|
120
122
|
- exe/fontisan
|
|
121
123
|
- fontisan.gemspec
|
|
122
124
|
- lib/fontisan.rb
|
|
@@ -181,13 +183,17 @@ files:
|
|
|
181
183
|
- lib/fontisan/formatters/text_formatter.rb
|
|
182
184
|
- lib/fontisan/glyph_accessor.rb
|
|
183
185
|
- lib/fontisan/hints/hint_converter.rb
|
|
186
|
+
- lib/fontisan/hints/hint_validator.rb
|
|
184
187
|
- lib/fontisan/hints/postscript_hint_applier.rb
|
|
185
188
|
- lib/fontisan/hints/postscript_hint_extractor.rb
|
|
186
189
|
- lib/fontisan/hints/truetype_hint_applier.rb
|
|
187
190
|
- lib/fontisan/hints/truetype_hint_extractor.rb
|
|
191
|
+
- lib/fontisan/hints/truetype_instruction_analyzer.rb
|
|
192
|
+
- lib/fontisan/hints/truetype_instruction_generator.rb
|
|
188
193
|
- lib/fontisan/loading_modes.rb
|
|
189
194
|
- lib/fontisan/metrics_calculator.rb
|
|
190
195
|
- lib/fontisan/models/all_scripts_features_info.rb
|
|
196
|
+
- lib/fontisan/models/collection_brief_info.rb
|
|
191
197
|
- lib/fontisan/models/collection_font_summary.rb
|
|
192
198
|
- lib/fontisan/models/collection_info.rb
|
|
193
199
|
- lib/fontisan/models/collection_list_info.rb
|
|
@@ -217,6 +223,7 @@ files:
|
|
|
217
223
|
- lib/fontisan/models/variable_font_info.rb
|
|
218
224
|
- lib/fontisan/open_type_collection.rb
|
|
219
225
|
- lib/fontisan/open_type_font.rb
|
|
226
|
+
- lib/fontisan/open_type_font_extensions.rb
|
|
220
227
|
- lib/fontisan/optimizers/charstring_rewriter.rb
|
|
221
228
|
- lib/fontisan/optimizers/pattern_analyzer.rb
|
|
222
229
|
- lib/fontisan/optimizers/stack_tracker.rb
|
|
@@ -225,6 +232,14 @@ files:
|
|
|
225
232
|
- lib/fontisan/optimizers/subroutine_optimizer.rb
|
|
226
233
|
- lib/fontisan/outline_extractor.rb
|
|
227
234
|
- lib/fontisan/parsers/tag.rb
|
|
235
|
+
- lib/fontisan/pipeline/format_detector.rb
|
|
236
|
+
- lib/fontisan/pipeline/output_writer.rb
|
|
237
|
+
- lib/fontisan/pipeline/strategies/base_strategy.rb
|
|
238
|
+
- lib/fontisan/pipeline/strategies/instance_strategy.rb
|
|
239
|
+
- lib/fontisan/pipeline/strategies/named_strategy.rb
|
|
240
|
+
- lib/fontisan/pipeline/strategies/preserve_strategy.rb
|
|
241
|
+
- lib/fontisan/pipeline/transformation_pipeline.rb
|
|
242
|
+
- lib/fontisan/pipeline/variation_resolver.rb
|
|
228
243
|
- lib/fontisan/subset/builder.rb
|
|
229
244
|
- lib/fontisan/subset/glyph_mapping.rb
|
|
230
245
|
- lib/fontisan/subset/options.rb
|
|
@@ -239,19 +254,30 @@ files:
|
|
|
239
254
|
- lib/fontisan/tables/cff/charset.rb
|
|
240
255
|
- lib/fontisan/tables/cff/charstring.rb
|
|
241
256
|
- lib/fontisan/tables/cff/charstring_builder.rb
|
|
257
|
+
- lib/fontisan/tables/cff/charstring_parser.rb
|
|
258
|
+
- lib/fontisan/tables/cff/charstring_rebuilder.rb
|
|
242
259
|
- lib/fontisan/tables/cff/charstrings_index.rb
|
|
243
260
|
- lib/fontisan/tables/cff/dict.rb
|
|
244
261
|
- lib/fontisan/tables/cff/dict_builder.rb
|
|
245
262
|
- lib/fontisan/tables/cff/encoding.rb
|
|
246
263
|
- lib/fontisan/tables/cff/header.rb
|
|
264
|
+
- lib/fontisan/tables/cff/hint_operation_injector.rb
|
|
247
265
|
- lib/fontisan/tables/cff/index.rb
|
|
248
266
|
- lib/fontisan/tables/cff/index_builder.rb
|
|
267
|
+
- lib/fontisan/tables/cff/offset_recalculator.rb
|
|
249
268
|
- lib/fontisan/tables/cff/private_dict.rb
|
|
269
|
+
- lib/fontisan/tables/cff/private_dict_writer.rb
|
|
270
|
+
- lib/fontisan/tables/cff/table_builder.rb
|
|
250
271
|
- lib/fontisan/tables/cff/top_dict.rb
|
|
251
272
|
- lib/fontisan/tables/cff2.rb
|
|
252
273
|
- lib/fontisan/tables/cff2/blend_operator.rb
|
|
253
274
|
- lib/fontisan/tables/cff2/charstring_parser.rb
|
|
254
275
|
- lib/fontisan/tables/cff2/operand_stack.rb
|
|
276
|
+
- lib/fontisan/tables/cff2/private_dict_blend_handler.rb
|
|
277
|
+
- lib/fontisan/tables/cff2/region_matcher.rb
|
|
278
|
+
- lib/fontisan/tables/cff2/table_builder.rb
|
|
279
|
+
- lib/fontisan/tables/cff2/table_reader.rb
|
|
280
|
+
- lib/fontisan/tables/cff2/variation_data_extractor.rb
|
|
255
281
|
- lib/fontisan/tables/cmap.rb
|
|
256
282
|
- lib/fontisan/tables/cvar.rb
|
|
257
283
|
- lib/fontisan/tables/fvar.rb
|
|
@@ -279,6 +305,7 @@ files:
|
|
|
279
305
|
- lib/fontisan/tables/vvar.rb
|
|
280
306
|
- lib/fontisan/true_type_collection.rb
|
|
281
307
|
- lib/fontisan/true_type_font.rb
|
|
308
|
+
- lib/fontisan/true_type_font_extensions.rb
|
|
282
309
|
- lib/fontisan/utilities/brotli_wrapper.rb
|
|
283
310
|
- lib/fontisan/utilities/checksum_calculator.rb
|
|
284
311
|
- lib/fontisan/utils/thread_pool.rb
|
|
@@ -287,6 +314,7 @@ files:
|
|
|
287
314
|
- lib/fontisan/validation/structure_validator.rb
|
|
288
315
|
- lib/fontisan/validation/table_validator.rb
|
|
289
316
|
- lib/fontisan/validation/validator.rb
|
|
317
|
+
- lib/fontisan/validation/variable_font_validator.rb
|
|
290
318
|
- lib/fontisan/variable/axis_normalizer.rb
|
|
291
319
|
- lib/fontisan/variable/delta_applicator.rb
|
|
292
320
|
- lib/fontisan/variable/glyph_delta_processor.rb
|
|
@@ -304,6 +332,7 @@ files:
|
|
|
304
332
|
- lib/fontisan/variation/delta_parser.rb
|
|
305
333
|
- lib/fontisan/variation/inspector.rb
|
|
306
334
|
- lib/fontisan/variation/instance_generator.rb
|
|
335
|
+
- lib/fontisan/variation/instance_writer.rb
|
|
307
336
|
- lib/fontisan/variation/interpolator.rb
|
|
308
337
|
- lib/fontisan/variation/metrics_adjuster.rb
|
|
309
338
|
- lib/fontisan/variation/optimizer.rb
|
|
@@ -311,11 +340,17 @@ files:
|
|
|
311
340
|
- lib/fontisan/variation/region_matcher.rb
|
|
312
341
|
- lib/fontisan/variation/subsetter.rb
|
|
313
342
|
- lib/fontisan/variation/table_accessor.rb
|
|
343
|
+
- lib/fontisan/variation/tuple_variation_header.rb
|
|
314
344
|
- lib/fontisan/variation/validator.rb
|
|
345
|
+
- lib/fontisan/variation/variable_svg_generator.rb
|
|
315
346
|
- lib/fontisan/variation/variation_context.rb
|
|
347
|
+
- lib/fontisan/variation/variation_preserver.rb
|
|
316
348
|
- lib/fontisan/version.rb
|
|
349
|
+
- lib/fontisan/version.rb.orig
|
|
317
350
|
- lib/fontisan/woff2/directory.rb
|
|
351
|
+
- lib/fontisan/woff2/glyf_transformer.rb
|
|
318
352
|
- lib/fontisan/woff2/header.rb
|
|
353
|
+
- lib/fontisan/woff2/hmtx_transformer.rb
|
|
319
354
|
- lib/fontisan/woff2/table_transformer.rb
|
|
320
355
|
- lib/fontisan/woff2_font.rb
|
|
321
356
|
- lib/fontisan/woff_font.rb
|