Module:ArbCaseAlias
MyWikiBiz, Author Your Legacy — Monday September 01, 2025
Jump to navigationJump to searchDocumentation for this module may be created at Module:ArbCaseAlias/doc
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