高级 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 星期名 |
e | ISO 星期,1 表示周一到 7 表示周日 |
WW | ISO 周,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