原生 rich text 媒體查詢
原生 XHTML 解碼器在把受支援的宣告串接進真實 rich text run 之前,先求值 style 元素的 media 屬性與巢狀 @media 群組
media 求值使用明確的原生宿主 profile,不檢查桌面、瀏覽器或顯示裝置
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>
條件與串接
查詢支援 all、print、screen 媒體類型,only 與 not 修飾詞,逗號分隔的備選項,以及帶括號的 not、and、or 條件
數值特性接受冒號等式、min-/max- 形式,以及用 =、<、<=、>、>= 的正向、反向或鏈式範圍比較
巢狀群組保留來源順序、宣告 importance、選擇器 specificity 與繼承的命名空間宣告;style 的 media 屬性與所有外層 media 群組都必須相符
CSS 識別字跳脫、註解、指數記號與成對的函式 token 都在同一個設有上限的解析器內掃描
未知特性、不支援的值與 general-enclosed 條件在取反與布林求值中保持未知真值;只有最終為 true 的查詢才啟用其宣告
為未來特性提供宿主條目並不會讓它進入受支援的查詢詞彙表
宿主 profile
受支援的數值特性為 width、height、device-width、device-height、resolution、aspect-ratio、device-aspect-ratio、color、color-index、monochrome 與 grid
離散特性為 orientation、scan、update、overflow-block、overflow-inline、color-gamut、pointer、any-pointer、hover 與 any-hover
長度單位為 pt、px(96 dpi)、pc、in、cm、mm、q、em 與 rem;解析度單位為 dpi、dpcm、dppx 與 x,比率使用斜線記號
media 的 em 與 rem 使用 MediaInitialFontSize 而不是串接的元素字型大小;預設 12 point,零值對零初始化的 legacy 記錄保留同樣的 12 point 初始值
省略 orientation 或 aspect-ratio 時可以由提供的 width 與 height 推導;height 為零時比率未知,寬高相等時使用 portrait
any-pointer 可以同時包含 coarse 與 fine;none 不能與其他 pointer 值組合,color-gamut 包含較低的受支援色域等級
預設 medium 為 print:8 個顏色位元、無 indexed 或 monochrome 顏色、grid 0、sRGB 色域;其 update、overflow-inline、pointer、hover 與 scan 能力缺失,overflow-block 為分頁
尺寸與解析度沒有虛構的裝置預設值;除共用的顏色預設值之外的 screen 能力,在相關時需要明確的宿主值
MediaFeatures 至多 32 個 ASCII 大小寫不敏感的不同名稱,每個名稱 1 到 64 個 ASCII 字母、數字或連字號,值 1 到 256 個 UTF-16 code unit;被識別的條目必須使用合法的非負數值或受支援的離散值
MediaInitialFontSize 必須是有限值,為零或在 0.000001 到 1000000 point 之間;非法宿主 profile 在回傳 run 之前拋出 EHPDFHeadlessRichTextCodecError
明確偏好與無障礙
偏好作為 MediaFeatures 條目提供;它們描述呼叫端的渲染環境,不檢查作業系統、瀏覽器或作用中桌面
| 特性 | 接受的值 | False 布林值 |
|---|---|---|
| prefers-color-scheme | light、dark | 兩者都不是 |
| 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 }
}
這八個特性都是離散的:請用等式或布林條件,不要用 min-/max- 或有序範圍比較
在布林查詢中 light 是作用中的 color-scheme 值,less 或 custom 是作用中的 contrast 偏好;custom 不蘊含 more
省略的偏好對 print 與 screen 都保持未知,not 之下也不例外;解碼器不會虛構 no-preference、light、none 或其他後備值
被識別的宿主特性取非法值會在回傳 run 之前拒絕 profile;CSS 識別字跳脫與註解使用既有的設有上限 tokenizer,包含被消費到輸入結尾的註解
scripting 特性只描述呼叫端提供的可用性;求值查詢不會執行 JavaScript
style 的 media 屬性、巢狀群組與呼叫端提供的外部樣式表共用這些特性語義與既有串接規則
儲存文件與邊界
原生呼叫端可以透過 THPDFHeadlessRichTextDecodeOptions 設定自訂宿主 profile,並直接傳給 HPDFDecodeHeadlessRichText
計算出的 run 把選中的樣式保留進儲存的 RV 與內嵌外觀;一般 FDF/XFDF 匯入使用預設 print profile
media token、巢狀群組、宿主值解析與比對和既有樣式表解析器共用 MaxNodes、MaxTotalCodeUnits、MaxDepth 與取消核算
解碼失敗不發佈部分 run,匯入失敗保留外圍交易先前的文件狀態
匯入層與 supports 條件、calc 與視埠單位、更多 media 特性與通用 CSS 排版仍是獨立工作
外部 link 與 import 條件使用同一個 media 求值器