進階 XFA picture 子句

啟用 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript,即可透過隨附的 QuickJS 引擎在 FormCalc 事件、calculate 與 validate 腳本中使用這些 picture

Format(picture, value) 產生顯示文字,Parse(picture, text) 產生標準值;地區設定選擇、引號字面文字與替代寫法遵循FormCalc 地區設定與 picture 函式

數值精確度與科學記號

符號行為
E在尾數之後輸出帶正負號的十進位指數;整數與小數的位數位置決定尾數精確度,並在輸出指數前先完成進位捨入
8保留所提供十進位文字表明的小數精確度,包括結尾的零;沒有小數位時省略小數點,而連續 8 個符號可以保留比自身長度更多的小數位

科學記號尾數最多 15 個位數位置;指數大小與十進位展開以 10000 為界,非有限值會產生空文字

精確度 picture 會保留小數位置前後的引號字面文字;百分比縮放直接在原始十進位文字上移位,不會因二進位浮點轉換而遺失結尾零

當表達的精確度很重要時,請傳入十進位字串;JavaScript 數值在格式化之前就已經歷二進位浮點轉換

Format("num{99.999E}", 12345)             // 12.345E+3
Parse("num{99.999E}", "12.345E-2")       // 0.12345
Format("num{zzz,zz9.8}", "12345.0000")   // 12,345.0000
Parse("num{zz9.8}", "12.3400")           // 12.3400
Format("num{zz9.8%}", "0.1250")          // 12.50%

序數與週日期

符號行為
J、JJJ年內第幾天,1 到 366;JJJ 補足三位數,解析時會檢查閏年
E數字星期別,1 為週日到 7 為週六;EEE 與 EEEE 仍使用地區設定的縮寫與完整星期名稱
eISO 星期別,1 為週一到 7 為週日
WWISO 週別,01 到 53;第 01 週包含 1 月 4 日,而這個 picture 中的年份是 ISO 週年
w月內週別,0 到 5,從週日算起;第一週必須至少含該月的四天

解析序數或週日期會回傳對應的 ISO 曆日期;互相矛盾的日、月、星期或週值會回傳空文字

四位數的早年直接建構,不做 JavaScript 的世紀調整,包括 0000 到 0099 年;歷史替代紀元仍不在這些 picture 的範圍內

Format("date{YYYY-JJJ}", "2024-02-29")   // 2024-060
Parse("date{YYYY-WW-e}", "2020-53-5")    // 2021-01-01
Format("date{w}", "2004-07-03")          // 0

更多時鐘變體

k 與 kk 表示同一 meridiem 內 0–11 的小時;K 與 KK 表示一天內 1–24 的小時,24 代表午夜

搭配 k 時鐘使用 A 可區分 AM 與 PM;小寫 z 輸出不帶冒號的 ISO 偏移,zz 帶冒號,大寫 Z 則輸出 GMT 或帶明確偏移的 GMT

全域 picture 符號

符號輸入解析輸出格式化
?消耗一個 Unicode 碼位產生一個空格
*消耗零個以上可斷行的空白字元產生一個空格
+消耗一個以上可斷行的空白字元產生一個空格

這些符號可用於日期、時間、日期時間、數字與文字 picture;加引號的符號仍是字面字元,增補 Unicode 字元算一個字元,不換行空格不列入空白比對

複合輸入解析

複合的日期與時間子句會合併成標準 ISO 日期時間文字;同一值的重複表示必須一致,且字面分隔符會在接受輸入前先行檢查

重複的純量子句必須產生相同的標準數字或文字;不相容的類別組合、互相矛盾的值、未消費完的輸入或多個不同的標準結果都會產生空文字

複合解析允許 64 個部分、8192 個 UTF-16 輸入碼元與 8192 次解析嘗試,同時共用執行階段的操作與經過時間預算;超過這些限制會讓事件交易失敗

Parse("date{YYYY-MM-DD} time{HH:MM:SS}", "2024-02-29 12:34:56")
// 2024-02-29T12:34:56
Parse("date{YYYYMMDD}time{HHMMSS}", "20240229123456")
// 2024-02-29T12:34:56

執行階段行為與目前邊界

計算欄位與事件使用同一套實作與地區設定中繼資料;失敗的腳本會還原文件值與已提交的 JavaScript 狀態,而已儲存的 XDP 資料保留成功的結果

替代紀元曆法、表意與全形表示、僅顯示用的在地化符號與完整的分組原則,仍是另外的目標

交易、重播與操作預算行為詳見互動式 XFA Widget 執行環境