Moduł:Brudnopis/Paweł Ziemian/Liczba
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Brudnopis/Paweł Ziemian/Liczba/opis
local resources = mw.loadData("Moduł:Brudnopis/Paweł Ziemian/Liczba/res")
function inWords(s, n, f)
local zero = 48
local result = {}
local scale = 0
local lang = mw.language.getContentLanguage()
local count = #n
while count > 0 do
local c1 = string.byte(n, count)
local c10 = count <= 1 and zero or string.byte(n, count - 1)
local c100 = count <= 2 and zero or string.byte(n, count - 2)
local d1 = c1 - zero
local d10 = 10 * (c10 - zero)
local d100 = 100 * (c100 - zero)
local d11 = d10 + d1
local d111 = d100 + d11
if d111 > 0 then
if scale > 0 then
if not resources.scales[scale] then
return resources.zylion
end
table.insert(result, 1, lang:convertPlural(d111, resources.scales[scale]))
end
if ((d111 > 1) or (scale == 0)) and (resources.names[d1] or resources.names[d11]) then table.insert(result, 1, resources.names[d11] or resources.names[d1]) end
if resources.names[d10] and not resources.names[d11] then table.insert(result, 1, resources.names[d10]) end
if resources.names[d100] then table.insert(result, 1, resources.names[d100]) end
end
count = count - 3
scale = scale + 1
end
if #result <= 0 then
table.insert(result, resources.zero)
end
if f and (#f > 0) then
table.insert(result, resources.comma)
for i = 1, #f do
local c = string.byte(f, i)
local v = c - zero
table.insert(result, v == 0 and resources.zero or resources.names[v])
end
end
if resources.sign[s] then
table.insert(result, 1, resources.sign[s])
end
return table.concat(result, " ")
end
function detect(s)
if not s then
return
end
local text, c = mw.ustring.gsub(s, "[ \194\160]", "")
text = mw.text.trim(text)
mw.logObject(text, "text")
local s1, n1, f1, es1, en1 = mw.ustring.match(text, "^([%+%-]?)([0-9]+)[,%.]([0-9]+)[eE]([%+%-]?)([0-9]+)$")
if n1 then
return { s = s1, n = n1, f = f1, es = es1, en = en1, }
end
local s2, n2, es2, en2 = mw.ustring.match(text, "^([%+%-]?)([0-9]+)[eE]([%+%-]?)([0-9]+)$")
if n2 then
return { s = s2, n = n2, f = false, es = es2, en = en2 }
end
local s3, n3, f3 = mw.ustring.match(text, "^([%+%-]?)([0-9]+)[,%.]([0-9]+)$")
if n3 then
return { s = s3, n = n3, f = f3, es = false, en = false }
end
local s4, n4 = mw.ustring.match(text, "^([%+%-]?)([0-9]+)$")
if n4 then
return { s = s4, n = n4, f = false, es = false, en = false }
end
end
return {
Value = function(frame)
local dn = detect(frame.args[1])
if not dn then
mw.logObject(value, "Value: to chyba nie jest liczba")
return
end
local result = {}
table.insert(result, dn.s or "")
table.insert(result, dn.n)
if dn.f then
table.insert(result, ".")
table.insert(result, dn.f)
end
if dn.en then
table.insert(result, "e")
table.insert(result, dn.es or "")
table.insert(result, dn.en)
end
local value = table.concat(result, "")
mw.logObject(value, "value")
return value
end,
InWords = function(frame)
local dn = detect(frame.args[1])
if not dn then
mw.logObject(value, "InWords: to chyba nie jest liczba")
return
end
local result = {}
table.insert(result, inWords(dn.s, dn.n, dn.f))
if dn.en then
table.insert(result, resources.exp)
table.insert(result, inWords(dn.es, dn.en))
end
local value = table.concat(result, " ")
mw.logObject(value, "value")
return value
end,
}