Jump to content

Module:ArbCaseAlias: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add function to list all cases with supported aliases
sort list of cases; change list to be nested by year
Line 6: Line 6:
function me.luaListCases(args)
function me.luaListCases(args)
local outputBuffer = { }
local outputBuffer = { }
local primaryCategories = { }
for primaryCategory, caseInfoForCategory in pairs(config.arbCaseAliasInfo.caseInfoFor) do
for primaryCategory, caseInfoForCategory in pairs(config.arbCaseAliasInfo.caseInfoFor) do
-- skip test year 1000
for caseName, caseInfo in pairs (caseInfoForCategory) do
if (primaryCategory ~= 1000) then
table.insert(outputBuffer, '* ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n')
table.insert(primaryCategories, primaryCategory)
end
end
table.sort(primaryCategories)
for index, primaryCategory in pairs(primaryCategories) do
table.insert(outputBuffer, '* ' .. primaryCategory .. '\n')
for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
table.insert(outputBuffer, '** ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n')
end
end
end
end

Revision as of 10:35, 2 December 2018

local me = { }

-- mw.loadData doesn't support loading data that has function type, so use require
local config = require('Module:ArbCaseAlias/data')

function me.luaListCases(args)
	local outputBuffer = { }
	local primaryCategories = { }
	for primaryCategory, caseInfoForCategory in pairs(config.arbCaseAliasInfo.caseInfoFor) do
		-- skip test year 1000
		if (primaryCategory ~= 1000) then
			table.insert(primaryCategories, primaryCategory)
		end
	end
	table.sort(primaryCategories)
	for index, primaryCategory in pairs(primaryCategories) do
		table.insert(outputBuffer, '* ' .. primaryCategory .. '\n')
		for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
			table.insert(outputBuffer, '** ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n')
		end
	end
	return table.concat(outputBuffer)
end

function me.listCases(frame)
	local args = require('Module:Arguments').getArgs(frame)
	return me.luaListCases(args) or ''
end

function me.luaMain(args)
	local alias = args[1] or ''
	local aliasFor = { }
	for format, normalizer in pairs(config.arbCaseAliasInfo.normalizeAlias)	do
		local normalizedAlias = normalizer(alias)
		if (normalizedAlias ~= nil) then
			aliasFor[format] = normalizedAlias
		end
	end  -- loop over normalizers

    local primaryCategory = config.arbCaseAliasInfo.extractPrimaryKey(alias)
    if (primaryCategory == nil) then
    	return alias
    end

    if (config.arbCaseAliasInfo.caseInfoFor[primaryCategory] == nil) then
    	return alias
    end

	for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
		for format, caseAlias in pairs(caseInfo) do
			if (aliasFor[format] == caseAlias) then
				return caseName
			end
		end  -- loop over different case aliases
	end  -- loop over cases for given primary category

	-- failed to find a match
	return alias
end

function me.main(frame)
	local args = require('Module:Arguments').getArgs(frame)
	return me.luaMain(args) or ''
end


return me