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