Modulo:Kangatuan a bilang ti arkibo/pagipadasan

Manipud iti Wikipedia, ti nawaya nga ensiklopedia
Darsen a mapan iti pagdaliasatan Darsen a mapan agbiruk
Dokumentasion ti modulo

Daytoy a modulo ket isayangkatna ti plantilia ti {{kangatuan a bilang ti arkibo}}.

-- This module finds the highest existing archive number for a set of talk
-- archive pages.

local expSearch = require('Modulo:Exponential search')
local p = {}

local function raiseStartNumberError(start)
	error(string.format(
		'Imbalido a rugi ti bilang ti "%s" a naite diti [[Modulo:Kangatuan a bilang ti arkibo]] (nasken a sibubukel a bilang)',
		tostring(start)
	), 3)
end

local function pageExists(page)
	local success, exists = pcall(function()
		return mw.title.new(page).exists
	end)
	return success and exists
end

function p._main(prefix, start)
	-- Check our inputs
	if type(prefix) ~= 'string' or not prefix:find('%S') then
		error('Awan ti pasaruno a naited iti [[Modulo:Kangatuan a bilang ti arkibo]]', 2)
	end
	if start ~= nil and (type(start) ~= "number" or math.floor(start) ~= start) then
		raiseStartNumberError(start)
	end
	start = start or 1
	
	-- Do an exponential search for the highest archive number
	local result = expSearch(function (i)
		local archiveNumber = i + start - 1
		local page = prefix .. tostring(archiveNumber)
		return pageExists(page)
	end, 10)
	
	if result == nil then
		-- We didn't find any archives for our prefix + start number
		return nil
	else
		-- We found the highest archive, but the number is always 1-based, so
		-- adjust it for our start number
		return result + start - 1
	end
end

function p.main(frame)
	local args = require('Modulo:Dagiti argumento').getArgs(frame, {
		trim = false,
		removeBlanks = false,
		wrappers = 'Plantilia:Kangatuan a bilang ti arkibo'
	})
	local prefix = args[1]
	
	-- Get the start archive number, if specified.
	local start = args.start
	if start == "" then
		start = nil
	elseif start then
		start = tonumber(start)
		if not start then
			raiseStartNumberError(args.start)
		end
	end

	return p._main(prefix, start)
end

return p