Module:CHUNITHM Difficulty: Difference between revisions

From SilentBlue.RemyWiki
Jump to navigation Jump to search
m (Protected "Module:CHUNITHM Difficulty": Structural page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))
No edit summary
 
Line 6: Line 6:
function p.chunithm_difficulty_multi(frame)
function p.chunithm_difficulty_multi(frame)
     args=frame:getParent().args
     args=frame:getParent().args
     local version_range_borders = {4,13}
     local version_range_borders = {4,13,18}
     local result = "CHUNITHM "
     local result = "CHUNITHM "
     if VerToNum({"chunithm", args[1]}) < version_range_borders[1] then
     if VerToNum({"chunithm", args[1]}) < version_range_borders[1] then
Line 22: Line 22:
     local ranges_text = {
     local ranges_text = {
         "1 to 14 from AIR PLUS to PARADISE LOST",
         "1 to 14 from AIR PLUS to PARADISE LOST",
         "1 to 15 from NEW onwards"
         "1 to 15 from NEW to LUMINOUS",
        "1 to 15+ from LUMINOUS PLUS onwards"
     }
     }
     local j = 1
     local j = 1

Latest revision as of 10:40, 14 November 2024

Documentation for this module may be created at Module:CHUNITHM Difficulty/doc

local p={}
local function VerToNum(args)
	return tonumber(mw.text.trim(mw.getCurrentFrame():expandTemplate{title='VerToNum',args=args}))
end

function p.chunithm_difficulty_multi(frame)
    args=frame:getParent().args
    local version_range_borders = {4,13,18}
    local result = "CHUNITHM "
    if VerToNum({"chunithm", args[1]}) < version_range_borders[1] then
        result = result .. "to AIR difficulty rated from 1 to 13+, "
    else
        result = result .. "difficulty rated "
    end
    -- since #args can't be used, and there's no removals in air+ and older anyway, i'm removing the period, and moving the comma to the above branch
    -- although there's only two ranges, the loops below shall remain to be future-proof
    local i = 0
    local in_range = {}
    for i = 1, #version_range_borders do
        in_range[i] = false
    end
    local ranges_text = {
        "1 to 14 from AIR PLUS to PARADISE LOST",
        "1 to 15 from NEW to LUMINOUS",
        "1 to 15+ from LUMINOUS PLUS onwards"
    }
    local j = 1
    local endvernum = nil
    for i = 1, 99, 2 do -- again, ugly hack
        if args[i] == nil then break end
        local startvernum = VerToNum({"chunithm", args[i]})
        endvernum = VerToNum({"chunithm", args[i + 1]})
        if endvernum == nil then
            endvernum = 99
        end
        for j = 1, #version_range_borders do
            local cond = true
            if j + 1 <= #version_range_borders then
                cond = startvernum < version_range_borders[j + 1]
            end
            if endvernum >= version_range_borders[j] and cond then
                in_range[j] = true
            end
        end
    end
    local included_ranges = {}
    for j = 1, #in_range do
        if in_range[j] then
            table.insert(included_ranges, j)
        end
    end
    if #included_ranges == 1 and VerToNum({"chunithm", args[1]}) < version_range_borders[1] then -- first range special case
        result = result .. "and " .. ranges_text[included_ranges[1]] .. "."
        -- print(result)
    else
        for j = 1, #included_ranges do
            result = result .. ranges_text[included_ranges[j]]
            if j == #included_ranges then -- last range
                result = result .. "."
            elseif j == #included_ranges - 1 then -- second to last range
                result = result .. ", and "
            else
                result = result .. ", "
            end
        end
    end
    result = result .. "<br>[[Category:Songs]][[Category:CHUNITHM Songs]]"
    if endvernum ~= 99 then
        result = result .. "[[Category:CHUNITHM Removed Songs]]"
    end
    return result
end

return p