Typed rich-text run spacing JSON
Windows file jobs and versioned callback operations, and native Linux versioned callback operations, bind spacing on forms.fill richTextRuns entries using the original typed runs
{"type":"forms.fill","fields":[{"name":"Input","richTextRuns":[
{"text":"A spaced line","fontSize":12,
"letterSpacingKind":"em","letterSpacing":0.125,
"wordSpacingKind":"points","wordSpacing":-0.5}
]}]}
letterSpacingKind and wordSpacingKind accept legacy, normal, points and em; an omitted kind with a numeric value means points, whilst an omitted kind and value means legacy
points and em require a finite numeric value; legacy and normal allow only an absent value or zero; authored values and computed point lengths have an absolute maximum of 1000000
The Windows JSON parser retains finite decimal values to the nearest Double before the original typed runs reach layout; scientific notation follows the existing JSON grammar and numeric range, and the existing request-byte limit also bounds long numeric tokens
Unknown modes, wrong JSON types, overflowing computed values and rich runs on non-text fields fail before font loading or publication; existing aggregate font, object, input and output budgets and cancellation checks remain active
Mixed scalar and rich fields use the existing transactional candidate, preserving the current loaded graph, authentic AES revision key, signature constraints and two-phase PDF/result callback behaviour
Within this bounded profile, explicit normal and explicit zero compute to the same point spacing and canonical RV, making actual equivalent read-only updates semantic no-ops; versioned JSON operations retain the original source bytes, and the omitted legacy mode remains distinct because it inherits the global appearance options
Read-only fields accept actual semantic no-ops and reject changed spacing; successful JSON no-ops retain exact PDF bytes, and failed output or result callbacks leave the current context unchanged
Capability metadata exposes typedRichFill.spacing without changing the existing C ABI structures or symbols; spacing applies to actual shaped glyph coordinates and RV values, with the bounded rules in native run spacing