La documentation pour ce module peut être créée à Module:Biblio/Comon/doc

-- Les fonccions du modulo Biblio/Comon sont de piéces nècèssères u modulos Biblio/Ôvra, Biblio/Articllo, Biblio/Lim Vouèbe.

local Comon = {}


local Data = require( 'Module:Dâta' )
local Outils = require( 'Module:Outils' )
local Lengoua -- = require( 'Module:Lengoua' ) serat chargiê ren que se nècèssèro
local Lengouadata -- = mw.loadData( 'Module:Lengoua/Data' ) serat chargiê ren que se nècèssèro


--[=[
	En francês : Trouve le premier lien interwiki '[[lien|texte]]' de str et retourne : texte, lien
	Si le lien est '[[texte]]', retourne : texte, texte.
	Si str ne contient pas de lien interwiki, retourne : str (et nil)
	Les fichiers et images ne sont pas considérés comme des liens.
	Si str n'est pas une chaine, retourne : nil
]=]
local function textoLim( str )
	if type( str ) == 'string' then
		for lim, texto in string.gmatch( str, '%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' ) do
			texto = ( texto ~= '' and texto ) or lim or str
			if not lim then
				return str
			end
			local testlim = string.lower( lim )
			local fichier = string.match( testlim, '^fichiér:' ) 
				or  string.match( testlim, '^émâge:' )
				or  string.match( testlim, '^file:' )
			if not fichier then 
				return texto, lim
			end
		end
		return str
	end
end


-- En francês : Copie de Outils.validTextArg sans trim, pour performances avec les paramètres nommés ?
-- refs [[Spécial:Diff/105796198]]
function Comon.validTextArg( args, name, ... )
	local texto = args[name]
	if type( texto ) == 'string' and texto ~= '' and texto:match( '%S' ) then
		return texto
	elseif #{ ... } > 0 then
		return Comon.validTextArg( args, ... )
	end
end


--[[
	En francês : Génère une abréviation discrète
	paramètres : 
		1 = abréviation,
		2 = texte,
		nbsp = '-' pour une espace insécable avant l'abréviation, '+' pour l'avoir après.
]]
local function abr( args )
	return ( args.nbsp == '-' and ' ' or '' )
		.. '<abbr class="abbr" title="' .. args[2] .. '">'
		.. args[1]
		.. '</abbr>'
		.. ( args.nbsp == '+' and '&nbsp;' or '' )
end


-- Abrèviacions utiles
Comon.chap =   abr{ 'chap.', 'chapitro(s)', nbsp='+' }
Comon.col =   abr{ 'col.', 'colèccion', nbsp='+' }
Comon.ed =     abr{ 'èd.', 'èdicion', nbsp='-' }
Comon.nbp =    abr{ 'p.', 'pâges', nbsp='-' }
Comon.numero = abr{ 'n<sup>o</sup>', 'numerô', nbsp='+' }
Comon.numeros = abr{ 'n<sup>os</sup>', 'numerôs', nbsp='+' }
Comon.page =   abr{ 'p.', 'pâge(s)', nbsp='+' }
Comon.ploma = '<span class=nowrap title="Ôvra empleyêe por la rèdaccion de l’articllo">\194\160[[Fichier:Icon_flatdesign_plume.svg|20px|link=|alt=Ôvra empleyêe por la rèdaccion de l’articllo]]</span>'
Comon.premiere = abr{ '1<sup>ére</sup>', 'premiére' }
Comon.rempr = abr{ 'rempr.', 'remprèssion', nbsp='+' }
Comon.levro = abr{ 'l.', 'lévro', nbsp='+' }
Comon.vol = abr{ 'vol.', 'volumo', nbsp='+' }


function Comon.detalyEdicion( ref )
	return '<small>&#91;[[' .. ref .. '|dètaly de l’èdicion]]&#93;</small>'
end

function Comon.detalyEdicions( ref )
	return '<small>&#91;[[' .. ref .. '|dètaly de les èdicions]]&#93;</small>'
end


-- montre lo tèxto en grant nombro romen.
function Comon.romen( texto )
    local a = '<span class="romen" style="text-transform:uppercase">'
    local b = '</span>'
    return a, texto, b
end

function Comon.fusionTextoLim( texto, lim, categ )
	local categorisacion, result
	local messajo = '<sup style="color:red;">[lo lim de defôr est étâ enlevâ]</sup>'
	if lim and lim ~= '' then
		if texto:match( '%[%[' ) then
			result = Comon.fusionTextoLim( texto, nil, categ )
		elseif lim:match( '^http' ) or lim:match( '//' ) then
			lim = false
			categorisacion = true
			result = texto .. messajo
		else
			result = string.format( '[[%s|%s]]', lim, texto )
		end
	else
		--[=[ if texto:match( '//' ) then
			result = texto:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
								:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
			if result ~= texto then
				result = result .. messajo
				categorisacion = true
			end
		end ]=] -- dèsactivâ por lo moment (pôt étre activâ se yon est prèst a corregiér les fôtes)
	end
	if categorisacion and type( categ ) == 'table' then
		categ.limDeDefor = true
	end
	return result or texto
end

-- vêre Modèlo:Modulo biblio/span initial
function Comon.spanInitial( args, validArg )
	local validArg = function ( ... ) return Comon.validTextArg( args, ... ) or false end
	local id, id2 = validArg( 'id' )

	if id then
		id = ' id="' .. id .. '"'
	else
		local nom = validArg( 'nom1', 'nom', 'last1', 'last', 'author' )
		local petiotnom = validArg( 'petiôt nom1', 'petiôt nom', 'firt1', 'first' )
		local postnom = validArg('postnom1', 'postnom' )
		local otor_i = validArg( 'ôtor1', 'author1', 'ôtor' )
		local i = 1
		local idTab, id2Tab = { }, { }
		
		while nom or otor_i do
			if otor_i and not nom then
				-- èprôva de sèparacion de l’ôtor en petiôt nom nom. 
				-- Encârte lo rèsultat dedens args por los COinS.
				otor_i = textoLim( otor_i )
				if otor_i == '' then
					break
				end
				local a1, a2, a3 = string.match( otor_i, '^([^ ]+) ?([^ ]*) ?(.*)$' )
				if Outils.notEmpty( a3 ) then
					local a2len = mw.ustring.len( a2 )
					if a2len == 1 or ( a2len == 2 and mw.ustring.sub( a2, -1 ) == "." ) then
						-- a1 est lo petiôt nom, a2 un’iniciâla et a3 lo nom
						nom = a3
						if i == 1 then
							args.nom = a3
							args['petiôt nom'] = a1 .. ' ' .. a2
						end
					else
						-- a2 pôt étre lo second petiôt nom ou ben lo comencement du nom
						nom = a2 .. ' ' .. a3
					end
				elseif Outils.notEmpty( a2 ) then
					-- a1 petiôt nom, a2 nom
					nom = a2
					if i == 1 then
						args.nom = a2
						args['petiôt nom'] = a1
					end
				else
					nom = a1
				end
			end
			if not otor_i then
				if petiotnom and postnom then
					otor_i = petiotnom .. ' ' .. nom .. ' ' .. postnom
				elseif petiotnom then
					otor_i = petiotnom .. ' ' .. nom
				elseif postnom then
					otor_i = nom .. ' ' .. postnom
				else
					otor_i = nom
				end
			end
			table.insert( idTab, mw.uri.anchorEncode( nom ) )
			table.insert( id2Tab, mw.uri.anchorEncode( otor_i ) )
			
			if i == 4 then
				break
			end
			i = i + 1
			nom = validArg( 'nom' .. i, 'last' .. i )
			petiotnom = validArg( 'petiôt nom' .. i, 'first' .. i )
			postnom = validArg( 'postnom' .. i)
			otor_i = validArg( 'ôtor' .. i, 'author' .. i )
		end
		
		if #idTab < 4 and validArg( 'ôtor enstitucionâl' ) then
			table.insert( idTab, mw.uri.anchorEncode( validArg( 'ôtor enstitucionâl' ) ) )
			table.insert( id2Tab, idTab[#idTab] )
		end
		
		local an = validArg( 'an', 'year', 'date' )
		if an then
			local t, d = Data.separacionJornMesAn( an )
			if t and d.an and an ~= d.an then
				an = tostring( d.an )
				args['an'] = an
				if d.mes then
					args.mes = validArg( 'mês' ) or tostring( d.mes )
				end
				if d.jorn then
					args.jorn = validArg( 'jorn' ) or tostring( d.jorn )
				end
			elseif mw.ustring.find( an, "%a" ) and an:find( "%f[%d]%d%d%d%d%f[%D][a-h]?" ) then
				-- lo [a-h]? finâl est dèstinâ a accèptar les lètres apondues quand y at un mouél d’ôvres d’un mém’ôtor lo mém’an (cf. [[:en:Template:Harvard citation no brackets#More than one work in a year]])
				an = an:match( "%f[%d]%d%d%d%d%f[%D][a-h]?" )
			end
			an = mw.uri.anchorEncode( tostring( an ) )
			table.insert( idTab, an )
			table.insert( id2Tab, an )
		end

		if #idTab > 0 then
			id = ' id="' .. table.concat( idTab ) .. '"'
			id2 = ' id="' .. table.concat( id2Tab ) .. '"'
			if id2 == id then
				id2 = false
			end
		else
			id = ''
		end
	end

	local spaninitial, spanfinal
	if id2 then
		spaninitial = '<span class="ovra"' .. id .. '><span class="ovra"' .. id2 .. '>'
		spanfinal = '</span></span>'
	else
		spaninitial = '<span class="ovra"' .. id .. '>'
		spanfinal = '</span>'
	end
	return spaninitial, spanfinal
end

-- vêre Modèlo:Modulo biblio/libelâ
function Comon.libela( args )
	local lib = args['libelâ'] or ''
	if lib ~= '' then
		lib = '<small>[' .. lib .. ']</small> '
	end
	return lib
end

-- vêre Modèlo:Comentèro biblio
function Comon.comentero( args )
	if Outils.trim( args.comentero ) then
		local a = '<div style="Margin-top:0.1em ;margin-left:2em; line-height:1.5; margin-bottom:0.5em;">'
		local b = '</div>'
		return a, args.comentero, b
	end
	return ''
end

-- vêre Modèlo:Modulo biblio/endicacion de lengoua
function Comon.endicacionDeLengoua( args, validArg )
	local lang = validArg( 'lengoua', 'lang', 'lim lengoua', 'language' )
	if lang then
		Lengoua = require( 'Module:Lengoua' )
		
		-- èprôvont lo code de lengoua complèt (nècèssèro por les lengoues avouéc un mouél de mots coment "grèco ancian")
		local codeLengoua = Lengoua.codeLengoua2( lang )

		if codeLengoua == 'frp' or codeLengoua:sub(1, 3) == 'frp-' then
			return ''
		elseif codeLengoua ~= '' then
			return Lengoua.endicacionMultilengoua{ codeLengoua }, codeLengoua
		end

		-- se la lengoua est pas étâye trovâye, considèront qu’y at un mouél de lengoues
		-- sèparacion de les lengoues s’y en at un mouél
		local listaLengoua = mw.text.split( lang, '[+,;:/ %.]+' )

		-- code lengoua principâl que serat aplicâ ux titros
		codeLengoua = Lengoua.codeLengoua2( listaLengoua[1] )

		if codeLengoua == '' then
			if type( args.categ ) == 'table' then
				args.categ.lengoua = true
			end
			return Lengoua.endicacionMultilengoua( listaLengoua )
		else
			-- calcul code de lengoua et catègoria
			local endicacionLengoua = Lengoua.endicacionMultilengoua( listaLengoua )
			if type( args.categ ) == 'table' then
				args.categ.lengoua = endicacionLengoua:find( '???', 1, true )
			end

			if codeLengoua ~= 'frp' and codeLengoua:sub(1, 3) ~= 'frp-' then
				return endicacionLengoua, codeLengoua
			elseif #listaLengoua > 1 then
				return endicacionLengoua, codeLengoua
			end
		end
	end
	return ''
end


-- voir Modèle:Module biblio/responsabilité principale
function Comon.responsabilitatPrincipala( args, validArg )

	local nom = validArg( 'nom1', 'nom', 'last1', 'last' )
	local otor = validArg( 'ôtor1', 'ôtor', 'author1', 'author' )
	local otorEnstitucional = validArg( 'ôtor enstitucionâl' )
	if not ( nom or otor or otorEnstitucional ) then
		return ''
	end

	if nom or otor then
		-- clarification des paramètres
		args['petiôt nom1'] = validArg( 'petiôt nom1', 'petiôt nom', 'first1', 'first' )
		args['postnom1'] = validArg( 'postnom1', 'postnom' )
	
		args.director1 = validArg( 'dirèctor1', 'dirèctor' )
		args['lim ôtor1'] = validArg( 'lim ôtor1', 'lim ôtor', 'author-link' )
	end
	
	-- préparation des variables
	local listaResponsablos = { }  -- contiendra un élément pour chaque nom
	local director = abr { 'dir.', 'dirèctor de publecacion' }
	local petiotnom, postnom, dir, responsablo, lim, precision, resp
	local i = 1
	

	-- boucle sur chaque nom, assemble toutes les caractéristique et ajoute l'ensemble à la liste.
	while nom or otor do
	
		-- nom de l'auteur
		if not otor then
			petiotnom = validArg( 'petiôt nom' .. i, 'first' .. i )
			nom = '<span class="nom_ôtor">' .. nom .. '</span>'
			postnom = validArg( 'postnom' .. i)
			if petiotnom and postnom then
				otor = petiotnom .. ' ' .. nom .. ' ' .. postnom
			elseif petiotnom then
				otor = petiotnom .. ' ' .. nom
			elseif postnom then
				otor = nom .. ' ' .. postnom
			else
				otor = nom
			end
		end
		
		-- lien sur l'auteur
		otor = Comon.fusionTextoLim( otor, args['lim ôtor' .. i], args.categ)

		-- définition des responsabilités
		dir = validArg( 'dirèctor' .. i )
		resp = validArg( 'rèsponsabilitât' .. i )
		if dir then
			if resp then
				precision = ' (' .. director .. ' et ' .. resp .. ')'
			else
				precision = ' (' .. director .. ')'
			end
		elseif resp then
			precision = ' (' .. resp .. ')'
		else
			precision = ''
		end

		table.insert( listaResponsablos, otor .. precision )

		i = i + 1
		nom = validArg( 'nom' .. i, 'last' .. i )
		otor = validArg( 'ôtor' .. i, 'author' .. i )
	end
	
	local listaOtors
	local et_al = ''
	if validArg( 'et al.', 'et alii' ) then
		et_al = " ''" .. abr { "et al.", "et alii (et d’ôtros)" } .. "''"
		listaOtors = table.concat( listaResponsablos, ', ' ) .. et_al
	else
		listaOtors = mw.text.listToText( listaResponsablos )
	end
	
	if otorEnstitucional then
		if #listaResponsablos > 0 then
			return listaOtors .. ', ' .. otorEnstitucional
		else
			return otorEnstitucional .. et_al
		end
	else
		return listaOtors
	end

end


-- voir Module biblio/responsabilité secondaire
function Comon.responsabilitatSecondera( args, validArg )
	local lista = { }
	
	-- fonction qui teste l'existence d'un paramètre et insérere  dans liste une abréviation discrète suivi de ce paramètre
	local function insertAbr( arg, abrev, texto )
		if arg then
			table.insert( lista, abr{ abrev, texto, nbsp='+' } .. arg )
		end
	end
	
	-- langue originale et traducteur
	local trad = validArg( 'traductor', 'trad', 'traduccion' )
	local lengouaOriginala = validArg( 'lengoua originâla' )
	if lengouaOriginala then
		local Lengouadata = mw.loadData( 'Module:Lengoua/Data' )
		lengouaOriginala = Lengouadata[lengouaOriginala] and Lengouadata[lengouaOriginala].nom
	end
	if lengouaOriginala then
		if trad then
			 trad = ' per ' .. trad
		else
			trad = ''
		end
		if mw.ustring.sub( lengouaOriginala, 1, 1 ):match( '[a, â, à, e, ê, é, è, i, o, ô, u, y]' ) or
			lengouaOriginala == 'hèbrô' then
			trad = "de l’" .. lengouaOriginala .. trad
		else
			trad = 'du ' .. lengouaOriginala .. trad
		end
	end
	insertAbr( trad, 'trad.', 'traduccion' )
	
	-- ajout des différents responsables
	insertAbr( validArg( 'téta de lévro' ), 'téta de l.', 'téta de lévro' )
	if validArg( 'cova de lévro' ) then
		table.insert( lista, 'cova de lévro ' .. args.postface )
	end
	insertAbr( validArg( 'ilustrator', 'ilustracions' ), 'il.', 'ilustracions' )
	insertAbr( validArg( 'fotografo', 'fotografies' ), 'fotogr.', 'fotografies' )
	if validArg( 'champ libro' ) then
		table.insert( lista, args['champ libro'] )
	end
	
	-- concaténation de l'ensemble
	local texto = table.concat( lista, ', ')
	if texto ~= '' then
		return ' (' .. texto .. ')'
	end
end

---
-- voir émule le modèle:Inscription date
-- la détection des arguments permet d'utilisé la fonction depuis un modèle, depuis invoke, ou depuis une autre fonction.
-- pour facilité l'écriture de lua, annee (sans accent) est accepté lors de l'appel depuis lua.
function Comon.enscripcionData( frame )
	local args = Outils.extractArgs( frame )
	local an = Outils.notEmpty( args['an'], args.an, args.year )
	if an then
		if an:match( '^%-?%d+$' ) then
			-- si l'année est correctement renseigné, on essaye de trouver le mois
			local mes = Outils.notEmpty( args.mes, args.month, args.seson )
			mes = string.lower( mes or '' )
			local jorn = Outils.notEmpty( args.jorn, args.day, args['quantiémo'] )
			local t, jma = Data.validacionJornMesAn{ jorn, mes, an }
			if t then
				jma.nolinks = true
				return Data._modeloData( jma )
			else
				local date = { jorn }
				table.insert( date, mes )
				table.insert( date, an )
				return '<time class="nowrap" datetime="' .. an .. '">' .. table.concat( date, ' ' ) .. '</time>'
			end
		else
			return Comon.enscripcionData{ date = an }
		end
	else
		-- si annee n'est pas précisé, on utilise la paramètre date
		local date = Outils.validTextArg( args, 'dâta' )
		if date then
			date = date:lower()
			-- Date iso avec l'heure : suppression de l'heure
			date = date:gsub( '^(%d%d%d%d%-%d%d%-%d%d)t[%d:+-]+$', '%1')
			local t, jma = Data.separacionJornMesAn( date )
			if t then
				jma.nolinks = true
				return Data._modeloData( jma )
			else
				-- date non reconnue, on essaye Month day, year
				local mes, jorn, an = mw.ustring.match( date, '^([%a]+)%s*(%d%d?)[,%s]+(%d+)$' )
				local t, jma = Data.validacionJornMesAn{ jorn, mes, an }
				if an and t then
					jma.nolinks = true
					return Data._modeloData( jma )
				end
			end
			return date
		end
	end
	return ''
end

-- retire toutes le lien interne, externe et balise html pour ne garder que le texte brut.
local function neteyajoTexto( texto )
	if type( texto ) == 'string'  then
		if texto:match( '[%[<]' ) then
			local function textoDuLim( l, t )
				return ( t ~= '' and t ) or l
			end
			-- nettoyage des liens interne
			texto = texto:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', textoDuLim )
			-- nettoyage des liens externes
				:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
				:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
			-- nettoyage des balise html
				:gsub( '%b<>', '' )
		end
		return texto
	end
end

-- voir Modèle:COinS bibliographique
-- NISO Z39.88
-- http://www.openurl.info/registry
function Comon.COinS( args, validArg, genro ) 
	local lista = { }
	
	-- insertlist ajoute à la table 'liste' un couple 'nom Coins normalisé' - 'donnée'
	-- Si istexte = true, le deuxième élément de tab est considéré comme du texte,
	-- sinon comme le nom d'un paramètre.
	local function insertList( key, value, prefix )
		prefix = prefix or ''
		if type( value ) == 'string' and value ~= '' then
			table.insert( lista, key .. '=' .. mw.uri.encode( prefix .. value ) )
		end
	end
		
	-- norme du COinS
	insertList( 'ctx_ver', 'Z39.88-2004' )
	
	-- genre, titre et sous-titre
	if genro == 'articllo' then
		insertList( 'rft_val_fmt', 'info:ofi/fmt:kev:mtx:jornal' )
		insertList( 'rft.genro', 'articllo' )
		insertList( 'rft.atitle', neteyajoTexto( args.titro ) )
		insertList( 'rft.jtitle', neteyajoTexto( validArg( 'pèriodico', 'reviua', 'jornal' ) ) )
		insertList( 'rft.issue', validArg( 'numerô', 'no', 'issue' ) )
	else
		-- genre = ouvrage ou chaitre
		insertList( 'rft_val_fmt','info:ofi/fmt:kev:mtx:book' )
		if genro == 'chapitro' then
			insertList( 'rft.genro', 'bookitem' )
		else
			insertList( 'rft.genro', 'book' )
		end
		insertList( 'rft.btitle', neteyajoTexto( args.titro ) )
		insertList( 'rft.atitle', neteyajoTexto( validArg( 'titro chapitro', 'titroChap' ) ) )
		
		-- donnée sur l'éditeur
		insertList( 'rft.place', textoLim( validArg( 'endrêt', 'locacion' ) ), nil )
		insertList( 'rft.pub', textoLim( validArg( 'èditor', 'èdicion' ) ), nil )
		insertList( 'rft.edition', textoLim( validArg( "numerô d’èdicion", "numerô èdicion" ) ), nil )
	end
	insertList( 'rft.stitle', args['sot-titro'] )
	
	-- Premier auteur, séparé en noms et prénoms
	local nom = textoLim( validArg( 'nom1', 'nom', 'last1', 'last' ) )
	if nom then
		insertList( 'rft.aulast', nom )
		insertList( 'rft.aufirst', validArg( 'petiôt nom1', 'petiôt nom', 'first1', 'first' ) )
		insertList( 'rtf.ausuffix ', validArg( 'postnom1', 'postnom' ) )
	else
		local otor = textoLim( validArg( 'ôtor', 'ôtor1' ) )
		if otor then 
			insertList( 'rft.au', otor )
		end
	end
	
	-- les autres auteurs, la norme ne prévoit pas de séparation
	for i = 2, 20 do
		local nom_i = textoLim( validArg( 'nom' .. i ) )
		if nom_i then
			local petiotnom_i = validArg( 'petiôt nom' .. i )
			local postnom_i = validArg( 'postnom' .. i)
			if petiotnom_i and postnom_i then
				insertList( 'rft.au', nom_i .. ' ' .. postnom_i .. ', ' .. prenom_i )
			elseif prenom_i then
				insertList( 'rft.au', nom_i .. ', ' .. prenom_i )
			elseif postnom_i then
				insertList( 'rft.au', nom_i .. ' ' .. postnom_i )
			else
				insertList( 'rft.au', nom_i )
			end
		else
			local otor_i = textoLim( validArg( 'ôtor' .. i ) )
			if otor_i then
				insertList( 'rft.au', otor_i )
			else
				break
			end
		end
	end
	
	if validArg( 'ôtor enstitucionâl' ) then
		insertList( 'rft.aucorp', args['ôtor enstitucionâl'] )
	end
	
	-- date
	local dataPub = Data.dataISO( args )
	if dataPub then 
		insertList( 'rft.date', dataPub )
	else
		insertList( 'rft.date', args.date )
	end
	
	-- doonées physique de la publication
	insertList( 'rft.volume', validArg( 'volumo', 'vol' ) )
	insertList( 'rft.pages', validArg( 'passâjo', 'pâge' ) )
	insertList( 'rft.spage', args['pâge comencement chapitro'] )
	insertList( 'rft.tpages', args['pâges totâles'] )
	
	
	-- références internationales
	insertList( 'rft.isbn', args.isbn )
	insertList( 'rft.issn', args.issn )
	insertList( 'rft_id', args.doi, 'info:doi/' )
	insertList( 'rft_id', args.pmid, 'info:pmid/' )
	insertList( 'rft_id', args.oclc, 'info:oclcnum/' )
	insertList( 'rft_id', args.url )
	
	-- referer : page Wikipedia ou se trouve cette référence
	insertList( 'rfr_id', 'frp.wikipedia.org:' .. mw.title.getCurrentTitle().fullText, 'info:sid/' )

	local contextObject = table.concat( lista, '&' )

	return '<span class="Z3988" title="' .. contextObject .. '"></span>'
end


return Comon