forked from pyrex/chameleonic
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:
parent
2264349e72
commit
3516d2855e
@ -44,23 +44,29 @@ end
|
||||
-- %! for tostring(param)
|
||||
-- which dumps tables
|
||||
function fmt(f, ...)
|
||||
local out, i = "", 1
|
||||
local out, i = "", 0
|
||||
for s in all(split(f,"%")) do
|
||||
local m = s[1]
|
||||
if m == "~" then
|
||||
out ..= "%"
|
||||
if i == 0 then
|
||||
-- before first format directive
|
||||
out ..= s
|
||||
i = 1
|
||||
else
|
||||
local p = select(i,...)
|
||||
i+=1
|
||||
if m == "v" then
|
||||
out ..= p
|
||||
elseif m == "!" then
|
||||
out ..= tostring(p)
|
||||
local m = s[1]
|
||||
if m == "~" then
|
||||
out ..= "%"
|
||||
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
|
||||
out ..=sub(s,2)
|
||||
end
|
||||
out ..=sub(s,2)
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user