fontisan 0.2.16 → 0.2.22

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 (318) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +14 -90
  3. data/Gemfile +6 -3
  4. data/README.adoc +257 -1
  5. data/docs/.vitepress/config.ts +68 -8
  6. data/docs/.vitepress/theme/style.css +570 -272
  7. data/docs/CONVERSION_GUIDE.adoc +31 -8
  8. data/docs/EXTRACT_TTC_MIGRATION.md +1 -1
  9. data/docs/WOFF_WOFF2_FORMATS.adoc +53 -0
  10. data/docs/api/conversion-options.md +37 -14
  11. data/docs/api/font-loader.md +21 -15
  12. data/docs/cli/audit.md +337 -0
  13. data/docs/cli/convert.md +20 -1
  14. data/docs/cli/index.md +31 -0
  15. data/docs/guide/color.md +1 -1
  16. data/docs/guide/conversion/options.md +32 -3
  17. data/docs/guide/conversion/ttf-otf.md +1 -1
  18. data/docs/guide/conversion/type1.md +1 -1
  19. data/docs/guide/conversion/web.md +91 -32
  20. data/docs/guide/conversion.md +6 -5
  21. data/docs/guide/formats/woff.md +35 -11
  22. data/docs/guide/index.md +2 -2
  23. data/docs/guide/migrations/extract-ttc.md +1 -1
  24. data/docs/guide/quick-start.md +4 -4
  25. data/docs/guide/type1.md +4 -4
  26. data/docs/guide/woff.md +19 -17
  27. data/docs/index.md +2 -0
  28. data/docs/lychee.toml +5 -1
  29. data/docs/package.json +1 -1
  30. data/docs/public/robots.txt +4 -0
  31. data/docs/scripts/post-build.mjs +81 -0
  32. data/lib/fontisan/audit/codepoint_range_coalescer.rb +41 -0
  33. data/lib/fontisan/audit/context.rb +122 -0
  34. data/lib/fontisan/audit/differ.rb +124 -0
  35. data/lib/fontisan/audit/extractors/aggregations.rb +54 -0
  36. data/lib/fontisan/audit/extractors/base.rb +26 -0
  37. data/lib/fontisan/audit/extractors/color_capabilities.rb +141 -0
  38. data/lib/fontisan/audit/extractors/coverage.rb +48 -0
  39. data/lib/fontisan/audit/extractors/hinting.rb +197 -0
  40. data/lib/fontisan/audit/extractors/identity.rb +52 -0
  41. data/lib/fontisan/audit/extractors/language_coverage.rb +37 -0
  42. data/lib/fontisan/audit/extractors/licensing.rb +79 -0
  43. data/lib/fontisan/audit/extractors/metrics.rb +103 -0
  44. data/lib/fontisan/audit/extractors/opentype_layout.rb +69 -0
  45. data/lib/fontisan/audit/extractors/provenance.rb +29 -0
  46. data/lib/fontisan/audit/extractors/style.rb +32 -0
  47. data/lib/fontisan/audit/extractors/variation_detail.rb +99 -0
  48. data/lib/fontisan/audit/extractors.rb +27 -0
  49. data/lib/fontisan/audit/library_aggregator.rb +83 -0
  50. data/lib/fontisan/audit/library_auditor.rb +90 -0
  51. data/lib/fontisan/audit/registry.rb +60 -0
  52. data/lib/fontisan/audit/style_extractor.rb +80 -0
  53. data/lib/fontisan/audit.rb +20 -0
  54. data/lib/fontisan/base_collection.rb +23 -9
  55. data/lib/fontisan/binary/structures.rb +0 -2
  56. data/lib/fontisan/binary.rb +11 -0
  57. data/lib/fontisan/cldr/aggregator.rb +33 -0
  58. data/lib/fontisan/cldr/cache_manager.rb +110 -0
  59. data/lib/fontisan/cldr/config.rb +59 -0
  60. data/lib/fontisan/cldr/download_error.rb +9 -0
  61. data/lib/fontisan/cldr/downloader.rb +79 -0
  62. data/lib/fontisan/cldr/error.rb +8 -0
  63. data/lib/fontisan/cldr/index.rb +64 -0
  64. data/lib/fontisan/cldr/index_builder.rb +72 -0
  65. data/lib/fontisan/cldr/unicode_set_parser.rb +172 -0
  66. data/lib/fontisan/cldr/unknown_version_error.rb +9 -0
  67. data/lib/fontisan/cldr/version_resolver.rb +91 -0
  68. data/lib/fontisan/cldr.rb +23 -0
  69. data/lib/fontisan/cli/cldr_cli.rb +85 -0
  70. data/lib/fontisan/cli/ucd_cli.rb +97 -0
  71. data/lib/fontisan/cli.rb +201 -2
  72. data/lib/fontisan/collection/builder.rb +0 -4
  73. data/lib/fontisan/collection/dfont_builder.rb +0 -4
  74. data/lib/fontisan/collection/shared_logic.rb +0 -2
  75. data/lib/fontisan/collection/writer.rb +0 -3
  76. data/lib/fontisan/collection.rb +15 -0
  77. data/lib/fontisan/commands/audit_command.rb +123 -0
  78. data/lib/fontisan/commands/audit_compare_command.rb +66 -0
  79. data/lib/fontisan/commands/audit_library_command.rb +46 -0
  80. data/lib/fontisan/commands/base_command.rb +0 -3
  81. data/lib/fontisan/commands/convert_command.rb +25 -20
  82. data/lib/fontisan/commands/dump_table_command.rb +0 -3
  83. data/lib/fontisan/commands/export_command.rb +0 -4
  84. data/lib/fontisan/commands/features_command.rb +0 -3
  85. data/lib/fontisan/commands/instance_command.rb +0 -5
  86. data/lib/fontisan/commands/ls_command.rb +0 -6
  87. data/lib/fontisan/commands/optical_size_command.rb +0 -3
  88. data/lib/fontisan/commands/pack_command.rb +0 -5
  89. data/lib/fontisan/commands/scripts_command.rb +0 -2
  90. data/lib/fontisan/commands/subset_command.rb +0 -3
  91. data/lib/fontisan/commands/unicode_command.rb +0 -3
  92. data/lib/fontisan/commands/unpack_command.rb +0 -7
  93. data/lib/fontisan/commands/validate_command.rb +0 -8
  94. data/lib/fontisan/commands/variable_command.rb +0 -3
  95. data/lib/fontisan/commands.rb +29 -0
  96. data/lib/fontisan/config/cldr.yml +22 -0
  97. data/lib/fontisan/config/conversion_matrix.yml +38 -0
  98. data/lib/fontisan/config/ucd.yml +23 -0
  99. data/lib/fontisan/constants.rb +48 -6
  100. data/lib/fontisan/conversion_options.rb +30 -19
  101. data/lib/fontisan/converters/cff_table_builder.rb +0 -3
  102. data/lib/fontisan/converters/collection_converter.rb +0 -8
  103. data/lib/fontisan/converters/conversion_strategy.rb +161 -46
  104. data/lib/fontisan/converters/format_converter.rb +143 -32
  105. data/lib/fontisan/converters/glyf_table_builder.rb +0 -2
  106. data/lib/fontisan/converters/outline_converter.rb +0 -19
  107. data/lib/fontisan/converters/outline_extraction.rb +0 -5
  108. data/lib/fontisan/converters/outline_optimizer.rb +0 -5
  109. data/lib/fontisan/converters/svg_generator.rb +0 -4
  110. data/lib/fontisan/converters/table_copier.rb +0 -2
  111. data/lib/fontisan/converters/type1_converter.rb +0 -11
  112. data/lib/fontisan/converters/woff2_encoder.rb +49 -20
  113. data/lib/fontisan/converters/woff_writer.rb +211 -282
  114. data/lib/fontisan/converters.rb +21 -0
  115. data/lib/fontisan/dfont_collection.rb +29 -10
  116. data/lib/fontisan/export/exporter.rb +0 -6
  117. data/lib/fontisan/export/transformers/font_to_ttx.rb +0 -9
  118. data/lib/fontisan/export/transformers/head_transformer.rb +0 -2
  119. data/lib/fontisan/export/transformers/hhea_transformer.rb +0 -2
  120. data/lib/fontisan/export/transformers/maxp_transformer.rb +0 -2
  121. data/lib/fontisan/export/transformers/name_transformer.rb +0 -2
  122. data/lib/fontisan/export/transformers/os2_transformer.rb +0 -2
  123. data/lib/fontisan/export/transformers/post_transformer.rb +0 -2
  124. data/lib/fontisan/export/transformers.rb +17 -0
  125. data/lib/fontisan/export.rb +13 -0
  126. data/lib/fontisan/font_loader.rb +189 -328
  127. data/lib/fontisan/font_writer.rb +0 -1
  128. data/lib/fontisan/formatters/audit_diff_text_renderer.rb +122 -0
  129. data/lib/fontisan/formatters/audit_text_renderer.rb +324 -0
  130. data/lib/fontisan/formatters/library_summary_text_renderer.rb +99 -0
  131. data/lib/fontisan/formatters/text_formatter.rb +6 -0
  132. data/lib/fontisan/formatters.rb +12 -0
  133. data/lib/fontisan/hints/hint_converter.rb +0 -1
  134. data/lib/fontisan/hints/postscript_hint_applier.rb +0 -9
  135. data/lib/fontisan/hints/postscript_hint_extractor.rb +0 -2
  136. data/lib/fontisan/hints/truetype_hint_extractor.rb +0 -2
  137. data/lib/fontisan/hints.rb +16 -0
  138. data/lib/fontisan/metrics_calculator.rb +0 -2
  139. data/lib/fontisan/models/all_scripts_features_info.rb +0 -1
  140. data/lib/fontisan/models/audit/audit_axis.rb +30 -0
  141. data/lib/fontisan/models/audit/audit_block.rb +32 -0
  142. data/lib/fontisan/models/audit/audit_diff.rb +77 -0
  143. data/lib/fontisan/models/audit/audit_report.rb +153 -0
  144. data/lib/fontisan/models/audit/codepoint_range.rb +40 -0
  145. data/lib/fontisan/models/audit/codepoint_set_diff.rb +34 -0
  146. data/lib/fontisan/models/audit/color_capabilities.rb +93 -0
  147. data/lib/fontisan/models/audit/duplicate_group.rb +23 -0
  148. data/lib/fontisan/models/audit/embedding_type.rb +76 -0
  149. data/lib/fontisan/models/audit/field_change.rb +28 -0
  150. data/lib/fontisan/models/audit/fs_selection_flags.rb +61 -0
  151. data/lib/fontisan/models/audit/gasp_range.rb +63 -0
  152. data/lib/fontisan/models/audit/hinting.rb +93 -0
  153. data/lib/fontisan/models/audit/library_summary.rb +40 -0
  154. data/lib/fontisan/models/audit/licensing.rb +48 -0
  155. data/lib/fontisan/models/audit/metrics.rb +111 -0
  156. data/lib/fontisan/models/audit/named_instance.rb +41 -0
  157. data/lib/fontisan/models/audit/opentype_layout.rb +40 -0
  158. data/lib/fontisan/models/audit/script_coverage_row.rb +26 -0
  159. data/lib/fontisan/models/audit/script_features.rb +28 -0
  160. data/lib/fontisan/models/audit/variation_detail.rb +44 -0
  161. data/lib/fontisan/models/audit.rb +33 -0
  162. data/lib/fontisan/models/cldr/language_coverage.rb +31 -0
  163. data/lib/fontisan/models/cldr.rb +12 -0
  164. data/lib/fontisan/models/collection_brief_info.rb +0 -1
  165. data/lib/fontisan/models/collection_info.rb +0 -2
  166. data/lib/fontisan/models/collection_list_info.rb +0 -1
  167. data/lib/fontisan/models/collection_validation_report.rb +0 -2
  168. data/lib/fontisan/models/color_glyph.rb +0 -1
  169. data/lib/fontisan/models/font_report.rb +0 -1
  170. data/lib/fontisan/models/ttx/tables.rb +21 -0
  171. data/lib/fontisan/models/ttx/ttfont.rb +0 -8
  172. data/lib/fontisan/models/ttx.rb +14 -0
  173. data/lib/fontisan/models/ucd/ucd.rb +38 -0
  174. data/lib/fontisan/models/ucd/ucd_char.rb +67 -0
  175. data/lib/fontisan/models/ucd.rb +19 -0
  176. data/lib/fontisan/models.rb +47 -0
  177. data/lib/fontisan/open_type_collection.rb +6 -5
  178. data/lib/fontisan/open_type_font.rb +8 -2
  179. data/lib/fontisan/open_type_font_extensions.rb +9 -9
  180. data/lib/fontisan/optimizers/pattern_analyzer.rb +0 -1
  181. data/lib/fontisan/optimizers.rb +14 -0
  182. data/lib/fontisan/outline_extractor.rb +0 -2
  183. data/lib/fontisan/parsers/dfont_parser.rb +0 -1
  184. data/lib/fontisan/parsers.rb +10 -0
  185. data/lib/fontisan/pipeline/format_detector.rb +29 -102
  186. data/lib/fontisan/pipeline/output_writer.rb +11 -9
  187. data/lib/fontisan/pipeline/strategies/instance_strategy.rb +0 -4
  188. data/lib/fontisan/pipeline/strategies/named_strategy.rb +0 -4
  189. data/lib/fontisan/pipeline/strategies/preserve_strategy.rb +0 -2
  190. data/lib/fontisan/pipeline/strategies.rb +14 -0
  191. data/lib/fontisan/pipeline/transformation_pipeline.rb +0 -7
  192. data/lib/fontisan/pipeline/variation_resolver.rb +0 -7
  193. data/lib/fontisan/pipeline.rb +13 -0
  194. data/lib/fontisan/sfnt_font.rb +29 -14
  195. data/lib/fontisan/sfnt_table.rb +0 -4
  196. data/lib/fontisan/subset/builder.rb +0 -6
  197. data/lib/fontisan/subset.rb +13 -0
  198. data/lib/fontisan/svg/font_generator.rb +0 -4
  199. data/lib/fontisan/svg/glyph_generator.rb +0 -2
  200. data/lib/fontisan/svg.rb +12 -0
  201. data/lib/fontisan/tables/cbdt.rb +0 -1
  202. data/lib/fontisan/tables/cblc.rb +0 -1
  203. data/lib/fontisan/tables/cff/charset.rb +0 -1
  204. data/lib/fontisan/tables/cff/charstring.rb +0 -1
  205. data/lib/fontisan/tables/cff/charstring_rebuilder.rb +0 -4
  206. data/lib/fontisan/tables/cff/charstrings_index.rb +0 -3
  207. data/lib/fontisan/tables/cff/dict.rb +0 -1
  208. data/lib/fontisan/tables/cff/encoding.rb +0 -1
  209. data/lib/fontisan/tables/cff/header.rb +0 -2
  210. data/lib/fontisan/tables/cff/hint_operation_injector.rb +0 -2
  211. data/lib/fontisan/tables/cff/index.rb +0 -1
  212. data/lib/fontisan/tables/cff/private_dict.rb +0 -2
  213. data/lib/fontisan/tables/cff/private_dict_writer.rb +0 -2
  214. data/lib/fontisan/tables/cff/table_builder.rb +0 -6
  215. data/lib/fontisan/tables/cff/top_dict.rb +0 -2
  216. data/lib/fontisan/tables/cff.rb +22 -15
  217. data/lib/fontisan/tables/cff2/charstring_parser.rb +0 -2
  218. data/lib/fontisan/tables/cff2/table_builder.rb +0 -11
  219. data/lib/fontisan/tables/cff2/table_reader.rb +0 -2
  220. data/lib/fontisan/tables/cff2.rb +13 -14
  221. data/lib/fontisan/tables/cmap.rb +24 -2
  222. data/lib/fontisan/tables/cmap_table.rb +0 -3
  223. data/lib/fontisan/tables/colr.rb +0 -1
  224. data/lib/fontisan/tables/cpal.rb +0 -1
  225. data/lib/fontisan/tables/cvar.rb +0 -2
  226. data/lib/fontisan/tables/fvar.rb +0 -1
  227. data/lib/fontisan/tables/glyf/compound_glyph_resolver.rb +0 -2
  228. data/lib/fontisan/tables/glyf/glyph_builder.rb +0 -3
  229. data/lib/fontisan/tables/glyf.rb +0 -6
  230. data/lib/fontisan/tables/glyf_table.rb +0 -3
  231. data/lib/fontisan/tables/gpos.rb +0 -2
  232. data/lib/fontisan/tables/gsub.rb +0 -2
  233. data/lib/fontisan/tables/gvar.rb +0 -2
  234. data/lib/fontisan/tables/head.rb +0 -2
  235. data/lib/fontisan/tables/head_table.rb +0 -3
  236. data/lib/fontisan/tables/hhea.rb +0 -2
  237. data/lib/fontisan/tables/hhea_table.rb +0 -3
  238. data/lib/fontisan/tables/hmtx.rb +0 -2
  239. data/lib/fontisan/tables/hmtx_table.rb +0 -3
  240. data/lib/fontisan/tables/hvar.rb +0 -3
  241. data/lib/fontisan/tables/loca.rb +0 -2
  242. data/lib/fontisan/tables/loca_table.rb +0 -3
  243. data/lib/fontisan/tables/maxp.rb +0 -2
  244. data/lib/fontisan/tables/maxp_table.rb +0 -3
  245. data/lib/fontisan/tables/mvar.rb +0 -3
  246. data/lib/fontisan/tables/name.rb +0 -2
  247. data/lib/fontisan/tables/name_table.rb +0 -3
  248. data/lib/fontisan/tables/os2_table.rb +0 -3
  249. data/lib/fontisan/tables/post_table.rb +0 -3
  250. data/lib/fontisan/tables/sbix.rb +0 -1
  251. data/lib/fontisan/tables/svg.rb +0 -1
  252. data/lib/fontisan/tables/variation_common.rb +0 -1
  253. data/lib/fontisan/tables/vvar.rb +0 -3
  254. data/lib/fontisan/tables.rb +54 -0
  255. data/lib/fontisan/true_type_collection.rb +6 -14
  256. data/lib/fontisan/true_type_font.rb +8 -2
  257. data/lib/fontisan/true_type_font_extensions.rb +9 -9
  258. data/lib/fontisan/type1/afm_generator.rb +0 -4
  259. data/lib/fontisan/type1/conversion_options.rb +0 -2
  260. data/lib/fontisan/type1/encodings.rb +0 -2
  261. data/lib/fontisan/type1/generator.rb +0 -8
  262. data/lib/fontisan/type1/pfa_generator.rb +0 -3
  263. data/lib/fontisan/type1/pfb_generator.rb +0 -5
  264. data/lib/fontisan/type1/pfm_generator.rb +0 -4
  265. data/lib/fontisan/type1.rb +42 -69
  266. data/lib/fontisan/type1_font.rb +40 -11
  267. data/lib/fontisan/ucd/aggregator.rb +73 -0
  268. data/lib/fontisan/ucd/cache_manager.rb +111 -0
  269. data/lib/fontisan/ucd/config.rb +59 -0
  270. data/lib/fontisan/ucd/download_error.rb +9 -0
  271. data/lib/fontisan/ucd/downloader.rb +88 -0
  272. data/lib/fontisan/ucd/error.rb +8 -0
  273. data/lib/fontisan/ucd/index.rb +103 -0
  274. data/lib/fontisan/ucd/index_builder.rb +107 -0
  275. data/lib/fontisan/ucd/range_entry.rb +56 -0
  276. data/lib/fontisan/ucd/unknown_version_error.rb +9 -0
  277. data/lib/fontisan/ucd/version_resolver.rb +79 -0
  278. data/lib/fontisan/ucd.rb +23 -0
  279. data/lib/fontisan/utilities/checksum_calculator.rb +0 -1
  280. data/lib/fontisan/utilities.rb +10 -0
  281. data/lib/fontisan/utils.rb +10 -0
  282. data/lib/fontisan/validation/collection_validator.rb +0 -2
  283. data/lib/fontisan/validation.rb +9 -0
  284. data/lib/fontisan/validators/basic_validator.rb +0 -2
  285. data/lib/fontisan/validators/font_book_validator.rb +0 -2
  286. data/lib/fontisan/validators/opentype_validator.rb +0 -2
  287. data/lib/fontisan/validators/profile_loader.rb +0 -5
  288. data/lib/fontisan/validators/validator.rb +0 -2
  289. data/lib/fontisan/validators/web_font_validator.rb +0 -2
  290. data/lib/fontisan/validators.rb +14 -0
  291. data/lib/fontisan/variable/delta_applicator.rb +0 -4
  292. data/lib/fontisan/variable/instancer.rb +0 -3
  293. data/lib/fontisan/variable/static_font_builder.rb +0 -3
  294. data/lib/fontisan/variable.rb +16 -0
  295. data/lib/fontisan/variation/blend_applier.rb +0 -2
  296. data/lib/fontisan/variation/cache.rb +0 -2
  297. data/lib/fontisan/variation/converter.rb +0 -3
  298. data/lib/fontisan/variation/data_extractor.rb +0 -2
  299. data/lib/fontisan/variation/delta_applier.rb +0 -5
  300. data/lib/fontisan/variation/inspector.rb +0 -1
  301. data/lib/fontisan/variation/instance_generator.rb +0 -6
  302. data/lib/fontisan/variation/instance_writer.rb +0 -5
  303. data/lib/fontisan/variation/metrics_adjuster.rb +0 -4
  304. data/lib/fontisan/variation/optimizer.rb +0 -3
  305. data/lib/fontisan/variation/parallel_generator.rb +0 -3
  306. data/lib/fontisan/variation/subsetter.rb +0 -4
  307. data/lib/fontisan/variation/tuple_variation_header.rb +0 -2
  308. data/lib/fontisan/variation/variable_svg_generator.rb +0 -3
  309. data/lib/fontisan/variation/variation_context.rb +0 -3
  310. data/lib/fontisan/variation/variation_preserver.rb +0 -3
  311. data/lib/fontisan/variation.rb +31 -0
  312. data/lib/fontisan/version.rb +1 -1
  313. data/lib/fontisan/woff2.rb +13 -0
  314. data/lib/fontisan/woff2_font.rb +31 -9
  315. data/lib/fontisan/woff_font.rb +31 -2
  316. data/lib/fontisan.rb +124 -196
  317. metadata +128 -7
  318. data/fontisan.gemspec +0 -47
data/lib/fontisan.rb CHANGED
@@ -39,203 +39,96 @@ Lutaml::Model::Config.configure do |config|
39
39
  config.xml_adapter_type = :nokogiri
40
40
  end
41
41
 
42
- # Core
43
- require_relative "fontisan/version"
44
- require_relative "fontisan/error"
45
- require_relative "fontisan/constants"
46
-
47
- # Binary structures and parsers
48
- require_relative "fontisan/parsers/tag"
49
- require_relative "fontisan/binary/base_record"
50
-
51
- # Table parsers
52
- require_relative "fontisan/tables/head"
53
- require_relative "fontisan/tables/hhea"
54
- require_relative "fontisan/tables/hmtx"
55
- require_relative "fontisan/tables/maxp"
56
- require_relative "fontisan/tables/loca"
57
- require_relative "fontisan/tables/glyf"
58
- require_relative "fontisan/tables/name"
59
- require_relative "fontisan/tables/os2"
60
- require_relative "fontisan/tables/post"
61
- require_relative "fontisan/tables/cmap"
62
- require_relative "fontisan/tables/fvar"
63
- require_relative "fontisan/tables/variation_common"
64
- require_relative "fontisan/tables/hvar"
65
- require_relative "fontisan/tables/vvar"
66
- require_relative "fontisan/tables/mvar"
67
- require_relative "fontisan/tables/gvar"
68
- require_relative "fontisan/tables/cvar"
69
- require_relative "fontisan/tables/cff"
70
- require_relative "fontisan/tables/layout_common"
71
- require_relative "fontisan/tables/gsub"
72
- require_relative "fontisan/tables/gpos"
73
- require_relative "fontisan/tables/colr"
74
- require_relative "fontisan/tables/cpal"
75
- require_relative "fontisan/tables/svg"
76
- require_relative "fontisan/tables/sbix"
77
- require_relative "fontisan/tables/cblc"
78
- require_relative "fontisan/tables/cbdt"
79
-
80
- # Domain objects (BinData::Record)
81
- require_relative "fontisan/true_type_font"
82
- require_relative "fontisan/open_type_font"
83
- require_relative "fontisan/true_type_collection"
84
- require_relative "fontisan/open_type_collection"
85
- require_relative "fontisan/woff_font"
86
- require_relative "fontisan/woff2_font"
87
- require_relative "fontisan/type1_font"
88
-
89
- # Font extensions for table-based construction
90
- require_relative "fontisan/true_type_font_extensions"
91
- require_relative "fontisan/open_type_font_extensions"
92
-
93
- # Font loading
94
- require_relative "fontisan/font_loader"
95
-
96
- # Utilities
97
- require_relative "fontisan/metrics_calculator"
98
- require_relative "fontisan/glyph_accessor"
99
- require_relative "fontisan/outline_extractor"
100
- require_relative "fontisan/utilities/checksum_calculator"
101
- require_relative "fontisan/font_writer"
102
-
103
- # Information models (Lutaml::Model)
104
- require_relative "fontisan/models/bitmap_strike"
105
- require_relative "fontisan/models/bitmap_glyph"
106
- require_relative "fontisan/models/font_info"
107
- require_relative "fontisan/models/table_info"
108
- require_relative "fontisan/models/glyph_info"
109
- require_relative "fontisan/models/glyph_outline"
110
- require_relative "fontisan/models/unicode_mappings"
111
- require_relative "fontisan/models/variable_font_info"
112
- require_relative "fontisan/models/optical_size_info"
113
- require_relative "fontisan/models/scripts_info"
114
- require_relative "fontisan/models/features_info"
115
- require_relative "fontisan/models/all_scripts_features_info"
116
- require_relative "fontisan/models/validation_report"
117
- require_relative "fontisan/models/font_report"
118
- require_relative "fontisan/models/collection_validation_report"
119
- require_relative "fontisan/models/font_export"
120
- require_relative "fontisan/models/collection_font_summary"
121
- require_relative "fontisan/models/collection_info"
122
- require_relative "fontisan/models/collection_brief_info"
123
- require_relative "fontisan/models/collection_list_info"
124
- require_relative "fontisan/models/font_summary"
125
- require_relative "fontisan/models/table_sharing_info"
126
- require_relative "fontisan/models/color_glyph"
127
- require_relative "fontisan/models/color_layer"
128
- require_relative "fontisan/models/color_palette"
129
- require_relative "fontisan/models/svg_glyph"
130
-
131
- # Validators infrastructure (NEW - DSL-based framework from Week 2+)
132
- require_relative "fontisan/validators/validator"
133
- require_relative "fontisan/validators/basic_validator"
134
- require_relative "fontisan/validators/font_book_validator"
135
- require_relative "fontisan/validators/opentype_validator"
136
- require_relative "fontisan/validators/web_font_validator"
137
- require_relative "fontisan/validators/profile_loader"
138
-
139
- # Export infrastructure
140
- require_relative "fontisan/export/table_serializer"
141
- require_relative "fontisan/export/ttx_generator"
142
- require_relative "fontisan/export/ttx_parser"
143
- require_relative "fontisan/export/exporter"
144
-
145
- # Validation infrastructure (OLD - commented out for new DSL framework)
146
- # Week 1 deleted these, Week 2-5 building new DSL-based framework
147
- # require_relative "fontisan/validation/checks/base_check"
148
- # require_relative "fontisan/validation/check_registry"
149
- # require_relative "fontisan/validation/profile"
150
- # require_relative "fontisan/validation/table_validator"
151
- # require_relative "fontisan/validation/structure_validator"
152
- # require_relative "fontisan/validation/consistency_validator"
153
- # require_relative "fontisan/validation/checksum_validator"
154
- # require_relative "fontisan/validation/validator"
155
-
156
- # Subsetting infrastructure
157
- require_relative "fontisan/subset/options"
158
- require_relative "fontisan/subset/profile"
159
- require_relative "fontisan/subset/glyph_mapping"
160
- require_relative "fontisan/subset/table_subsetter"
161
- require_relative "fontisan/subset/builder"
162
-
163
- # Collection infrastructure
164
- require_relative "fontisan/collection/table_analyzer"
165
- require_relative "fontisan/collection/table_deduplicator"
166
- require_relative "fontisan/collection/offset_calculator"
167
- require_relative "fontisan/collection/writer"
168
- require_relative "fontisan/collection/builder"
169
-
170
- # Format conversion infrastructure
171
- require_relative "fontisan/conversion_options"
172
- require_relative "fontisan/converters/conversion_strategy"
173
- require_relative "fontisan/converters/table_copier"
174
- require_relative "fontisan/converters/outline_converter"
175
- require_relative "fontisan/converters/format_converter"
176
-
177
- # Variation infrastructure
178
- require_relative "fontisan/variation/interpolator"
179
- require_relative "fontisan/variation/region_matcher"
180
- require_relative "fontisan/variation/data_extractor"
181
- require_relative "fontisan/variation/instance_generator"
182
- require_relative "fontisan/variation/metrics_adjuster"
183
- require_relative "fontisan/variation/converter"
184
- require_relative "fontisan/variation/variation_preserver"
185
- require_relative "fontisan/variation/delta_parser"
186
- require_relative "fontisan/variation/delta_applier"
187
- require_relative "fontisan/variation/blend_applier"
188
- require_relative "fontisan/variation/variable_svg_generator"
189
-
190
- # Pipeline infrastructure
191
- require_relative "fontisan/pipeline/format_detector"
192
- require_relative "fontisan/pipeline/variation_resolver"
193
- require_relative "fontisan/pipeline/output_writer"
194
- require_relative "fontisan/pipeline/transformation_pipeline"
195
-
196
- # Optimization infrastructure
197
- require_relative "fontisan/optimizers/pattern_analyzer"
198
- require_relative "fontisan/optimizers/subroutine_builder"
199
- require_relative "fontisan/optimizers/charstring_rewriter"
200
- require_relative "fontisan/optimizers/subroutine_optimizer"
201
- require_relative "fontisan/optimizers/subroutine_generator"
202
-
203
- # Hints infrastructure
204
- require_relative "fontisan/models/hint"
205
- require_relative "fontisan/hints/truetype_instruction_analyzer"
206
- require_relative "fontisan/hints/truetype_instruction_generator"
207
- require_relative "fontisan/hints/truetype_hint_extractor"
208
- require_relative "fontisan/hints/truetype_hint_applier"
209
- require_relative "fontisan/hints/postscript_hint_extractor"
210
- require_relative "fontisan/hints/postscript_hint_applier"
211
- require_relative "fontisan/hints/hint_converter"
212
- require_relative "fontisan/hints/hint_validator"
213
-
214
- # Commands
215
- require_relative "fontisan/commands/base_command"
216
- require_relative "fontisan/commands/info_command"
217
- require_relative "fontisan/commands/ls_command"
218
- require_relative "fontisan/commands/tables_command"
219
- require_relative "fontisan/commands/glyphs_command"
220
- require_relative "fontisan/commands/unicode_command"
221
- require_relative "fontisan/commands/variable_command"
222
- require_relative "fontisan/commands/optical_size_command"
223
- require_relative "fontisan/commands/scripts_command"
224
- require_relative "fontisan/commands/features_command"
225
- require_relative "fontisan/commands/dump_table_command"
226
- require_relative "fontisan/commands/subset_command"
227
- require_relative "fontisan/commands/convert_command"
228
- require_relative "fontisan/commands/pack_command"
229
- require_relative "fontisan/commands/unpack_command"
230
- require_relative "fontisan/commands/validate_command"
231
-
232
- # Formatters
233
- require_relative "fontisan/formatters/text_formatter"
234
-
235
- # CLI
236
- require_relative "fontisan/cli"
237
-
238
42
  module Fontisan
43
+ #
44
+ # Each namespace under Fontisan has a hub file at lib/fontisan/<ns>.rb
45
+ # that declares autoloads for its children. This file autoloads those
46
+ # hubs plus the flat Fontisan::* classes. Files are loaded lazily on
47
+ # first reference.
48
+
49
+ # Core
50
+ require "fontisan/version"
51
+ autoload :Constants, "fontisan/constants"
52
+ autoload :LoadingModes, "fontisan/loading_modes"
53
+ autoload :ConversionOptions, "fontisan/conversion_options"
54
+
55
+ # Errors (all defined in fontisan/error)
56
+ autoload :Error, "fontisan/error"
57
+ autoload :InvalidFontError, "fontisan/error"
58
+ autoload :UnsupportedFormatError, "fontisan/error"
59
+ autoload :CorruptedTableError, "fontisan/error"
60
+ autoload :MissingTableError, "fontisan/error"
61
+ autoload :ParseError, "fontisan/error"
62
+ autoload :SubsettingError, "fontisan/error"
63
+ autoload :VariationError, "fontisan/error"
64
+ autoload :InvalidCoordinatesError, "fontisan/error"
65
+ autoload :MissingVariationTableError, "fontisan/error"
66
+ autoload :InvalidAxisError, "fontisan/error"
67
+ autoload :RegionOverlapError, "fontisan/error"
68
+ autoload :DeltaMismatchError, "fontisan/error"
69
+ autoload :InvalidInstanceIndexError, "fontisan/error"
70
+ autoload :CorruptedVariationDataError, "fontisan/error"
71
+ autoload :InvalidVariationDataError, "fontisan/error"
72
+ autoload :VariationDataCorruptedError, "fontisan/error"
73
+
74
+ # Namespace hubs (each hub declares its own child autoloads)
75
+ autoload :Audit, "fontisan/audit"
76
+ autoload :Binary, "fontisan/binary"
77
+ autoload :Cldr, "fontisan/cldr"
78
+ autoload :Collection, "fontisan/collection"
79
+ autoload :Commands, "fontisan/commands"
80
+ autoload :Converters, "fontisan/converters"
81
+ autoload :Export, "fontisan/export"
82
+ autoload :Formatters, "fontisan/formatters"
83
+ autoload :Hints, "fontisan/hints"
84
+ autoload :Models, "fontisan/models"
85
+ autoload :Optimizers, "fontisan/optimizers"
86
+ autoload :Parsers, "fontisan/parsers"
87
+ autoload :Pipeline, "fontisan/pipeline"
88
+ autoload :Subset, "fontisan/subset"
89
+ autoload :Svg, "fontisan/svg"
90
+ autoload :Tables, "fontisan/tables"
91
+ autoload :Type1, "fontisan/type1"
92
+ autoload :Ucd, "fontisan/ucd"
93
+ autoload :Utilities, "fontisan/utilities"
94
+ autoload :Utils, "fontisan/utils"
95
+ autoload :Validation, "fontisan/validation"
96
+ autoload :Validators, "fontisan/validators"
97
+ autoload :Variable, "fontisan/variable"
98
+ autoload :Variation, "fontisan/variation"
99
+ autoload :Woff2, "fontisan/woff2"
100
+
101
+ # Flat classes (no inner namespace)
102
+ autoload :BaseCollection, "fontisan/base_collection"
103
+ autoload :Cli, "fontisan/cli"
104
+ autoload :DfontCollection, "fontisan/dfont_collection"
105
+ autoload :FontLoader, "fontisan/font_loader"
106
+ autoload :FontWriter, "fontisan/font_writer"
107
+ autoload :GlyphAccessor, "fontisan/glyph_accessor"
108
+ autoload :MetricsCalculator, "fontisan/metrics_calculator"
109
+ autoload :OpenTypeCollection, "fontisan/open_type_collection"
110
+ autoload :OpenTypeFont, "fontisan/open_type_font"
111
+ autoload :OpenTypeFontExtensions, "fontisan/open_type_font_extensions"
112
+ autoload :OutlineExtractor, "fontisan/outline_extractor"
113
+ autoload :SfntFont, "fontisan/sfnt_font"
114
+ autoload :SfntTable, "fontisan/sfnt_table"
115
+ autoload :TrueTypeCollection, "fontisan/true_type_collection"
116
+ autoload :TrueTypeFont, "fontisan/true_type_font"
117
+ autoload :TrueTypeFontExtensions, "fontisan/true_type_font_extensions"
118
+ autoload :Type1Font, "fontisan/type1_font"
119
+ autoload :UcdCli, "fontisan/cli/ucd_cli"
120
+ autoload :CldrCli, "fontisan/cli/cldr_cli"
121
+ autoload :Woff2Font, "fontisan/woff2_font"
122
+ autoload :WoffFont, "fontisan/woff_font"
123
+
124
+ # SFNT offset table and table directory (defined in sfnt_font.rb)
125
+ autoload :OffsetTable, "fontisan/sfnt_font"
126
+ autoload :TableDirectory, "fontisan/sfnt_font"
127
+
128
+ # WOFF headers and table directory entries
129
+ autoload :WoffHeader, "fontisan/woff_font"
130
+ autoload :WoffTableDirectoryEntry, "fontisan/woff_font"
131
+ autoload :Woff2TableDirectoryEntry, "fontisan/woff2_font"
239
132
  class << self
240
133
  attr_accessor :logger
241
134
 
@@ -279,6 +172,41 @@ module Fontisan
279
172
  Commands::InfoCommand.new(path, brief: brief, font_index: font_index).run
280
173
  end
281
174
 
175
+ # Convert a font to a different format.
176
+ #
177
+ # Delegates to {Commands::ConvertCommand}. Format-specific compression knobs
178
+ # are declared by each strategy (single source of truth) and forwarded
179
+ # through the transformation pipeline.
180
+ #
181
+ # WOFF uses zlib and runs on every browser that supports web fonts (IE9+,
182
+ # all evergreen browsers). WOFF2 uses Brotli for ~30% smaller output but
183
+ # requires modern browsers — use WOFF when legacy support matters.
184
+ #
185
+ # @param path [String] Input font file
186
+ # @param to [Symbol, String] Target format: :ttf, :otf, :type1, :woff,
187
+ # :woff2, :svg, :ttc, :otc, :dfont
188
+ # @param output [String] Output font file path
189
+ # @param opts [Hash] Conversion options. Format-specific knobs:
190
+ # - WOFF: :zlib_level (0–9, default 6), :uncompressed (bool),
191
+ # :compression_threshold (bytes)
192
+ # - WOFF2: :brotli_quality (0–11, default 11), :transform_tables (bool)
193
+ # - Variable fonts: :coordinates, :instance_index, :preserve_variation
194
+ # - Collections: :target_format ("preserve"|"ttf"|"otf")
195
+ # @return [Hash] Result hash with :success, :output_path, source/target
196
+ # format, input/output sizes, and variation strategy.
197
+ #
198
+ # @example TTF → WOFF2 (modern browsers)
199
+ # Fontisan.convert("f.ttf", to: :woff2, output: "f.woff2", brotli_quality: 11)
200
+ #
201
+ # @example TTF → WOFF (legacy browsers, max zlib)
202
+ # Fontisan.convert("f.ttf", to: :woff, output: "f.woff", zlib_level: 9)
203
+ #
204
+ # @example WOFF with no compression (legal per WOFF 1.0 §5.1)
205
+ # Fontisan.convert("f.ttf", to: :woff, output: "f.woff", uncompressed: true)
206
+ def self.convert(path, to:, output:, **)
207
+ Commands::ConvertCommand.new(path, { to: to, output: output, ** }).run
208
+ end
209
+
282
210
  # Validate a font file using specified profile
283
211
  #
284
212
  # Validates fonts against quality checks, structural integrity, and OpenType
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontisan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.16
4
+ version: 0.2.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2026-05-02 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: base64
@@ -52,6 +51,20 @@ dependencies:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
53
  version: '0.5'
54
+ - !ruby/object:Gem::Dependency
55
+ name: logger
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
55
68
  - !ruby/object:Gem::Dependency
56
69
  name: lutaml-model
57
70
  requirement: !ruby/object:Gem::Requirement
@@ -151,6 +164,7 @@ files:
151
164
  - docs/api/validators/font-validator.md
152
165
  - docs/api/validators/helper.md
153
166
  - docs/api/validators/profile.md
167
+ - docs/cli/audit.md
154
168
  - docs/cli/convert.md
155
169
  - docs/cli/dump-table.md
156
170
  - docs/cli/export.md
@@ -242,16 +256,55 @@ files:
242
256
  - docs/public/favicon.svg
243
257
  - docs/public/logo-full.svg
244
258
  - docs/public/logo.svg
259
+ - docs/public/robots.txt
245
260
  - docs/public/site.webmanifest
246
261
  - docs/public/web-app-manifest-192x192.png
247
262
  - docs/public/web-app-manifest-512x512.png
263
+ - docs/scripts/post-build.mjs
248
264
  - exe/fontisan
249
- - fontisan.gemspec
250
265
  - lib/fontisan.rb
266
+ - lib/fontisan/audit.rb
267
+ - lib/fontisan/audit/codepoint_range_coalescer.rb
268
+ - lib/fontisan/audit/context.rb
269
+ - lib/fontisan/audit/differ.rb
270
+ - lib/fontisan/audit/extractors.rb
271
+ - lib/fontisan/audit/extractors/aggregations.rb
272
+ - lib/fontisan/audit/extractors/base.rb
273
+ - lib/fontisan/audit/extractors/color_capabilities.rb
274
+ - lib/fontisan/audit/extractors/coverage.rb
275
+ - lib/fontisan/audit/extractors/hinting.rb
276
+ - lib/fontisan/audit/extractors/identity.rb
277
+ - lib/fontisan/audit/extractors/language_coverage.rb
278
+ - lib/fontisan/audit/extractors/licensing.rb
279
+ - lib/fontisan/audit/extractors/metrics.rb
280
+ - lib/fontisan/audit/extractors/opentype_layout.rb
281
+ - lib/fontisan/audit/extractors/provenance.rb
282
+ - lib/fontisan/audit/extractors/style.rb
283
+ - lib/fontisan/audit/extractors/variation_detail.rb
284
+ - lib/fontisan/audit/library_aggregator.rb
285
+ - lib/fontisan/audit/library_auditor.rb
286
+ - lib/fontisan/audit/registry.rb
287
+ - lib/fontisan/audit/style_extractor.rb
251
288
  - lib/fontisan/base_collection.rb
289
+ - lib/fontisan/binary.rb
252
290
  - lib/fontisan/binary/base_record.rb
253
291
  - lib/fontisan/binary/structures.rb
292
+ - lib/fontisan/cldr.rb
293
+ - lib/fontisan/cldr/aggregator.rb
294
+ - lib/fontisan/cldr/cache_manager.rb
295
+ - lib/fontisan/cldr/config.rb
296
+ - lib/fontisan/cldr/download_error.rb
297
+ - lib/fontisan/cldr/downloader.rb
298
+ - lib/fontisan/cldr/error.rb
299
+ - lib/fontisan/cldr/index.rb
300
+ - lib/fontisan/cldr/index_builder.rb
301
+ - lib/fontisan/cldr/unicode_set_parser.rb
302
+ - lib/fontisan/cldr/unknown_version_error.rb
303
+ - lib/fontisan/cldr/version_resolver.rb
254
304
  - lib/fontisan/cli.rb
305
+ - lib/fontisan/cli/cldr_cli.rb
306
+ - lib/fontisan/cli/ucd_cli.rb
307
+ - lib/fontisan/collection.rb
255
308
  - lib/fontisan/collection/builder.rb
256
309
  - lib/fontisan/collection/dfont_builder.rb
257
310
  - lib/fontisan/collection/offset_calculator.rb
@@ -259,6 +312,10 @@ files:
259
312
  - lib/fontisan/collection/table_analyzer.rb
260
313
  - lib/fontisan/collection/table_deduplicator.rb
261
314
  - lib/fontisan/collection/writer.rb
315
+ - lib/fontisan/commands.rb
316
+ - lib/fontisan/commands/audit_command.rb
317
+ - lib/fontisan/commands/audit_compare_command.rb
318
+ - lib/fontisan/commands/audit_library_command.rb
262
319
  - lib/fontisan/commands/base_command.rb
263
320
  - lib/fontisan/commands/convert_command.rb
264
321
  - lib/fontisan/commands/dump_table_command.rb
@@ -277,6 +334,7 @@ files:
277
334
  - lib/fontisan/commands/unpack_command.rb
278
335
  - lib/fontisan/commands/validate_command.rb
279
336
  - lib/fontisan/commands/variable_command.rb
337
+ - lib/fontisan/config/cldr.yml
280
338
  - lib/fontisan/config/collection_settings.yml
281
339
  - lib/fontisan/config/conversion_matrix.yml
282
340
  - lib/fontisan/config/export_settings.yml
@@ -284,10 +342,12 @@ files:
284
342
  - lib/fontisan/config/scripts.yml
285
343
  - lib/fontisan/config/subset_profiles.yml
286
344
  - lib/fontisan/config/svg_settings.yml
345
+ - lib/fontisan/config/ucd.yml
287
346
  - lib/fontisan/config/variable_settings.yml
288
347
  - lib/fontisan/config/woff2_settings.yml
289
348
  - lib/fontisan/constants.rb
290
349
  - lib/fontisan/conversion_options.rb
350
+ - lib/fontisan/converters.rb
291
351
  - lib/fontisan/converters/cff_table_builder.rb
292
352
  - lib/fontisan/converters/collection_converter.rb
293
353
  - lib/fontisan/converters/conversion_strategy.rb
@@ -303,8 +363,10 @@ files:
303
363
  - lib/fontisan/converters/woff_writer.rb
304
364
  - lib/fontisan/dfont_collection.rb
305
365
  - lib/fontisan/error.rb
366
+ - lib/fontisan/export.rb
306
367
  - lib/fontisan/export/exporter.rb
307
368
  - lib/fontisan/export/table_serializer.rb
369
+ - lib/fontisan/export/transformers.rb
308
370
  - lib/fontisan/export/transformers/font_to_ttx.rb
309
371
  - lib/fontisan/export/transformers/head_transformer.rb
310
372
  - lib/fontisan/export/transformers/hhea_transformer.rb
@@ -316,8 +378,13 @@ files:
316
378
  - lib/fontisan/export/ttx_parser.rb
317
379
  - lib/fontisan/font_loader.rb
318
380
  - lib/fontisan/font_writer.rb
381
+ - lib/fontisan/formatters.rb
382
+ - lib/fontisan/formatters/audit_diff_text_renderer.rb
383
+ - lib/fontisan/formatters/audit_text_renderer.rb
384
+ - lib/fontisan/formatters/library_summary_text_renderer.rb
319
385
  - lib/fontisan/formatters/text_formatter.rb
320
386
  - lib/fontisan/glyph_accessor.rb
387
+ - lib/fontisan/hints.rb
321
388
  - lib/fontisan/hints/hint_converter.rb
322
389
  - lib/fontisan/hints/hint_validator.rb
323
390
  - lib/fontisan/hints/postscript_hint_applier.rb
@@ -328,9 +395,34 @@ files:
328
395
  - lib/fontisan/hints/truetype_instruction_generator.rb
329
396
  - lib/fontisan/loading_modes.rb
330
397
  - lib/fontisan/metrics_calculator.rb
398
+ - lib/fontisan/models.rb
331
399
  - lib/fontisan/models/all_scripts_features_info.rb
400
+ - lib/fontisan/models/audit.rb
401
+ - lib/fontisan/models/audit/audit_axis.rb
402
+ - lib/fontisan/models/audit/audit_block.rb
403
+ - lib/fontisan/models/audit/audit_diff.rb
404
+ - lib/fontisan/models/audit/audit_report.rb
405
+ - lib/fontisan/models/audit/codepoint_range.rb
406
+ - lib/fontisan/models/audit/codepoint_set_diff.rb
407
+ - lib/fontisan/models/audit/color_capabilities.rb
408
+ - lib/fontisan/models/audit/duplicate_group.rb
409
+ - lib/fontisan/models/audit/embedding_type.rb
410
+ - lib/fontisan/models/audit/field_change.rb
411
+ - lib/fontisan/models/audit/fs_selection_flags.rb
412
+ - lib/fontisan/models/audit/gasp_range.rb
413
+ - lib/fontisan/models/audit/hinting.rb
414
+ - lib/fontisan/models/audit/library_summary.rb
415
+ - lib/fontisan/models/audit/licensing.rb
416
+ - lib/fontisan/models/audit/metrics.rb
417
+ - lib/fontisan/models/audit/named_instance.rb
418
+ - lib/fontisan/models/audit/opentype_layout.rb
419
+ - lib/fontisan/models/audit/script_coverage_row.rb
420
+ - lib/fontisan/models/audit/script_features.rb
421
+ - lib/fontisan/models/audit/variation_detail.rb
332
422
  - lib/fontisan/models/bitmap_glyph.rb
333
423
  - lib/fontisan/models/bitmap_strike.rb
424
+ - lib/fontisan/models/cldr.rb
425
+ - lib/fontisan/models/cldr/language_coverage.rb
334
426
  - lib/fontisan/models/collection_brief_info.rb
335
427
  - lib/fontisan/models/collection_font_summary.rb
336
428
  - lib/fontisan/models/collection_info.rb
@@ -353,7 +445,9 @@ files:
353
445
  - lib/fontisan/models/svg_glyph.rb
354
446
  - lib/fontisan/models/table_info.rb
355
447
  - lib/fontisan/models/table_sharing_info.rb
448
+ - lib/fontisan/models/ttx.rb
356
449
  - lib/fontisan/models/ttx/glyph_order.rb
450
+ - lib/fontisan/models/ttx/tables.rb
357
451
  - lib/fontisan/models/ttx/tables/binary_table.rb
358
452
  - lib/fontisan/models/ttx/tables/head_table.rb
359
453
  - lib/fontisan/models/ttx/tables/hhea_table.rb
@@ -362,12 +456,16 @@ files:
362
456
  - lib/fontisan/models/ttx/tables/os2_table.rb
363
457
  - lib/fontisan/models/ttx/tables/post_table.rb
364
458
  - lib/fontisan/models/ttx/ttfont.rb
459
+ - lib/fontisan/models/ucd.rb
460
+ - lib/fontisan/models/ucd/ucd.rb
461
+ - lib/fontisan/models/ucd/ucd_char.rb
365
462
  - lib/fontisan/models/unicode_mappings.rb
366
463
  - lib/fontisan/models/validation_report.rb
367
464
  - lib/fontisan/models/variable_font_info.rb
368
465
  - lib/fontisan/open_type_collection.rb
369
466
  - lib/fontisan/open_type_font.rb
370
467
  - lib/fontisan/open_type_font_extensions.rb
468
+ - lib/fontisan/optimizers.rb
371
469
  - lib/fontisan/optimizers/charstring_rewriter.rb
372
470
  - lib/fontisan/optimizers/pattern_analyzer.rb
373
471
  - lib/fontisan/optimizers/stack_tracker.rb
@@ -375,10 +473,13 @@ files:
375
473
  - lib/fontisan/optimizers/subroutine_generator.rb
376
474
  - lib/fontisan/optimizers/subroutine_optimizer.rb
377
475
  - lib/fontisan/outline_extractor.rb
476
+ - lib/fontisan/parsers.rb
378
477
  - lib/fontisan/parsers/dfont_parser.rb
379
478
  - lib/fontisan/parsers/tag.rb
479
+ - lib/fontisan/pipeline.rb
380
480
  - lib/fontisan/pipeline/format_detector.rb
381
481
  - lib/fontisan/pipeline/output_writer.rb
482
+ - lib/fontisan/pipeline/strategies.rb
382
483
  - lib/fontisan/pipeline/strategies/base_strategy.rb
383
484
  - lib/fontisan/pipeline/strategies/instance_strategy.rb
384
485
  - lib/fontisan/pipeline/strategies/named_strategy.rb
@@ -387,15 +488,18 @@ files:
387
488
  - lib/fontisan/pipeline/variation_resolver.rb
388
489
  - lib/fontisan/sfnt_font.rb
389
490
  - lib/fontisan/sfnt_table.rb
491
+ - lib/fontisan/subset.rb
390
492
  - lib/fontisan/subset/builder.rb
391
493
  - lib/fontisan/subset/glyph_mapping.rb
392
494
  - lib/fontisan/subset/options.rb
393
495
  - lib/fontisan/subset/profile.rb
394
496
  - lib/fontisan/subset/table_subsetter.rb
497
+ - lib/fontisan/svg.rb
395
498
  - lib/fontisan/svg/font_face_generator.rb
396
499
  - lib/fontisan/svg/font_generator.rb
397
500
  - lib/fontisan/svg/glyph_generator.rb
398
501
  - lib/fontisan/svg/view_box_calculator.rb
502
+ - lib/fontisan/tables.rb
399
503
  - lib/fontisan/tables/cbdt.rb
400
504
  - lib/fontisan/tables/cblc.rb
401
505
  - lib/fontisan/tables/cff.rb
@@ -493,16 +597,33 @@ files:
493
597
  - lib/fontisan/type1/ttf_to_type1_converter.rb
494
598
  - lib/fontisan/type1/upm_scaler.rb
495
599
  - lib/fontisan/type1_font.rb
600
+ - lib/fontisan/ucd.rb
601
+ - lib/fontisan/ucd/aggregator.rb
602
+ - lib/fontisan/ucd/cache_manager.rb
603
+ - lib/fontisan/ucd/config.rb
604
+ - lib/fontisan/ucd/download_error.rb
605
+ - lib/fontisan/ucd/downloader.rb
606
+ - lib/fontisan/ucd/error.rb
607
+ - lib/fontisan/ucd/index.rb
608
+ - lib/fontisan/ucd/index_builder.rb
609
+ - lib/fontisan/ucd/range_entry.rb
610
+ - lib/fontisan/ucd/unknown_version_error.rb
611
+ - lib/fontisan/ucd/version_resolver.rb
612
+ - lib/fontisan/utilities.rb
496
613
  - lib/fontisan/utilities/brotli_wrapper.rb
497
614
  - lib/fontisan/utilities/checksum_calculator.rb
615
+ - lib/fontisan/utils.rb
498
616
  - lib/fontisan/utils/thread_pool.rb
617
+ - lib/fontisan/validation.rb
499
618
  - lib/fontisan/validation/collection_validator.rb
619
+ - lib/fontisan/validators.rb
500
620
  - lib/fontisan/validators/basic_validator.rb
501
621
  - lib/fontisan/validators/font_book_validator.rb
502
622
  - lib/fontisan/validators/opentype_validator.rb
503
623
  - lib/fontisan/validators/profile_loader.rb
504
624
  - lib/fontisan/validators/validator.rb
505
625
  - lib/fontisan/validators/web_font_validator.rb
626
+ - lib/fontisan/variable.rb
506
627
  - lib/fontisan/variable/axis_normalizer.rb
507
628
  - lib/fontisan/variable/delta_applicator.rb
508
629
  - lib/fontisan/variable/glyph_delta_processor.rb
@@ -511,6 +632,7 @@ files:
511
632
  - lib/fontisan/variable/region_matcher.rb
512
633
  - lib/fontisan/variable/static_font_builder.rb
513
634
  - lib/fontisan/variable/table_updater.rb
635
+ - lib/fontisan/variation.rb
514
636
  - lib/fontisan/variation/blend_applier.rb
515
637
  - lib/fontisan/variation/cache.rb
516
638
  - lib/fontisan/variation/cache_key_builder.rb
@@ -535,6 +657,7 @@ files:
535
657
  - lib/fontisan/variation/variation_preserver.rb
536
658
  - lib/fontisan/version.rb
537
659
  - lib/fontisan/version.rb.orig
660
+ - lib/fontisan/woff2.rb
538
661
  - lib/fontisan/woff2/directory.rb
539
662
  - lib/fontisan/woff2/glyf_transformer.rb
540
663
  - lib/fontisan/woff2/header.rb
@@ -552,7 +675,6 @@ metadata:
552
675
  source_code_uri: https://github.com/fontist/fontisan
553
676
  changelog_uri: https://github.com/fontist/fontisan/blob/main/CHANGELOG.md
554
677
  rubygems_mfa_required: 'true'
555
- post_install_message:
556
678
  rdoc_options: []
557
679
  require_paths:
558
680
  - lib
@@ -567,8 +689,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
567
689
  - !ruby/object:Gem::Version
568
690
  version: '0'
569
691
  requirements: []
570
- rubygems_version: 3.5.22
571
- signing_key:
692
+ rubygems_version: 3.6.9
572
693
  specification_version: 4
573
694
  summary: Font analysis tools and utilities for OpenType fonts
574
695
  test_files: []