Supplied-family fallback for scalar fields

Ordinary text fields, comb cells, choice display labels, checkbox and radio marks, password masks and native pushbutton captions can use the same explicitly supplied font families as rich text without changing their scalar form metadata

Provide one through sixteen distinct configured labels and their regular TrueType programs, then enable FallbackFontFamilies; selection covers complete graphemes and does not use installed system fonts

Existing plain wrapping, spacing, shaping, bidi, clipping, rotation, automatic sizing, selected list rows and export-state behavior remain active; mixed comb fields keep the original scalar-cell restrictions and do not accept complex shaping that the original comb profile rejects

Mixed plain appearances may contain child Forms and several actual embedded fonts, so consume the returned object count rather than assuming a fixed seven-object appearance

Windows JSON and callback transport

{
  "schemaVersion": 1,
  "type": "forms.fill",
  "fontFamilies": ["Primary", "Serif", "Sans"],
  "fallbackFontFamilies": true,
  "fields": [
    {"name": "Plain", "value": "A\u03a9"},
    {"name": "Check", "value": "Yes"}
  ]
}

For Windows jobs, supply each configured family's regular font file through the existing fonts object; for hpdf_document_execute_json_v1, return its real regular program through the existing versioned font callback and IO extension

Explicit named fallback routes a pure scalar fill through the same authenticated candidate transaction as mixed typed runs; scalar-only operations request regular candidate faces and return typedRichText=false with scalarFamilyProfile="supplied-regular-fonts-v1"

FDF and XFDF scalar imports use the same supplied-family path for text, choices, checkboxes and radio buttons; pushbutton captions use the native caption API and are not imported as scalar button export states

Windows scalar same-value imports and fills retain their existing value-only no-op contract and preserve exact committed bytes, including read-only fields; they do not compare a new font or color configuration with the existing AP, so use a native family setter for an explicit appearance rebuild

Original typed rich runs retain their existing style and appearance comparison; adding scalar fallback does not quantize typed sizes or colors or change authored RV

PDF and result callbacks must both succeed before a context update becomes visible; sticky font and IO errors, cancellation, budgets, encryption authentication and signature policies preserve the committed graph and atomic file output

A cleared single-selection choice stores /V null and an empty index array; an explicitly selected empty export option retains /V () and its actual index, so repeated clears and empty-value selections remain distinct

A legacy blank choice with no selected index and no empty export option can be recognized as a value-only no-op; a read-only choice with a real selected empty export cannot be cleared

Native Linux JSON and callback transport

Linux versioned operations accept the same ordered fontFamilies and fallbackFontFamilies options; regular programs are resolved through the operation's Fontconfig environment and supplied to the native family appearance APIs

Scalar text, comb cells, choice labels, checkbox and radio marks, password masks, file-select fields and explicit pushbutton captions use real complete-grapheme coverage; scalar FDF/XFDF imports load regular candidates without adding an authored rich-text flag or RV

Rich-only imports retain their actual required style union instead of requesting every family's regular face, while mixed scalar and rich imports add the regular candidates required by the scalar fields

Linux callback imports preserve exact committed bytes for repeated clears and same-value no-ops; authenticated AES R5/R6, P1/P2/P3 and FieldMDP policies, cancellation and publication failures retain the prior committed document

Run Tests/Linux/Run-ScalarFontFallbackChecks.sh LIBRARY FIXTURES FONTS OUTPUT against each freshly built native ABI library; Tests/Linux/HeadlessScalarFontFallback.en-us.md describes the genuine signed inputs, isolated three-font catalog and independent glyph/CMS checks

Reproduce the conformance checks

The public Windows runners accept explicit source, output, font, scalar fixture, clear fixture and genuine signed-policy directories; they never silently consume a previous private proof directory

Generate the initial four-field documents with Tests/Linux/Build-HeadlessTypedFormFixtures.py, then pass its mixed.pdf to the scalar and clear fixture producers

python Tests/CABI/BuildScalarFixtures.py work/typed/mixed.pdf work/scalar
python Tests/CABI/BuildScalarClearFixtures.py work/scalar/scalar.pdf work/clear

Supply genuine regular programs named primary-0.ttf, DejaVuSerifCondensed.ttf and DejaVuSans.ttf; the regression fixture producer Tests/Linux/Build-HeadlessRichFontListFixtures.py prepares the deterministic Primary subset and all twelve real style programs from a caller-provided DejaVu font directory

Generate real P1, P2, P3 and FieldMDP documents with Tests/Linux/Run-HeadlessTypedFormTests-Windows.ps1 and its required certificate/key identity directory; its outputs include p1-signed.pdf, p2-signed.pdf, p3-signed.pdf and lock-signed.pdf

Tests/CABI/RunScalarClearNative.ps1 -SourceDirectory Lib -OutputDirectory work/native `
  -FontDirectory work/fonts -FixtureDirectory work/scalar `
  -ClearFixtureDirectory work/clear -PolicyDirectory work/signed
Tests/CABI/RunScalarClearABI.ps1 -SourceDirectory Lib -OutputDirectory work/abi `
  -FontDirectory work/fonts -FixtureDirectory work/scalar `
  -ClearFixtureDirectory work/clear -PolicyDirectory work/signed `
  -LegacyFixtureDirectory work/typed -LegacyFontDirectory work/legacy-fonts

The legacy regression parameters take the existing Windows typed-form fixture and font directories used by Run-WindowsTypedFormChecks.ps1; the new scalar checks also independently inspect actual embedded programs, CID maps, form values and retained signed ByteRanges

Windows DLL no-ops preserve exact committed bytes after both callbacks succeed; native mixed transactions also publish the exact source bytes when all updates are unchanged and the graph has no pending edits, while pending graph edits remain in the prepared revision even when the field update count is zero

FDF distinguishes an empty selection array from a selected empty export string; lossless XFDF choice exchange uses the namespace-qualified empty-values extension for an explicit clear, while an unmarked empty value retains its existing target-option interpretation

Native APIs

Rich run fallback · Windows rich font transport