« Module:Référence » : différence entre les versions

De Les Archives de Vault-Tec
Kharmitch (discussion | contributions)
Page créée avec « local p = {} -------------------------------------- ----- Fonctions communes ----- -------------------------------------- function buildSentence(sentence, lang)… »
 
Kharmitch (discussion | contributions)
Aucun résumé des modifications
 
(6 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
local p = {}
local p = {}


--------------------------------------
-- Adapte le style de la citation en fonction de la langue
-----    Fonctions communes    -----
function sentence_lang(sentence, lang)
--------------------------------------
if lang ~= "fr" then
 
return string.format("''%s''", sentence)
function buildSentence(sentence, lang)
if lang ~= 'fr' then
return "''" .. sentence .. "''"
else
else
return sentence
return sentence
Ligne 13 : Ligne 10 :
end
end


function p.getArgs(frame)
-- Retourne les arguments entrés par l'utilisateur
function get_args(frame)
local args = {}
local args = {}


Ligne 26 : Ligne 24 :
end
end


--------------------------------------
-- Génère une référence mise en forme automatiquement en
-- fonction du type sélectionné par l'utilisateur.
function p._dialogue(args)
local lang = args["langue"] or "fr"


function p._buildOneReference(args)
local source = args["source"]
local ref = ''
if not source then
 
error("Paramètre source absent")
local type = args['type']
if not type then
return 'Le paramètre type n\'est pas renseigné.'
end
end
local type = type:lower()
 
local game = args["jeu"]
local name = args['nom']
if game then
if name then
game = require("Module:Abréviation").name(game)
ref = '<ref name="' .. name .. '">'
if not game or game == "" then
error("Valeur inconnue du paramètre jeu")
end
else
else
ref = '<ref>'
error("Paramètre jeu absent")
end
end
local lang = args['langue'] or 'fr'
local characters = {}
 
local character
if type == 'conversation' then
for i = 1, 6 do
local game = args['jeu']
character = args['personnage' .. i]
if game then
if not character then
game = require( 'Module:Abréviation' ).name(game)
break
if game == '' then
game = 'jeu ?'
else
game = "''[[" .. game .. "]]''"
end
else
game = 'jeu ?'
end
end
 
table.insert(characters, character)
local character1 = args['personnage1'] or 'personnage1 ?'
end
local character2 = args['personnage2'] or 'personnage2 ?'
 
if #characters == 0 then
ref = ref .. 'Conversation entre ' .. character1 .. ' et ' .. character2 .. ' :'
error("Paramètre personnage absent")
ref = ref .. '<br/>'
end
local sentences = ""
local sentence
local character_index
-- Maximum de 10 phrases possibles
for i = 1, 10 do
-- phrasei.p indique l'index du personnage
-- phrasei.p indique le texte
character_index = args[string.format("phrase%d.p", i)]
sentence = args[string.format("phrase%d.t", i)]
for i = 1, 6 do
if not sentence or not character_index then
local sentence = args['phrase' .. i]
break
if sentence then
end
ref = ref .. '— ' .. buildSentence(sentence, lang) .. '<br/>'
character_index = tonumber(character_index)
else
if not character_index then
break
error(string.format("Paramètre phrase%d.p doit être un nombre", i))
end
end
end
 
character = characters[character_index]
ref = ref .. 'Extrait du fichier ' .. file .. ', ' .. game
if not character then
elseif type == 'document' then
error("Personnage non reconnu")
local quotation = args['citation']
if quotation then
ref = ref .. '«&nbsp;' .. buildSentence(quotation, lang) .. '&nbsp;»<br/>'
end
end
 
local document = args['ouvrage'] or 'ouvrage ?'
sentences = sentences .. tostring(mw.html.create("li")
local author = args['auteur'] or 'auteur ?'
:addClass("reference-dial-row")
local date = args['date'] or 'date ?'
:tag("span")
local publisher = args['éditeur'] or 'éditeur ?'
:addClass("reference-dial-character")
local page = args['page'] or 'page ?'
:wikitext(character .. " —&nbsp;")
:done()
:tag("span")
:addClass("reference-dial-text")
:wikitext(sentence_lang(sentence, lang))
:done()
:allDone()
)
end
ref = ref .. author .. '. \'\'' .. document .. '\'\'. ' .. publisher .. ', ' .. date .. '. pp. ' .. page
if sentences == "" then
error("Paramètre phrase absent")
end
end
 
ref = ref .. '</ref>'
sentences = '<ul class="reference-dial">' .. sentences .. "</ul>"
 
local header = string.format(
return ref
"Conversation extraite du fichier %s, ''[[%s]]''.",
source,
game
)
return header .. sentences
end
end


function p.buildOneReference(frame)
function p.dialogue(frame)
local args = getArgs(frame)
return p._dialogue(get_args(frame))
return p._buildOneReference(args)
end
end


return p
return p

Dernière version du 5 février 2023 à 20:56

La documentation pour ce module peut être créée à Module:Référence/doc

local p = {}

-- Adapte le style de la citation en fonction de la langue
function sentence_lang(sentence, lang)
	if lang ~= "fr" then
		return string.format("''%s''", sentence)
	else
		return sentence
	end
end

-- Retourne les arguments entrés par l'utilisateur
function get_args(frame)
	local args = {}

	local argsParent = frame:getParent().args
	for cle, val in pairs(argsParent) do
		if val then
			args[cle] = mw.text.trim(val)
		end
	end
	
	return args
end

-- Génère une référence mise en forme automatiquement en
-- fonction du type sélectionné par l'utilisateur.
function p._dialogue(args)
	local lang = args["langue"] or "fr"

	local source = args["source"]
	if not source then
		error("Paramètre source absent")
	end
	
	local game = args["jeu"]
	if game then
		game = require("Module:Abréviation").name(game)
		if not game or game == "" then
			error("Valeur inconnue du paramètre jeu")
		end
	else
		error("Paramètre jeu absent")
	end
	
	local characters = {}
	local character
	for i = 1, 6 do
		character = args['personnage' .. i]
		if not character then
			break
		end
		table.insert(characters, character)
	end
	
	if #characters == 0 then
		error("Paramètre personnage absent")
	end
	
	local sentences = ""
	local sentence
	local character_index
	
	-- Maximum de 10 phrases possibles
	for i = 1, 10 do
		-- phrasei.p indique l'index du personnage
		-- phrasei.p indique le texte
		character_index = args[string.format("phrase%d.p", i)]
		sentence = args[string.format("phrase%d.t", i)]
		
		if not sentence or not character_index then
			break
		end
		character_index = tonumber(character_index)
		if not character_index then
			error(string.format("Paramètre phrase%d.p doit être un nombre", i))
		end
		character = characters[character_index]
		if not character then
			error("Personnage non reconnu")
		end
	
		sentences = sentences .. tostring(mw.html.create("li")
			:addClass("reference-dial-row")
			:tag("span")
				:addClass("reference-dial-character")
				:wikitext(character .. " —&nbsp;")
				:done()
			:tag("span")
				:addClass("reference-dial-text")
				:wikitext(sentence_lang(sentence, lang))
				:done()
			:allDone()
		)
	end
		
	if sentences == "" then
		error("Paramètre phrase absent")
	end
	
	sentences = '<ul class="reference-dial">' .. sentences .. "</ul>"
	local header = string.format(
		"Conversation extraite du fichier %s, ''[[%s]]''.",
		source,
		game
	)
	
	return header .. sentences
end

function p.dialogue(frame)
	return p._dialogue(get_args(frame))
end

return p