Native Rich-Text-Style-Sheets
Der native XHTML-Decoder wendet interne Style-Elemente auf Rich-Text-Felder und FDF/XFDF-Importe an und bewahrt echte berechnete Styles in gespeichertem RV und eingebetteten Widget-Appearances
<body xmlns="http://www.w3.org/1999/xhtml">
<style>
.notice { color: #204080; font-size: 14pt }
p > span.urgent { font-weight: bold !important }
</style>
<p class="notice">Review <span class="urgent">today</span></p>
</body>
Style-Elemente nutzen den XHTML-Namespace und lassen type entweder weg oder geben text/css an; media-Attribute und verschachtelte @media-Gruppen nutzen das explizite native Print/Screen-Profil
Regeln unterstützen Universal- und Type-Selektoren, case-sensitive Class- und ID-Namen, Compound-Selektoren, Descendant-, Child-, Adjacent-Sibling- und Subsequent-Sibling-Kombinatoren sowie kommagetrennte Selektorgruppen
Namespace-Selektoren
CSS-Namespace-Deklarationen und qualifizierte Selektoren unterstützen benannte und Default-Namespace-URIs, Wildcard- oder leere Qualifier, unabhängige XML-Präfix-Scopes und begrenztes geerbtes Attribut-Lookup
Attribut- und Struktur-Selektoren
Attribut-Selektoren unterstützen Präsenz, Gleichheit, whitespace-getrennte Wörter, Bindestrich-Präfixe, gewöhnliche Präfixe, Suffixe und Teilstrings: [name], [name="value"], [name~="word"], [name|="en"], [name^="pre"], [name$="end"] und [name*="part"]
Attributwerte akzeptieren quoted Strings oder CSS-Identifier und deren Escapes; das optionale i-Flag fal tet nur ASCII-Buchstaben, während s und ein ausgelassenes Flag case-sensitiv vergleichen
Unpräfixierte Attribute und [|name] matchen Attribute ohne Namespace-URI; [*|name] matcht zusätzlich präfixierte Attribute mit diesem lokalen Namen, ausgenommen Namespace-Deklarationen
Sibling-Kombinatoren überspringen Nicht-Element-Nodes und bewahren Ancestor-Matching über verkettete Selektoren hinweg
Strukturelle Pseudo-Classes umfassen :root, :empty, :first-child, :last-child, :only-child, :first-of-type, :last-of-type und :only-of-type
:scope wählt das Root-Rich-Text-Element und matcht damit :root, weil dieser Decoder keine separate aufruferspezifische Scoping-Root hat
Das statische Profil akzeptiert :hover, :active, :focus, :focus-visible und :focus-within als gültige Selektoren, die während der PDF-Appearance-Generierung nie matchen. Ihre Negationen und logischen oder relationalen Kombinationen behalten normale Selektor-Semantik, sodass p:not(:hover) einen Style anwenden kann, während p:hover es nicht kann
@supports selector(:hover) und äquivalente bedingte Imports testen die Selektor-Grammatik-Unterstützung und evaluieren zu true; das erzeugt keinen Pointer-, Aktivierungs- oder Tastaturfokus-State. Diese sechs Pseudo-Classes nehmen keine Argumente, sodass Formen wie :focus() ungültig bleiben
Die vier Positions-Selektoren :nth-child(), :nth-last-child(), :nth-of-type() und :nth-last-of-type() akzeptieren odd, even, ganzzahlige Positionen und An+B-Formeln mit vorzeichenbehafteten Dezimalkoeffizienten jenseits von Machine-Integer-Bereichen, innerhalb des konfigurierten Scan-Budgets
Type-Positionen vergleichen sowohl den lokalen Elementnamen als auch den Namespace-URI; die :empty-Regel folgt Selectors3, sodass ein Whitespace-Text-Node ein Element nichtleer macht, während Kommentare und Processing Instructions das nicht tun
:lang() folgt dem nächstgelegenen expliziten xml:lang- oder lang-Wert, matcht ASCII-insensitive nach exaktem Wert oder Bindestrich-Präfix und behandelt einen expliziten leeren Wert als Vererbungsstopp
Logische und relationale Selektorlisten
:is() und :where() akzeptieren kommagetrennte komplexe Selektoren, einschließlich Descendant- und Sibling-Kombinatoren; nicht unterstützte Zweige werden ignoriert, und eine leere gültige Liste matcht kein Element
:is() nutzt die größte Argument-Specificity, einschließlich gültiger Argumente, die das aktuelle Element nicht matchen; :where() trägt null Specificity bei
:not() akzeptiert eine nichtleere Liste komplexer Selektoren und matcht, wenn keines seiner Argumente matcht; ein ungültiges Argument invalidiert die vollständige Selektorliste
:has() verankert relative Selektoren am aktuellen Element und testet echte Kinder, Nachkommen oder folgende Geschwister; jedes relative Argument darf mit >, + oder ~ beginnen, gefolgt von weiteren unterstützten Kombinatoren
Verschachteltes :has() und Pseudo-Elemente werden nicht unterstützt; ein ungültiges relatives Argument invalidiert die vollständige :has()-Liste, während eine umgebende forgiving :is()- oder :where()-Liste ihre anderen gültigen Argumente behalten kann
:not() und :has() nutzen die größte gültige Argument-Specificity, verglichen nach ID-Anzahl, Class-/Attribut-/Pseudo-Anzahl und Type-Anzahl
:nth-child(An+B of selector-list) und :nth-last-child(An+B of selector-list) zählen nur Element-Geschwister, die die Vereinigung der nichtleeren komplexen Selektorliste matchen; das Ziel muss selbst zu dieser Vereinigung gehören
Gefilterte Positions-Selektoren tragen ihre eigene Pseudo-Class-Specificity plus die größte Filter-Specificity bei; das of-Schlüsselwort akzeptiert CSS-Identifier-Escapes und Kommentar-Grenzen, während :nth-of-type() und :nth-last-of-type() ihre ungefilterte Grammatik behalten
p:has(> span.urgent) { color: red }
span:is(.notice, p > .urgent) { font-weight: bold }
span:nth-child(2 of .included, [data-status="ready"]) { color: blue }
CSS-Kommentare und Identifier-Escapes werden vor dem Matching geparst, einschließlich ein bis sechs Hexadezimalziffern, optionalen nachfolgenden CSS-Whitespace und Supplementary-Unicode-Scalars; null, Surrogat- und außerhalb des Bereichs liegende Hexadezimal-Escapes lösen zu U+FFFD auf
Deklarationen kaskadieren nach Importance, Selektor-Specificity und Dokument-Source-Order, gefolgt von Inline-Styles mit ihrer entsprechenden Importance; Elemente erben berechnete Parent-Werte über die bestehenden Property-spezifischen Regeln
Alle internen Style-Elemente partizipieren, bevor Text konsumiert wird, sodass ein Style-Element nach seinem Ziel weiterhin gilt; Style-Text wird kein sichtbarer Feldtext
Das Deklarationsprofil behält Fontgröße, -Weight, -Style und -Shorthand, konfigurierte Family-Listen, Farbe, Text-Dekoration, Ausrichtung, Zeilenhöhe und Letter-/Word-Spacing; Längenkonvertierung, Parent-Metrik-Struts und Supplied-Font-Admission folgen den bestehenden nativen Rich-Text-APIs
Gespeichertes RV enthält berechnete Inline-Styles und hängt nicht von den originalen Style-Elementen ab; wiederholte äquivalente FDF/XFDF-Importe behalten exakte committed Bytes, wenn keine ausstehenden Graph-Änderungen eine Veröffentlichung erfordern
Native Pascal-Consumer, Windows-Dateijobs und originale V1-Callbacks sowie Linux-JSON-/V1-Callbacks teilen den Decoder; keine Änderungen öffentlicher Callback-Record-Layouts sind erforderlich
MaxTotalCodeUnits begrenzt Stylesheet-Scanning, extrahierten Style-Text und aggregierte expandierte Deklarationen; MaxNodes begrenzt Regelanzahl, Selektor-Namen, aggregierte Attribut-/Pseudo-Bedingungen, funktionale Selektorlisten sowie Matching-/Sortier-Arbeit, einschließlich relativer Traversierung und gefilterter Sibling-Scans; MaxDepth begrenzt XML-Collection, Selektorteile, verschachtelte Funktionen und rekursives Matching
Abbruch- und Limit-Fehler behalten die frühere Decoder-Ausgabe und den committed Dokumentzustand der Import-Transaktion; Retry nutzt dieselben Original-Optionen und Budgets
Ungültige oder nicht unterstützte Top-Level-Selektorgruppen werden als Ganzes ignoriert; forgiving is/where-Argumentlisten behalten ihre gültigen Zweige; ungültige Deklarationen behalten das bestehende Ignore-Verhalten des Decoders, und nicht unterstützte At-Rules werden übersprungen
Import-Layer, weitere Media-Features, Pseudo-Elemente, zusätzliche State-Pseudo-Classes und aufruferspezifische Scoping-Roots, Tabellen, Bilder und allgemeines CSS-Layout bleiben aktive Arbeiten
Native Form-Data-Interchange · Linux-Rich-Callbacks · Windows-Form-Data-Austausch · Rich-Run-Spacing
Vom Aufrufer gelieferte externe Style-Sheets ergänzen verlinktes und rekursiv importiertes CSS mit Ressourcen-URI-Auflösung, Media-Bedingungen und ausgewählten Stylesheet-Sets
Native Support-Queries nehmen @supports-Gruppen und supports()-Imports an, mit dem unterstützten Deklarations- und Selektor-Profil, gemeinsamen Grenzen und Abbruch-Recovery