Requêtes média du texte enrichi natif
Le décodeur XHTML natif évalue l'attribut media d'un élément de style et les groupes @media imbriqués avant de mettre en cascade les déclarations prises en charge dans de véritables runs de texte enrichi
L'évaluation média utilise un profil hôte natif explicite et n'inspecte aucun périphérique de bureau, navigateur ou affichage
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>
Conditions et mise en cascade
Les requêtes prennent en charge les types de média all, print et screen, les modificateurs only et not, les alternatives séparées par virgules et les conditions not, and et or entre parenthèses
Les caractéristiques numériques acceptent l'égalité à deux-points, les formes min-/max- et les comparaisons de plages directes, inversées ou chaînées avec =, <, <=, > et >=
Les groupes imbriqués conservent l'ordre source, l'importance des déclarations, la spécificité des sélecteurs et les déclarations d'espaces de noms héritées ; un attribut media de style et tous les groupes média englobants doivent correspondre
Les échappements d'identifiants CSS, les commentaires, la notation exponentielle et les tokens de fonctions équilibrés sont balayés dans le même parseur borné
Les caractéristiques inconnues, les valeurs non prises en charge et les conditions general-enclosed conservent une valeur de vérité inconnue à travers la négation et l'évaluation booléenne ; seule une requête finalement vraie active ses déclarations
Fournir une entrée hôte pour une caractéristique future ne fait pas de cette caractéristique une partie du vocabulaire de requêtes pris en charge
Profil hôte
Les caractéristiques numériques prises en charge sont width, height, device-width, device-height, resolution, aspect-ratio, device-aspect-ratio, color, color-index, monochrome et grid
Les caractéristiques discrètes sont orientation, scan, update, overflow-block, overflow-inline, color-gamut, pointer, any-pointer, hover et any-hover
Les unités de longueur sont pt, px, in, pc, cm, mm, q, em et rem ; les unités de résolution sont dpi, dpcm, dppx et x, et les ratios utilisent la notation à barre oblique
Les em et rem média utilisent MediaInitialFontSize plutôt qu'une taille de police d'élément en cascade ; son défaut est 12 points, et zéro conserve la même valeur initiale de 12 points pour les records legacy initialisés à zéro
Une orientation ou un aspect-ratio omis peut être dérivé de la largeur et hauteur fournies ; une hauteur nulle laisse le ratio inconnu, tandis que largeur et hauteur égales utilisent l'orientation portrait
any-pointer peut contenir coarse et fine à la fois ; none ne peut pas se combiner avec une autre valeur de pointeur, et color-gamut inclut les rangs de gamut inférieurs pris en charge
Le médium par défaut est print, avec 8 bits de couleur, pas de couleur indexée ni monochrome, grid 0 et gamut sRGB ; ses capacités update, overflow-inline, pointer, hover et scan sont absentes, et overflow-block est paginé
Dimensions et résolution n'ont aucun défaut de périphérique inventé ; les capacités screen autres que les défauts de couleur partagés exigent une valeur hôte explicite quand elles sont pertinentes
MediaFeatures admet au plus 32 noms distincts insensibles à la casse ASCII, chacun avec 1 à 64 lettres, chiffres ou tirets ASCII et une valeur de 1 à 256 unités de code UTF-16 ; les entrées reconnues doivent utiliser une valeur numérique non négative valide ou une valeur discrète prise en charge
MediaInitialFontSize doit être fini et soit zéro soit entre 0,000001 et 1000000 points ; des profils hôtes invalides lèvent EHPDFHeadlessRichTextCodecError avant de retourner des runs
Préférences explicites et accessibilité
Fournissez les préférences comme entrées MediaFeatures ; elles décrivent l'environnement de rendu de l'appelant et n'inspectent aucun système d'exploitation, navigateur ni bureau actif
| Caractéristique | Valeurs acceptées | Valeur booléenne fausse |
|---|---|---|
| prefers-color-scheme | light, dark | Aucune des deux |
| 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 }
}
Les huit caractéristiques sont discrètes : utilisez l'égalité ou une condition booléenne, et pas de comparaisons min-/max- ou de plages ordonnées
Light est une valeur color-scheme active dans une requête booléenne, et less ou custom est une préférence de contraste active ; custom n'implique pas more
Une préférence omise reste inconnue pour print comme pour screen, y compris sous not ; le décodeur n'invente ni no-preference, ni light, ni none, ni une autre valeur de repli
Des valeurs invalides pour des caractéristiques hôte reconnues rejettent le profil avant le retour des runs ; les échappements d'identifiants CSS et les commentaires utilisent le tokenizer borné existant, commentaires consommés jusqu'à la fin de l'entrée compris
La caractéristique scripting décrit uniquement la disponibilité fournie par l'appelant ; évaluer la requête n'exécute pas de JavaScript
Les attributs media de style, les groupes imbriqués et les feuilles externes fournies par l'appelant partagent ces sémantiques de caractéristiques et les règles de cascade existantes
Documents enregistrés et bornes
Les appelants natifs peuvent configurer un profil hôte personnalisé via THPDFHeadlessRichTextDecodeOptions et le passer directement à HPDFDecodeHeadlessRichText
Les runs calculés conservent les styles choisis dans le RV enregistré et les apparences embarquées ; les imports FDF/XFDF ordinaires utilisent le profil print par défaut
Les tokens média, les groupes imbriqués, l'analyse des valeurs hôtes et l'appariement partagent MaxNodes, MaxTotalCodeUnits, MaxDepth et la comptabilisation d'annulation avec le parseur de feuilles de style existant
Un décodage en échec ne publie pas de runs partiels, et des imports en échec conservent l'état de document antérieur de la transaction englobante
Les couches d'import et les conditions supports, calc et les unités de viewport, d'autres caractéristiques média et le layout CSS général restent des travaux distincts
Feuilles de style internes · Options natives
Les conditions de liens et d'imports externes utilisent le même évaluateur média