Pure data registry for document-owned logical font registrations.
Public authoring code registers logical names such as :body or :heading
against a narrow built-in descriptor. PDF object names and writer resource
allocation stay private implementation details.
Summary
Functions
Converts a resolved built-in descriptor into the PDF font definition used by downstream measurement and rendering stages.
Returns the default logical font name used by new documents.
Fetches a registered logical font descriptor.
Returns the built-in Helvetica descriptor used by the public compatibility path.
Returns a registry seeded with the built-in Helvetica-compatible default entry.
Preflights embedded font registrations into cached PDF font descriptors.
Sets the registry default to a previously registered logical font name.
Registers a logical font name against a supported built-in font descriptor.
Registers a logical font name against an explicit embedded font source.
Registers a narrow four-variant embedded font family.
Resolves an authored text font reference into one shared built-in descriptor.
Resolves an authored text font reference into the concrete built-in PDF font struct used by deterministic measurement and rendering.
Resolves an authored text font reference into a chain of concrete PDF font structs, recursively resolving fallbacks.
Types
@type built_in_descriptor() :: %{ :source => :built_in, :family => built_in_family(), optional(:fallbacks) => [logical_name()] }
@type built_in_family() :: :helvetica
@type descriptor() :: built_in_descriptor() | embedded_descriptor()
@type embedded_descriptor() :: %{ :source => :embedded, :source_kind => embedded_source_kind(), :variant => embedded_variant(), :source_data => embedded_normalized_source(), optional(:pdf_font) => Rendro.PDF.Font.t(), optional(:fallbacks) => [logical_name()] }
@type embedded_normalized_source() :: %{ status: :ok, kind: embedded_source_kind(), bytes: binary(), byte_size: non_neg_integer() } | %{status: :error, kind: embedded_source_kind(), reason: term()}
@type embedded_source_kind() :: :path | :binary
@type embedded_variant() :: :regular | :bold | :italic | :bold_italic
@type logical_name() :: atom()
@type resolve_error() :: {:unknown_logical_font, logical_name()} | {:unsupported_font_reference, term()} | {:invalid_embedded_font, %{ logical_name: logical_name(), source_kind: embedded_source_kind(), reason: term() }}
@type t() :: %Rendro.FontRegistry{ default_font: logical_name(), fonts: %{optional(logical_name()) => descriptor()} }
Functions
@spec built_in(descriptor()) :: Rendro.PDF.Font.t()
Converts a resolved built-in descriptor into the PDF font definition used by downstream measurement and rendering stages.
@spec built_in(descriptor(), logical_name()) :: Rendro.PDF.Font.t()
@spec default_font() :: logical_name()
Returns the default logical font name used by new documents.
@spec fetch(t(), logical_name()) :: {:ok, descriptor()} | :error
Fetches a registered logical font descriptor.
@spec helvetica() :: descriptor()
Returns the built-in Helvetica descriptor used by the public compatibility path.
@spec new() :: t()
Returns a registry seeded with the built-in Helvetica-compatible default entry.
@spec preflight(t()) :: {:ok, t()} | {:error, resolve_error()}
Preflights embedded font registrations into cached PDF font descriptors.
@spec put_default_font(t(), logical_name()) :: t()
Sets the registry default to a previously registered logical font name.
@spec register(t(), logical_name(), keyword()) :: t()
Registers a logical font name against a supported built-in font descriptor.
@spec register_embedded( t(), logical_name(), {:path, Path.t()} | {:binary, binary()}, keyword() ) :: t()
Registers a logical font name against an explicit embedded font source.
@spec register_embedded_family( t(), logical_name(), %{required(embedded_variant()) => {:path, Path.t()} | {:binary, binary()}} ) :: t()
Registers a narrow four-variant embedded font family.
The root logical name resolves to the :regular face and the helper also
registers :<family>_bold, :<family>_italic, and :<family>_bold_italic.
@spec resolve(t(), Rendro.Text.font_ref(), logical_name()) :: {:ok, descriptor()} | {:error, resolve_error()}
Resolves an authored text font reference into one shared built-in descriptor.
The resolver only supports the registry-backed built-in fonts available in Phase 25. It intentionally does not load external files, build fallback chains, or expose embedding details.
@spec resolve_pdf_font(t(), Rendro.Text.font_ref(), logical_name()) :: {:ok, Rendro.PDF.Font.t()} | {:error, resolve_error()}
Resolves an authored text font reference into the concrete built-in PDF font struct used by deterministic measurement and rendering.
@spec resolve_pdf_font_chain(t(), Rendro.Text.font_ref(), logical_name()) :: {:ok, [Rendro.PDF.Font.t()]} | {:error, term()}
Resolves an authored text font reference into a chain of concrete PDF font structs, recursively resolving fallbacks.
@spec variant_logical_name(logical_name(), embedded_variant()) :: logical_name()