fix sprintf and rename to fmt

the "split on %" strategy makes parsing "%%" complicated, so the "actually literally %" placeholder is now "%~" rather than "%%". since thsi resembles a real sprintf even less now I renamed it to "fmt".

also actually closes the `if m == "~"` block. (which was `if m == "%"` before this patch)
This commit is contained in:
Kistaro Windrider 2023-01-01 12:37:11 -08:00
parent 3494c48e74
commit 93c154f876
Signed by: kistaro
SSH Key Fingerprint: SHA256:TBE2ynfmJqsAf0CP6gsflA0q5X5wD5fVKWPsZ7eVUg8

View File

@ -39,14 +39,13 @@ function cycle(tbl,period)
end end
-- fake sprintf function -- fake sprintf function
-- %% for literal "%" -- %~ for literal "%"
-- %v for param -- %v for param
function fmt(f, ...)
function sprintf(fmt, ...)
local out, i = "", 1 local out, i = "", 1
for s in all(split(fmt,"%")) do for s in all(split(f,"%")) do
local m = s[1] local m = s[1]
if m == "%" then if m == "~" then
out ..= "%" out ..= "%"
else else
local p = select(i,...) local p = select(i,...)
@ -56,6 +55,7 @@ function sprintf(fmt, ...)
else else
out ..= "(?!:"..m..":"..tostr(p)..")" out ..= "(?!:"..m..":"..tostr(p)..")"
end end
end
out ..=sub(s,2) out ..=sub(s,2)
end end
return out return out