Module:Biblio/Ôvra
La documentation pour ce module peut être créée à Module:Biblio/Ôvra/doc
local Ovra = { }
local Comon = require( 'Module:Biblio/Comon' )
local References = require( 'Module:Biblio/Rèferences' )
local Nombro2texto = require( 'Module:Nombro2tèxto' )
local TableBuilder = require( 'Module:TableBuilder' )
local Lengoua = require( 'Module:Lengoua' )
function Ovra.chapitro( args )
-- validArg renvoie le premier paramètre non vide, ou nil s'ils sont tous vides.
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Comon.validTextArg( args, ... ) end
-- titroChap est un paramètre différent de ceux du modèle ouvrage pour utiliser le même programme
args.numChap = validArg( 'numerô chapitro' )
args.titroChap = validArg( 'titro chapitro', 'chap', 'titro', 'title' )
if args.titro == args.titroChap then
args.titro = false
end
args.titro = validArg( 'titro ôvra', 'ôvra', 'titro', 'title' ) or false
args['numerô chapitro'] = false
args['titro chapitro'] = false
args.chap = false
args['sot-titro chapitro'] = validArg( 'sot-titro chapitro', 'sot-titro' ) or false
args['sot-titro'] = validArg( 'sot-titro ôvra', 'sot-titro' )
if args['sot-titro chapitro'] == args['sot-titro'] then
args['sot-titro'] = false
end
args['lim titro'] = validArg( 'lim titro ôvra', 'lim titro' )
local preface = validArg( 'téta de lévro' )
local otorOvra = validArg( 'ôtors ôvra', 'ôtor ôvra' )
if preface and otorOvra then
args['ôtors ôvra'] = ( validArg( 'ôtors ôvra', 'ôtor ôvra' ) or '' ) .. ' (téta de l. ' .. preface .. ')'
args['téta de lévro'] = ''
end
return Ovra.ovra( args, true )
end
function Ovra.ovra( args, chapitro )
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
-- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
-- librairie table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
-- seule fois en, ignorant les paramètres nil.
local wiki = TableBuilder.new()
-- validArg renvoie le premier paramètre non vide, ou nil s'ils sont tous vides.
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Comon.validTextArg( args, ... ) or false end
local genro = ( chapitro and 'chapitro' ) or 'ôvra'
--Table servant à la catégorisation
args.categ = {}
local formaNormala = not validArg( 'nocat' )
-- Clarification des paramètres nécessaires pour les COinS
args.titro = validArg( 'titro', 'title' )
args['pâges totâles'] = validArg( 'pâges totâles', 'pâges', 'soma' )
args.pages = ''
local limDeDefor = validArg( 'liére en legne', 'url tèxto', 'url', 'tèxto' )
if args.format and not args['format èlèctronico'] and limDeDefor and string.match( args.format,"pdf" ) then
args['format èlèctronico'] = args.format
args.format = false
end
-- span initial (id) et libellé
local spanInitial, spanFinal = Comon.spanInitial ( args, validArg )
wiki.minsert( spanInitial, Comon.libela( args ) )
-- Indication de langue
local endicLengoua, codeLengoua = Comon.endicacionDeLengoua ( args, validArg )
local dir, atributsLengoua
if endicLengoua and endicLengoua ~= '' then
wiki.minsert( endicLengoua, ' ' )
if codeLengoua then
dir = Lengoua.direccionLengoua( codeLengoua )
if dir == 'rtl' then
atributsLengoua = ' lang="' .. codeLengoua .. '" dir="rtl"'
else
dir = nil
atributsLengoua = ' lang="' .. codeLengoua .. '"'
end
end
end
-- Liste des auteurs et de leurs responsabilités (principales et secondaires)
local otor = validArg( 'nom1', 'nom', 'ôtor1', 'ôtor', 'ôtors', 'ôtor enstitucionâl', 'last1', 'last', 'author1', 'author' )
if otor then
if validArg( 'ôtors' ) then
wiki.minsert( args.otors )
else
wiki.minsert( Comon.responsabilitatPrincipala( args, validArg ) )
end
local cotor = validArg( 'co-ôtor', 'côtors', 'côtor', 'coauthors' )
if cotor then
wiki.minsert( ', ', cotor )
end
wiki.minsert( Comon.responsabilitatSecondera( args, validArg ), ', ' )
end
-- Pour le modèle chapitro : affichage du chapitro
if chapitro then
if args.numChap then
wiki.minsert( Comon.chap, args.numChap, ' ' )
end
if args.titroChap then
wiki.minsert( '<cite style="font-style:normal"', atributsLengoua, '>« ', args.titroChap )
if args['sot-titro chapitro'] then
wiki.minsert( ' : ', args['sot-titro chapitro'] )
end
wiki.minsert( ' »</cite>' )
elseif formaNormala then
wiki.minsert( '<span class="error">[[Modèlo:Chapitro|{{Chapitro}}]] : paramètro <code>titro chapitro</code> manquent</span>' )
args.categ.titroChapitro = true
end
wiki.minsert( ', dedens ' )
local otorOvra = validArg( 'ôtors ôvra', 'ôtor ôvra' )
if otorOvra then
wiki.minsert( otorOvra, ', ' )
end
end
-- Titro
if args.titro then
local titro, sotTitro = args.titro, validArg( 'sot-titro' )
-- retrait italique, ne doit normalement pas être mis mais l'erreur est très fréquente
titro = titro:gsub( "^''%f[^'](.+)%f[']''$", "%1" )
if sotTitro then
-- retrait italique, erreur moins fréquente avec les sous-titres mais autant être consistant
sotTitro = sotTitro:gsub( "^''%f[^'](.+)%f[']''$", "%1" )
titro = titro .. ' : ' .. sotTitro
end
titro = Comon.fusionTextoLim( titro, args['lim titro'], args.categ )
local grafia = ' class="etalico"'
if Lengoua.pasLatin( titro ) then
grafia = ' style="font-style:normal"'
end
wiki.minsert( '<cite', grafia, atributsLengoua, '>', titro, '</cite>' )
elseif formaNormala then
if chapitro then
args.categ.titroOvra = true
if args.categ.titroChapitro then
wiki.minsert( '<span class="error">paramètro <code>titro ôvra</code> manquent</span>' )
else
wiki.minsert( '<span class="error">[[Modèlo:Chapitro|{{Chapitro}}]] : paramètro <code>titro ôvra</code> manquent</span>' )
end
else
args.categ.titro = true
wiki.minsert( '<span class="error">[[Modèle:Ôvra|{{Ôvra}}]] : paramètro <code>titro</code> manquent</span>' )
end
end
-- Titre original et traducteur
local original = validArg( 'titro originâl', 'titro vo', 'traduccion titro' )
if original and original ~= args.titro then
if validArg( 'lengoua originâla' ) then
wiki.minsert( ' [« ', Lengoua.lengoua{ args['lengoua originâla'], original }, ' »]' )
else
wiki.minsert( ' [« ', original, ' »]' )
end
end
if not otor then
local responsabilitatSecondera = Comon.responsabilitatSecondera( args, validArg )
if responsabilitatSecondera then
wiki.minsert( ' ', responsabilitatSecondera )
end
end
-- Volume, tome
local volumo = validArg( 'volumo', 'vol' )
if volumo then
wiki.minsert( ', ', Comon.vol, volumo )
end
local levro = validArg( 'lévro' )
if levro then
wiki.minsert( ', ', Comon.levro, levro )
end
local titroVolLevro = validArg( 'titro volumo', 'titro lévro' )
if titroVolLevro then
if volumo or levro then
wiki.minsert( ' : ' )
else
wiki.minsert( ', ' )
end
if codeLengoua then
wiki.minsert( Lengoua.lengoua{ codeLengoua, titroVolLevro, class='etalico' } )
else
wiki.minsert( '<span class="etalico">', titroVolLevro, '</span>' )
end
local tradTitroVolLevro = validArg( 'traduccion titro volumo', 'traduccion titro lévro' )
if tradTitroVolLevro then
wiki.minsert( ' [« ', tradTitroVolLevro, ' »]' )
end
end
-- Nature du document et établissement (pour les thèses...)
local natura = validArg( 'natura ôvra' )
if natura then
wiki.minsert( ' (', natura, ')')
end
local etablissement = validArg( 'ètablissement' )
if etablissement then
wiki.minsert( ', ', etablissement )
end
-- Lieu et éditeur
local endret = validArg( 'endrêt', 'locacion' )
if endret then
wiki.minsert( ', ', endret )
end
local editor = validArg( 'èditor', 'èdicion', 'edition', 'publisher' )
if editor then
local limEditor = validArg( 'lim èditor' )
wiki.minsert( ', ', Comon.fusionTextoLim( editor, limEditor, args.categ ) )
end
-- Collecion et numéro
local coleccion = validArg( 'colèccion', 'series' )
if coleccion then
wiki.minsert( ', ', Comon.col, '« ', coleccion )
local seria = validArg( 'sèria' )
if seria then
wiki.minsert( ' / ', seria )
end
wiki.minsert( ' »' )
end
local numeroColeccion = validArg( 'numerô dedens colèccion', 'numerô dedens la colèccion' )
if numeroColeccion then
wiki.minsert( ' (', Comon.numero, numeroColeccion, ')' )
end
-- Date, réimpression et éditions
local an = validArg( 'an', 'date', 'year' )
if an then
local lrm
if Lengoua.pasLatin( wiki.concat() ) then
lrm = '‎'
end
wiki.minsert( ',', lrm, ' ', Comon.enscripcionData( args ) )
-- le &lrm est une marque de texte gauche à droite, utile si le texte qui précède est en droite à gauche (arabe, hébreux...)
end
local publi = validArg( 'remprèssion', 'publi' )
if publi then
wiki.minsert( ' (', Comon.rempr, publi, ')' )
end
local numeroEdicion = validArg( "numerô d’èdicion", "numerô èdicion" )
if numeroEdicion then
wiki.minsert( ', ', Nombro2texto.ordenal( numeroEdicion, true ), Comon.ed )
end
local premiereEdicion = validArg( 'an premiére èdition', 'origyear' )
if premiereEdicion then
wiki.minsert( ' (', Comon.premiere, Comon.ed, ' ', premiereEdicion, ')' )
end
-- Pages et format
local pages = validArg( 'pâges totâles', 'pâges', 'soma' )
if pages then
wiki.minsert( ', ', pages, Comon.nbp )
end
local format = validArg( 'format lévro', 'format' )
if format then
wiki.minsert( ', ', format )
end
-- Références
local reference = validArg( 'rèference' )
if reference then
wiki.minsert( ' ', Comon.detalyEdicions( reference ) )
end
local refSimpla = validArg( 'rèference simplifiâye', 'rèf', 'ref' )
if refSimpla then
wiki.minsert( ' ', Comon.detalyEdicion( refSimpla ) )
end
-- Lien vers l'ouvrage en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
wiki.minsert( References.afichajoLimsDeDefor( args, validArg, true, false ) )
-- consulté le n'est plus affiché, voir [[Discussion_modèlo:Ôvra#Èvolucion documentacion]]
-- Précision sur le passage concerné
local partia = validArg( 'partia' )
if partia then
if string.match ( partia, '^[%dIVXLCM]+$' ) then
wiki.minsert( ', partia ', partia )
elseif string.match ( partia, '^[ivxlcmIVXLCM]+$' ) then
wiki.minsert( ', partia ', Comon.romen( partia ) )
else
wiki.minsert( ', ', partia )
end
end
local numeroChapitro = validArg( 'numerô chapitro', 'numerô' )
if numeroChapitro then
wiki.minsert( ', ', Comon.chap, numeroChapitro )
end
local titroChapitro = validArg( 'titro chapitro', 'chap', 'chapitro', 'chapter' )
if titroChapitro then
if numeroChapitro then
titroChapitro = ' (« ' .. titroChapitro .. ' »)'
else
titroChapitro = ', « ' .. titroChapitro .. ' »'
end
if codeLengoua then
titroChapitro = Lengoua.lengoua{ codeLengoua, titroChapitro }
end
wiki.minsert( titroChapitro )
local tradTitroChap = validArg( 'traduccion titro chapitro' )
if tradTitroChap then
wiki.minsert( ' [« ', tradTitroChap, ' »]' )
end
end
local passajo = validArg( 'passâjo', 'pâge' )
if passajo then
if string.match ( passajo, '^[%dIVXLCM]' ) then
wiki.minsert( ', ', Comon.page, passajo )
else
wiki.minsert( ', ', passajo )
end
end
-- Ajout des méthadonnées COinS (ContextObjects in Spans)
wiki.minsert( Comon.COinS( args, validArg, genro ) )
-- Fin du span (id) et de la description de l'ouvrage
wiki.minsert( spanFinal )
-- Plume "Ôvra utilisé pour la rédaction de l'article"
if validArg( 'ploma' ) then
local patternPonct = '[,.;:!?]$'
local ponctuacion = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
if not ponctuacion then
wiki.minsert( '.' )
end
wiki.minsert( Comon.ploma )
end
-- Citation et commentaire de cet ouvrage
local citacion = validArg( 'èxtrèt', 'citacion' )
if citacion then
if codeLengoua then
citacion = Lengoua.lang{ codeLengoua, citacion }
end
wiki.minsert( ' :<blockquote>« ', citacion, ' »</blockquote>' )
end
wiki.minsert( Comon.comentero( args ) )
local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true, [104] = true }
if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and formaNormala then
wiki.minsert(
args.categ.lengoua and '[[Catègorie:Pâge du modèlo Ôvra que contint na fôta|lengoua]]',
args.categ.titro and '[[Catègorie:Pâge du modèlo Ôvra que contint na fôta|titro]]',
args.categ.titroChapitro and '[[Catègorie:Pâge du modèlo Chapitro que contint na fôta|Chapitro]]',
args.categ.titroOvra and '[[Catègorie:Pâge du modèlo Chapitro que contint na fôta|Ovra]]',
args.categ.limDeDefor and '[[Catègorie:Pâge du modèlo Ôvra que contint na fôta|DeDefor]]',
args.categ.isbnInvalid and '[[Catègorie:Pâge avouéc ISBN envalido]]',
args.categ.issnInvalid and '[[Catègorie:Pâge avouéc ISSN envalido]]',
args.categ.eanInvalid and '[[Catègorie:Pâge avouéc EAN envalido]]'
)
if dir then
wiki.minsert( '[[Catègorie:Recension temporèra por lo modèlo Ôvra|rtl]]' )
end
end
return wiki.concat()
end
return Ovra