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, while 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 behavior

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