Продвинутые 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