Semantic MediaWikiDit bericht verdwijnt nadat alle relevante taken zijn afgerond.

Er is één onvoltooide of openstaande taak, die nodig is om het installeren van Semantic MediaWiki te voltooien. Een beheerder of gebruiker met voldoende rechten kan deze uitvoeren. Dit moet worden gedaan voordat nieuwe gegevens worden toegevoegd om tegenstrijdigheden te voorkomen.

Geen bewerkingssamenvatting
Geen bewerkingssamenvatting
 
(6 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 11: Regel 11:
local numbers = { 1, 5, 10, 50, 100, 500, 1000 }
local numbers = { 1, 5, 10, 50, 100, 500, 1000 }
local chars = { "I", "V", "X", "L", "C", "D", "M" }
local chars = { "I", "V", "X", "L", "C", "D", "M" }
function p.runToRomanNum( str, default )
-- todo
end


--[[
--[[
Regel 43: Regel 47:
end
end


--[[
function p.runToArabicNum( s, defaultMsg )  
Convert Roman to Arabic numerals
s = s:upper()
]]--
local ret = 0
function p.toArabicNum(frame)
local i = 1
local sourceStr = mw.text.unstrip(frame.args[1])
    --s = tonumber(s)
    s = sourceStr:upper()
    local ret = 0
    local i = 1
     while i <= s:len() do
     while i <= s:len() do
     --for i = 1, s:len() do
     --for i = 1, s:len() do
         local c = s:sub(i, i)
         local c = s:sub(i, i)
         if c ~= " " then -- allow spaces
         if c ~= " " then -- allow spaces
             local m = map[c] or error( "Unknown Roman Numeral '" .. c .. "'" )
             local m = map[c] or "unknown Roman numeral"
            if m == "unknown Roman numeral" then return defaultMsg end
              
              
             local next = s:sub(i + 1, i + 1)
             local next = s:sub(i + 1, i + 1)
Regel 78: Regel 78:
     end
     end
     return ret
     return ret
end
--[[
Convert Roman to Arabic numerals
]]--
function p.toArabicNum(frame)
local sourceStr = mw.text.unstrip(frame.args[1])
    --s = tonumber(s)
    if frame.args[2] == nil then
    local defaultMsg = "Unknown Roman numeral"
    else defaultMsg = mw.text.unstrip(frame.args[2])
    end
    res = p.runToArabicNum( sourceStr, defaultMsg )
return res
end
end


return p
return p

Huidige versie van 10 aug 2023 14:31

Module:ConvertNumerals

Summary
35 -> XXXV


XXXV -> 35

Need to check for validity of Roman numeral first, or provide a default in event of error

what



local p = {}
local map = {
    I = 1,
    V = 5,
    X = 10,
    L = 50,
    C = 100, 
    D = 500, 
    M = 1000,
}
local numbers = { 1, 5, 10, 50, 100, 500, 1000 }
local chars = { "I", "V", "X", "L", "C", "D", "M" }

function p.runToRomanNum( str, default )
	-- todo
end

--[[
Convert Arabic to Roman numerals (uppercase)
]]--
function p.toRomanNum(frame)
    --s = tostring(s)
    local sourceNumber = mw.text.unstrip(frame.args[1])
    s = tonumber(sourceNumber)
    if not s or s ~= s then error "Unable to convert to number" end
    if s == math.huge then error "Unable to convert infinity" end
    s = math.floor(s)
    if s <= 0 then return s end
	local ret = ""
        for i = #numbers, 1, -1 do
        local num = numbers[i]
        while s - num >= 0 and s > 0 do
            ret = ret .. chars[i]
            s = s - num
        end
        --for j = i - 1, 1, -1 do
        for j = 1, i - 1 do
            local n2 = numbers[j]
            if s - (num - n2) >= 0 and s < num and s > 0 and num - n2 ~= n2 then
                ret = ret .. chars[j] .. chars[i]
                s = s - (num - n2)
                break
            end
        end
    end
    return ret
end

function p.runToArabicNum( s, defaultMsg ) 
	s = s:upper()
	local ret = 0
	local i = 1
    while i <= s:len() do
    --for i = 1, s:len() do
        local c = s:sub(i, i)
        if c ~= " " then -- allow spaces
            local m = map[c] or "unknown Roman numeral"
            if m == "unknown Roman numeral" then return defaultMsg end
            
            local next = s:sub(i + 1, i + 1)
            local nextm = map[next]
            
            if next and nextm then
                if nextm > m then 
                -- if string[i] < string[i + 1] then result += string[i + 1] - string[i]
                -- This is used instead of programming in IV = 4, IX = 9, etc, because it is
                -- more flexible and possibly more efficient
                    ret = ret + (nextm - m)
                    i = i + 1
                else
                    ret = ret + m
                end
            else
                ret = ret + m
            end
        end
        i = i + 1
    end
    return ret
end

--[[
Convert Roman to Arabic numerals
]]--
function p.toArabicNum(frame)
	local sourceStr = mw.text.unstrip(frame.args[1])
    --s = tonumber(s)
    if frame.args[2] == nil then
    	local defaultMsg = "Unknown Roman numeral"
    	else defaultMsg = mw.text.unstrip(frame.args[2])
    end
    res = p.runToArabicNum( sourceStr, defaultMsg )
	return res
end

return p