fontisan 0.2.1 → 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 +57 -385
- data/README.adoc +1483 -1435
- data/Rakefile +3 -2
- 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 +10 -3
- data/lib/fontisan/collection/builder.rb +2 -1
- data/lib/fontisan/collection/offset_calculator.rb +2 -0
- data/lib/fontisan/commands/base_command.rb +5 -2
- data/lib/fontisan/commands/convert_command.rb +6 -2
- data/lib/fontisan/commands/info_command.rb +111 -5
- data/lib/fontisan/commands/instance_command.rb +8 -7
- data/lib/fontisan/commands/validate_command.rb +4 -1
- data/lib/fontisan/constants.rb +24 -24
- data/lib/fontisan/converters/format_converter.rb +8 -4
- data/lib/fontisan/converters/outline_converter.rb +21 -16
- data/lib/fontisan/converters/woff_writer.rb +8 -3
- data/lib/fontisan/font_loader.rb +11 -4
- data/lib/fontisan/font_writer.rb +2 -0
- data/lib/fontisan/formatters/text_formatter.rb +45 -1
- data/lib/fontisan/hints/hint_converter.rb +43 -47
- data/lib/fontisan/hints/hint_validator.rb +284 -0
- data/lib/fontisan/hints/postscript_hint_applier.rb +1 -3
- data/lib/fontisan/hints/postscript_hint_extractor.rb +78 -43
- data/lib/fontisan/hints/truetype_hint_extractor.rb +22 -26
- 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 +4 -4
- data/lib/fontisan/models/collection_brief_info.rb +31 -0
- data/lib/fontisan/models/font_export.rb +2 -2
- data/lib/fontisan/models/font_info.rb +3 -30
- data/lib/fontisan/models/hint.rb +22 -23
- data/lib/fontisan/models/outline.rb +4 -1
- data/lib/fontisan/models/validation_report.rb +1 -1
- data/lib/fontisan/open_type_font.rb +3 -1
- data/lib/fontisan/optimizers/pattern_analyzer.rb +2 -1
- data/lib/fontisan/optimizers/subroutine_generator.rb +1 -1
- data/lib/fontisan/pipeline/output_writer.rb +8 -3
- data/lib/fontisan/pipeline/transformation_pipeline.rb +8 -3
- data/lib/fontisan/subset/table_subsetter.rb +5 -5
- data/lib/fontisan/tables/cff/charstring.rb +38 -12
- data/lib/fontisan/tables/cff/charstring_parser.rb +23 -11
- data/lib/fontisan/tables/cff/charstring_rebuilder.rb +14 -14
- data/lib/fontisan/tables/cff/dict_builder.rb +4 -1
- data/lib/fontisan/tables/cff/hint_operation_injector.rb +6 -4
- data/lib/fontisan/tables/cff/offset_recalculator.rb +1 -1
- data/lib/fontisan/tables/cff/private_dict_writer.rb +10 -4
- data/lib/fontisan/tables/cff/table_builder.rb +1 -1
- data/lib/fontisan/tables/cff2/charstring_parser.rb +14 -8
- data/lib/fontisan/tables/cff2/private_dict_blend_handler.rb +7 -6
- data/lib/fontisan/tables/cff2/region_matcher.rb +2 -2
- data/lib/fontisan/tables/cff2/table_builder.rb +26 -20
- data/lib/fontisan/tables/cff2/table_reader.rb +35 -33
- data/lib/fontisan/tables/cff2/variation_data_extractor.rb +2 -2
- data/lib/fontisan/tables/cff2.rb +1 -1
- 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/name.rb +4 -4
- data/lib/fontisan/true_type_font.rb +3 -1
- data/lib/fontisan/validation/checksum_validator.rb +2 -2
- data/lib/fontisan/variation/cache.rb +3 -1
- data/lib/fontisan/variation/converter.rb +2 -1
- 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/optimizer.rb +6 -3
- data/lib/fontisan/variation/subsetter.rb +32 -10
- data/lib/fontisan/variation/variation_preserver.rb +4 -1
- data/lib/fontisan/version.rb +1 -1
- data/lib/fontisan/woff2/glyf_transformer.rb +57 -30
- data/lib/fontisan/woff2_font.rb +31 -15
- data/lib/fontisan.rb +42 -2
- data/scripts/measure_optimization.rb +15 -7
- metadata +8 -2
|
@@ -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
|