高级 XFA Picture 子句

启用 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript 即可在 FormCalc 事件中通过随附的 QuickJS 引擎使用这些 picture、计算与验证脚本

Format(picture, value) 生成显示文本,Parse(picture, text) 生成规范化值;locale 选择、引号字面量与备选项遵循 FormCalc Locale and Picture Functions

数值精度与科学计数法

符号行为
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 继续使用缩写和完整的 locale 星期名
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 code point产生一个空格
*消耗零个或多个可断行空白字符产生一个空格
+消耗一个或多个可断行空白字符产生一个空格

这些符号可用于日期、时间、datetime、数字和文本 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

运行时行为与当前边界

计算字段和事件使用同一实现与 locale 元数据;脚本失败会恢复文档值和已提交的 JavaScript 状态,保存的 XDP 数据保留成功的结果

替代纪元历法、表意与全角表示、本地化仅显示符号以及完整的分组策略仍是独立目标

事务、重放和操作预算行为参见 Interactive XFA Widget Runtime