原生 rich text 數值運算

原生 XHTML rich text 解碼器在 font-size、font 簡寫尺寸與斜線行高、line-height、letter-spacing 與 word-spacing 中求值有限的 calc、min、max、clamp 運算式

<body xmlns="http://www.w3.org/1999/xhtml" style="font-size:10pt;line-height:calc(1rem + 2pt)">
  <p style="letter-spacing:calc(.1em + 1pt);word-spacing:clamp(1pt, 3pt, 4pt)">Spaced text</p>
</body>

這個例子用呼叫端提供的字型與既有段落排版,算出 12 point 行高、2 point 字元間距與 3 point 字組間距

括號算術支援加減乘除,求和需要因次一致;乘除追蹤長度冪次,calc(20pt / 10pt * 6pt) 這樣的運算式內部可以相消

二元加減兩側必須有空格;min 與 max 接受相容的逗號分隔運算式,clamp 取三個相容運算式,邊界顛倒時下限勝出

受支援長度單位為 pt、px(96 dpi)、pc、in、cm、mm、q、em、rem、vw、vh、vmin 與 vmax;十進位與指數數字使用既有的有限十進位轉換

font-size 的 em 與百分比使用外層計算字型大小;line-height 的 em 與百分比以及間距的 em 使用宣告元素繼承前的最終串接字型大小

rem 使用 body 的計算字型大小;body 自身的 font-size 運算式使用 DefaultStyle.FontSize 的初始根字型大小,其他度量則用其最終計算字型大小

視埠單位使用 MediaFeatures 中明確的 width 與 height 條目;這些宿主尺寸是 point 相容長度,em 或 rem 的宿主尺寸用 MediaInitialFontSize,為零時按既有規則後備 12 point

宿主尺寸、解析度與非零初始 media 字型大小保留既有的 0.000001 下限與 1000000 上限;精確下限值在所有編譯器目標上一致使用共用的 Double 比較,低於下限的值仍然被拒絕

vw 需要 width,vh 需要 height,vmin 與 vmax 兩者都要;缺失尺寸會讓宣告不被接納,不做桌面、頁面尺寸或瀏覽器視埠推斷

行高可以算出無單位繼承係數或 point 長度;計算出的負數行高鉗到零,font-size 保留既有正數接納範圍,間距保留帶符號 point 長度

字元與字組間距要求長度結果;既有的裸零語法仍然可用,百分比間距不屬於本 profile

既有的按屬性串接、important 優先權與明確繼承照常適用;延後的行與間距運算使用勝出的最終字型大小,font 簡寫接受成對數學函式內的空格與除號

非法 font 宣告保留已被接納的後備;語法上被接納卻無法算出有限設限結果的勝出度量,會在回傳 run 之前拋出 EHPDFHeadlessRichTextCodecError

轉換值與儲存的 binary64 運算結果量級至多 1e100,長度冪次範圍 -64 到 64;既有的 font-size 與度量預算仍然生效

乘除在運算前預檢極端值,未被遮罩的浮點溢位不會外洩;最終檢查在所有編譯器目標上使用相同的 Double 邊界,包含次正規除數與 profile 邊界值

數學掃描遵循 MaxNodes,遞迴運算式遵循 MaxDepth;取消保留 EHPDFOperationCancelled 且不回傳部分解碼 run,全新與重用的解碼選項之後仍然可用

計算出的 point 值進入真實型別化外觀與規範 RV 序列化;預設 profile 的 rich FDF/XFDF 匯入使用同一個解碼器,不傳輸自訂視埠 profile

本有限 profile 不提供其他 CSS 數學函式、數值常數、跳脫的數學函式或單位名稱、由度量導出的字型單位、邏輯或動態視埠單位、自訂屬性或通用 CSS 排版

算術與根相對規則遵循 CSS Values and Units Level 4 的受支援部分;上述設限受支援 profile 定義程式庫目前的行為

原生解碼器 · 解碼選項 · 行高 · run 間距 · font 簡寫