Jump to content

Module:ArbCaseAlias: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
fix comparison with test year
update list of cases to be sorted by case number for each year
Line 3: Line 3:
-- mw.loadData doesn't support loading data that has function type, so use require
-- mw.loadData doesn't support loading data that has function type, so use require
local config = require('Module:ArbCaseAlias/data')
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


function me.luaListCases(args)
function me.luaListCases(args)
Line 16: Line 23:
for index, primaryCategory in pairs(primaryCategories) do
for index, primaryCategory in pairs(primaryCategories) do
table.insert(outputBuffer, '* ' .. primaryCategory .. '\n')
table.insert(outputBuffer, '* ' .. primaryCategory .. '\n')
local outputForCaseAlias = { }
for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
table.insert(outputBuffer, '** ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n')
outputForCaseAlias[caseInfo.byYear] = '** ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n'
end
local caseAliases = { }
for caseAlias, output in pairs(outputForCaseAlias) do
table.insert(caseAliases, caseAlias)
end
table.sort(caseAliases, sortByLastPart)
for caseAliasIndex, caseAlias in caseAliases do
table.insert(outputBuffer, outputForCaseAlias[caseAlias])
end
end
end
end

Revision as of 10:57, 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')

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

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')
		local outputForCaseAlias = { }
		for caseName, caseInfo in pairs(config.arbCaseAliasInfo.caseInfoFor[primaryCategory]) do
			outputForCaseAlias[caseInfo.byYear] = '** ' .. caseInfo.byYear .. ' — ' .. caseName .. '\n'
		end
		local caseAliases = { }
		for caseAlias, output in pairs(outputForCaseAlias) do
			table.insert(caseAliases, caseAlias)
		end
		table.sort(caseAliases, sortByLastPart)
		for caseAliasIndex, caseAlias in 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 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