fontisan 0.2.0 → 0.2.1
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 +270 -131
- data/README.adoc +158 -4
- data/Rakefile +44 -47
- data/lib/fontisan/cli.rb +84 -33
- data/lib/fontisan/collection/builder.rb +81 -0
- data/lib/fontisan/collection/table_deduplicator.rb +76 -0
- data/lib/fontisan/commands/base_command.rb +16 -0
- data/lib/fontisan/commands/convert_command.rb +97 -170
- data/lib/fontisan/commands/instance_command.rb +71 -80
- data/lib/fontisan/commands/validate_command.rb +25 -0
- data/lib/fontisan/config/validation_rules.yml +1 -1
- data/lib/fontisan/constants.rb +10 -0
- data/lib/fontisan/converters/format_converter.rb +150 -1
- data/lib/fontisan/converters/outline_converter.rb +80 -18
- data/lib/fontisan/converters/woff_writer.rb +1 -1
- data/lib/fontisan/font_loader.rb +3 -5
- data/lib/fontisan/font_writer.rb +7 -6
- data/lib/fontisan/hints/hint_converter.rb +133 -0
- data/lib/fontisan/hints/postscript_hint_applier.rb +221 -140
- data/lib/fontisan/hints/postscript_hint_extractor.rb +100 -0
- data/lib/fontisan/hints/truetype_hint_applier.rb +90 -44
- data/lib/fontisan/hints/truetype_hint_extractor.rb +127 -0
- data/lib/fontisan/loading_modes.rb +2 -0
- data/lib/fontisan/models/font_export.rb +2 -2
- data/lib/fontisan/models/hint.rb +173 -1
- data/lib/fontisan/models/validation_report.rb +1 -1
- data/lib/fontisan/open_type_font.rb +25 -9
- data/lib/fontisan/open_type_font_extensions.rb +54 -0
- data/lib/fontisan/pipeline/format_detector.rb +249 -0
- data/lib/fontisan/pipeline/output_writer.rb +154 -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 +411 -0
- data/lib/fontisan/pipeline/variation_resolver.rb +165 -0
- data/lib/fontisan/tables/cff/charstring.rb +33 -4
- data/lib/fontisan/tables/cff/charstring_builder.rb +34 -0
- data/lib/fontisan/tables/cff/charstring_parser.rb +237 -0
- data/lib/fontisan/tables/cff/charstring_rebuilder.rb +172 -0
- data/lib/fontisan/tables/cff/dict_builder.rb +15 -0
- data/lib/fontisan/tables/cff/hint_operation_injector.rb +207 -0
- data/lib/fontisan/tables/cff/offset_recalculator.rb +70 -0
- data/lib/fontisan/tables/cff/private_dict_writer.rb +125 -0
- data/lib/fontisan/tables/cff/table_builder.rb +221 -0
- data/lib/fontisan/tables/cff.rb +2 -0
- data/lib/fontisan/tables/cff2/private_dict_blend_handler.rb +246 -0
- data/lib/fontisan/tables/cff2/region_matcher.rb +200 -0
- data/lib/fontisan/tables/cff2/table_builder.rb +574 -0
- data/lib/fontisan/tables/cff2/table_reader.rb +419 -0
- data/lib/fontisan/tables/cff2/variation_data_extractor.rb +212 -0
- data/lib/fontisan/tables/cff2.rb +9 -4
- data/lib/fontisan/tables/cvar.rb +2 -41
- data/lib/fontisan/tables/gvar.rb +2 -41
- data/lib/fontisan/true_type_font.rb +24 -9
- 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/converter.rb +120 -13
- data/lib/fontisan/variation/instance_writer.rb +341 -0
- 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 +288 -0
- data/lib/fontisan/version.rb +1 -1
- data/lib/fontisan/version.rb.orig +9 -0
- data/lib/fontisan/woff2/glyf_transformer.rb +666 -0
- data/lib/fontisan/woff2/hmtx_transformer.rb +164 -0
- data/lib/fontisan/woff2_font.rb +475 -470
- data/lib/fontisan/woff_font.rb +16 -11
- data/lib/fontisan.rb +12 -0
- metadata +31 -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
|
|
|
@@ -149,9 +153,17 @@ require_relative "fontisan/variation/interpolator"
|
|
|
149
153
|
require_relative "fontisan/variation/region_matcher"
|
|
150
154
|
require_relative "fontisan/variation/metrics_adjuster"
|
|
151
155
|
require_relative "fontisan/variation/converter"
|
|
156
|
+
require_relative "fontisan/variation/variation_preserver"
|
|
152
157
|
require_relative "fontisan/variation/delta_parser"
|
|
153
158
|
require_relative "fontisan/variation/delta_applier"
|
|
154
159
|
require_relative "fontisan/variation/blend_applier"
|
|
160
|
+
require_relative "fontisan/variation/variable_svg_generator"
|
|
161
|
+
|
|
162
|
+
# Pipeline infrastructure
|
|
163
|
+
require_relative "fontisan/pipeline/format_detector"
|
|
164
|
+
require_relative "fontisan/pipeline/variation_resolver"
|
|
165
|
+
require_relative "fontisan/pipeline/output_writer"
|
|
166
|
+
require_relative "fontisan/pipeline/transformation_pipeline"
|
|
155
167
|
|
|
156
168
|
# Optimization infrastructure
|
|
157
169
|
require_relative "fontisan/optimizers/pattern_analyzer"
|
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.1
|
|
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-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|
|
@@ -217,6 +217,7 @@ files:
|
|
|
217
217
|
- lib/fontisan/models/variable_font_info.rb
|
|
218
218
|
- lib/fontisan/open_type_collection.rb
|
|
219
219
|
- lib/fontisan/open_type_font.rb
|
|
220
|
+
- lib/fontisan/open_type_font_extensions.rb
|
|
220
221
|
- lib/fontisan/optimizers/charstring_rewriter.rb
|
|
221
222
|
- lib/fontisan/optimizers/pattern_analyzer.rb
|
|
222
223
|
- lib/fontisan/optimizers/stack_tracker.rb
|
|
@@ -225,6 +226,14 @@ files:
|
|
|
225
226
|
- lib/fontisan/optimizers/subroutine_optimizer.rb
|
|
226
227
|
- lib/fontisan/outline_extractor.rb
|
|
227
228
|
- lib/fontisan/parsers/tag.rb
|
|
229
|
+
- lib/fontisan/pipeline/format_detector.rb
|
|
230
|
+
- lib/fontisan/pipeline/output_writer.rb
|
|
231
|
+
- lib/fontisan/pipeline/strategies/base_strategy.rb
|
|
232
|
+
- lib/fontisan/pipeline/strategies/instance_strategy.rb
|
|
233
|
+
- lib/fontisan/pipeline/strategies/named_strategy.rb
|
|
234
|
+
- lib/fontisan/pipeline/strategies/preserve_strategy.rb
|
|
235
|
+
- lib/fontisan/pipeline/transformation_pipeline.rb
|
|
236
|
+
- lib/fontisan/pipeline/variation_resolver.rb
|
|
228
237
|
- lib/fontisan/subset/builder.rb
|
|
229
238
|
- lib/fontisan/subset/glyph_mapping.rb
|
|
230
239
|
- lib/fontisan/subset/options.rb
|
|
@@ -239,19 +248,30 @@ files:
|
|
|
239
248
|
- lib/fontisan/tables/cff/charset.rb
|
|
240
249
|
- lib/fontisan/tables/cff/charstring.rb
|
|
241
250
|
- lib/fontisan/tables/cff/charstring_builder.rb
|
|
251
|
+
- lib/fontisan/tables/cff/charstring_parser.rb
|
|
252
|
+
- lib/fontisan/tables/cff/charstring_rebuilder.rb
|
|
242
253
|
- lib/fontisan/tables/cff/charstrings_index.rb
|
|
243
254
|
- lib/fontisan/tables/cff/dict.rb
|
|
244
255
|
- lib/fontisan/tables/cff/dict_builder.rb
|
|
245
256
|
- lib/fontisan/tables/cff/encoding.rb
|
|
246
257
|
- lib/fontisan/tables/cff/header.rb
|
|
258
|
+
- lib/fontisan/tables/cff/hint_operation_injector.rb
|
|
247
259
|
- lib/fontisan/tables/cff/index.rb
|
|
248
260
|
- lib/fontisan/tables/cff/index_builder.rb
|
|
261
|
+
- lib/fontisan/tables/cff/offset_recalculator.rb
|
|
249
262
|
- lib/fontisan/tables/cff/private_dict.rb
|
|
263
|
+
- lib/fontisan/tables/cff/private_dict_writer.rb
|
|
264
|
+
- lib/fontisan/tables/cff/table_builder.rb
|
|
250
265
|
- lib/fontisan/tables/cff/top_dict.rb
|
|
251
266
|
- lib/fontisan/tables/cff2.rb
|
|
252
267
|
- lib/fontisan/tables/cff2/blend_operator.rb
|
|
253
268
|
- lib/fontisan/tables/cff2/charstring_parser.rb
|
|
254
269
|
- lib/fontisan/tables/cff2/operand_stack.rb
|
|
270
|
+
- lib/fontisan/tables/cff2/private_dict_blend_handler.rb
|
|
271
|
+
- lib/fontisan/tables/cff2/region_matcher.rb
|
|
272
|
+
- lib/fontisan/tables/cff2/table_builder.rb
|
|
273
|
+
- lib/fontisan/tables/cff2/table_reader.rb
|
|
274
|
+
- lib/fontisan/tables/cff2/variation_data_extractor.rb
|
|
255
275
|
- lib/fontisan/tables/cmap.rb
|
|
256
276
|
- lib/fontisan/tables/cvar.rb
|
|
257
277
|
- lib/fontisan/tables/fvar.rb
|
|
@@ -279,6 +299,7 @@ files:
|
|
|
279
299
|
- lib/fontisan/tables/vvar.rb
|
|
280
300
|
- lib/fontisan/true_type_collection.rb
|
|
281
301
|
- lib/fontisan/true_type_font.rb
|
|
302
|
+
- lib/fontisan/true_type_font_extensions.rb
|
|
282
303
|
- lib/fontisan/utilities/brotli_wrapper.rb
|
|
283
304
|
- lib/fontisan/utilities/checksum_calculator.rb
|
|
284
305
|
- lib/fontisan/utils/thread_pool.rb
|
|
@@ -287,6 +308,7 @@ files:
|
|
|
287
308
|
- lib/fontisan/validation/structure_validator.rb
|
|
288
309
|
- lib/fontisan/validation/table_validator.rb
|
|
289
310
|
- lib/fontisan/validation/validator.rb
|
|
311
|
+
- lib/fontisan/validation/variable_font_validator.rb
|
|
290
312
|
- lib/fontisan/variable/axis_normalizer.rb
|
|
291
313
|
- lib/fontisan/variable/delta_applicator.rb
|
|
292
314
|
- lib/fontisan/variable/glyph_delta_processor.rb
|
|
@@ -304,6 +326,7 @@ files:
|
|
|
304
326
|
- lib/fontisan/variation/delta_parser.rb
|
|
305
327
|
- lib/fontisan/variation/inspector.rb
|
|
306
328
|
- lib/fontisan/variation/instance_generator.rb
|
|
329
|
+
- lib/fontisan/variation/instance_writer.rb
|
|
307
330
|
- lib/fontisan/variation/interpolator.rb
|
|
308
331
|
- lib/fontisan/variation/metrics_adjuster.rb
|
|
309
332
|
- lib/fontisan/variation/optimizer.rb
|
|
@@ -311,11 +334,17 @@ files:
|
|
|
311
334
|
- lib/fontisan/variation/region_matcher.rb
|
|
312
335
|
- lib/fontisan/variation/subsetter.rb
|
|
313
336
|
- lib/fontisan/variation/table_accessor.rb
|
|
337
|
+
- lib/fontisan/variation/tuple_variation_header.rb
|
|
314
338
|
- lib/fontisan/variation/validator.rb
|
|
339
|
+
- lib/fontisan/variation/variable_svg_generator.rb
|
|
315
340
|
- lib/fontisan/variation/variation_context.rb
|
|
341
|
+
- lib/fontisan/variation/variation_preserver.rb
|
|
316
342
|
- lib/fontisan/version.rb
|
|
343
|
+
- lib/fontisan/version.rb.orig
|
|
317
344
|
- lib/fontisan/woff2/directory.rb
|
|
345
|
+
- lib/fontisan/woff2/glyf_transformer.rb
|
|
318
346
|
- lib/fontisan/woff2/header.rb
|
|
347
|
+
- lib/fontisan/woff2/hmtx_transformer.rb
|
|
319
348
|
- lib/fontisan/woff2/table_transformer.rb
|
|
320
349
|
- lib/fontisan/woff2_font.rb
|
|
321
350
|
- lib/fontisan/woff_font.rb
|