Module:CharList: Difference between revisions
From Elwiki
No edit summary |
Tag: Undo |
||
(9 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
-- Main process | -- Main process | ||
function p.main(frame) | function p.main(frame, lang) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local named_list = {} | local named_list = {} | ||
local not_exist = {} | local not_exist = {} | ||
local chars = frame:preprocess('{{:MediaWiki:NavSidebar/Character}}') | lang = lang or args.lang | ||
if lang then lang = '/' .. lang else lang = '' end | |||
local chars = frame:preprocess('{{:MediaWiki:NavSidebar' .. lang .. '/Character}}') | |||
-- Get rid of link wikitext. | -- Get rid of link wikitext. | ||
:gsub('%[%[', ''):gsub('%]%]', '') | :gsub('%[%[', ''):gsub('%]%]', '') | ||
Line 35: | Line 37: | ||
end | end | ||
end | end | ||
local placeholder = '%#!%|' | |||
-- Shift the new table's indexes up after getting rid of the base name. | -- Shift the new table's indexes up after getting rid of the base name. | ||
Line 42: | Line 46: | ||
-- Remove link placeholders. | -- Remove link placeholders. | ||
for k2, v2 in ipairs(named_list[k][i]) do | for k2, v2 in ipairs(named_list[k][i]) do | ||
local name = named_list[k][i][k2]:gsub('</div>', ''):gsub("<div id='nav'>", '') | local name = trim(named_list[k][i][k2]:gsub('</div>', ''):gsub("<div id='nav'>", '')) | ||
named_list[k][i][k2] = | local name_replace = name:gsub(placeholder, ''); | ||
named_list[k][i][k2] = name_replace | |||
-- Create a table of characters with placeholders, marked as not released. | -- Create a table of characters with placeholders, marked as not released. | ||
if string.match(name, | if string.match(name, placeholder) then | ||
table.insert(not_exist, | table.insert(not_exist, name_replace); | ||
end | end | ||
end | end | ||
Line 63: | Line 68: | ||
base_order, named_list, not_exist | base_order, named_list, not_exist | ||
} | } | ||
if args.dump then return dump(char_list) end | |||
return char_list | return char_list |
Latest revision as of 10:53, 24 December 2022
Documentation for this module may be created at Module:CharList/doc
require('Module:CommonFunctions');
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Main process
function p.main(frame, lang)
local args = getArgs(frame)
local named_list = {}
local not_exist = {}
lang = lang or args.lang
if lang then lang = '/' .. lang else lang = '' end
local chars = frame:preprocess('{{:MediaWiki:NavSidebar' .. lang .. '/Character}}')
-- Get rid of link wikitext.
:gsub('%[%[', ''):gsub('%]%]', '')
-- Replace star separators to distinct strings to make it easier.
:gsub('%*%*%*', 'SEP1'):gsub('%*%*', 'SEP2'):gsub('%*', 'SEP3')
local base_order = {}
-- Compose a table out of the string.
chars = split(chars, 'SEP3', true)
table.remove(chars, 1)
for k,v in ipairs(chars) do
chars[k] = split(v, 'SEP2', true)
for k2, v2 in ipairs(chars[k]) do
chars[k][k2] = split(v2, 'SEP1', true);
if #chars[k][k2] == 1 then
local base = chars[k][k2][1]
-- Sort by base names.
if not string.find(base, '%#!') then
chars[k][1] = nil
named_list[base] = chars[k]
-- Save the order of iteration, because Lua doesn't remember it.
table.insert(base_order, trim(base));
end
end
end
end
local placeholder = '%#!%|'
-- Shift the new table's indexes up after getting rid of the base name.
for k, v in pairs(named_list) do
local i = 2
while (i <= #named_list[k]) do
-- Remove link placeholders.
for k2, v2 in ipairs(named_list[k][i]) do
local name = trim(named_list[k][i][k2]:gsub('</div>', ''):gsub("<div id='nav'>", ''))
local name_replace = name:gsub(placeholder, '');
named_list[k][i][k2] = name_replace
-- Create a table of characters with placeholders, marked as not released.
if string.match(name, placeholder) then
table.insert(not_exist, name_replace);
end
end
-- Shifting.
named_list[k][i-1] = named_list[k][i]
i = i + 1
end
named_list[k][#named_list[k]] = nil
-- Remove link placeholders.
end
-- Output point
local char_list = {
base_order, named_list, not_exist
}
if args.dump then return dump(char_list) end
return char_list
end
return p