Aller au contenu

Module:Utilisateur:Ménestor/1

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[créer] [purger]
-- MODULE DE TEST DE L'UTILISATEUR MÉNESTOR



-- Initialisation de la table principale du module
local p = {}

-- Chargement des données des préfectures et des circonscriptions
local data = mw.loadData('Module:Utilisateur:Ménestor/2')



-- Fonctions utilitaires

local function erreur(message)
	return string.format('<strong class="error">%s</strong>', message)
end

local function obtenirDate()
	local listeMois = { 
		[1] = "janvier", [2] = "février", [3] = "mars", 
		[4] = "avril", [5] = "mai", [6] = "juin",
		[7] = "juillet", [8] = "août", [9] = "septembre",
		[10] = "octobre", [11] = "novembre", [12] = "décembre",
	}
	local today = os.date('*t')
	return today.day .. ' ' .. listeMois[today.month] .. ' ' .. today.year
end



-- Fonctions communes aux mises à jour des circonscriptions et des listes

local function obtenirPrefecture()
	local titre = mw.title.getCurrentTitle().text
	local prefecture = titre:match("de%s(%S+)$") or titre:match("d'(%S+)$")
	return prefecture
end

local function colonnes()
	local titre = mw.title.getCurrentTitle().text
	if titre:find("Liste des députés", 1, true) then
		return '! scope="col" | Circonscription\n! scope="col" colspan="2" | Député\n! scope="col" | Parti politique'
	else
		return '! scope="col" | [[Liste des législatures japonaises|Législature]]\n! scope="col" | Début de mandat\n! scope="col" | Fin de mandat\n! scope="col" | [[Député]] élu\n! scope="col" colspan="2" | [[Liste des partis politiques au Japon|Parti politique]]'
	end
end

local function obtenirId(prefecture, id_type)
	local alt = data.id[prefecture]
	return alt[id_type]
end

local function nomPref(prefecture, id_nom)
	local determinant = "la "
	local nom_min = "préfecture "
	local nom_maj = "Préfecture "
	local base = "de " .. prefecture
	if prefecture:match("^[AEIOŌ]") then
		base = "d'" .. prefecture
	end
	local combinaison = {
		["base"] = base,
		["nmin"] = nom_min .. base,
		["nmaj"] = nom_maj .. base,
		["complet"] = determinant .. nom_min .. base,
	}
	return combinaison[id_nom]
end



-- Fonctions spécifiques à la mise à jour des circonscriptions

local function obtenirNumCirco()
	local numeros = {
	    ["première"] = 1,
	    ["deuxième"] = 2,
	    ["troisième"] = 3,
	    ["quatrième"] = 4,
	    ["cinquième"] = 5,
	    ["sixième"] = 6,
	    ["septième"] = 7,
	    ["huitième"] = 8,
	    ["neuvième"] = 9,
	    ["dixième"] = 10,
	    ["onzième"] = 11,
	    ["douzième"] = 12,
	    ["treizième"] = 13,
	    ["quatorzième"] = 14,
	    ["quinzième"] = 15,
	    ["seizième"] = 16,
	    ["dix-septième"] = 17,
	    ["dix-huitième"] = 18,
	    ["dix-neuvième"] = 19,
	    ["vingtième"] = 20,
	    ["vingt-et-unième"] = 21,
	    ["vingt-deuxième"] = 22,
	    ["vingt-troisième"] = 23,
	    ["vingt-quatrième"] = 24,
	    ["vingt-cinquième"] = 25,
	    ["vingt-sixième"] = 26,
	    ["vingt-septième"] = 27,
	    ["vingt-huitième"] = 28,
	    ["vingt-neuvième"] = 29,
	    ["trentième"] = 30
	}
	
	local titre = mw.title.getCurrentTitle().text
	local ordinal = titre:match("^(.-)%s+circonscription"):lower()
	local numero = numeros[ordinal]
	
	return numero
end

local function division(prefecture)
	local debut = "|nom de division    = Préfecture\n|division           = [["
	if prefecture == 'Tokyo' or prefecture == 'Hokkaidō' then
		return debut .. prefecture .. "]]"
	else
		return debut .. nomPref(prefecture, 'nmaj') .. "|" .. prefecture .. "]]"
	end
end

local function electorat(prefecture, num_circo, jma)
	local circo = prefecture .. num_circo
	local electeurs = data.pop[circo]
	local debut = "|électeurs          = "
	local milieu = "<ref>{{Lien web|langue = ja|auteur institutionnel = [[Ministère des Affaires intérieures et des Communications]]|titre = 衆議院小選挙区別選挙人名簿及び在外選挙人名簿登録者数(選挙区順)|url = https://www.soumu.go.jp/main_content/000984242.xlsx|format = xls|site = soumu.go.jp|date = 24 décembre 2024|consulté le = "
	local fin = "}}.</ref>\n|électeurs-année    = 2024"
	if electeurs then
		return debut .. electeurs .. milieu .. jma .. fin
	else
		return erreur('Préfecture ou circonscription non reconnue')
	end
end

local function refTableau(prefecture, jma)
	local pref_kanji = obtenirId(prefecture, 'ja')
	local num_pref = obtenirId(prefecture, 'num')
	if pref_kanji and num_pref then	
		local debut = '<ref>{{Lien web|langue = ja|auteur = Taku Sugawara|titre = '
		local milieu = 'の国会議員|url = https://kokkai.sugawarataku.net/giin/dmp'
		local fin = '.html|site = kokkai.sugawarataku.net|consulté le = ' .. jma .. '}}.</ref>'
		return debut .. pref_kanji .. milieu .. num_pref .. fin
	else
		return erreur('Préfecture non reconnue')
	end
end

local function voirAussi(prefecture)
	local debut = "* [[Liste des députés de "
	if prefecture == 'Tokyo' then
		return debut .. "Tokyo]]"
	else
		return debut .. nomPref(prefecture, 'complet') .. "]]"
	end
end



-- Fonctions spécifiques à la mise à jour des listes

local function legislature(prefecture, num_legis, jma)
	local num_pref = obtenirId(prefecture, 'num')
	if num_pref then
		if num_pref:match("^[0]") then
			num_pref = mw.ustring.sub(num_pref, 2)
		end
		local debut49 = "== [[Élections législatives japonaises de 2021|{{49e}} législature]] (2021-2024) ==\nAu cours de la {{"
		local debut50 = "== [[Élections législatives japonaises de 2024|{{50e}} législature]] (depuis 2024) ==\nAu cours de la {{"
		local debut = (num_legis == "50" and debut50) or (num_legis == "49" and debut49) or "Au cours de la {{"
		local inter1 = "e|législature}}, les députés de "
		local nom_pref = nomPref(prefecture, 'complet')
		if prefecture == 'Tokyo' then
			nom_pref = 'Tokyo'
		end
		local verbe = num_legis == "50" and " sont " or " furent "
		local inter2 = "les suivants<ref>{{Lien web|langue = ja|auteur = Taku Sugawara|titre = "
		local inter3 = "期衆議院議員一覧(選挙区順)|url = https://kokkai.sugawarataku.net/giin/erl0"
		local inter4 = ".html#s"
		local inter5 = "|site = kokkai.sugawarataku.net|consulté le = "
		local fin = "}}.</ref> :"
		return debut .. num_legis .. inter1 .. nom_pref .. verbe .. inter2 .. num_legis .. inter3 .. num_legis .. inter4 .. num_pref .. inter5 .. jma .. fin
	else
		return erreur('Préfecture non reconnue')
	end
end

local function annexes(prefecture)
	local pref_kanji = obtenirId(prefecture, 'ja')
	local num_pref = obtenirId(prefecture, 'num')
	if pref_kanji and num_pref then
		local debut = [=[== Notes et références ==
{{Références}}

== Voir aussi ==
=== Articles connexes ===]=]
		local inter0a = ''
		local inter0b = "\n* [[Circonscription électorale "
		local inter1a = "]]\n\n"
		local inter1b = [=[=== Liens externes ===
* {{Lien web|langue = ja|auteur = Taku Sugawara|titre = ]=]
		local inter2a = "の国会議員|traduction titre = Membres de la Diète de "
		local nom_pref = nomPref(prefecture, 'complet')
		if prefecture == "Tokyo" or prefecture == "Hokkaidō" then
			nom_pref = prefecture
		end
		local inter3 = "|url = https://kokkai.sugawarataku.net/giin/dmp"
		local fin = ".html|site = kokkai.sugawarataku.net}}."
		if data.pr[prefecture] then
			inter0a = "\n* [[" .. data.pr[prefecture] .. "]]"
		end
		return debut .. inter0a .. inter0b .. nomPref(prefecture, 'base') .. inter1a .. inter1b .. pref_kanji .. inter2a .. nom_pref .. inter3 .. num_pref .. fin
	else
		return erreur('Préfecture non reconnue')
	end
end



-- Fonction principale

function p.maj(frame)
	local pframe = frame:getParent()
	local args = pframe.args
	local section = args[1]
	
	if section == "c" then
		return colonnes()
		
	elseif section == "d" then
		local prefecture = obtenirPrefecture()
		return division(prefecture)
		
	elseif section == "e" then
		local prefecture = obtenirPrefecture()
		local num_circo = obtenirNumCirco()
		local jma = obtenirDate()
		return electorat(prefecture, num_circo, jma)
		
	elseif section == "i" then
		return "trente [[circonscriptions législatives du Japon|circonscriptions législatives]]"
		
	elseif section == "l" then
		if args[2] then
			local prefecture = obtenirPrefecture()
			local jma = obtenirDate()
			return legislature(prefecture, args[2], jma)
		else
			return erreur('N° de législature manquant')
		end
		
	elseif section == "m" then
		return '! scope="col" | Circonscription\n! scope="col" colspan="2" | Député\n! scope="col" | Parti politique\n! scope="col" | Mandat'
		
	elseif section == "t" then
		local prefecture = obtenirPrefecture()
		local jma = obtenirDate()
		return refTableau(prefecture, jma)
		
	elseif section == "v" then
		local prefecture = obtenirPrefecture()
		return voirAussi(prefecture)
		
	elseif section == "w" then
		return '|largeur=1px'
		
	elseif section == "x" then
		local prefecture = obtenirPrefecture()
		return annexes(prefecture)
		
	else
		return erreur('Code de section manquant ou inconnu')
		
	end
	
end

return p