« Module:Biblio/Ouvrage » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
ouvrage : ré-activation de message d'erreur sur le titre
0x010D (discussion | contributions)
chapitre : préface avec les auteurs ouvrage
 
(44 versions intermédiaires par le même utilisateur non affichées)
Ligne 6 : Ligne 6 :
local Outils = require( 'Module:Outils' )
local Outils = require( 'Module:Outils' )
local TableBuilder = require( 'Module:TableBuilder' )
local TableBuilder = require( 'Module:TableBuilder' )
local Langue -- = require( 'Module:Langue' )   ne sera chargé que si nécessaire.
local Langue = require( 'Module:Langue' )




function Ouvrage.chapitre( args )
function Ouvrage.chapitre( args )
-- validArg renvoi le premier paramètre non vide, ou nil s'ils sont tous vides.
-- 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.
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Outils.validTextArg( args, ... ) end
local validArg = function ( ... ) return Commun.validTextArg( args, ... ) end
-- titreChap est un paramètre différents de ceux du modèle ouvrage pour utilisé le même programme
-- titreChap est un paramètre différent de ceux du modèle ouvrage pour utiliser le même programme
args.titreChap = validArg( 'titre chapitre', 'chap', 'titre' )
args.titreChap = validArg( 'titre chapitre', 'chap', 'titre', 'title' )
if args.titre == args.titreChap then
if args.titre == args.titreChap then
args.titre = false
args.titre = false
end
end
args.titre = validArg( 'titre ouvrage', 'ouvrage', 'titre' ) or false
args.titre = validArg( 'titre ouvrage', 'ouvrage', 'titre', 'title' ) or false
args['titre chapitre'] = false
args['titre chapitre'] = false
args.chap = false
args.chap = false
Ligne 28 : Ligne 28 :
end
end
args['lien titre'] = validArg( 'lien titre ouvrage', 'lien titre' )
args['lien titre'] = validArg( 'lien titre ouvrage', 'lien titre' )
local preface = validArg( 'préface' )
local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
if preface and auteurOuvrage then
args['auteurs ouvrage'] = ( validArg( 'auteurs ouvrage', 'auteur ouvrage' ) or '' ) .. ' (préf. ' .. preface .. ')'
args['préface'] = ''
end
return Ouvrage.ouvrage( args, true )
return Ouvrage.ouvrage( args, true )
end
end
Ligne 33 : Ligne 39 :


function Ouvrage.ouvrage( args, chapitre )
function Ouvrage.ouvrage( args, chapitre )
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténtée à la fin.
-- La table wiki va recevoir tout les petits bouts de texte, et sera concaténée à la fin.
-- Elle utilise la metat-table de TableBuilder, permettant d'utiliser les fonctions de la
-- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
-- librairy table comme des mèthodes. minsert permet d'insérer plusieurs élément en une
-- librairie table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
-- seule fois en, ignorant les paramètre nil.
-- seule fois en, ignorant les paramètres nil.
local wiki = TableBuilder.new()
local wiki = TableBuilder.new()
-- validArg renvoi le premier paramètre non vide, ou nil s'ils sont tous vides.
-- 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.
-- Seul les noms des paramètres doivent être transmis à la fonction.
local validArg = function ( ... ) return Outils.validTextArg( args, ... ) end
local validArg = function ( ... ) return Commun.validTextArg( args, ... ) or false end
local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
local genre = ( chapitre and 'chapitre' ) or 'ouvrage'
--Variables servant à la catégorisation
--Table servant à la catégorisation
local categTitre, categTitreChapitre, categTitreOuvrage, categLangue
args.categ = {}
 
local modeNormal = not validArg( 'nocat' )
local modeNormal = not validArg( 'nocat' )
-- clarification paramètre nécéssaire pour les coins
-- Clarification des paramètres  nécessaires pour les COinS
args.titre = validArg( 'titre', 'title' ) or false
args.titre = validArg( 'titre', 'title' )
args['pages totales'] = validArg( 'pages totales', 'pages' )
args['pages totales'] = validArg( 'pages totales', 'pages' )
args.pages = ''
args.pages = ''
local lienExternes = validArg( 'lire en ligne', 'url texte', 'url', 'texte' )
if args.format and not args['format électronique'] and lienExternes and string.match( args.format,"pdf" ) then
args['format électronique'] = args.format
args.format = false
end
-- span initial (id) et libelé
-- span initial (id) et libellé
wiki.minsert( Commun.spanInitial ( args, validArg ) )
local spanInitial, spanFinal = Commun.spanInitial ( args, validArg )
local libelle = validArg( 'libellé' )
wiki.minsert( spanInitial,  Commun.libelle( args ) )
if libelle then
wiki.minsert( '<small>[', libelle, ']</small> ' )
-- Indication de langue
local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg )
local dir, attributsLangue
if Outils.notEmpty( indicLangue ) then
wiki.minsert( indicLangue, ' ' )
if codeLangue then
dir = Langue.directionLangue( codeLangue )
if dir == 'rtl' then
attributsLangue = ' lang="' .. codeLangue .. '" dir="rtl"'
else
dir = nil
attributsLangue = ' lang="' .. codeLangue .. '"'
end
end
end
end
-- indication de langue
local incdicLangue, codeLangue, categLangue = Commun.indicationDeLangue ( args, validArg )
wiki.minsert( incdicLangue, ' ' )


-- Liste des auteurs et de leur responsabilités (principale et secondaire)
-- Liste des auteurs et de leurs responsabilités (principales et secondaires)
local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'last1', 'last', 'author1', 'author' )
local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' )
if auteur then
if auteur then
if validArg( 'auteurs' ) then
if validArg( 'auteurs' ) then
wiki.minsert( args.auteurs )
wiki.minsert( args.auteurs )
else
else
wiki.minsert( Commun.responsabilitePrincipale( args, validArg, true ) )
wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
end
end
local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' )
local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' )
Ligne 83 : Ligne 104 :
if chapitre then
if chapitre then
if args.titreChap then
if args.titreChap then
wiki.minsert( '« <cite ' )
wiki.minsert( '<cite style="font-style:normal"', attributsLangue, '>« ', args.titreChap )
if codeLangue then
wiki.minsert( 'lang="', codeLangue, '" ' )
end
wiki.minsert( 'style="font-style:normal">', args.titreChap )
if args['sous-titre chapitre'] then
if args['sous-titre chapitre'] then
wiki.minsert( ( codeLangue and ': ' ) or ' : ', args['sous-titre chapitre'] )
wiki.minsert( ' : ', args['sous-titre chapitre'] )
end
end
wiki.minsert( '</cite> »' )
wiki.minsert( ' »</cite>' )
elseif modeNormal then
elseif modeNormal then
wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre chapitre</code> » manquant' ) )
wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|{{Chapitre}}]] : paramètre <code>titre chapitre</code> manquant' ) )
categTitreChapitre = true
args.categ.titreChapitre = true
end
end
if args.titre then
wiki.minsert( ', dans ' )
wiki.minsert( ', dans ' )
end
local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' )
Ligne 107 : Ligne 122 :
end
end
-- titre
-- Titre
if args.titre then
if args.titre then
if codeLangue then
local titre, sousTitre = args.titre, validArg( 'sous-titre' )
Langue = Langue or require( 'Module:Langue' )
local dir = Langue.directionLangue( codeLangue )
if dir == 'rtl' then dir = '" dir="rtl'
else dir = nil
end
wiki.minsert( '<cite class=italique lang="', codeLangue, dir, '">')
else
wiki.minsert( '<cite class=italique>')
end
local lienTitre = validArg( 'lien titre' )
if lienTitre then
wiki.minsert( '[[', lienTitre, '|' )
end
wiki.minsert( args.titre )
local sousTitre = validArg( 'sous-titre' )
if sousTitre then
if sousTitre then
wiki.minsert( ( codeLangue and ': ' ) or ' : ', sousTitre )
titre =  titre .. ' : ' .. sousTitre
end
end
if lienTitre then
titre = Commun.fusionTexteLien( titre, args['lien titre'], args.categ )
wiki.minsert( ']]' )
local graphie = ' class="italique"'
if Langue.nonLatin( titre ) then
graphie = ' style="font-style:normal"'
end
end
wiki.minsert( '</cite>' )
wiki.minsert( '<cite', graphie, attributsLangue, '>', titre, '</cite>' )
elseif modeNormal then
elseif modeNormal then
if chapitre then
if chapitre then
categTitreOuvrage = true
args.categ.titreOuvrage = true
if categTitreChapitre then
if args.categ.titreChapitre then
wiki.minsert( Outils.erreur( 'paramètre « <code>titre ouvrage</code> » manquant' ) )
wiki.minsert( Outils.erreur( 'paramètre <code>titre ouvrage</code> manquant' ) )
else
else
wiki.minsert( Outils.erreur( '[[Modèle:Chapitre|{{Chapitre}}]] : paramètre « <code>titre ouvrage</code> » manquant' ) )
wiki.minsert( Outils.erreur( '[[Modèle:Chapitre|{{Chapitre}}]] : paramètre <code>titre ouvrage</code> manquant' ) )
end
end
else
else
categTitre = true
args.categ.titre = true
wiki.minsert( Outils.erreur( '[[Modèle:Ouvrage|{{Ouvrage}}]] : paramètre « <code>titre</code> » manquant' ) )
wiki.minsert( Outils.erreur( '[[Modèle:Ouvrage|{{Ouvrage}}]] : paramètre <code>titre</code> manquant' ) )
end
end
end
end
-- titre original et traducteur
-- Titre original et traducteur
local original = validArg( 'titre original', 'titre vo', 'traduction titre' )
local original = validArg( 'titre original', 'titre vo', 'traduction titre' )
if original and original ~= args.titre then
if original and original ~= args.titre then
wiki.minsert( ' [« ', original, ' »]' )
if validArg( 'langue originale' ) then
wiki.minsert( ' [« ', Langue.langue{ args['langue originale'], original }, ' »]' )
else
wiki.minsert( ' [« ', original, ' »]' )
end
end
end
if not auteur then
if not auteur then
Ligne 162 : Ligne 165 :
end
end
-- volume, tome
-- Volume, tome
local volume = validArg( 'volume', 'vol' )
local volume = validArg( 'volume', 'vol' )
if volume then
if volume then
Ligne 179 : Ligne 182 :
end
end
if codeLangue then
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
wiki.minsert( Langue.langue{ codeLangue, titreVolTome },  [['']] )
wiki.minsert( Langue.lang{ codeLangue, titreVolTome },  [['']] )
else
else
wiki.minsert( titreVolTome,  [['']] )
wiki.minsert( titreVolTome,  [['']] )
end
end
local tradTitreVolTome = validArg( 'traduction titre volume', 'traduction titre tome' )
if tradTitreVolTome then
wiki.minsert( ' [« ', tradTitreVolTome, ' »]' )
end
end
-- Nature du document et établissement (pour les thèses...)
local nature = validArg( 'nature ouvrage' )
if nature then
wiki.minsert( ' (', nature, ')')
end
local etablissement = validArg( 'établissement' )
if etablissement then
wiki.minsert( ', ', etablissement )
end
end
-- lieu et éditeur
-- Lieu et éditeur
local lieu = validArg( 'lieu', 'location' )
local lieu = validArg( 'lieu', 'location' )
if lieu then
if lieu then
Ligne 194 : Ligne 210 :
if editeur then
if editeur then
local lienEditeur = validArg( 'lien éditeur' )
local lienEditeur = validArg( 'lien éditeur' )
if lienEditeur then
wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) )
wiki.minsert( ', [[', lienEditeur, '|', editeur, ']]' )
else
wiki.minsert( ', ', editeur )
end
end
-- nature du document
local nature = validArg( 'nature ouvrage' )
if nature then
wiki.minsert( ' (', nature, ')')
end
end
-- collecion et numéro
-- Collecion et numéro
local collection = validArg( 'collection' )
local collection = validArg( 'collection', 'series' )
if collection then
if collection then
wiki.minsert( ', ', Commun.coll, '« ', collection )
wiki.minsert( ', ', Commun.coll, '« ', collection )
Ligne 222 : Ligne 228 :
end
end
-- date, réimpression et éditions
-- Date, réimpression et éditions
local annee = validArg( 'année', 'date' )
local annee = validArg( 'année', 'date', 'year' )
if annee then
if annee then
wiki.minsert( ', ', Commun.inscriptionDate( args ) )
local lrm
if Langue.nonLatin( wiki.concat() ) then
lrm = '&lrm;'
end
wiki.minsert( ',', lrm, ' ', Commun.inscriptionDate( 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
end
local publi = validArg( 'réimpression', 'publi' )
local publi = validArg( 'réimpression', 'publi' )
Ligne 231 : Ligne 242 :
wiki.minsert( ' (', Commun.reimpr, publi, ')' )
wiki.minsert( ' (', Commun.reimpr, publi, ')' )
end
end
local numeroEdition = validArg( "numéro d'édition" )
local numeroEdition = validArg( "numéro d'édition", "numéro édition"  )
if numeroEdition then
if numeroEdition then
wiki.minsert( ', ', Outils.ordinal( numeroEdition, true ), Commun.ed )
wiki.minsert( ', ', Outils.ordinal( numeroEdition, true ), Commun.ed )
Ligne 240 : Ligne 251 :
end
end
-- format et pages
-- Pages et format
local format = validArg( 'format' )
if format then
wiki.minsert( ', ', format )
end
local pages = validArg( 'pages totales', 'pages' )
local pages = validArg( 'pages totales', 'pages' )
if pages then
if pages then
wiki.minsert( ', ', pages, Commun.nbp )
wiki.minsert( ', ', pages, Commun.nbp )
end
local format = validArg( 'format livre', 'format' )
if format then
wiki.minsert( ', ', format )
end
end
-- références
-- Références
local reference = validArg( 'référence' )
local reference = validArg( 'référence' )
if reference then
if reference then
Ligne 260 : Ligne 271 :
end
end
-- références ISBN, oclc, lccn, bnf... et liens en ligne
 
if validArg( 'isbn', 'lire en ligne', 'présentation en ligne', 'oclc', 'url', 'lccn', 'issn', 'bnf', 'ISBN', 'isbn1', 'ISSN', 'dnb', 'doi', 'jstor', 'url texte', 'pmid', 'résumé' ) then
-- Lien vers l'ouvrage en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
local enligne = TableBuilder.new(  )
wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) )
-- consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage#Évolution documentation]]
enligne.minsert( References.isbn( args, validArg ), References.issn( args, validArg ) )
enligne.minsert(
References.oclc( validArg( 'oclc' ) ),
References.bnf ( validArg( 'bnf'  ) ),
References.lccn( validArg( 'lccn' ) ),
References.dnb ( validArg( 'dnb'  ) ),
References.doi( validArg( 'doi' ) ),
References.pmid( validArg( 'pmid' ) ),
References.jstor( validArg( 'jstor' ) )
)
local url = validArg( 'lire en ligne', 'url', 'url texte' )
if url then
enligne.insert( References.enLigne{
lien = url,
texte = 'lire en ligne',
} )
end
local ecouterEnLigne = validArg( 'écouter en ligne' )
if ecouterEnLigne then
enligne.insert( References.enLigne{
lien = ecouterEnLigne,
texte = 'écouter en ligne',
} )
end
local resume = validArg( 'présentation en ligne', 'résumé' )
if resume then
enligne.insert( References.enLigne{
lien = resume,
texte = 'présentation en ligne',
} )
end
--[=[ consulté le n'est plus affiché, voir [[Discussion_modèle:Ouvrage#Évolution documentation]]
local cousulteLe = validArg( 'consulté le', 'accessdate', 'consulté' )
if cousulteLe then
enligne.insert( 'consulté le ' .. Outils.nobr( cousulteLe ) )
end
]=]
wiki.minsert( ' <small>', mw.text.nowiki( '(' ), enligne.concat( ', ' ),  ')</small>' )
end
-- précision sue le passage concerné
-- Précision sur le passage concerné
local partie = validArg( 'partie' )
local partie = validArg( 'partie' )
if partie then
if partie then
wiki.minsert( ', partie&nbsp;',  Commun.romain( partie ) )
if string.match ( partie, '^[%dIVXLCM]+$' ) then
wiki.minsert( ', partie&nbsp;', partie )
elseif string.match ( partie, '^[ivxlcmIVXLCM]+$' ) then
wiki.minsert( ', partie&nbsp;',  Commun.romain( partie ) )
else
wiki.minsert( ', ', partie )
end
end
end
local numeroChapitre = validArg( 'numéro chapitre', 'numéro' )
local numeroChapitre = validArg( 'numéro chapitre', 'numéro' )
Ligne 319 : Ligne 293 :
local titreChapitre = validArg( 'titre chapitre', 'chap', 'chapitre', 'chapter' )
local titreChapitre = validArg( 'titre chapitre', 'chap', 'chapitre', 'chapter' )
if titreChapitre then
if titreChapitre then
if numeroChapitre then
titreChapitre = ' (« ' .. titreChapitre .. ' »)'
else
titreChapitre = ', « ' .. titreChapitre .. ' »'
end
if codeLangue then
if codeLangue then
Langue = Langue or require( 'Module:Langue' )
titreChapitre = Langue.langue{ codeLangue, titreChapitre }
titreChapitre = Langue.lang{ codeLangue, titreChapitre }
end
end
if numeroChapitre then
wiki.minsert( titreChapitre )
wiki.minsert( ' (« ', titreChapitre, ' »)' )
local tradTitreChap = validArg( 'traduction titre chapitre' )
else
if tradTitreChap then
wiki.minsert( ', « ', titreChapitre, ' »' )
wiki.minsert( ' [« ', tradTitreChap, ' »]' )
end
end
end
end
local passage = validArg( 'passage', 'page' )
local passage = validArg( 'passage', 'page' )
if passage then
if passage then
wiki.minsert( ', ', Commun.page, passage )
if string.match ( passage, '^[%dIVXLCM]' ) then
wiki.minsert( ', ', Commun.page, passage )
else
wiki.minsert( ', ', passage )
end
end
end
-- ajout des méthadonnées COinS (ContextObjects in Spans)
local patternPonct = '[,.;:!?]$'
local ponctuation = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
-- Ajout des méthadonnées COinS (ContextObjects in Spans)
wiki.minsert( Commun.COinS( args, validArg, genre ) )
wiki.minsert( Commun.COinS( args, validArg, genre ) )
-- fin du span (id) et de la description de l'ouvrage
-- Fin du span (id) et de la description de l'ouvrage
wiki.minsert( '</span>' )
wiki.minsert( spanFinal )
-- citation et commentaire de cet ouvrage
-- Citation et commentaire de cet ouvrage
local citation = validArg( 'extrait', 'citation' )
local citation = validArg( 'extrait', 'citation' )
if citation then
if citation then
Ligne 346 : Ligne 331 :
end
end
if validArg( 'plume' ) then
if validArg( 'plume' ) then
wiki.minsert( Commun.plume )
local point
if not citation and not ponctuation then
point = '.'
end
wiki.minsert( point, Commun.plume )
end
end
wiki.minsert( Commun.commentaire( args ) )
wiki.minsert( Commun.commentaire( args ) )
local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true, [104] = true }
if mw.title.getCurrentTitle().namespace == 0 and modeNormal then
if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and modeNormal then
wiki.minsert(
wiki.minsert(
categLangue and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|langue]]',
args.categ.langue and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|langue]]',
categTitre and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|titre]]',
args.categ.titre and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|titre]]',
categTitreChapitre and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Chapitre]]',
args.categ.titreChapitre and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Chapitre]]',
categTitreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]'
args.categ.titreOuvrage and '[[Catégorie:Page du modèle Chapitre comportant une erreur|Ouvrage]]',
args.categ.lienExterne and '[[Catégorie:Page du modèle Ouvrage comportant une erreur|Externe]]',
args.categ.isbnInvalid and '[[Catégorie:Page avec ISBN invalide]]',
args.categ.issnInvalid and '[[Catégorie:Page avec ISSN invalide]]',
args.categ.eanInvalid and '[[Catégorie:Page avec EAN invalide]]'
)
)
if args.nolien then  
if dir then
wiki.minsert( '[[Catégorie:Page du modèle Ouvrage comportant une erreur|nolien]]' )
wiki.minsert( '[[Catégorie:Recension temporaire pour le modèle Ouvrage|rtl]]' )
end
end
end
end

Dernière version du 22 avril 2017 à 07:24

local Ouvrage = { }


local Commun = require( 'Module:Biblio/Commun' ) local References = require( 'Module:Biblio/Références' ) local Outils = require( 'Module:Outils' ) local TableBuilder = require( 'Module:TableBuilder' ) local Langue = require( 'Module:Langue' )


function Ouvrage.chapitre( 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 Commun.validTextArg( args, ... ) end

-- titreChap est un paramètre différent de ceux du modèle ouvrage pour utiliser le même programme args.titreChap = validArg( 'titre chapitre', 'chap', 'titre', 'title' ) if args.titre == args.titreChap then args.titre = false end args.titre = validArg( 'titre ouvrage', 'ouvrage', 'titre', 'title' ) or false args['titre chapitre'] = false args.chap = false args['sous-titre chapitre'] = validArg( 'sous-titre chapitre', 'sous-titre' ) or false args['sous-titre'] = validArg( 'sous-titre ouvrage', 'sous-titre' ) if args['sous-titre chapitre'] == args['sous-titre'] then args['sous-titre'] = false end args['lien titre'] = validArg( 'lien titre ouvrage', 'lien titre' ) local preface = validArg( 'préface' ) local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' ) if preface and auteurOuvrage then args['auteurs ouvrage'] = ( validArg( 'auteurs ouvrage', 'auteur ouvrage' ) or ) .. ' (préf. ' .. preface .. ')' args['préface'] = end return Ouvrage.ouvrage( args, true ) end


function Ouvrage.ouvrage( args, chapitre ) -- 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 Commun.validTextArg( args, ... ) or false end local genre = ( chapitre and 'chapitre' ) or 'ouvrage'

--Table servant à la catégorisation args.categ = {}

local modeNormal = not validArg( 'nocat' )

-- Clarification des paramètres nécessaires pour les COinS args.titre = validArg( 'titre', 'title' ) args['pages totales'] = validArg( 'pages totales', 'pages' ) args.pages = local lienExternes = validArg( 'lire en ligne', 'url texte', 'url', 'texte' ) if args.format and not args['format électronique'] and lienExternes and string.match( args.format,"pdf" ) then args['format électronique'] = args.format args.format = false end


-- span initial (id) et libellé local spanInitial, spanFinal = Commun.spanInitial ( args, validArg ) wiki.minsert( spanInitial, Commun.libelle( args ) )

-- Indication de langue local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg ) local dir, attributsLangue if Outils.notEmpty( indicLangue ) then wiki.minsert( indicLangue, ' ' ) if codeLangue then dir = Langue.directionLangue( codeLangue ) if dir == 'rtl' then attributsLangue = ' lang="' .. codeLangue .. '" dir="rtl"' else dir = nil attributsLangue = ' lang="' .. codeLangue .. '"' end end end

-- Liste des auteurs et de leurs responsabilités (principales et secondaires) local auteur = validArg( 'nom1', 'nom', 'auteur1', 'auteur', 'auteurs', 'auteur institutionnel', 'last1', 'last', 'author1', 'author' ) if auteur then if validArg( 'auteurs' ) then wiki.minsert( args.auteurs ) else wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) ) end local coauteur = validArg( 'co-auteur', 'coauteurs', 'coauteur', 'coauthors' ) if coauteur then wiki.minsert( ', ', coauteur ) end wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' ) end

-- Pour le modèle chapitre : affichage du chapitre if chapitre then if args.titreChap then wiki.minsert( '« ', args.titreChap ) if args['sous-titre chapitre'] then wiki.minsert( ' : ', args['sous-titre chapitre'] ) end wiki.minsert( ' »' ) elseif modeNormal then wiki.minsert( Outils.erreur( ' [[Modèle:Chapitre|Modèle:Chapitre]] : paramètre titre chapitre manquant' ) ) args.categ.titreChapitre = true end

wiki.minsert( ', dans ' )

local auteurOuvrage = validArg( 'auteurs ouvrage', 'auteur ouvrage' ) if auteurOuvrage then wiki.minsert( auteurOuvrage, ', ' ) end end

-- Titre if args.titre then local titre, sousTitre = args.titre, validArg( 'sous-titre' ) if sousTitre then titre = titre .. ' : ' .. sousTitre end titre = Commun.fusionTexteLien( titre, args['lien titre'], args.categ ) local graphie = ' class="italique"' if Langue.nonLatin( titre ) then graphie = ' style="font-style:normal"' end wiki.minsert( '<cite', graphie, attributsLangue, '>', titre, '' )

elseif modeNormal then if chapitre then args.categ.titreOuvrage = true if args.categ.titreChapitre then wiki.minsert( Outils.erreur( 'paramètre titre ouvrage manquant' ) ) else wiki.minsert( Outils.erreur( '[[Modèle:Chapitre|Modèle:Chapitre]] : paramètre titre ouvrage manquant' ) ) end else args.categ.titre = true wiki.minsert( Outils.erreur( '[[Modèle:Ouvrage|{{Ouvrage}} : paramètre titre manquant]] : paramètre titre manquant' ) ) end end

-- Titre original et traducteur local original = validArg( 'titre original', 'titre vo', 'traduction titre' ) if original and original ~= args.titre then if validArg( 'langue originale' ) then wiki.minsert( ' [« ', Langue.langue{ args['langue originale'], original }, ' »]' ) else wiki.minsert( ' [« ', original, ' »]' ) end end if not auteur then local responsabiliteSecondaire = Commun.responsabiliteSecondaire( args, validArg ) if responsabiliteSecondaire then wiki.minsert( ' ', responsabiliteSecondaire ) end end

-- Volume, tome local volume = validArg( 'volume', 'vol' ) if volume then wiki.minsert( ', ', Commun.vol, volume ) end local tome = validArg( 'tome' ) if tome then wiki.minsert( ', ', Commun.tome, tome ) end local titreVolTome = validArg( 'titre volume', 'titre tome' ) if titreVolTome then if volume or tome then wiki.minsert( '' ) else wiki.minsert( , '' ) end if codeLangue then wiki.minsert( Langue.langue{ codeLangue, titreVolTome }, '' ) else wiki.minsert( titreVolTome, '' ) end local tradTitreVolTome = validArg( 'traduction titre volume', 'traduction titre tome' ) if tradTitreVolTome then wiki.minsert( ' [« ', tradTitreVolTome, ' »]' ) end end

-- Nature du document et établissement (pour les thèses...) local nature = validArg( 'nature ouvrage' ) if nature then wiki.minsert( ' (', nature, ')') end local etablissement = validArg( 'établissement' ) if etablissement then wiki.minsert( ', ', etablissement ) end

-- Lieu et éditeur local lieu = validArg( 'lieu', 'location' ) if lieu then wiki.minsert( ', ', lieu ) end local editeur = validArg( 'éditeur', 'édition', 'editeur', 'edition', 'publisher' ) if editeur then local lienEditeur = validArg( 'lien éditeur' ) wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) ) end

-- Collecion et numéro local collection = validArg( 'collection', 'series' ) if collection then wiki.minsert( ', ', Commun.coll, '« ', collection ) local serie = validArg( 'série' ) if serie then wiki.minsert( ' / ', serie ) end wiki.minsert( ' »' ) end local numeroCollection = validArg( 'numéro dans collection', 'numéro dans la collection' ) if numeroCollection then wiki.minsert( ' (', Commun.numero, numeroCollection, ')' ) end

-- Date, réimpression et éditions local annee = validArg( 'année', 'date', 'year' ) if annee then local lrm if Langue.nonLatin( wiki.concat() ) then lrm = '‎' end wiki.minsert( ',', lrm, ' ', Commun.inscriptionDate( 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( 'réimpression', 'publi' ) if publi then wiki.minsert( ' (', Commun.reimpr, publi, ')' ) end local numeroEdition = validArg( "numéro d'édition", "numéro édition" ) if numeroEdition then wiki.minsert( ', ', Outils.ordinal( numeroEdition, true ), Commun.ed ) end local premiereEdition = validArg( 'année première édition', 'origyear' ) if premiereEdition then wiki.minsert( ' (', Commun.premiere, Commun.ed, ' ', premiereEdition, ')' ) end

-- Pages et format local pages = validArg( 'pages totales', 'pages' ) if pages then wiki.minsert( ', ', pages, Commun.nbp ) end local format = validArg( 'format livre', 'format' ) if format then wiki.minsert( ', ', format ) end

-- Références local reference = validArg( 'référence' ) if reference then wiki.minsert( ' ', Commun.detailEditions( reference ) ) end local refSimple = validArg( 'référence simplifiée', 'ref' ) if refSimple then wiki.minsert( ' ', Commun.detailEdition( refSimple ) ) end


-- Lien vers l'ouvrage en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...) wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) ) -- consulté le n'est plus affiché, voir Discussion_modèle:Ouvrage#Évolution documentation

-- Précision sur le passage concerné local partie = validArg( 'partie' ) if partie then if string.match ( partie, '^[%dIVXLCM]+$' ) then wiki.minsert( ', partie ', partie ) elseif string.match ( partie, '^[ivxlcmIVXLCM]+$' ) then wiki.minsert( ', partie ', Commun.romain( partie ) ) else wiki.minsert( ', ', partie ) end end local numeroChapitre = validArg( 'numéro chapitre', 'numéro' ) if numeroChapitre then wiki.minsert( ', ', Commun.chap, numeroChapitre ) end local titreChapitre = validArg( 'titre chapitre', 'chap', 'chapitre', 'chapter' ) if titreChapitre then if numeroChapitre then titreChapitre = ' (« ' .. titreChapitre .. ' »)' else titreChapitre = ', « ' .. titreChapitre .. ' »' end if codeLangue then titreChapitre = Langue.langue{ codeLangue, titreChapitre } end wiki.minsert( titreChapitre ) local tradTitreChap = validArg( 'traduction titre chapitre' ) if tradTitreChap then wiki.minsert( ' [« ', tradTitreChap, ' »]' ) end end local passage = validArg( 'passage', 'page' ) if passage then if string.match ( passage, '^[%dIVXLCM]' ) then wiki.minsert( ', ', Commun.page, passage ) else wiki.minsert( ', ', passage ) end end

local patternPonct = '[,.;:!?]$' local ponctuation = wiki.concat():gsub( '%b<>', ):match( patternPonct )

-- Ajout des méthadonnées COinS (ContextObjects in Spans) wiki.minsert( Commun.COinS( args, validArg, genre ) )

-- Fin du span (id) et de la description de l'ouvrage wiki.minsert( spanFinal )

-- Citation et commentaire de cet ouvrage local citation = validArg( 'extrait', 'citation' ) if citation then

wiki.minsert( ' :

« ', citation, ' »

' )

end if validArg( 'plume' ) then local point if not citation and not ponctuation then point = '.' end wiki.minsert( point, Commun.plume ) end

wiki.minsert( Commun.commentaire( args ) )

local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true, [104] = true } if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] and modeNormal then wiki.minsert( args.categ.langue and , args.categ.titre and , args.categ.titreChapitre and , args.categ.titreOuvrage and , args.categ.lienExterne and , args.categ.isbnInvalid and , args.categ.issnInvalid and , args.categ.eanInvalid and ) if dir then wiki.minsert( ) end end


return wiki.concat() end


return Ouvrage