ElEditors, Interface administrators, Administrators
70,857
edits
No edit summary Tag: Reverted |
Tag: Undo |
||
Line 1: | Line 1: | ||
require('Module:CommonFunctions') | require('Module:CommonFunctions'); | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local p = {} | local p = {} | ||
-- Main process | -- Main process | ||
function p.main(frame) | function p.main(frame, lang) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local | local named_list = {} | ||
local | 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) | |||
local | for k,v in ipairs(chars) do | ||
chars[k] = split(v, 'SEP2', true) | |||
if | 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] | |||
table.insert( | -- 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 | ||
end | end | ||
end | |||
local placeholder = '%#!%|' | |||
-- Shift the new table's indexes up after getting rid of the base name. | |||
local | 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 | |||
if | -- 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 | ||
end | end | ||
-- Shifting. | |||
named_list[k][i-1] = named_list[k][i] | |||
i = i + 1 | |||
end | end | ||
named_list[k][#named_list[k]] = nil | |||
-- Remove link placeholders. | |||
end | end | ||
-- Output point | |||
local | local char_list = { | ||
base_order, named_list, not_exist | |||
} | } | ||
if args.dump then return dump(char_list) end | |||
return | return char_list | ||
end | end | ||
return p | return p |