پودمان:نامک/پژوهه

از ویکی‌پدیا، دانشنامهٔ آزاد
توضیحات پودمان[نمایش] [ویرایش] [تاریخچه] [پاکسازی]

کاربرد[ویرایش]

دیگر پودمان‌هایی که این پودمان برای کارکرد به آنها نیاز دارد:

local Article = { }


local Commun = require( 'پودمان:نامک/انبازین' )
local References = require( 'پودمان:نامک/بازخنان' )
local Nombre2texte = require( 'پودمان:عددبحروف' )
local TableBuilder = require( 'پودمان:پیچازساز' )
local Langue = require( 'پودمان:زبان' )


function Article.article( args )
	-- La table wiki va recevoir tous 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 
	-- library 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.
	-- Seuls les noms des paramètres doivent être transmis à la fonction.
	local validArg = function ( ... ) return Commun.validTextArg( args, ... ) or false end
	
	-- table servant à la catégorisation
	args.categ = {}
	
	-- clarification paramètre nécessaire pour les COinS
	args['گاهنامه'] = validArg( 'گاهنامه', 'نشریه', 'ژورنال' )
	args.titre = validArg( 'عنوان' )
	args.passage = validArg( 'صفحات', 'صفحه', 'عبارت', 'ص.', 'صص.' )
	args['فرمت الکترونیک'] = args.format
	args.format = false
	
	
	-- 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 )
	if indicLangue and indicLangue ~= '' then
		wiki.minsert( indicLangue, ' ' )
	end
	
	-- Liste des auteurs et de leur responsabilités (principale et secondaire)
	local auteur = validArg( 'نام خانوادگی1', 'نام خانوادگی', 'نویسنده1', 'نویسنده', 'نویسندگان', 'نویسنده حقوقی' )
	if auteur then
		if validArg( 'نویسندگان' ) then
			wiki.minsert( args.auteurs )
			if validArg( 'دیگران', 'و دیگران' ) then
				wiki.minsert( " ''<abbr class=\"abbr\" title=\"و دیگران\">و دیگران</abbr>''" )
			end
		else
			 wiki.minsert( Commun.responsabilitePrincipale( args, validArg ) )
		end
		wiki.minsert( Commun.responsabiliteSecondaire( args, validArg ), ', ' )
		
		args.categ.auteur = validArg( 'نویسنده', 'نویسندگان', 'نویسنده1', 1, 2, 3, 4 )
		args.categ.coauteur = validArg( 'همنویسندگان', 'همنویسنده' )
	end
	
	-- titre, sous-titre
	if args.titre then
		if codeLangue then
			local dir = Langue.directionLangue( codeLangue )
			if dir == 'rtl' then dir = '" dir="rtl'
			else dir = nil
			end
			wiki.minsert( '<span lang="', codeLangue, dir, '">')
		end
		
		local titre, sousTitre = args.titre, validArg( 'زیرعنوان' )
		if sousTitre then
			titre = titre .. ' : ' .. sousTitre
		end
		titre = Commun.fusionTexteLien( titre, args['پیوند عنوان'], args.categ )
		
		wiki.minsert( '« <cite style="font-style:normal;">', titre, '</cite> »', codeLangue and '</span>' )
	else
		args.categ.titre = true
		wiki.minsert( '<span class="error">[[الگو:پژوهه|{{پژوهه}}]] : پارامتر « <code>عنوان</code> » یافت نشد</span>' )
	end
	
	-- Titre original et traducteur
	local traductionTitre = validArg( 'ترجمه عنوان', 'عنوان اصلی' )
	if traductionTitre and traductionTitre ~= args.titre then
		wiki.minsert( ' [« ', traductionTitre, ' »]' )
	end
	if not auteur then
		local responsabiliteSecondaire = Commun.responsabiliteSecondaire( args, validArg )
		if responsabiliteSecondaire then
			wiki.minsert( ' ', responsabiliteSecondaire )
		end
	end

	-- Nature du document et établissement (pour les thèses...)
	local nature = validArg( 'نوع جستار', 'نوع اثر' )
	if nature then
		wiki.minsert( ' (', nature, ')')
	end
	local etablissement = validArg( 'بنگاه' )
	if etablissement then
		wiki.minsert( '، ', etablissement )
	end
	
	-- périodique
	local periodique = validArg( 'گاهنامه' )
	if periodique then
		-- on applique le code langue spécifique ou celui de l'article
		local languePeriodique = validArg( 'زبان گاهنامه' )
		if languePeriodique then
			languePeriodique = Langue.codeLangue2( languePeriodique )
		end
		languePeriodique = languePeriodique or codeLangue
		if languePeriodique and languePeriodique ~= 'fa' then
			periodique = Langue.lang{ languePeriodique, periodique }
		end
		
		local periodiqueEtLien = Commun.fusionTexteLien( periodique, args['پیوند گاهنامه'], args.categ )
		if Langue.nonLatin( periodique ) then
			-- caractères non latin donc police droite
			wiki.minsert( '، ', periodiqueEtLien )
		else
			-- le titre et son lien éventuel sont affichés en italique
			wiki.minsert( '، <i>', periodiqueEtLien, '</i>' )
		end
		
	else
		args.categ.periodique = true
		if args.categ.titre then
			wiki.minsert( ', <span class="error">پارامتر « <code>گاهنامه</code> » یافت نشد</span>' )
		else
			wiki.minsert( ', <span class="error">[[الگو:پژوهه|{{پژوهه}}]] : پارامتر « <code>گاهنامه</code> » یافت نشد</span>' )
		end
	end
	
	-- références : lieu, éditeur
	local lieu = validArg( 'مکان', 'مکان نشر' )
	if lieu then
		wiki.minsert( '، ', lieu )
	end
	local editeur = validArg( 'ناشر' )
	if editeur then
		local lienEditeur = validArg( 'پیوند ناشر' )
		wiki.minsert( '، ', Commun.fusionTexteLien( editeur, lienEditeur, args.categ ) )
	end
	
	-- références : série, volume
	local hors_serie = false-- booléen utilisé plus bas pour ne pas insérer de virgule dans certains cas.
	local serie = validArg( 'فروست' )
	if serie then
		if tonumber( serie ) then
			wiki.minsert( '، ', Nombre2texte.ordinal( serie, true ), ' فروست' )
		else
			if string.match( serie, '<sup>e</sup>$') then
				wiki.minsert( ', ', serie, ' série' )
   			elseif string.gmatch( serie, '^[Hh]ors[- ][Ss]érie') then
				wiki.minsert( ', ', serie:sub(1,1):lower()..serie:sub(2) )
				if string.gmatch( serie, '^[Hh]ors[- ][Ss]érie$') then
					hors_serie = true
				end
			else
				wiki.minsert( '، فروست ', serie )
			end
		end
	end
	local volume = validArg( 'جلد', 'ج' )
	if volume then
		wiki.minsert( '، ', Commun.vol, volume )
	end
	local tome = validArg( 'مجلد' )
	if tome then
		wiki.minsert( '، ', Commun.tome, tome )
	end
	local titreVolume = validArg( 'عنوان جلد', 'عنوان ج' )
	if titreVolume then
		if codeLangue then
			wiki.minsert( ' ', Langue.lang{ codeLangue, '« ' .. titreVolume .. ' »' } )
		else
			wiki.minsert( ' « ', titreVolume, ' »' )
		end
	end
	
	-- références : n° du périodique et titre du n° et date de publication
	local numero = validArg( 'شماره', 'ش', 'issue' )
	if numero then
		if hors_serie==true and not (volume or tome or titreVolume) then
			wiki.minsert( ' ' )
		else
			wiki.minsert( '، ' )
		end
		if mw.ustring.match( numero, "^%d+ ?[-–—/,;àe]t? ?%d" ) then
			wiki.minsert( Commun.numeros, numero )
		else
			wiki.minsert( Commun.numero, numero )
		end
	end
	local titreNumero = validArg( 'عنوان شماره', 'عنوان ش' )
	if titreNumero then
		if codeLangue then
			wiki.minsert( ' ', Langue.lang{ codeLangue, '« ' .. titreNumero .. ' »'  } )
		else
			wiki.minsert( ' « ', titreNumero, ' »' )
		end
	end
	if validArg( 'سال', 'تاریخ' ) then
		args.mois = validArg( 'ماه', 'موسم' )
		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ébreu, etc.)
	else
		args.categ.date = true
		if args.categ.titre or args.categ.periodique then
			wiki.minsert( '، <span class="error">پارامتر « <code>تاریخ</code> » یافت نشد</span>' )
		else
			wiki.minsert( '، <span class="error">[[الگو:پژوهه|{{پژوهه}}]] : پارامتر « <code>تاریخ</code> » یافت نشد</span>' )
		end
	end	
	
	-- format livre
	local format = validArg( 'فرمت کتاب' )
	if format then
		wiki.minsert( '، ', format )
	end
	
	-- pages
	local page = validArg( 'تکه', 'صفحات', 'صفحه', 'ص.', 'صص.' )
	if page then
		wiki.minsert( '، ', Commun.formatePassage( page ) )
	end
	local noArticle = validArg( 'شماره جستار' )
	if noArticle then
		wiki.minsert( '، جستار ', Commun.numero, noArticle )
	end
	
	-- lien vers l'article en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
	-- on n'affiche "consulté le" que si "lire en ligne" ou "url" est fourni
	local lireEnLigne = validArg( 'خواندن برخط' )
	local parametreUrl = validArg('نشانی')
	if lireEnLigne then
		wiki.minsert( References.affichageLiensExternes( args, validArg, true, true ) )
	elseif parametreUrl then
		wiki.minsert( References.affichageLiensExternes( args, validArg, true, true ) )
	else
		wiki.minsert( References.affichageLiensExternes( args, validArg, true, false ) )
	end
	
	-- ajout des métadonnées COinS (ContextObjects in Spans)
	wiki.minsert( Commun.COinS( args, validArg, 'جستار' ) )
	
	-- fin du span (id) et de la description de l'ouvrage
	wiki.minsert( spanFinal )
	
	-- plume "Ouvrage utilisé pour la rédaction de l'article"
	if validArg( 'خامه' ) then
		local patternPonct = '[,.;:!?]$'
		local ponctuation = wiki.concat():gsub( '%b<>', '' ):match( patternPonct )
		if not ponctuation then
			wiki.minsert( '.' )
		end
		wiki.minsert( Commun.plume )
	end
	
	-- citation et commentaire de cet ouvrage
	local citation = validArg( 'گزیده', 'نقل قول', 'گفتاورد' )
	if citation then
		if codeLangue then
			citation = Langue.lang{ codeLangue, citation }
		end
		wiki.minsert( '&nbsp;:<blockquote>«&nbsp;', citation, '&nbsp;»</blockquote>' )
	end
	
	wiki.minsert( Commun.commentaire( args ) )
	
	
	if mw.title.getCurrentTitle().namespace == 0 then
		wiki.minsert(
			args.categ.coauteur and '[[رده:Recension temporaire pour le modèle Article|همنویسنده]]',
			args.categ.langue  and '[[رده:Page du modèle Article comportant une erreur|زبان]]',
			args.categ.titre and '[[رده:Page du modèle Article comportant une erreur|عنوان]]',
			args.categ.periodique and '[[رده:Page du modèle Article comportant une erreur|گاهنامه]]',
			args.categ.date and '[[رده:Page du modèle Article comportant une erreur|تاریخ]]',
			args.categ.lienExterne and '[[رده:Page du modèle Article comportant une erreur|externe]]',
			args.categ.isbnInvalid and '[[رده:Page avec ISBN invalide]]',
			args.categ.issnInvalid and '[[رده:Page avec ISSN invalide]]'
		)
		if codeLangue then
			if Langue.directionLangue( codeLangue ) == 'rtl' then
				wiki.minsert( '[[رده:Recension temporaire pour le modèle Article|rtl]]' )
			end
		end
	end
	
	
	return wiki.concat()
end


return Article