Module: Ucode::CodeChart
- Defined in:
- lib/ucode/code_chart.rb,
lib/ucode/code_chart/writer.rb,
lib/ucode/code_chart/fetcher.rb,
lib/ucode/code_chart/sidecar.rb,
lib/ucode/code_chart/verifier.rb,
lib/ucode/code_chart/extractor.rb,
lib/ucode/code_chart/provenance.rb,
lib/ucode/code_chart/block_index.rb,
lib/ucode/code_chart/batch_runner.rb,
lib/ucode/code_chart/gap_analyzer.rb,
lib/ucode/code_chart/verifier/result.rb,
lib/ucode/code_chart/verifier/builder.rb,
lib/ucode/code_chart/verifier/strategy.rb,
lib/ucode/code_chart/coverage_gap_index.rb,
lib/ucode/code_chart/gap_analyzer/manifest.rb,
lib/ucode/code_chart/gap_analyzer/block_gap.rb,
lib/ucode/code_chart/verifier/resvg_strategy.rb,
lib/ucode/code_chart/verifier/mutool_strategy.rb,
lib/ucode/code_chart/verifier/page_render_cache.rb,
lib/ucode/code_chart/gap_analyzer/essenfont_manifest.rb
Overview
CodeChart — per-codepoint SVG glyph extraction from Unicode Code Charts PDFs.
The "Code Chart donor" use case (essenfont consumer): for blocks where no OFL real-font covers the glyphs (Sidetic in Unicode 17, Egyptian Hieroglyphs Extended-B), the only canonical source is the Unicode Consortium's Code Chart PDF. This namespace turns one such PDF into a tree of standalone SVG files plus provenance sidecar JSON.
Architecture (MECE)
Every concern has exactly one home:
* **Block metadata** (range + assigned codepoints) — Parsers::Blocks
* **PDF download + cache** — Fetch::CodeCharts + Glyphs::PdfFetcher
* **PDF object-graph walk + font extraction** — Glyphs::EmbeddedFonts::*
* **Tier selection (Pillar 1 / 2 / 3)** — Glyphs::Resolver
* **SVG conversion + y-flip + viewBox** — Glyphs::EmbeddedFonts::Svg
* **Provenance schema** — CodeChart::Provenance (this namespace)
* **Sidecar JSON write** — CodeChart::Sidecar (this namespace)
* **Per-block orchestration + idempotent disk write** — CodeChart::Writer
* **CLI dispatch** — Cli::CodeChartCmd
CodeChart::* is the feature-facing namespace. It does not implement extraction, font parsing, or PDF I/O — it composes the existing infrastructure. Replacing the implementation (e.g. a future pure-Ruby PDF parser per ADR-0001) does not change the public API.
Defined Under Namespace
Modules: GapAnalyzer Classes: BatchRunner, BlockIndex, CoverageGapIndex, Extractor, Fetcher, Provenance, Sidecar, Verifier, Writer