Requêtes de support CSS du texte enrichi natif

Le décodeur XHTML natif évalue les groupes @supports et les conditions d'import supports() face à ses déclarations de texte enrichi et à sa grammaire de sélecteurs prises en charge

<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>

Dans le profil natif, les deux groupes s'appliquent, produisant du texte gras de 15 points avec les polices fournies par l'appelant

Admission des déclarations et des sélecteurs

Les requêtes de déclarations utilisent les helpers d'admission existants pour font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, le raccourci de police, letter-spacing et word-spacing

Les requêtes numériques partagent le profil mathématique CSS fini, les métriques de police par défaut et les dimensions média explicites ; les propriétés non prises en charge ou les valeurs non admises s'évaluent à faux

Les requêtes font-family exigent la collection FontFamilyNames configurée, et une famille valide mais indisponible peut utiliser le repli de familles fournies existant

Une annotation !important valide est acceptée dans une requête de déclaration sans changer la priorité de cascade du groupe conditionnel ; une déclaration supplémentaire, un point-virgule final ou une priorité invalide est refusé

selector() vérifie la grammaire de sélecteurs native existante et les déclarations d'espaces de noms de la feuille courante sans correspondre à un élément du document

Chaque branche de sélecteur doit être prise en charge, branches à l'intérieur des listes is() et where() normalement permissives comprises ; les préfixes d'espaces de noms non définis et les pseudo-classes inconnues s'évaluent à faux

Le :scope racine et la grammaire statique :hover, :active, :focus, :focus-visible et :focus-within sont pris en charge. Une requête de caractéristique réussie décrit la prise en charge par le parseur ; les sélecteurs d'actions utilisateur ne correspondent toujours jamais à une apparence PDF, et les formes fonctionnelles comme :hover() sont invalides

Les sondes de sélecteurs restaurent le stockage temporaire du matcher et laissent intact l'appariement ultérieur des feuilles de style ; leur travail consomme toujours les budgets partagés de nœuds et d'annulation

Syntaxe booléenne et conditions rétrocompatibles

Les conditions acceptent not, des chaînes and ou or homogènes et des parenthèses imbriquées ; mélanger and avec or exige un groupement explicite

Les commentaires et les échappements d'identifiants CSS suivent le tokenizer existant du décodeur, et not doit être un mot-clé séparé du terme suivant plutôt qu'un token de fonction not()

Les fonctions inconnues équilibrées et les conditions general-enclosed entre parenthèses s'évaluent à faux, si bien qu'un not englobant peut fournir un repli

Les chaînes mal formées, les tokens d'URL non cités mal formés et les délimiteurs non appariés invalident la condition englobante avant la négation ; les dimensions numériques et les tokens de fonctions cités gardent leurs frontières de tokens distinctes

Groupes, imports et sortie

Les groupes conditionnels gardent leur position source réelle, leur spécificité de sélecteurs et leurs priorités important, et peuvent s'imbriquer avec des groupes média pris en charge

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

La condition supports() optionnelle d'un import suit l'URI de ressource et précède sa condition média optionnelle ; les deux doivent admettre la ressource avant qu'elle ne contribue des déclarations

La résolution d'URI relatives, la gestion des cycles, l'isolation d'espaces de noms et les exigences d'ordre d'import existantes restent celles des feuilles de style fournies par l'appelant

Les déclarations admises atteignent, via le même décodeur, les runs décodés réels, les valeurs riches canoniques calculées, les apparences de champs enregistrées et les imports FDF/XFDF riches au profil par défaut

Bornes et acceptation

L'analyse des conditions et les sondes de sélecteurs consomment les limites existantes MaxNodes et MaxTotalCodeUnits ; les conditions, blocs et groupes imbriqués partagent MaxDepth

L'annulation propage EHPDFOperationCancelled sans retourner de runs partiels, et les requêtes ou budgets en échec gardent une récupération sur décodages neufs et réutilisés

Tests/Linux/RichTextSupports/Run.py vérifie le comportement des déclarations, des sélecteurs, du booléen et des tokens d'URL, la cascade imbriquée et les imports, l'annulation mesurée et les sorties PDF réelles enregistrées en clair et chiffrées AES

Ce profil natif n'ajoute ni layout navigateur, ni couches d'import, ni custom properties, ni syntaxe de sélecteurs supplémentaire, ni fonctionnalités conditionnelles CSS au-delà des requêtes de déclarations et de sélecteurs prises en charge ci-dessus

La syntaxe des conditions suit les portions prises en charge de CSS Conditional Rules Level 3 et du Level 4 ; le profil d'admission natif définit quelles requêtes réussissent

Décodeur natif · Options de décodage · Profils média