原生 rich text CSS supports 查詢
原生 XHTML 解碼器對照其受支援的 rich text 宣告與選擇器語法,求值 @supports 群組與 supports() 匯入條件
<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>
在原生 profile 下兩個群組都生效,用呼叫端指定的字型產出 15 point 粗體文字
宣告與選擇器接納
宣告查詢使用既有的接納輔助:font-size、font-weight、font-style、text-decoration、color、text-align、font-family、line-height、font 簡寫、letter-spacing 與 word-spacing
數值查詢共用有限的 CSS 數學 profile、預設字型度量與明確 media 尺寸;不受支援的屬性或不被接納的值求值為 false
font-family 查詢要求設定的 FontFamilyNames 集合,不可用但合法的 family 可以走既有的指定 family fallback
宣告查詢中合法的 !important 標註被接受,但不改變條件群組的串接優先權;多餘的宣告、尾隨分號或非法優先權會被拒絕
selector() 檢查既有的原生選擇器語法與目前樣式表的命名空間宣告,不比對文件元素
每個選擇器分支都必須受支援,包含一般寬容的 is() 與 where() 清單內部的分支;未定義的命名空間前綴與未知偽類求值為 false
根 :scope 以及靜態 :hover、:active、:focus、:focus-visible 與 :focus-within 語法受支援。特性查詢成功只代表解析器支援;使用者操作類選擇器仍不會匹配 PDF 外觀,:hover() 之類的函式形式非法
選擇器探測會還原暫時的比對器儲存,不影響後續樣式表比對;其工作量仍計入共用的節點與取消預算
布林語法與向前相容條件
條件接受 not、同質的 and 或 or 鏈以及巢狀括號;and 與 or 混用需要明確分組
註解與 CSS 識別字跳脫遵循解碼器既有的 tokenizer,not 必須是與後續項分隔的關鍵字,而不是 not() 函式 token
成對的未知函式與帶括號的 general-enclosed 條件求值為 false,因此外層 not 可以提供後備
畸形字串、畸形的不帶引號 URL token 與不匹配的定界符會在取反之前使外圍條件失效;數值因次與帶引號的函式 token 保留各自獨立的 token 邊界
群組、匯入與輸出
條件群組保留真實來源位置、選擇器 specificity 與 important 優先權,可以與受支援的 media 群組巢狀
@import "metrics.css" supports(line-height: 18pt) print;
@import "fallback.css" supports(not selector(span:future));
匯入的選用 supports() 條件跟在資源 URI 之後、選用 media 條件之前;兩者都必須接納該資源,它才能提供宣告
相對 URI 解析、循環處理、命名空間隔離與既有的匯入順序要求仍與呼叫端樣式表相同
被接納的宣告經同一個解碼器進入真實解碼 run、計算出的規範 rich 值、儲存的欄位外觀與預設 profile 的 rich FDF/XFDF 匯入
邊界與驗收
條件解析與選擇器探測消耗既有的 MaxNodes 與 MaxTotalCodeUnits 限制;巢狀條件、區塊與群組共用 MaxDepth
取消傳播 EHPDFOperationCancelled 且不回傳部分 run,查詢或預算失敗保留全新與重用解碼的復原能力
Tests/Linux/RichTextSupports/Run.py 驗證宣告、選擇器、布林與 URL token 行為、巢狀串接與匯入、實測取消,以及真實儲存的 plain 與 AES 加密 PDF 輸出
本原生 profile 不在上述受支援的宣告與選擇器查詢之外增加瀏覽器排版、匯入層、自訂屬性、額外選擇器語法或 CSS 條件特性
條件語法遵循 CSS Conditional Rules Level 3 與 Level 4 的受支援部分;原生接納 profile 定義哪些查詢會成功
原生解碼器 · 解碼選項 · media profile