Difference between revisions of "Module:ArbCaseAlias"
Jump to navigation
Jump to search
blackwiki>Isaacl (fix comparison with test year) |
blackwiki>Isaacl (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 | ||
| − | + | 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
Documentation 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
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