DC Database
Advertisement

Documentation for this module may be created at Module:ComicsInfobox/Citizenship/doc

local valid = {
  ["Abysmian"] = "Abysmians",
  ["Afghani"] = "Afghans",
  ["African"] = "Africans",
  ["American"] = "Americans",
  ["Amerikan"] = "Amerikans",
  ["Amazon"] = "Amazons",
  ["Angolan"] = "Angolans",
  ["Apokoliptian"] = "Apokoliptians",
  ["Argentinian"] = "Argentinians",
  ["Armenian"] = "Armenians",
  ["Asgardian"] = "Asgardians",
  ["Atlantean"] = "Atlanteans",
  ["Attilan"] = "Attilans",
  ["Australian"] = "Australians",
  ["Austrian"] = "Austrians",
  ["Azanian"] = "Azanians",
  ["Aztek"] = "Azteks",
  ["Balkan"] = "Balkans",
  ["Belarusian"] = "Belarusians",
  ["Belgian"] = "Belgians",
  ["Bessarovian"] = "Bessarovians",
  ["Bhutranian"] = "Bhutranians",
  ["Bialyan"] = "Bialyans",
  ["Borgonian"] = "Borgonians",
  ["Bosnian"] = "Bosnians",
  ["Brazilian"] = "Brazilians",
  ["British"] = "Brits",
  ["Cambodian"] = "Cambodians",
  ["Canaanite"] = "Canaanites",
  ["Canadian"] = "Canadians",
  ["Carib"] = "Caribs",
  ["Chinese"] = "Chinese",
  ["Colombian"] = "Colombians",
  ["Congolese"] = "Congolese",
  ["Cooperative"] = "Cooperative",
  ["Costa Verdean"] = "Costa Verdeans",
  ["Croatoan"] = "Croatoans",
  ["Cuban"] = "Cubans",
  ["Czechoslovakian"] = "Czechoslovakians",
  ["Danish"] = "Danes",
  ["Delanzan"] = "Delanzans",
  ["Delvadian"] = "Delvadians",
  ["Diabloverdan"] = "Diabloverdans",
  ["Dominican"] = "Dominicans",
  ["Dutch"] = "Dutch",
  ["Egyptian"] = "Egyptians",
  ["English"] = "English",
  ["Eternal"] = "Eternals",
  ["Ethiopian"] = "Ethiopians",
  ["European"] = "Europeans",
  ["Feitheran"] = "Feitherans",
  ["Filipino"] = "Filipinos",
  ["Finnish"] = "Fins",
  ["French"] = "French",
  ["Gamorran"] = "Gamorrans",
  ["Gardevian"] = "Gardevians",
  ["Genesisian"] = "Genesisians",
  ["Georgian"] = "Georgians",
  ["German"] = "Germans",
  ["Ghanaian"] = "Ghanaians",
  ["Ghudazan"] = "Ghudazans",
  ["Gorilla City Citizen"] = "Gorilla City Citizens",
  ["Greek"] = "Greeks",
  ["Guatemalan"] = "Guatemalans",
  ["Haitian"] = "Haitians",
  ["Hasaraguan"] = "Hasaraguans",
  ["Hawaiian"] = "Hawaiians",
  ["Hellion"] = "Hellions",
  ["Hungarian"] = "Hungarians",
  ["Hun"] = "Huns",
  ["Icelandic"] = "Icelanders",
  ["Ilandian"] = "Ilandians",
  ["Indian"] = "Indians",
  ["Indonesian"] = "Indonesians",
  ["Inniversian"] = "Inniversians",
  ["Iranian"] = "Iranians",
  ["Iraqi"] = "Iraqis",
  ["Irish"] = "Irish",
  ["Israeli"] = "Israelis",
  ["Israelite"] = "Israelites",
  ["Italian"] = "Italians",
  ["Jamaican"] = "Jamaicans",
  ["Japanese"] = "Japanese",
  ["Jarhanpurian"] = "Jarhanpurians",
  ["Kandorian"] = "Kandorians",
  ["Karlovnan"] = "Karlovnans",
  ["Kaznian"] = "Kaznians",
  ["Kenyan"] = "Kenyans",
  ["Kahndaqi"] = "Kahndaqis",
  ["Korean"] = "Koreans",
  ["Koran"] = "Korans",
  ["Kravian"] = "Kravians",
  ["K'un-L'unan"] = "K'un-L'unans",
  ["Laotian"] = "Laotians",
  ["Latkovian"] = "Latkovians",
  ["Latverian"] = "Latverians",
  ["Libyan"] = "Libyans",
  ["Lithuanian"] = "Lithuanians",
  ["M'Changan"] = "M'Changans",
  ["Macedonian"] = "Macedonians",
  ["Malaysian"] = "Malaysians",
  ["Markovian"] = "Markovians",
  ["Mayan"] = "Mayans",
  ["Mbangawian"] = "Mbangawians",
  ["Mexican"] = "Mexicans",
  ["Modoran"] = "Modorans",
  ["Mongolian"] = "Mongols",
  ["Mordanian"] = "Mordanians",
  ["Morlaidhan"] = "Morlaidhans",
  ["Moroccan"] = "Moroccans",
  ["Morovian"] = "Morovians",
  ["Mtamban"] = "Mtambans",
  ["Narobian"] = "Narobians",
  ["Native American"] = "Native Americans",
  ["Neosian"] = "Neosians",
  ["New Canaanite"] = "New Canaanites",
  ["New Zealander"] = "New Zealanders",
  ["Nicaraguan"] = "Nicaraguans",
  ["Nigerian"] = "Nigerians",
  ["North Korean"] = "North Koreans",
  ["Norwegian"] = "Norwegians",
  ["Nova Roman"] = "Nova Romans",
  ["Oan"] = "Oans",
  ["Olympian"] = "Olympians",
  ["Pakistani"] = "Pakistanis",
  ["Palestinian"] = "Palestinians",
  ["Peruvian"] = "Peruvians",
  ["Pokolistani"] = "Pokols",
  ["Polish"] = "Poles",
  ["Polynesian"] = "Polynesians",
  ["Puerto Rican"] = "Puerto Ricans",
  ["Pyromanian"] = "Pyromanians",
  ["Quraci"] = "Quracis",
  ["Rimborian"] = "Rimborians",
  ["Roman"] = "Romans",
  ["Romanian"] = "Romanians",
  ["Romiroan"] = "Romiroans",
  ["Russian"] = "Russians",
  ["Samoan"] = "Samoans",
  ["San Diabloan"] = "San Diabloans",
  ["Santa Priscan"] = "Santa Priscans",
  ["Saudi Arabian"] = "Saudi Arabians",
  ["Scandinavian"] = "Scandinavians",
  ["Scottish"] = "Scots",
  ["Skartarian"] = "Skartarians",
  ["Sligs"] = "Sligs",
  ["Slorenian"] = "Slorenians",
  ["Somalian"] = "Somalians",
  ["South African"] = "South Africans",
  ["South Korean"] = "South Koreans",
  ["Soviet"] = "Soviets",
  ["Spanish"] = "Spanish",
  ["Swedish"] = "Swedes",
  ["Swiss"] = "Swiss",
  ["Sudanese"] = "Sudanese",
  ["Symkarian"] = "Symkarians",
  ["Syrian"] = "Syrians",
  ["Taiwanese"] = "Taiwanese",
  ["Thai"] = "Thais",
  ["Tibetan"] = "Tibetans",
  ["Tierra Verdean"] = "Tierra Verdeans",
  ["Trans-Sabalian"] = "Trans-Sabalians",
  ["Transbelvan"] = "Transbelvans",
  ["Transian"] = "Transians",
  ["Transylvanian"] = "Transylvanians",
  ["Trezygstanian"] = "Trezygstanians",
  ["Trojan"] = "Trojans",
  ["Tropidoran"] = "Tropidorans",
  ["Tynandan"] = "Tynandans",
  ["Tundan"] = "Tundans",
  ["Tunisian"] = "Tunisians",
  ["Turkish"] = "Turks",
  ["Ugandan"] = "Ugandans",
  ["Ukrainian"] = "Ukrainians",
  ["United Planets Citizen"] = "United Planets Citizens",
  ["Venegerian"] = "Venegerians",
  ["Venezuelan"] = "Venezuelans",
  ["Vietnamese"] = "Vietnamese",
  ["Vlatavan"] = "Vlatavans",
  ["Wakandan"] = "Wakandans",
  ["Welsh"] = "Welsh",
  ["Wild Lander"] = "Wild Landers",
  ["Xibalban"] = "Xibalbans",
  ["Yugoslavian"] = "Yugoslavs",
  ["Zambesian"] = "Zambesians",
  ["Zambian"] = "Zambians",
  ["Zandian"] = "Zandians",
  ["Zanzibari"] ="Zanzibaris",
  ["Zenoshan"] = "Zenoshans",

}


local substitutes = {
    ["abysmia"] = "Abysmian",
    ["afghan"] = "Afghani",
    ["africa"] = "African",
    ["albania"] = "Albanian",
    ["america"] = "American",
    ["amerika"] = "Amerikan",
    ["amazon"] = "Amazon",
    ["amazonian"] = "Amazon",
    ["angola"] = "Angolan",
    ["apokolips"] = "Apokoliptian",
    ["argentina"] = "Argentinian",
    ["armenia"] = "Armenian",
    ["asia"] = "Asian",
    ["asian american"] = "American",
    ["asian-american"] = "American",
    ["asgard"] = "Asgardian",
    ["atlantis"] = "Atlantean",
    ["attilan"] = "Attilan",
    ["austanburg"] = "Austanburger",
    ["austrailia"] = "Australian",
    ["austria"] = "Austrian",
    ["azania"] = "Azanian",
    ["aztek civilization"] = "Aztek",
    ["britain"] = "British",
    ["brits"] = "British",
    ["great britain"] = "British",
    ["balkan"] = "Balkan",
    ["belrusia"] = "Belarusian",
    ["bessarovia"] = "Bessarovian",
    ["bialyan"] = "bialyan",
    ["belgium"] = "Belgian",
    ["borgonia"] = "Borgonian",
    ["bosnia"] = "Bosnian",
    ["bosnia and herzgovina"] = "Bosnian",
    ["brazil"] = "Brazilian",
    ["cambodia"] = "Cambodian",
    ["canaan"] = "Canaanite",
    ["canada"] = "Canadian",
    ["carib"] = "Carib",
    ["caribbean"] = "Carib",
    ["china"] = "Chinese",
    ["colombia"] = "Colombian",
    ["congo"] = "Congolese",
    ["democratic republic of the congo"] = "Congolese", 
    ["republic of the congo"] = "Congolese",
    ["cooperative"] = "Cooperative",
    ["costa verde"] = "Costa Verdean",
    ["croatoa"] = "Croatoan",
    ["cuba"] = "Cuban",
    ["czechoslovakia"] = "Czechoslovakian",
    ["danish"] = "Danish",
    ["delanza"] = "Delanzan",
    ["denmark"] = "Danish",
    ["delvadia"] = "Delvadian",
    ["the dominican republic"] = "Dominican",
    ["dominican republic"] = "Dominican",
    ["egypt"] = "Egyptian",
    ["england"] = "English",
    ["eternals"] = "Eternal",
    ["eternal"] = "Eternal",
    ["europe"] = "European",
    ["ethopia"] = "Ethiopian",
    ["feithera"] = "Feitheran",
    ["feitheran"] = "Feitheran",
    ["finnish"] = "Finnish",
    ["finland"] = "Finnish",
    ["french"] = "French",
    ["france"] = "French",
    ["united kingdom"] = "British",
    ["brit"] = "British",
    ["great britain"] = "British",
    ["gamorra"] = "Gamorran",
    ["gardevia"] = "Gardevian",
    ["new genesis"] = "Genisisian",
    ["georgia"] = "Georgian",
    ["georgia (asia)"] = "Georgian",
    ["germany"] = "German",
    ["ghana"] = "Ghanaian",
    ["ghudaza"] = "Ghudazan",
    ["gorilla city"] = "Gorilla City Citizen",
    ["greece"] = "Greek",
    ["guatemala"] = "Guatemalan",
    ["haiti"] = "Haitian",
    ["hasaragua"] = "Hasaraguan",
    ["hawaii"] = "Hawaiian",
    ["hell"] = "Hellion",
    ["holland"] = "Dutch",
    ["hungary"] = "Hungarian",
    ["hunnic empire"] = "Huns",
    ["iceland"] = "Icelandic",
    ["ilandia"] = "Ilandian",
    ["india"] = "Indian",
    ["indonesia"] = "Indonesian",
    ["iran"] = "Iranian",
    ["iraq"] = "Iraqi",
    ["ireland"] = "Irish",
    ["israel"] = "Israeli",
    ["italy"] = "Italian",
    ["jamaica"] = "Jamaican",
    ["japan"] = "Japanese",
    ["jarhanpur"] = "Jarhanpurian",
    ["kahndaq"] = "Kahndaqi",
    ["karlovna"] = "Karlovnan",
    ["korans"] = "Koran",
    ["kandor"] = "Kandorian",
    ["kaznia"] = "Kaznian",
    ["korea"] = "Korean",
    ["kenyan"] = "Kenyan",
    ["kenyans"] = "Kenyan",
    ["kenya"] = "Kenyan",
    ["kingdom of israel"] = "Israelite",
    ["kravia"] = "Kravian",
    ["laos"] = "Laotian",
    ["latkovia"] = "Latkovian",
    ["latkovia (amalgam universe)"] = "Latkovian",
    ["latveria"] = "Latverian",
    ["libya"] = "Libyan",
    ["lithuania"] = "Lithuanian",
    ["m'changa"] = "M'Changan",
    ["macedonia"] = "Macedonian",
    ["malaysian"] = "Malaysian",
    ["markovia"] = "Markovian",
    ["markovians"] = "Markovian",
    ["mayan civilization"] = "Mayan",
    ["mbanangawi"] = "Mbangawian",
    ["mexico"] = "Mexican",
    ["mexicans"] = "Mexican",
    ["modorans"] = "Modoran",
    ["modora"] = "Modoran",
    ["morlaidh"] = "Morlaidhan",
    ["mongolia"] = "Mongolian",
    ["mongolians"] = "Mongolian",
    ["monk"] = "Monk",
    ["mordania"] = "Mordanian",
    ["morocco"] = "Moroccan",
    ["moroccans"] = "Moroccan",
    ["morovia"] = "Morovian",
    ["morovians"] = "Morovian",
    ["mtambans"] = "Mtamban",
    ["aboriginal american"] = "Native American",
    ["native"] = "Native American",
    ["neos"] = "Neosian",
    ["norweigan"] = "Norwegian",
    ["norwegians"] = "Norwegian",
    ["narobia"] = "Narobian",
    ["new zealand"] = "New Zealander",
    ["dutch"] = "Dutch",
    ["netherlands"] = "Dutch",
    ["nicaragua"] = "Nicaraguan",
    ["nigeria"] = "Nigerian",
    ["north korea"] = "North Korean",
    ["oa"] = "Oan",
    ["olympus"] = "Olympian",
    ["olympia"] = "Olympian",
    ["pakistan"] = "Pakistani",
    ["peru"] = "Peruvian",
    ["philippines"] = "Filipino",
    ["the philippines"] = "Filipino",
    ["pokolistan"] = "Pokolistani",
    ["poland"] = "Polish",
    ["polynesia"] = "Polynesian",
    ["puerto rica"] = "Puerto Rican",
    ["pyromania"] = "Pyromanian",
    ["pyroman"] = "Pyromanian",
    ["qurac"] = "Quraci",
    ["rimbor"] = "Rimborian",
    ["romania"] = "Romanian",
    ["rome"] = "Roman",
    ["romiro"] = "Romiroan",
    ["russia"] = "Russian",
    ["santa prisca"] = "Santa Priscan",
    ["samoa"] = "Samoan",
    ["saudi arabia"] = "Saudi Arabian",
    ["scandinavia"] = "Scandinavian",
    ["scotland"] = "Scottish",
    ["skartaris"] = "Skartarian",
    ["slorenia"] = "Slorenian",
    ["somalia"] = "Somalian",
    ["south africa"] = "South African",
    ["south korea"] = "South Korean",
    ["soviet union"] = "Soviet",
    ["spain"] = "Spanish",
    ["sudan"] = "Sudanese",
    ["sweden"] = "Swedish",
    ["switzerland"] = "Swiss",
    ["symkaria"] = "Symkarian",
    ["syria"] = "Syrian",
    ["themyscira"] = "Amazon",
    ["themyscurian"] = "Amazon",
    ["themyscurians"] = "Amazon",
    ["tynanda"] = "Tynandan",
    ["the soviet union"] = "Soviet",
    ["taiwan"] = "Taiwanese",
    ["thailand"] = "Thai",
    ["tibet"] = "Tibetan",
    ["tierra verde"] = "Tierra Verdean",
    ["trans-sabal"] = "Trans-Sabalian",
    ["transbelvia"] = "Transbelvan",
    ["transia"] = "Transian",
    ["transylvania"] = "Transylvanian",
    ["trezygstan"] = "Trezygstanian",
    ["tritonis"] = "Tritonian",
    ["troy"] = "Trojan",
    ["tropidor"] = "Tropidoran",
    ["tundi"] = "Tundan",
    ["tunisia"] = "Tunisian",
    ["turkey"] = "Turkish",
    ["uganda"] = "Ugandan",
    ["usa"] = "American",
    ["us"] = "American",
    ["united states"] = "American",
    ["u.s.a."] = "American",
    ["united states of america"] = "American",
    ["united planets"] = "United Planets Citizen",
    ["united kingdom"] = "British",
    ["ukraine"] = "Ukrainian",
    ["union of soviet socialist republics"] = "Soviet",
    ["soviet union"] = "Soviet",
    ["ussr"] = "Soviet",
    ["u.s.s.r."] = "Soviet",
    ["venezuela"] = "Venezuelan",
    ["venegaria"] = "Venegarian",
    ["vietnam"] = "Vietnamese",
    ["vlatava"] = "Vlatavan",
    ["wales"] = "Welsh",
    ["wild lands"] = "Wild Lander",
    ["xanthua"] = "Xanthuan",
    ["xibalba"] = "Xibalban",
    ["yugoslavia"] = "Yugoslavian",
    ["zambesi"] = "Zambesian",
    ["zambia"] = "Zambian",
    ["zandia"] = "Zandian",
    ["zanzibar"] = "Zanzibari",
    ["zenosha"] = "Zenoshan",
}

citizenship_table = {
	["valid"] = valid,
	["substitutes"] = substitutes
}

----------------------------
-- Libraries of functions --
----------------------------
-- stands for High Frequency
local HF = require('Module:ComicsHF')
-- Parses invocation parameters, trims whitespace, and removes blanks.
local getArgs = require('Dev:Arguments').getArgs
-- Gives the name of the current page. It's expensive, so we only do it once.
-- The _G then makes it global, available to all page functions.
_G.vars = { Pagename = mw.title.getCurrentTitle().text }

----------------------------------------------------------
-- Public functions (called from a Template or article) --
----------------------------------------------------------

-- There is no standalone template, so no public functions.

--------------------------------------------------------
-- Internal functions (used in this and other Modules --
--------------------------------------------------------
function valid:in_database( name )
    if type( self[ name ] ) == 'string' then
        return true
    else
        return nil
    end
end

function valid:pluralize( name )
    if self:in_database ( name ) then
        return self[name]
    else
        -- Brute force method of making a singular plural
        name = name:gsub( 's$', 'es' )
        name = name:gsub( 'x$', 'es' )
        name = name:gsub( 'z$', 'es' )
        name = name:gsub( 'ch$', 'es' )
        name = name:gsub( 'sh$', 'es' )
        name = name:gsub( 'y$', 'ies' )
        name = name:gsub( 'f$', 'ves' )
        name = name:gsub( 'fe$', 'ves' )
        name = name:gsub( '[^s]$', '%1s' )
        return name
    end
end

function valid:link( name )
    return HF.CategoryLink( self:pluralize(name), vars.Pagename, name )
end

function substitutes:in_list( name )
    if type( self[ string.lower( name ) ] ) == 'string' then
        return true
    else
        return nil
    end
end

function substitutes:sub( name )
    if self:in_list( name ) then
        return self[ string.lower( name ) ]
    else
        return nil
    end
end

function substitutes:link( name )
    return HF.CategoryLink( valid[name], vars.Pagename, name )
end

function citizenship_table._Citizenship( field, vars )
    local output = ''
    local o = {}
    -- Check for multiple values separated with commas
    local values = HF.explode( ',', field.Value )
    
    for i, v in ipairs( values ) do
        v = HF.trim( v )
        if valid:in_database( v ) then
            -- Check if it's a valid value with a plural form.
            -- If yes - add category links
            table.insert(o, valid:link( v ) )
        elseif substitutes:sub( v ) then
            -- If it's not valid, check for a direct substitution
            -- If there's one in the database, use the corrected one
            table.insert(o, valid:link( substitutes:sub( v ) ) )
        elseif string.match( v, '%[%[.*%]%]' ) then
            -- If it's already a link, leave it alone.
            table.insert(o, v)
        else
            -- 3. If no substitution is found
            -- fallback to a common grammar rules
            -- and add a page to a Category:Needs valid citizenship
            table.insert( o , valid:link( v ) ..
                HF.Category( "Needs valid citizenship", vars.Pagename )
            )
        end
    end
    
    -- If Value2 or ValueRef is provided
    -- concatenate them to the output
    if not HF.isempty( field.Value2 ) then
        output = output .. " " .. field.Value2
    end
    if not HF.isempty( field.ValueRef ) then
        output = output .. " " .. field.ValueRef
    end
    
    return table.concat(o, ' · ') .. output
end

-------------------------------------------------
-- Output (send it back to whatever called it) --
-------------------------------------------------
return citizenship_table
Advertisement