fix section before first "%"

oops, need to special-case the first part of the split list.

amusingly, I don't need to special-case zero-length format strings because that will skip the entire loop and output "", which seems correct. (I am also not special-casing zero-length segments because `s[1] == nil` will go into the error handler and that seems fine.
This commit is contained in:
Kistaro Windrider 2023-01-01 12:50:35 -08:00
parent 2ce259304d
commit 367f03be4a
Signed by: kistaro
SSH Key Fingerprint: SHA256:TBE2ynfmJqsAf0CP6gsflA0q5X5wD5fVKWPsZ7eVUg8

View File

@ -44,23 +44,29 @@ end
-- %! for tostring(param) -- %! for tostring(param)
-- which dumps tables -- which dumps tables
function fmt(f, ...) function fmt(f, ...)
local out, i = "", 1 local out, i = "", 0
for s in all(split(f,"%")) do for s in all(split(f,"%")) do
local m = s[1] if i == 0 then
if m == "~" then -- before first format directive
out ..= "%" out ..= s
i = 1
else else
local p = select(i,...) local m = s[1]
i+=1 if m == "~" then
if m == "v" then out ..= "%"
out ..= p
elseif m == "!" then
out ..= tostring(p)
else else
out ..= "(?!:"..m..":"..tostring(p)..")" local p = select(i,...)
i+=1
if m == "v" then
out ..= p
elseif m == "!" then
out ..= tostring(p)
else
out ..= "(?!:"..m..":"..tostring(p)..")"
end
end end
out ..=sub(s,2)
end end
out ..=sub(s,2)
end end
return out return out
end end