FormCalc Locale 與 Picture 函式
啟用 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript,即可透過隨附的 QuickJS 引擎在一般 FormCalc 事件與 calculate、validate script 中使用這些函式
Locale 選擇
執行中的欄位會從其祖系繼承最近一個非空的 locale 屬性;整條鏈都為空時,選用設定的原生 Windows 或 Linux ICU locale
文件的 localeSet 項目會覆寫原生的數字/貨幣符號、月/日/上午下午名稱與日期/時間/數字模式;缺少的值繼承系統資料,自訂 locale 名稱則退回 en_US
Locale 識別碼接受底線與連字號拼法,大小寫不敏感;Concat("de", "_DE") 這類計算出的名稱會在執行期解析
內部 locale 請求共用事件期限,允許 64 次具名查詢、每個識別碼 256 個 UTF-16 code unit,以及合計 2 MiB 的中繼資料;重試會還原 JavaScript 檢查點,已提交工作階段的重播則直接使用記錄的中繼資料,不再呼叫 provider
Picture 函式
| 函式 | 行為 |
|---|---|
Format(picture, value, ...) | 使用 date、time、datetime、num 或 text 子句格式化值;標準複合子句格式化同一個值,選填的擴充則接受對應的值參數 |
Parse(picture, text) | 把帶型別子句、複合子句或替代項解析成 ISO 日期/時間文字、十進位數值文字,或移除常值後的文字 |
用 date(de_DE){D. MMMM YYYY} 指定明確 locale、用 num.currency 指定 locale 樣式,用豎線表示替代項;加引號的常值與雙撇號可保留常值字元
日期、時間與 datetime 樣式使用解析後的 default、short、medium、long 或 full 模式;標準 localeSet 數字模式同時提供 num.decimal 與其整數部分給 num.integer
日期/時間 picture 支援年、月、日、星期名稱、12/24 小時制、分、秒、小數毫秒、上午下午與明確的 GMT/UTC 偏移;無效日期(如 2 月 30 日)回傳空文字
數值 picture 支援必填的 9、選填的 z、補空格的 Z、小數/群組分隔符、貨幣符號與 ISO 貨幣碼、百分比、正負號、括號、借貸後綴,以及隱含小數基點
文字 picture 支援 A 代表 Unicode 字母、O 或 0 代表 Unicode 英數字元、9 代表數字、X 代表 Unicode code point,包括增補字元
進階 picture 子句加入數值科學記號與保留小數精度、序數與週日期、更多時制、全域字元/空白符號,以及複合輸入解析
傳入 null 參數回傳 null;無效 picture、無效值或不可用的 locale 回傳空文字
target = Format("num(de_DE){z,zz9.99}", 1234.5)
target = Parse("date{MMM D, YYYY}", "Sep 1, 2002")
target = Format("date{YYYY-MM-DD} 'at' time{HH:MM}", "2024-03-15T13:45:09")
日期與時間函式
| 函式 | 參數與結果 |
|---|---|
DateFmt(style=0, locale)、TimeFmt(style=0, locale) | 回傳 XFA 模式:default 0、short 1、medium 2、long 3 或 full 4;無效樣式選用 default |
Date2Num(text, picture, locale) | 回傳序數天數,以 1900-01-01 為第 1 天;省略 picture 時使用 locale 預設值,也接受 ISO 日期 |
Num2Date(serial, picture, locale) | 以提供或預設的 locale 日期 picture 格式化序數天數 |
IsoDate2Num(text) | 解析緊湊或帶連字號的 ISO 日期,包括選填的時間後綴 |
IsoTime2Num(text)、Time2Num(text, picture, locale) | 回傳自 GMT 午夜起算加 1 的毫秒數;明確偏移會被套用,缺少偏移時使用目前時區 |
Num2GMTime(serial, picture, locale)、Num2Time(serial, picture, locale) | 以 GMT 或目前時區格式化 1 到 86400000 的時間序數 |
Date()、Time() | 回傳目前日期/時間序數;工作階段重播期間使用記錄的時鐘輸入 |
省略 picture 的 Num2Date 現在產生在地化輸出;需要 ISO 輸出的呼叫端請改用 Num2Date(serial, "YYYY-MM-DD")
單位、編碼與文字工具
| 函式 | 參數與結果 |
|---|---|
UnitType(measurement) | 識別 in、cm、mm、pt、pc 與 mp 別名;無法識別的單位預設為英吋 |
UnitValue(measurement, targetUnit="in") | 轉換度量單位:每英吋 72 points、每 pica 12 points、每 point 1000 millipoints |
Encode(text, encoding="url")、Decode(text, encoding="url") | 支援 URL 跳脫、XML 實體,以及經 Unicode scalar 驗證的 HTML 具名/數字實體 |
Uuid(style=0) | 回傳 32 個十六進位數字,或樣式 1 的帶連字號形式,含 version 4 與 variant 位元;重播使用記錄的隨機輸入 |
WordNum(value, style=0, locale) | 產生英文數字詞、樣式 1 的美元金額,或樣式 2 的美元與美分;無效數值範圍回傳星號 |
目前 picture 的界限
替代紀元、表意或全形表示、在地化數字符號、僅顯示用的在地化模式符號,以及完整的分組政策仍是獨立目標;WordNum 輸出英文單字
原生純量求值器保留既有的 ISO 與財務函式;locale/picture 函式需要一般執行環境
較底層的 API
TXFALocaleData、HPDFXFALoadLocale、HPDFXFALoadDocumentLocale 與 HPDFXFALocaleJavaScript 公開 Unicode locale 中繼資料與安全的引擎序列化
HPDFXFAExecuteJavaScriptEvent 接受 TXFALocaleDataProvider,用於自訂的唯讀中繼資料查詢