#274 format: ~mincol@a (params+modifier), ~F/~E float, ~R directives unsupported

open
Opened by atgreen

Split-independent format-engine gaps (found probing 2026-07-11). funcl format handles ~A/~S/~D/~B/~X/~O/~% /~&/~~/~T/~*/~^/~{~} and padded ~mincolA (left-justify) and the bare-modifier ~@a path, but:

(format nil "~10@a|" "x") => "@a|" (should be " x|"; params-THEN-modifier not parsed) (format nil "~,2f" 3.14159) => "f" (should be "3.14"; ~F fixed-float unimplemented -> falls to literal) (format nil "~e" 1234.5) => "e" (should be "1.2345e+3"; ~E exp-float unimplemented) (format nil "~r" 5) => "r" (should be "five"; ~R cardinal/ordinal/roman unimplemented)

ROOT (for ~mincol@a): format-walk (src/stdlib.lisp ~1806) dispatches ~ to format-param-directive and ~<@/:> to format-mod-directive as SEPARATE paths that do not compose — a numeric param followed by an @/: modifier (~10@a) parses the 10 then emits the @ and a as literal text. Fix = make format-param-directive also consume trailing :/@ flags and thread rightp into fmt-emit-padded (which already supports right/left justify).

~F/~E are float formatting (Phase-4 float area, delicate); ~R is number spelling (substantial). All are format-engine work in a heavily-used function (regression-prone); deferred rather than risk the build. Priority order if picked up: ~mincol@a (justify, tractable) > ~R (spelling) > ~F/~E (float).

Comments (1)

atgreen3992785850

ASSESSMENT 2026-07-11: unchanged. Sizing: ~mincol/@ params for ~A/~S is a contained fmt-directive-parser change (params exist for some directives already); ~F/~E need float-to-decimal (Phase 4 float work — Burger-Dybvig notes already collected in the float-borrowed-techniques memo); ~R (radix/english) is standalone. Suggest splitting: params+@ first (cheap, unblocks many ANSI format tests), floats with Phase 4, ~R last.