Native Rich-Text-Media-Queries
Der native XHTML-Decoder evaluiert das media-Attribut eines Style-Elements und verschachtelte @media-Gruppen, bevor unterstützte Deklarationen in echte Rich-Text-Runs kaskadieren
Media-Evaluation nutzt ein explizites natives Host-Profil und inspiziert kein Desktop-, Browser- oder Display-Gerät
Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.MediaType := hrmtScreen;
SetLength(Options.MediaFeatures, 2);
Options.MediaFeatures[0].Name := 'width';
Options.MediaFeatures[0].Value := '800px';
Options.MediaFeatures[1].Name := 'resolution';
Options.MediaFeatures[1].Value := '2dppx';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
<style media="screen and (width >= 600px)">
@media (resolution >= 2dppx) {
span.notice { font-size: 14pt }
}
</style>
Bedingungen und Kaskadierung
Queries unterstützen die Media-Types all, print und screen, only- und not-Modifikatoren, kommagetrennte Alternativen sowie parenthesisierte not-, and- und or-Bedingungen
Numerische Features akzeptieren Doppelpunkt-Gleichheit, min-/max-Formen sowie Vorwärts-, umgekehrte oder verkettete Range-Vergleiche mit =, <, <=, > und >=
Verschachtelte Gruppen behalten Source-Ordering, Deklarations-Importance, Selektor-Specificity und geerbte Namespace-Deklarationen; ein Style-media-Attribut und alle umgebenden Media-Gruppen müssen matchen
CSS-Identifier-Escapes, Kommentare, Exponentnotation und balancierte Funktions-Tokens werden innerhalb desselben begrenzten Parsers gescannt
Unbekannte Features, nicht unterstützte Werte und general-enclosed-Bedingungen behalten durch Negation und Boolesche Evaluation einen unbekannten Wahrheitswert; nur eine final wahre Query aktiviert ihre Deklarationen
Einen Host-Eintrag für ein künftiges Feature bereitzustellen, macht dieses Feature nicht Teil des unterstützten Query-Vokabulars
Host-Profil
Unterstützte numerische Features sind width, height, device-width, device-height, resolution, aspect-ratio, device-aspect-ratio, color, color-index, monochrome und grid
Diskrete Features sind orientation, scan, update, overflow-block, overflow-inline, color-gamut, pointer, any-pointer, hover und any-hover
Längeneinheiten sind pt, px, in, pc, cm, mm, q, em und rem; Resolution-Einheiten sind dpi, dpcm, dppx und x, und Ratios nutzen Slash-Notation
Media-em und -rem nutzen MediaInitialFontSize statt einer kaskadierten Element-Fontgröße; der Default sind 12 Punkte, und null behält denselben 12-Punkte-Initialwert für null-initialisierte Legacy-Records
Eine ausgelassene orientation oder aspect-ratio kann aus gelieferter width und height abgeleitet werden; Höhe null lässt das Ratio unbekannt, während gleiche width und height Portrait-Orientierung nutzen
any-pointer darf coarse und fine zugleich enthalten; none lässt sich nicht mit einem anderen Pointer-Wert kombinieren, und color-gamut schließt die niedrigeren unterstützten Gamut-Ranks ein
Das Default-Medium ist print, mit 8 Color-Bits, keinem Indexed- oder Monochrome-Color, grid 0 und sRGB-Gamut; seine update-, overflow-inline-, pointer-, hover- und scan-Fähigkeiten fehlen, und overflow-block ist paged
Dimensionen und Resolution haben keine erfundenen Geräte-Defaults; Screen-Fähigkeiten außer den geteilten Color-Defaults verlangen bei Relevanz einen expliziten Host-Wert
MediaFeatures erlaubt höchstens 32 verschiedene ASCII-insensitive Namen, jeder mit 1 bis 64 ASCII-Buchstaben, Ziffern oder Bindestrichen und einem Wert von 1 bis 256 UTF-16-Code-Einheiten; erkannte Einträge müssen einen gültigen nichtnegativen numerischen oder unterstützten diskreten Wert nutzen
MediaInitialFontSize muss endlich und entweder null oder zwischen 0.000001 und 1000000 Punkten liegen; ungültige Host-Profile werfen EHPDFHeadlessRichTextCodecError, bevor Runs zurückgegeben werden
Explizite Präferenzen und Barrierefreiheit
Präferenzen als MediaFeatures-Einträge liefern; sie beschreiben die Render-Umgebung des Aufrufers und inspizieren kein Betriebssystem, keinen Browser und keinen aktiven Desktop
| Feature | Akzeptierte Werte | Falscher Boolean-Wert |
|---|---|---|
| prefers-color-scheme | light, dark | Keiner der Werte |
| prefers-reduced-motion | no-preference, reduce | no-preference |
| prefers-reduced-transparency | no-preference, reduce | no-preference |
| prefers-contrast | no-preference, less, more, custom | no-preference |
| prefers-reduced-data | no-preference, reduce | no-preference |
| forced-colors | none, active | none |
| inverted-colors | none, inverted | none |
| scripting | none, initial-only, enabled | none |
Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.MediaType := hrmtScreen;
SetLength(Options.MediaFeatures, 2);
Options.MediaFeatures[0].Name := 'prefers-color-scheme';
Options.MediaFeatures[0].Value := 'dark';
Options.MediaFeatures[1].Name := 'prefers-contrast';
Options.MediaFeatures[1].Value := 'more';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
@media (prefers-color-scheme: dark) and (prefers-contrast: more) {
span.notice { font-size: 20pt; font-weight: bold }
}
Alle acht Features sind diskret: Gleichheit oder eine Boolesche Bedingung verwenden, keine min-/max- oder geordneten Range-Vergleiche
Light ist ein aktiver color-scheme-Wert in einer booleschen Query, und less oder custom ist eine aktive Contrast-Präferenz; custom impliziert nicht more
Eine ausgelassene Präferenz bleibt für print und screen unbekannt, auch unter not; der Decoder erfindet weder no-preference, light, none noch einen anderen Fallback-Wert
Ungültige Werte für erkannte Host-Features weisen das Profil zurück, bevor Runs zurückgegeben werden; CSS-Identifier-Escapes und Kommentare nutzen den bestehenden begrenzten Tokenizer, einschließlich Kommentare, die bis zum Eingabeende konsumiert werden
Das scripting-Feature beschreibt nur die vom Aufrufer gelieferte Verfügbarkeit; das Auswerten der Query führt kein JavaScript aus
Style-media-Attribute, verschachtelte Gruppen und vom Aufrufer gelieferte externe Sheets teilen diese Feature-Semantik und die bestehenden Kaskadenregeln
Gespeicherte Dokumente und Grenzen
Native Aufrufer können ein eigenes Host-Profil über THPDFHeadlessRichTextDecodeOptions konfigurieren und direkt an HPDFDecodeHeadlessRichText übergeben
Berechnete Runs behalten die gewählten Styles in gespeichertem RV und eingebetteten Appearances; gewöhnliche FDF/XFDF-Importe nutzen das Default-Print-Profil
Media-Tokens, verschachtelte Gruppen, Host-Wert-Parsing und Matching teilen MaxNodes, MaxTotalCodeUnits, MaxDepth und Abbruch-Bilanzierung mit dem bestehenden Stylesheet-Parser
Fehlgeschlagenes Decoding veröffentlicht keine partialen Runs, und fehlgeschlagene Importe behalten den früheren Dokumentzustand der umgebenden Transaktion
Import-Layer und supports-Bedingungen, calc und Viewport-Einheiten, weitere Media-Features und allgemeines CSS-Layout bleiben separate Arbeiten
Interne Style-Sheets · Native Optionen
Externe Link- und Import-Bedingungen nutzen denselben Media-Evaluator