Native rich-text CSS support queries
Nativní XHTML dekodér vyhodnocuje skupiny @supports a podmínky importů supports() proti své podporované gramatice rich-text deklarací a selektorů
<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>
V nativním profilu platí obě skupiny a výsledkem je 15bodový bold text s písmy dodanými volajícím
Přijímání deklarací a selektorů
Deklarační dotazy používají stávající přijímací helpery pro font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, font shorthand, letter-spacing a word-spacing
Číselné dotazy sdílejí konečný profil CSS matematiky, default metriky písem a explicitní rozměry médií; nepodporované vlastnosti či nepřijaté hodnoty se vyhodnotí jako false
Dotazy font-family vyžadují nakonfigurovanou kolekci FontFamilyNames a nedostupná, ale platná rodina může použít stávající fallback dodaných rodin
Platná anotace !important se v deklaračním dotazu přijme, aniž by změnila kaskádovou prioritu podmíněné skupiny; dodatečná deklarace, závěrečný středník či neplatná priorita se odmítne
selector() kontroluje stávající nativní gramatiku selektorů a deklarace namespace aktuálního stylu, aniž by porovnával element dokumentu
Každá větev selektoru musí být podporovaná, tedy i větve uvnitř normálně shovívavých seznamů is() a where(); nedefinované namespace prefixy a neznámé pseudo třídy se vyhodnotí jako false
Kořenový :scope a statická gramatika :hover, :active, :focus, :focus-visible a :focus-within jsou podporované. Úspěšný feature query popisuje podporu parseru; selektory uživatelských akcí stále nikdy nespárují PDF appearance a funkční tvary jako :hover() jsou neplatné
Sondy selektorů obnoví dočasné úložiště matcheru a ponechají následné porovnávání stylů nedotčené; jejich práce pořád konzumuje sdílené rozpočty uzlů i zrušení
Booleovská syntaxe a forward-kompatibilní podmínky
Podmínky přijímají not, homogenní řetězce and či or a vnořené závorky; míchání and s or vyžaduje explicitní seskupení
Komentáře a CSS identifikátorové escapování řídí stávající tokenizer dekodéru a not musí být klíčové slovo oddělené od následujícího členu, nikoli token funkce not()
Vyvážené neznámé funkce i závorkové podmínky general-enclosed se vyhodnotí jako false, takže obklopující not může poskytnout fallback
Poškozené řetězce, poškozené neuzavřené URL tokeny a nespárované oddělovače zneplatní obklopující podmínku, dřív než negace; číselné rozměry i citované funkční tokeny si uchovávají své odlišné hranice tokenů
Skupiny, importy a výstup
Podmíněné skupiny si uchovávají svou skutečnou zdrojovou pozici, specificitu selektorů i important priority a můžou se vnořovat s podporovanými media skupinami
@import "metrics.css" supports(line-height: 18pt) print;
@import "fallback.css" supports(not selector(span:future));
Volitelná podmínka supports() importu následuje po URI resource a předchází její volitelné media podmínce; obě musí resource připustit, dřív než přispěje deklaracemi
Rozřešení relativních URI, zacházení s cykly, izolace namespace i stávající požadavky na pořadí importů zůstávají jako u stylů dodávaných volajícím
Přijaté deklarace se dostanou ke skutečným dekódovaným runům, spočteným kanonickým rich hodnotám, uloženým appearance polí i rich importům FDF/XFDF default profilu přes tentýž dekodér
Meze a akceptace
Parsování podmínek i sondy selektorů konzumují stávající limity MaxNodes a MaxTotalCodeUnits; vnořené podmínky, bloky a skupiny sdílejí MaxDepth
Zrušení propaguje EHPDFOperationCancelled bez vracení částečných runů a neúspěšné dotazy či rozpočty si uchovávají čerstvé i znovu použité zotavení dekódování
Tests/Linux/RichTextSupports/Run.py verifikuje chování deklarací, selektorů, Booleovské logiky i URL tokenů, vnořenou kaskádu a importy, naměřené zrušení a skutečný uložený prostý i AES šifrovaný PDF výstup
Ten nativní profil nepřidává prohlížečový layout, vrstvy import, vlastní vlastnosti, dodatečnou syntaxi selektorů ani CSS podmínkové funkce nad rámec výše uvedených podporovaných dotazů deklarací a selektorů
Syntaxe podmínek řídí podporované části CSS Conditional Rules Level 3 a Level 4; nativní přijímací profil určuje, které dotazy uspějí