Module:CharList: Difference between revisions

From Elwiki
No edit summary
(Undo revision 839175 by Ritsu (talk))
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] = trim(name:gsub('%#!%|', ''));
                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, '%#!%|') then
                 if string.match(name, placeholder) then
                     table.insert(not_exist, name)
                     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