Jump to content

Module:ArbCaseAlias: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add support for listing supported alias in reverse order by year
rearrange code for better efficiency when the passed parameter is not an alias
 
Line 52: Line 52:
function me.luaMain(args)
function me.luaMain(args)
local alias = args[1] or ''
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)
local primaryCategory = config.arbCaseAliasInfo.extractPrimaryKey(alias)
Line 68: Line 61:
return alias
return alias
end
end

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


for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do

Latest revision as of 18:55, 7 March 2020

local me = { }

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

local function sortByLastPart(a, b)
	local lastPartPattern = '([^-]+)$'
	local aLastPart = string.match(a, lastPartPattern)
	local bLastPart = string.match(b, lastPartPattern)
	return tonumber(aLastPart) < tonumber(bLastPart)
end

local function reverseNumericCompare(a, b)
	return tonumber(a) > tonumber(b)
end

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
	if (args['order'] == 'reverseyear') then
	    table.sort(primaryCategories, reverseNumericCompare)
	else
	    table.sort(primaryCategories)
	end
	for index, primaryCategory in pairs(primaryCategories) do
		table.insert(outputBuffer, '* ' .. primaryCategory .. '\n')
		local outputForCaseAlias = { }
		local caseAliases = { }
		for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
			outputForCaseAlias[caseInfo.byYear] = '** ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n'
			table.insert(caseAliases, caseInfo.byYear)
		end
		table.sort(caseAliases, sortByLastPart)
		for caseAliasIndex, caseAlias in pairs(caseAliases) do
			table.insert(outputBuffer, outputForCaseAlias[caseAlias])
		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 primaryCategory = config.arbCaseAliasInfo.extractPrimaryKey(alias)
    if (primaryCategory == nil) then
    	return alias
    end

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

	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

	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