Module:Rational: Difference between revisions
m \text{...} is wrapper is now added automatically |
m Safer parsing |
||
Line 1,424: | Line 1,424: | ||
-- removing <br> and <br/> tags | -- removing <br> and <br/> tags | ||
unparsed = unparsed:gsub('<br/?>', '') | unparsed = unparsed:gsub('<br/?>', '') | ||
-- length limit: very long strings are not converted into Lua numbers correctly | |||
local max_length = 15 | |||
-- rational form | -- rational form | ||
local sign, n, _m, m = unparsed:match('^%s*(%-?)%s*(%d+)%s*(/%s*(%d+))%s*$') | local sign, n, _m, m = unparsed:match('^%s*(%-?)%s*(%d+)%s*(/%s*(%d+))%s*$') | ||
Line 1,434: | Line 1,438: | ||
else | else | ||
m = 1 | m = 1 | ||
if #n > max_length then | |||
return nil | |||
end | |||
n = tonumber(n) | n = tonumber(n) | ||
if #sign > 0 then | if #sign > 0 then | ||
Line 1,440: | Line 1,447: | ||
end | end | ||
else | else | ||
if #n > max_length then | |||
return nil | |||
end | |||
n = tonumber(n) | n = tonumber(n) | ||
if #m > max_length then | |||
return nil | |||
end | |||
m = tonumber(m) | m = tonumber(m) | ||
if #sign > 0 then | if #sign > 0 then |