NativeElixirPdfUtilities.HtmlToPdf.CssParser (native_elixir_pdf_utilities v0.7.0)
View SourceStrict CSS parser for the native HTML-to-PDF renderer.
The parser accepts the document-oriented selector subset used by the style
cascade: element, class, id, element.class, descendant, child, and comma
groups. Simple @page and @font-face rules are accepted outside the style
cascade, and @media print rules are included in the active print cascade.
Declarations are kept as normalized property/value pairs so the style layer
can validate values against the renderer's supported property set.
Summary
Functions
Extracts active local font declarations from @font-face rules.
Extracts renderer page defaults from simple @page rules.
Parses a CSS stylesheet into strict renderer rules.
Parses a CSS declaration block into normalized property/value pairs.
Parses a CSS declaration block and returns source-location details on failure.
Parses a CSS stylesheet and returns source-location details when parsing fails.
Types
@type rule() :: %{ selectors: [selector()], declarations: [declaration()], order: non_neg_integer() }
@type selector() :: %{ parts: [selector_part()], specificity: {non_neg_integer(), non_neg_integer(), non_neg_integer()} }
@type selector_part() :: %{ tag: String.t() | nil, id: String.t() | nil, classes: [String.t()], pseudo_classes: [ :first_child | :last_child | :root | {:nth_child, pos_integer()} ], combinator: nil | :descendant | :child }
@type stylesheet() :: [rule()]
Functions
Extracts active local font declarations from @font-face rules.
Sources must use url(...) with a TrueType or OpenType source. Remote URLs,
data URIs, WOFF/WOFF2 sources, and unsupported descriptors are rejected.
Relative paths are returned unchanged for the style layer to resolve against
the stylesheet location or renderer :base_url. Supported sources retain
their declared order so loading can fall back when an earlier file is
unavailable or invalid.
@spec page_options(String.t()) :: {:ok, [page_option()]} | {:error, :invalid_css}
Extracts renderer page defaults from simple @page rules.
Supported declarations are single-value margin lengths and common
size values such as A4, A4 landscape, letter, and
letter landscape. Unsupported page declarations are ignored so normal CSS
parsing remains strict for the supported style cascade.
@spec parse(String.t()) :: {:ok, stylesheet()} | {:error, :invalid_css}
Parses a CSS stylesheet into strict renderer rules.
@spec parse_declarations(String.t()) :: {:ok, [declaration()]} | {:error, :invalid_css}
Parses a CSS declaration block into normalized property/value pairs.
This is used for both stylesheet blocks and inline style attributes.
@spec parse_declarations_detailed(String.t()) :: {:ok, [declaration()]} | {:error, {:invalid_css, map()}}
Parses a CSS declaration block and returns source-location details on failure.
@spec parse_detailed(String.t()) :: {:ok, stylesheet()} | {:error, {:invalid_css, map()}}
Parses a CSS stylesheet and returns source-location details when parsing fails.