From da25bf22185c76f3d337bb514915279f7dc5c01d Mon Sep 17 00:00:00 2001 From: Evan Berkowitz Date: Fri, 24 Jun 2022 13:17:21 +0200 Subject: [PATCH] Improve care for handling d-type padding. --- Applications/sprintf.wl | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Applications/sprintf.wl b/Applications/sprintf.wl index 4d93c94..babf6a8 100644 --- a/Applications/sprintf.wl +++ b/Applications/sprintf.wl @@ -92,7 +92,8 @@ precision["y"][PRECISION_][this_Symbol]:=precision["s"][PRECISION][ToString[this (* Integers *) -precision["d"][PRECISION_][this_Integer]:=ToString[this] +precision["d"][\[Infinity]][this_Integer]:=ToString[this] +precision["d"][PRECISION_][this_Integer]:=SPLeft[ToString[this],PRECISION,"0"] precision["d"][PRECISION_][this_]:=(Message[sprintf::notinteger,this];BLANK); precision["i"]=precision["d"]; @@ -206,14 +207,18 @@ flagParse[FLAG_]:={ } +SPLeft[s_,w_,f_]:=If[StringLength[s]>w,s,StringPadLeft[s,w,f]] +SPRight[s_,w_,f_]:=If[StringLength[s]>w,s,StringPadRight[s,w,f]] + + align[WIDTH_][LEADINGZEROES_,LEFTALIGN_,SIGNED_,SIGN_][replacement_]:=If[LEFTALIGN, Which[ - SIGNED, StringPadRight[SIGN<>replacement,Max[StringLength[replacement]+1,WIDTH]," "], - True, StringPadRight[SIGN<>replacement,Max[StringLength[SIGN<>replacement],WIDTH]," "] + SIGNED, SPRight[SIGN<>replacement,Max[StringLength[replacement]+1,WIDTH]," "], + True, SPRight[SIGN<>replacement,Max[StringLength[SIGN<>replacement],WIDTH]," "] ], Which[ - LEADINGZEROES, SIGN<>StringPadLeft[replacement,Max[StringLength[replacement],WIDTH-StringLength[SIGN]],"0"], - True, StringPadLeft[SIGN<>replacement,Max[StringLength[SIGN<>replacement],WIDTH]," "] + LEADINGZEROES, SIGN<>SPLeft[replacement,Max[StringLength[replacement],WIDTH-StringLength[SIGN]],"0"], + True, SPLeft[SIGN<>replacement,Max[StringLength[SIGN<>replacement],WIDTH]," "] ]]; @@ -265,6 +270,7 @@ sprintf[s_String,this_,rest___]:=Module[ {LEADINGZEROES,LEFTALIGN,SIGNED}=flagParse[FLAG]; + If[ StringContainsQ[SIGNEDTYPES,TYPE] && NumericQ[THIS], SIGN=Switch[Sign[THIS], -1, "-",