fontisan 0.2.2 → 0.2.4

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +94 -48
  3. data/README.adoc +293 -3
  4. data/Rakefile +20 -7
  5. data/lib/fontisan/base_collection.rb +296 -0
  6. data/lib/fontisan/commands/base_command.rb +2 -19
  7. data/lib/fontisan/commands/convert_command.rb +16 -13
  8. data/lib/fontisan/commands/info_command.rb +156 -50
  9. data/lib/fontisan/config/conversion_matrix.yml +58 -20
  10. data/lib/fontisan/converters/outline_converter.rb +6 -3
  11. data/lib/fontisan/converters/svg_generator.rb +45 -0
  12. data/lib/fontisan/converters/woff2_encoder.rb +106 -13
  13. data/lib/fontisan/font_loader.rb +109 -26
  14. data/lib/fontisan/formatters/text_formatter.rb +72 -19
  15. data/lib/fontisan/models/bitmap_glyph.rb +123 -0
  16. data/lib/fontisan/models/bitmap_strike.rb +94 -0
  17. data/lib/fontisan/models/collection_brief_info.rb +6 -0
  18. data/lib/fontisan/models/collection_info.rb +6 -1
  19. data/lib/fontisan/models/color_glyph.rb +57 -0
  20. data/lib/fontisan/models/color_layer.rb +53 -0
  21. data/lib/fontisan/models/color_palette.rb +60 -0
  22. data/lib/fontisan/models/font_info.rb +26 -0
  23. data/lib/fontisan/models/svg_glyph.rb +89 -0
  24. data/lib/fontisan/open_type_collection.rb +17 -220
  25. data/lib/fontisan/open_type_font.rb +6 -0
  26. data/lib/fontisan/optimizers/charstring_rewriter.rb +19 -8
  27. data/lib/fontisan/optimizers/pattern_analyzer.rb +4 -2
  28. data/lib/fontisan/optimizers/subroutine_builder.rb +6 -5
  29. data/lib/fontisan/optimizers/subroutine_optimizer.rb +5 -2
  30. data/lib/fontisan/pipeline/output_writer.rb +2 -2
  31. data/lib/fontisan/tables/cbdt.rb +169 -0
  32. data/lib/fontisan/tables/cblc.rb +290 -0
  33. data/lib/fontisan/tables/cff.rb +6 -12
  34. data/lib/fontisan/tables/colr.rb +291 -0
  35. data/lib/fontisan/tables/cpal.rb +281 -0
  36. data/lib/fontisan/tables/glyf/glyph_builder.rb +5 -1
  37. data/lib/fontisan/tables/sbix.rb +379 -0
  38. data/lib/fontisan/tables/svg.rb +301 -0
  39. data/lib/fontisan/true_type_collection.rb +29 -113
  40. data/lib/fontisan/true_type_font.rb +6 -0
  41. data/lib/fontisan/validation/woff2_header_validator.rb +278 -0
  42. data/lib/fontisan/validation/woff2_table_validator.rb +270 -0
  43. data/lib/fontisan/validation/woff2_validator.rb +248 -0
  44. data/lib/fontisan/version.rb +1 -1
  45. data/lib/fontisan/woff2/directory.rb +40 -11
  46. data/lib/fontisan/woff2/table_transformer.rb +506 -73
  47. data/lib/fontisan/woff2_font.rb +29 -9
  48. data/lib/fontisan/woff_font.rb +17 -4
  49. data/lib/fontisan.rb +12 -0
  50. metadata +18 -2
@@ -78,11 +78,13 @@ module Fontisan
78
78
  # Read WOFF font from a file
79
79
  #
80
80
  # @param path [String] Path to the WOFF file
81
+ # @param mode [Symbol] Loading mode (:metadata or :full) - currently ignored, loads all tables
82
+ # @param lazy [Boolean] Lazy loading flag - currently ignored, always eager
81
83
  # @return [WoffFont] A new instance
82
84
  # @raise [ArgumentError] if path is nil or empty
83
85
  # @raise [Errno::ENOENT] if file does not exist
84
86
  # @raise [InvalidFontError] if file format is invalid
85
- def self.from_file(path)
87
+ def self.from_file(path, mode: LoadingModes::FULL, lazy: false)
86
88
  if path.nil? || path.to_s.empty?
87
89
  raise ArgumentError,
88
90
  "path cannot be nil or empty"
@@ -158,9 +160,20 @@ module Fontisan
158
160
  #
159
161
  # Decompresses table data on first access and caches result
160
162
  #
161
- # @param tag [String] The table tag
162
- # @return [String, nil] Decompressed table data or nil if not found
163
- def table_data(tag)
163
+ # @param tag [String, nil] The table tag (optional)
164
+ # @return [String, Hash, nil] Decompressed table data, hash of all tables, or nil if not found
165
+ def table_data(tag = nil)
166
+ # If no tag provided, return all tables
167
+ if tag.nil?
168
+ # Decompress all tables and return as hash
169
+ result = {}
170
+ @compressed_table_data.each_key do |table_tag|
171
+ result[table_tag] = table_data(table_tag)
172
+ end
173
+ return result
174
+ end
175
+
176
+ # Tag provided - return specific table
164
177
  return @decompressed_tables[tag] if @decompressed_tables.key?(tag)
165
178
 
166
179
  compressed_data = @compressed_table_data[tag]
data/lib/fontisan.rb CHANGED
@@ -69,6 +69,12 @@ require_relative "fontisan/tables/cff"
69
69
  require_relative "fontisan/tables/layout_common"
70
70
  require_relative "fontisan/tables/gsub"
71
71
  require_relative "fontisan/tables/gpos"
72
+ require_relative "fontisan/tables/colr"
73
+ require_relative "fontisan/tables/cpal"
74
+ require_relative "fontisan/tables/svg"
75
+ require_relative "fontisan/tables/sbix"
76
+ require_relative "fontisan/tables/cblc"
77
+ require_relative "fontisan/tables/cbdt"
72
78
 
73
79
  # Domain objects (BinData::Record)
74
80
  require_relative "fontisan/true_type_font"
@@ -93,6 +99,8 @@ require_relative "fontisan/utilities/checksum_calculator"
93
99
  require_relative "fontisan/font_writer"
94
100
 
95
101
  # Information models (Lutaml::Model)
102
+ require_relative "fontisan/models/bitmap_strike"
103
+ require_relative "fontisan/models/bitmap_glyph"
96
104
  require_relative "fontisan/models/font_info"
97
105
  require_relative "fontisan/models/table_info"
98
106
  require_relative "fontisan/models/glyph_info"
@@ -111,6 +119,10 @@ require_relative "fontisan/models/collection_brief_info"
111
119
  require_relative "fontisan/models/collection_list_info"
112
120
  require_relative "fontisan/models/font_summary"
113
121
  require_relative "fontisan/models/table_sharing_info"
122
+ require_relative "fontisan/models/color_glyph"
123
+ require_relative "fontisan/models/color_layer"
124
+ require_relative "fontisan/models/color_palette"
125
+ require_relative "fontisan/models/svg_glyph"
114
126
 
115
127
  # Export infrastructure
116
128
  require_relative "fontisan/export/table_serializer"
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.2
4
+ version: 0.2.4
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-30 00:00:00.000000000 Z
11
+ date: 2026-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -122,6 +122,7 @@ files:
122
122
  - exe/fontisan
123
123
  - fontisan.gemspec
124
124
  - lib/fontisan.rb
125
+ - lib/fontisan/base_collection.rb
125
126
  - lib/fontisan/binary/base_record.rb
126
127
  - lib/fontisan/binary/structures.rb
127
128
  - lib/fontisan/cli.rb
@@ -193,10 +194,15 @@ files:
193
194
  - lib/fontisan/loading_modes.rb
194
195
  - lib/fontisan/metrics_calculator.rb
195
196
  - lib/fontisan/models/all_scripts_features_info.rb
197
+ - lib/fontisan/models/bitmap_glyph.rb
198
+ - lib/fontisan/models/bitmap_strike.rb
196
199
  - lib/fontisan/models/collection_brief_info.rb
197
200
  - lib/fontisan/models/collection_font_summary.rb
198
201
  - lib/fontisan/models/collection_info.rb
199
202
  - lib/fontisan/models/collection_list_info.rb
203
+ - lib/fontisan/models/color_glyph.rb
204
+ - lib/fontisan/models/color_layer.rb
205
+ - lib/fontisan/models/color_palette.rb
200
206
  - lib/fontisan/models/features_info.rb
201
207
  - lib/fontisan/models/font_export.rb
202
208
  - lib/fontisan/models/font_info.rb
@@ -207,6 +213,7 @@ files:
207
213
  - lib/fontisan/models/optical_size_info.rb
208
214
  - lib/fontisan/models/outline.rb
209
215
  - lib/fontisan/models/scripts_info.rb
216
+ - lib/fontisan/models/svg_glyph.rb
210
217
  - lib/fontisan/models/table_info.rb
211
218
  - lib/fontisan/models/table_sharing_info.rb
212
219
  - lib/fontisan/models/ttx/glyph_order.rb
@@ -249,6 +256,8 @@ files:
249
256
  - lib/fontisan/svg/font_generator.rb
250
257
  - lib/fontisan/svg/glyph_generator.rb
251
258
  - lib/fontisan/svg/view_box_calculator.rb
259
+ - lib/fontisan/tables/cbdt.rb
260
+ - lib/fontisan/tables/cblc.rb
252
261
  - lib/fontisan/tables/cff.rb
253
262
  - lib/fontisan/tables/cff/cff_glyph.rb
254
263
  - lib/fontisan/tables/cff/charset.rb
@@ -279,6 +288,8 @@ files:
279
288
  - lib/fontisan/tables/cff2/table_reader.rb
280
289
  - lib/fontisan/tables/cff2/variation_data_extractor.rb
281
290
  - lib/fontisan/tables/cmap.rb
291
+ - lib/fontisan/tables/colr.rb
292
+ - lib/fontisan/tables/cpal.rb
282
293
  - lib/fontisan/tables/cvar.rb
283
294
  - lib/fontisan/tables/fvar.rb
284
295
  - lib/fontisan/tables/glyf.rb
@@ -301,6 +312,8 @@ files:
301
312
  - lib/fontisan/tables/name.rb
302
313
  - lib/fontisan/tables/os2.rb
303
314
  - lib/fontisan/tables/post.rb
315
+ - lib/fontisan/tables/sbix.rb
316
+ - lib/fontisan/tables/svg.rb
304
317
  - lib/fontisan/tables/variation_common.rb
305
318
  - lib/fontisan/tables/vvar.rb
306
319
  - lib/fontisan/true_type_collection.rb
@@ -315,6 +328,9 @@ files:
315
328
  - lib/fontisan/validation/table_validator.rb
316
329
  - lib/fontisan/validation/validator.rb
317
330
  - lib/fontisan/validation/variable_font_validator.rb
331
+ - lib/fontisan/validation/woff2_header_validator.rb
332
+ - lib/fontisan/validation/woff2_table_validator.rb
333
+ - lib/fontisan/validation/woff2_validator.rb
318
334
  - lib/fontisan/variable/axis_normalizer.rb
319
335
  - lib/fontisan/variable/delta_applicator.rb
320
336
  - lib/fontisan/variable/glyph_delta_processor.rb