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

FeatureAkzeptierte WerteFalscher Boolean-Wert
prefers-color-schemelight, darkKeiner der Werte
prefers-reduced-motionno-preference, reduceno-preference
prefers-reduced-transparencyno-preference, reduceno-preference
prefers-contrastno-preference, less, more, customno-preference
prefers-reduced-datano-preference, reduceno-preference
forced-colorsnone, activenone
inverted-colorsnone, invertednone
scriptingnone, initial-only, enablednone
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