Native Rich-Text-CSS-Support-Queries

Der native XHTML-Decoder evaluiert @supports-Gruppen und supports()-Import-Bedingungen gegen seine unterstützten Rich-Text-Deklarationen und die Selektor-Grammatik

<body xmlns="http://www.w3.org/1999/xhtml">
  <style><![CDATA[
    @supports (font-size: calc(10pt + 5pt)) and selector(span.notice) {
      span.notice { font-size: 15pt }
    }
    @supports not (display: grid) {
      span.notice { font-weight: bold }
    }
  ]]></style>
  <p><span class="notice">Conditional text</span></p>
</body>

Im nativen Profil greifen beide Gruppen und erzeugen 15-Punkte-Bold-Text mit den vom Aufrufer gelieferten Fonts

Deklarations- und Selektor-Admission

Deklarations-Queries nutzen die bestehenden Admission-Helper für font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, Font-Shorthand, letter-spacing und word-spacing

Numerische Queries teilen das endliche CSS-Mathematik-Profil, Default-Font-Metriken und explizite Media-Dimensionen; nicht unterstützte Properties oder nicht zugelassene Werte evaluieren zu false

Font-family-Queries verlangen die konfigurierte FontFamilyNames-Collection, und eine nicht verfügbare, aber gültige Family kann den bestehenden Supplied-Family-Fallback nutzen

Eine gültige !important-Annotation wird in einer Deklarations-Query akzeptiert, ohne die Kaskadenpriorität der bedingten Gruppe zu ändern; eine zusätzliche Deklaration, ein abschließendes Semikolon oder eine ungültige Priorität wird abgelehnt

selector() prüft die bestehende native Selektor-Grammatik und die Namespace-Deklarationen des aktuellen Sheets, ohne ein Dokumentelement zu matchen

Jeder Selektor-Zweig muss unterstützt werden, einschließlich Zweige innerhalb normalerweise forgiving is()- und where()-Listen; undefinierte Namespace-Präfixe und unbekannte Pseudo-Classes evaluieren zu false

Root :scope und die statische :hover-, :active-, :focus-, :focus-visible- und :focus-within-Grammatik werden unterstützt. Eine erfolgreiche Feature-Query beschreibt Parser-Unterstützung; User-Action-Selektoren matchen weiterhin nie eine PDF-Appearance, und funktionale Formen wie :hover() sind ungültig

Selektor-Probes stellen temporären Matcher-Speicher wieder her und lassen nachfolgendes Stylesheet-Matching intakt; ihre Arbeit verbraucht weiterhin die geteilten Node- und Abbruch-Budgets

Boolesche Syntax und vorwärtskompatible Bedingungen

Bedingungen akzeptieren not, homogene and- oder or-Ketten sowie verschachtelte Klammern; and mit or zu mischen erfordert explizites Gruppieren

Kommentare und CSS-Identifier-Escapes folgen dem bestehenden Tokenizer des Decoders, und not muss ein Schlüsselwort sein, das vom folgenden Term getrennt ist, statt ein not()-Funktions-Token

Balancierte unbekannte Funktionen und geklammerte general-enclosed-Bedingungen evaluieren zu false, sodass ein umgebendes not einen Fallback liefern kann

Fehlerhafte Strings, fehlerhafte unquoted URL-Tokens und unpassende Delimiter invalidieren die umgebende Bedingung vor der Negation; numerische Dimensionen und quoted Funktions-Tokens behalten ihre eigenen Token-Grenzen

Gruppen, Imports und Ausgabe

Bedingte Gruppen behalten ihre tatsächliche Quellposition, Selektor-Specificity und Important-Prioritäten und können mit unterstützten Media-Gruppen verschachteln

@import "metrics.css" supports(line-height: 18pt) print;
@import "fallback.css" supports(not selector(span:future));

Die optionale supports()-Bedingung eines Imports folgt der Ressourcen-URI und geht seiner optionalen Media-Bedingung voraus; beide müssen die Ressource zulassen, bevor sie Deklarationen beiträgt

Relative URI-Auflösung, Cycle-Handling, Namespace-Isolation und die bestehenden Import-Order-Anforderungen bleiben die der vom Aufrufer gelieferten Style-Sheets

Zugelassene Deklarationen erreichen über denselben Decoder echte dekodierte Runs, berechnete kanonische Rich-Werte, gespeicherte Field-Appearances und Rich-FDF/XFDF-Importe mit Default-Profil

Grenzen und Abnahme

Bedingungsparsing und Selektor-Probes verbrauchen die bestehenden MaxNodes- und MaxTotalCodeUnits-Limits; verschachtelte Bedingungen, Blöcke und Gruppen teilen MaxDepth

Abbruch reicht EHPDFOperationCancelled weiter, ohne partiale Runs zurückzugeben, und fehlgeschlagene Queries oder Budgets behalten Frisch- und Wiederverwendungs-Recovery

Tests/Linux/RichTextSupports/Run.py verifiziert Deklarations-, Selektor-, Boolesches- und URL-Token-Verhalten, verschachtelte Kaskade und Imports, gemessenen Abbruch sowie echte gespeicherte Plain- und AES-verschlüsselte PDF-Ausgaben

Dieses native Profil ergänzt keine Browser-Layouts, Import-Layer, Custom Properties, zusätzliche Selektor-Syntax oder CSS-Conditional-Features über die oben genannten unterstützten Deklarations- und Selektor-Queries hinaus

Die Bedingungssyntax folgt den unterstützten Teilen von CSS Conditional Rules Level 3 und Level 4; das native Admission-Profil definiert, welche Queries erfolgreich sind

Native Decoder · Decode-Optionen · Media-Profile