fontisan 0.2.3 → 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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +92 -40
  3. data/README.adoc +262 -3
  4. data/Rakefile +20 -7
  5. data/lib/fontisan/commands/base_command.rb +2 -19
  6. data/lib/fontisan/commands/convert_command.rb +16 -13
  7. data/lib/fontisan/commands/info_command.rb +88 -0
  8. data/lib/fontisan/config/conversion_matrix.yml +58 -20
  9. data/lib/fontisan/converters/outline_converter.rb +6 -3
  10. data/lib/fontisan/converters/svg_generator.rb +45 -0
  11. data/lib/fontisan/converters/woff2_encoder.rb +106 -13
  12. data/lib/fontisan/models/bitmap_glyph.rb +123 -0
  13. data/lib/fontisan/models/bitmap_strike.rb +94 -0
  14. data/lib/fontisan/models/color_glyph.rb +57 -0
  15. data/lib/fontisan/models/color_layer.rb +53 -0
  16. data/lib/fontisan/models/color_palette.rb +60 -0
  17. data/lib/fontisan/models/font_info.rb +26 -0
  18. data/lib/fontisan/models/svg_glyph.rb +89 -0
  19. data/lib/fontisan/open_type_font.rb +6 -0
  20. data/lib/fontisan/optimizers/charstring_rewriter.rb +19 -8
  21. data/lib/fontisan/optimizers/pattern_analyzer.rb +4 -2
  22. data/lib/fontisan/optimizers/subroutine_builder.rb +6 -5
  23. data/lib/fontisan/optimizers/subroutine_optimizer.rb +5 -2
  24. data/lib/fontisan/pipeline/output_writer.rb +2 -2
  25. data/lib/fontisan/tables/cbdt.rb +169 -0
  26. data/lib/fontisan/tables/cblc.rb +290 -0
  27. data/lib/fontisan/tables/cff.rb +6 -12
  28. data/lib/fontisan/tables/colr.rb +291 -0
  29. data/lib/fontisan/tables/cpal.rb +281 -0
  30. data/lib/fontisan/tables/glyf/glyph_builder.rb +5 -1
  31. data/lib/fontisan/tables/sbix.rb +379 -0
  32. data/lib/fontisan/tables/svg.rb +301 -0
  33. data/lib/fontisan/true_type_font.rb +6 -0
  34. data/lib/fontisan/validation/woff2_header_validator.rb +278 -0
  35. data/lib/fontisan/validation/woff2_table_validator.rb +270 -0
  36. data/lib/fontisan/validation/woff2_validator.rb +248 -0
  37. data/lib/fontisan/version.rb +1 -1
  38. data/lib/fontisan/woff2/directory.rb +40 -11
  39. data/lib/fontisan/woff2/table_transformer.rb +506 -73
  40. data/lib/fontisan/woff2_font.rb +29 -9
  41. data/lib/fontisan/woff_font.rb +17 -4
  42. data/lib/fontisan.rb +12 -0
  43. metadata +17 -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.3
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
@@ -194,10 +194,15 @@ files:
194
194
  - lib/fontisan/loading_modes.rb
195
195
  - lib/fontisan/metrics_calculator.rb
196
196
  - lib/fontisan/models/all_scripts_features_info.rb
197
+ - lib/fontisan/models/bitmap_glyph.rb
198
+ - lib/fontisan/models/bitmap_strike.rb
197
199
  - lib/fontisan/models/collection_brief_info.rb
198
200
  - lib/fontisan/models/collection_font_summary.rb
199
201
  - lib/fontisan/models/collection_info.rb
200
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
201
206
  - lib/fontisan/models/features_info.rb
202
207
  - lib/fontisan/models/font_export.rb
203
208
  - lib/fontisan/models/font_info.rb
@@ -208,6 +213,7 @@ files:
208
213
  - lib/fontisan/models/optical_size_info.rb
209
214
  - lib/fontisan/models/outline.rb
210
215
  - lib/fontisan/models/scripts_info.rb
216
+ - lib/fontisan/models/svg_glyph.rb
211
217
  - lib/fontisan/models/table_info.rb
212
218
  - lib/fontisan/models/table_sharing_info.rb
213
219
  - lib/fontisan/models/ttx/glyph_order.rb
@@ -250,6 +256,8 @@ files:
250
256
  - lib/fontisan/svg/font_generator.rb
251
257
  - lib/fontisan/svg/glyph_generator.rb
252
258
  - lib/fontisan/svg/view_box_calculator.rb
259
+ - lib/fontisan/tables/cbdt.rb
260
+ - lib/fontisan/tables/cblc.rb
253
261
  - lib/fontisan/tables/cff.rb
254
262
  - lib/fontisan/tables/cff/cff_glyph.rb
255
263
  - lib/fontisan/tables/cff/charset.rb
@@ -280,6 +288,8 @@ files:
280
288
  - lib/fontisan/tables/cff2/table_reader.rb
281
289
  - lib/fontisan/tables/cff2/variation_data_extractor.rb
282
290
  - lib/fontisan/tables/cmap.rb
291
+ - lib/fontisan/tables/colr.rb
292
+ - lib/fontisan/tables/cpal.rb
283
293
  - lib/fontisan/tables/cvar.rb
284
294
  - lib/fontisan/tables/fvar.rb
285
295
  - lib/fontisan/tables/glyf.rb
@@ -302,6 +312,8 @@ files:
302
312
  - lib/fontisan/tables/name.rb
303
313
  - lib/fontisan/tables/os2.rb
304
314
  - lib/fontisan/tables/post.rb
315
+ - lib/fontisan/tables/sbix.rb
316
+ - lib/fontisan/tables/svg.rb
305
317
  - lib/fontisan/tables/variation_common.rb
306
318
  - lib/fontisan/tables/vvar.rb
307
319
  - lib/fontisan/true_type_collection.rb
@@ -316,6 +328,9 @@ files:
316
328
  - lib/fontisan/validation/table_validator.rb
317
329
  - lib/fontisan/validation/validator.rb
318
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
319
334
  - lib/fontisan/variable/axis_normalizer.rb
320
335
  - lib/fontisan/variable/delta_applicator.rb
321
336
  - lib/fontisan/variable/glyph_delta_processor.rb