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