Продвинутые picture-шаблоны XFA
Включите TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript, чтобы использовать эти picture-шаблоны в событиях FormCalc и в calculate- и validate-скриптах через поставляемый движок QuickJS
Format(picture, value) создаёт отображаемый текст, а Parse(picture, text) — канонические значения; выбор locale, литералы в кавычках и альтернативы описаны в Функции локалей и picture-шаблонов FormCalc
Числовая точность и научная нотация
| Символ | Поведение |
|---|---|
E | Форматирует знаковый показатель степени 10 после мантиссы; позиции ведущей и дробных цифр определяют точность мантиссы, а перенос округления применяется до вывода показателя |
8 | Сохраняет выраженную дробную точность переданного десятичного текста, включая замыкающие нули; при отсутствии дробных цифр десятичный разделитель опускается, а серия из 8 символов может сохранить больше переданных дробных цифр, чем её длина |
Научные мантиссы используют не более 15 цифровых позиций; модуль показателя и десятичное разложение ограничены 10000, а нечисловые значения дают пустой текст
Точные picture-шаблоны сохраняют литералы в кавычках до и после дробных позиций; масштабирование процентов сдвигает исходный десятичный текст без потери замыкающих нулей через бинарное преобразование floating point
Передавайте десятичные строки, когда их выраженная точность важна; числовые значения JavaScript уже прошли бинарное преобразование floating point до форматирования
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 содержит 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 выражают час 0–11 внутри меридиема; K и KK — час 1–24 внутри суток, где 24 означает полночь
Используйте A с часами k, чтобы различать AM и PM; строчная z форматирует смещение ISO без двоеточия, zz — с двоеточием, а заглавная Z выводит GMT или GMT с явным смещением
Глобальные символы picture-шаблонов
| Символ | Разбор ввода | Форматирование вывода |
|---|---|---|
? | Поглощает одну кодовую точку Unicode | Даёт один пробел |
* | Поглощает ноль или больше разрывных пробельных символов | Даёт один пробел |
+ | Поглощает один или больше разрывных пробельных символов | Даёт один пробел |
Эти символы работают в picture-шаблонах date, time, datetime, number и text; символы в кавычках остаются литеральными, дополнительные символы Unicode считаются одним символом, а неразрывные пробелы исключены из пробельного сопоставления
Составной разбор ввода
Составные предложения даты и времени объединяются в канонический текст ISO date-time; повторные представления одного значения должны совпадать, а литеральные разделители проверяются до принятия ввода
Повторные скалярные предложения должны давать один и тот же канонический номер или текст; несовместимые комбинации категорий, противоречивые значения, неполное поглощение или несколько разных канонических результатов дают пустой текст
Составной разбор допускает 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 удерживают успешные результаты
Календари альтернативных эр, идеографические и полноширинные представления, локализованные символы только для отображения и полные политики группировки остаются отдельными целями
Поведение транзакций, replay и бюджетов операций описано в Интерактивный runtime виджетов динамического XFA