luapack/plug/num.lua

29 lines
719 B
Lua

return function(op)
return {
name = 'Better numbers',
transform = function(e, opts)
return e.src
:gsub('%.?%d[%._0-9A-Fa-fxboXBO]+', function(num)
local base = 10
local nnum = num
:gsub('_', '')
:gsub('^0([xboXBO])', function(m)
if m == 'x' or m == 'X'
then base = 16
elseif m == 'b' or m == 'B'
then base = 2
elseif m == 'o' or m == 'O'
then base = 8
end
return ''
end)
assert(not nnum:match '[xboXBO]', 'invalid number '..num)
nnum = tonumber(nnum, base)
assert(nnum, 'invalid number '..num)
return tostring(nnum)
end)
end,
}
end