Модуль:Інтэрвал

Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі

Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Інтэрвал/Дакумэнтацыя

-- Гэты модуль патрэбны для {{Інтэрвал}}.

local p = {}

-- Канстанты
local lang = mw.language.getContentLanguage()
local getArgs = require('Модуль:Аргумэнты').getArgs

local function getArgNums(args)
    -- Вяртае масіў з ключамі ўсіх пазыцыйных аргумэнтаў,
    -- якія зьмяшчаюць інфармацыю (т. б. непустыя значэньі).
    -- (з Module:Unbulleted_list)
    local nums = {}
    for k, v in pairs(args) do
        if type(k) == 'number' and
            k >= 1 and
            math.floor(k) == k and
            mw.ustring.match(v, '%S') then
                table.insert(nums, k)
        end
    end
    table.sort(nums)
    return nums
end

function p.main(frame)
    local args = getArgs(frame)
    return p._main(args)
end

function p._main(args)
    local n, rule, format = args.n, args.rule, args.format
    local numbers = getArgNums(args)
    local low, high, lowpos, highpos = nil, nil, 0, #numbers + 1

    -- Пры параўнаньні часоў пераводзім іх у сэкунды пасьля эпохі
    if format == 'time' then
        if n then
            n = lang:formatDate('U', '@' .. n)
        else
            n = os.time() -- Прысвоіць n цяперашні час, калі яго не перадалі
        end
    end

    n = tonumber(n)

    for i, num in ipairs(numbers) do
        local interval
        if format == 'time' then
            interval = tonumber(lang:formatDate('U', '@' .. args[num]))
        else
            interval = tonumber(args[num])
        end

        if n and ((n >= interval and not rule) or (n > interval and rule == '>')) then
            low = interval
            lowpos = num
        else
            high = high and math.min(interval, high) or interval
            if high == interval then highpos = num end
        end
    end
    return lowpos .. '-' .. highpos
end

return p