高度な XFA ピクチャ句
TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript を有効にすると、同梱の QuickJS エンジン経由で FormCalc イベントや calculate、validate スクリプトの中でこれらのピクチャを使えます
Format(picture, value) は表示テキストを生成し、Parse(picture, text) は正規化済みの値を生成します。ロケール選択、引用符リテラル、選択肢はFormCalc のロケールとピクチャ関数に従います
数値精度と科学表記
| シンボル | 動作 |
|---|---|
E | 仮数の後に符号付き 10 進指数を整形します。整数部と小数部の桁位置が仮数精度を決め、指数を出力する前に丸めの桁上がりが適用されます |
8 | 渡された 10 進テキストが表現する小数精度(末尾の 0 を含む)を保持します。小数桁がなければ小数点は省かれ、8 シンボルの並びはその文字数を超える供給側の小数桁を保持できます |
科学表記の仮数は最大 15 桁です。指数の大きさと 10 進展開は 10000 までに制限され、非有限値は空テキストになります
精度ピクチャは小数位置の前後にある引用符リテラルを保持します。パーセントスケーリングは元の 10 進テキストを直接ずらすため、末尾の 0 がバイナリ浮動小数点変換で失われることはありません
表現精度が重要なら 10 進文字列を渡してください。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 は 3 桁にゼロ埋めし、解析時に閏年を検証します |
E | 数値の曜日(日曜=1 〜 土曜=7)。EEE と EEEE は引き続きロケールの曜日名(短縮形と完全形)を使います |
e | ISO の曜日(月曜=1 〜 日曜=7) |
WW | ISO 週(01〜53)。第 01 週は 1 月 4 日を含み、このピクチャの年は ISO 週年です |
w | 月内週(日曜始まりの 0〜5)。最初の週はその月の日を 4 日以上含まなければなりません |
序数日付や週日付を解析すると対応する ISO 暦日が返ります。日、月、曜日、週の値が矛盾する場合は空テキストになります
4 桁の早期の年は JavaScript の世紀調整なしで構築され、0000 年から 0099 年も扱えます。歴史上の代替紀元はこれらのピクチャの対象外です
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 は午前午後内の 0〜11 時を表し、K と KK は 1 日内の 1〜24 時を表します。24 は深夜を意味します
k 系クロックでは A で午前と午後を区別します。小文字の z はコロンなしの ISO オフセット、zz はコロン付きで整形し、大文字の Z は GMT、または明示オフセット付きの GMT を出力します
グローバルピクチャシンボル
| シンボル | 入力解析 | 出力整形 |
|---|---|---|
? | 1 つの Unicode コードポイントを消費します | 1 つの空白を出力します |
* | 0 個以上の分割可能な空白文字を消費します | 1 つの空白を出力します |
+ | 1 個以上の分割可能な空白文字を消費します | 1 つの空白を出力します |
これらのシンボルは date、time、datetime、number、text の各ピクチャ内で機能します。引用符で囲まれたシンボルはリテラル文字のまま、補助 Unicode 文字は 1 文字として数え、改行しない空白は空白照合の対象外です
複合入力の解析
複合の date 句と time 句は正規化済みの 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 ウィジェットランタイムを参照してください