Modul:Categorize

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon
-- module for generating automatic categories
-- © John Erling Blad, Creative Commons by Attribution 3.0
local p = {}

function p._true()
	return true
end

function p._empty()
	return
end

function p._identity(arg)
	return arg
end

function p._setup(rule)
	if not rule.filter then
		rule.filter = p._true
	end
	if not rule.func then
		rule.func = p._empty
	end
	if not rule.sort then
		rule.sort = p._identity
	end
end

function p._load(name)
	return (type(name) == 'string') (require('Module:Categorize/'..name)) or {}
end

function p._format(cat)
	mw.html:wikitext('[[Category:'..cat..'|'..p.sort(cat)..']]')
end

function p.run( frame )
	local title = mw.title.getCurrentTitle()
	local rules = {}
	for _,v in ipairs( frame.args ) do
		local rule = p._load(v)
		if rule then
			rule = p._setup(rule)
			if rule.filter(title) then
				rules[1+#rules] = rule
			end
		end
	end
	local categories = {}
	for _,v in ipairs( rules ) do
		local results = { p.func(title) }
		for _,u in ipairs( results ) do
			if categories[u] == nil then
				categories[u] = 0
			end
			categories[u] = 1+categories[u]
		end
	end
	for _,v in ipairs( categories ) do
		p._format(v)
	end
end

return p