고급 XFA Picture 절
FormCalc 이벤트와 calculate·validate 스크립트에서 이 Picture들을 쓰려면 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript를 켜고 함께 제공되는 QuickJS 엔진을 사용하세요
Format(picture, value)는 표시 텍스트를 만들고 Parse(picture, text)는 정규 값을 만듭니다. 로캘 선택, 따옴표 literal, 대안 문법은 FormCalc 로캘과 Picture 함수를 따릅니다
숫자 정밀도와 과학적 표기
| 심볼 | 동작 |
|---|---|
E | 가수 뒤에 부호 있는 10진 지수를 붙여 서식화합니다. 정수부와 소수부 자릿수 배치가 가수 정밀도를 정하고, 반올림 올림수는 지수를 출력하기 전에 적용됩니다 |
8 | 입력된 10진 텍스트가 표현한 소수 정밀도를 후행 0까지 그대로 유지합니다. 소수 자릿수가 없으면 소수점을 생략하고, 8 심볼 나열은 길이 이상으로 많은 소수 자릿수를 보존할 수 있습니다 |
과학 표기 가수는 최대 15자릿수까지 씁니다. 지수 크기와 10진 전개는 10000으로 제한되고, nonfinite 값은 빈 텍스트를 만듭니다
정밀도 Picture는 소수점 앞뒤의 따옴표 literal을 보존합니다. 퍼센트 스케일링은 이진 부동소수점 변환을 거치지 않고 원본 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는 세 자리로 채우고 파싱할 때 윤년을 검증합니다 |
E | 숫자 요일, 일요일 1부터 토요일 7까지입니다. EEE와 EEEE는 여전히 로캘의 요일 축약명과 전체 이름을 씁니다 |
e | ISO 요일, 월요일 1부터 일요일 7까지입니다 |
WW | ISO 주, 01부터 53까지입니다. 01주는 1월 4일을 포함하고, 이 Picture의 연도는 ISO 주 연도(week year)입니다 |
w | 월 내 주(week), 일요일 시작으로 0부터 5까지입니다. 첫 주는 그 달의 날을 최소 4일 포함해야 합니다 |
서수 날짜나 주 단위 날짜를 파싱하면 대응하는 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는 자정입니다
k 시계와 함께 A를 써서 AM과 PM을 구분합니다. 소문자 z는 콜론 없는 ISO 오프셋으로, zz는 콜론을 붙여 서식화하고, 대문자 Z는 GMT 또는 명시적 오프셋이 붙은 GMT를 출력합니다
전역 Picture 심볼
| 심볼 | 입력 파싱 | 출력 서식화 |
|---|---|---|
? | 유니코드 코드 포인트 하나를 소비합니다 | 공백 하나를 출력합니다 |
* | 분리 가능한 공백 문자를 0개 이상 소비합니다 | 공백 하나를 출력합니다 |
+ | 분리 가능한 공백 문자를 1개 이상 소비합니다 | 공백 하나를 출력합니다 |
이 심볼들은 date, time, datetime, number, text Picture 안에서 동작합니다. 따옴표로 묶인 심볼은 literal 문자로 남고, 보충 유니코드 문자는 한 문자로 세며, 줄바꿈 없는 공백은 공백 매칭에서 제외됩니다
복합 입력 파싱
복합 date·time 절은 정규 ISO 날짜-시간 텍스트로 결합됩니다. 같은 값의 반복 표현은 서로 일치해야 하고, 입력을 받아들이기 전에 literal 구분자를 검사합니다
반복되는 스칼라 절은 같은 정규 숫자나 텍스트를 만들어야 합니다. 호환되지 않는 범주 조합, 모순 값, 불완전한 소비, 서로 다른 정규 결과가 여러 개 나오면 빈 텍스트가 됩니다
복합 파싱은 파트 64개, UTF-16 입력 유닛 8192개, 파싱 시도 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
런타임 동작과 현재 경계
계산된 field와 이벤트는 같은 구현과 로캘 메타데이터를 씁니다. 실패한 스크립트는 문서 값과 커밋된 JavaScript 상태를 복원하고, 저장된 XDP 데이터는 성공한 결과를 유지합니다
대체 연호 달력, 한자 표기와 전각 표현, 로캘화된 표시 전용 심볼, 완전한 그룹핑 정책은 별도 과제로 남아 있습니다
트랜잭션, 리플레이, 연산 예산 동작은 인터랙티브 XFA 위젯 런타임을 참고하세요