NativeElixirPdfUtilities.HtmlToPdf.CssParser (native_elixir_pdf_utilities v0.8.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. Bare @page { ... } and simple @font-face rules are accepted
outside the style cascade, and @media print rules are included in the
active print cascade. Page selectors, named-page preludes, and misspelled
@page at-rules are rejected. 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 bare @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 page_option() :: {:page_size, NativeElixirPdfUtilities.HtmlToPdf.PageGeometry.page_size_input()} | {:margin, NativeElixirPdfUtilities.HtmlToPdf.PageGeometry.margin_input()}
@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 bare @page { ... } rules.
Valid page-context properties are accepted even when the renderer does not
apply them yet. Rendering consumes accepted named and explicit two-length
size values, portrait and landscape orientations, one-to-four-value
margin shorthands, and the four margin longhands. Malformed declarations,
unknown properties, invalid paged-media descriptor values, page selectors,
named-page preludes, and misspelled @page at-rules return
{:error, :invalid_css}.
@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.