Module:Titulus

E Wikisource
Jump to navigation Jump to search


this module contains the code for Template:Titulus; receives the template's parameters, and converts them in strings generating the text to be visualized in the titulus box and the categories in which to place the book, based on the author, year, genre(s) and source available.

The module also checks if the page is a subpage (if it has slashes / in the title), and in this case does not add the categories.


p = {}

function p.titulus(frame)
    pframe = frame:getParent()
    config = frame.args
    args = pframe.args
   
--template parameters
	operaetitulus = config["OperaeTitulus"]
	subtitulus = config["SubTitulus"] or ""
	scriptor = config["Scriptor"] or ""
	liber = config["Liber"] or ""
	annus = config["Annus"] or ""
	annusmonstratus = config["AnnusMonstratus"] or ""
	operaewikipagina = config["OperaeWikiPagina"] or ""
	fons = config["Fons"] or ""
	editio = config["Editio"] or ""
	recensor = config["Recensor"] or ""
	genera = config["Genera"] or ""
	frons = config["Frons"] or ""
	scriptor2 = config["Scriptor2"]
	scriptor3 = config["Scriptor3"]
	scriptor4 = config["Scriptor4"]
	scriptor5 = config["Scriptor5"]
	scriptor6 = config["Scriptor6"]
	
--initializes internal variables, for ease of concatenation
	categoriaomnia=""; categoriacapiti = ""; categoriascriptoris = ""; categorialibri = ""; anninumerus = ""; categoriaanni = ""; categoriagenerum = ""
	nexusscriptoris2 = ""; nexusscriptoris3 = ""; nexusscriptoris4 = ""; nexusscriptoris5 = ""; nexusscriptoris6 = ""
	categoriascriptoris2 = ""; categoriascriptoris3 = ""; categoriascriptoris4 = ""; categoriascriptoris5 = ""; categoriascriptoris6 = ""
--fetches the title of the page
	titulus = mw.title.getCurrentTitle().text
	
--checks if the page is a subpage, i.e. if it has slashes /
	if mw.ustring.find(titulus, "/") then
		subpagina = true
	else
		subpagina = false
	end
	
--Generating the strings that translate the templates' parameters

--SCRIPTOR (author of the work)
	if scriptor == "Anonimus" or scriptor == "0" then --for anonimous works
		nexusscriptoris= "Sine Nomine"; 
		categoriascriptoris = "[[Categoria:Opera sine nomine scripta|".. titulus.. "]]" --adds the work in the Categoria:Opera sine nomine scripta
			
	else --when the author is known
		nexusscriptoris = "[[Scriptor:".. scriptor.. "|".. scriptor.. "]]"; 
		if mw.title.new("Scriptor:"..scriptor).isRedirect then
			scriptor = tostring(mw.title.new("Scriptor:".. scriptor).redirectTarget) --fixes the scriptor's name, if redirect, to insert it in the category
			scriptor = string.gsub(scriptor, "Scriptor:", "")
		end
		categoriascriptoris = "[[Categoria:Opera quae ".. scriptor.. " scripsit|".. titulus.. "]]" --adds the work in the author's category
	end
	
--SCRIPTOR2, 3 etc., for works with more authors (up to 5)
	if scriptor2 ~= "0" then --2
		nexusscriptoris2 = ", [[Scriptor:".. scriptor2.. "|".. scriptor2.. "]]"; 
		if mw.title.new("Scriptor:"..scriptor2).isRedirect then
			scriptor2 = tostring(mw.title.new("Scriptor:".. scriptor2).redirectTarget) --fixes the scriptor's name, if redirect, to insert it in the category
			scriptor2 = string.gsub(scriptor2, "Scriptor:", "")
		end
		categoriascriptoris2 = "[[Categoria:Opera quae ".. scriptor2.. " scripsit|".. titulus.. "]]"
	end
	if scriptor3 ~= "0" then --3
		nexusscriptoris3 = ", [[Scriptor:".. scriptor3.. "|".. scriptor3.. "]]"; 
		if mw.title.new("Scriptor:"..scriptor3).isRedirect then
			scriptor3 = tostring(mw.title.new("Scriptor:".. scriptor3).redirectTarget) --fixes the scriptor's name, if redirect, to insert it in the category
			scriptor3 = string.gsub(scriptor3, "Scriptor:", "")
		end
		categoriascriptoris3 = "[[Categoria:Opera quae ".. scriptor3.. " scripsit|".. titulus.. "]]"
	end
	if scriptor4 ~= "0" then --4
		nexusscriptoris4 = ", [[Scriptor:".. scriptor4.. "|".. scriptor4.. "]]"; 
		if mw.title.new("Scriptor:"..scriptor4).isRedirect then
			scriptor4 = tostring(mw.title.new("Scriptor:".. scriptor4).redirectTarget) --fixes the scriptor's name, if redirect, to insert it in the category
			scriptor4 = string.gsub(scriptor4, "Scriptor:", "")
		end
		categoriascriptoris2 = "[[Categoria:Opera quae ".. scriptor4.. " scripsit|".. titulus.. "]]"
	end
	if scriptor5 ~= "0" then --5
		nexusscriptoris5 = ", [[Scriptor:".. scriptor5.. "|".. scriptor5.. "]]"; 
		if mw.title.new("Scriptor:"..scriptor5).isRedirect then
			scriptor5 = tostring(mw.title.new("Scriptor:".. scriptor5).redirectTarget) --fixes the scriptor's name, if redirect, to insert it in the category
			scriptor5 = string.gsub(scriptor5, "Scriptor:", "")
		end
		categoriascriptoris5 = "[[Categoria:Opera quae ".. scriptor5.. " scripsit|".. titulus.. "]]"
	end
	if scriptor6 ~= "0" then --6
		nexusscriptoris6 = ", [[Scriptor:".. scriptor6.. "|".. scriptor6.. "]]"; 
		if mw.title.new("Scriptor:"..scriptor6).isRedirect then
			scriptor6 = tostring(mw.title.new("Scriptor:".. scriptor6).redirectTarget) --fixes the scriptor's name, if redirect, to insert it in the category
			scriptor6 = string.gsub(scriptor6, "Scriptor:", "")
		end
		categoriascriptoris6 = "[[Categoria:Opera quae ".. scriptor6.. " scripsit|".. titulus.. "]]"
	end

--OPERAETITULUS (title oh the work)
	if operaetitulus == "0" then error('quaeso titulum operis in campo |OperaeTitulus= insere') end --if the title is not specified, calls for error

	if subpagina == false then --if the page is not a subpage
		nexusoperaetituli = operaetitulus --does not gerate a link
	elseif subpagina == true then --if the page is a subpage
		if operaewikipagina > "0" then 
			nexusoperaetituli = "[[".. operaewikipagina.. "|".. operaetitulus.. "]]"
		else
			nexusoperaetituli = "[[".. operaetitulus.. "]]"
		end
	end
	
--SUBTITULUS (subtitle of the work)
	if subtitulus ~= "0" then
		nexussubtituli = subtitulus
	else
		nexussubtituli = ""
	end
	
--ANNUS (publication year)
	if annus ~= "0" then --if the "annus" parameter is defined...
		if annusmonstratus > "0" then
			nexusanni = annusmonstratus --visualizes a different value from that used for categorizations, for cases like "inter 1650 et 1655" or similar
		else
			nexusanni = annus --the year will be visualized just as inserted in the template
		end
		if mw.ustring.find(annus, "aCn") or mw.ustring.find(annus, "a.C.n.") or mw.ustring.find(annus, "a C n") or mw.ustring.find(annus, "a. C. n.") or mw.ustring.find(annus, "a. Ch. n.") or mw.ustring.find(annus, "a.Ch.n.") or mw.ustring.find(annus, "a.Ch") or mw.ustring.find(annus, "aCh") then --looks for posssible permutations of "a.C.n."
			acn = " ante Christum"
		else 
			acn = ""
		end
		--looks for the century (which should be written in Roman numerals), and translates it into category description
		if mw.ustring.find(annus, "XXI") then
			saeculum = "primi vicesimi"
		elseif mw.ustring.find(annus, "XX") then
			saeculum = "vicesimi"
		elseif mw.ustring.find(annus, "XIX") then
			saeculum = "undevicesimi"
		elseif mw.ustring.find(annus, "XVIII") then
			saeculum = "duodevicesimi"
		elseif mw.ustring.find(annus, "XVII") then
			saeculum = "septimi decimi"
		elseif mw.ustring.find(annus, "XVI") then
			saeculum = "sexti decimi"
		elseif mw.ustring.find(annus, "XIV") then
			saeculum = "quarti decimi"
		elseif mw.ustring.find(annus, "XV") then
			saeculum = "quinti decimi"
		elseif mw.ustring.find(annus, "XIII") then
			saeculum = "tertii decimi"
		elseif mw.ustring.find(annus, "XII") then
			saeculum = "duodecimi"
		elseif mw.ustring.find(annus, "XI") then
			saeculum = "undecimi"
		elseif mw.ustring.find(annus, "IX") then
			saeculum = "noni"
		elseif mw.ustring.find(annus, "X") then
			saeculum = "decimi"
		elseif mw.ustring.find(annus, "VIII") then
			saeculum = "octavi"
		elseif mw.ustring.find(annus, "VII") then
			saeculum = "septimi"
		elseif mw.ustring.find(annus, "VI") then
			saeculum = "sexti"
		elseif mw.ustring.find(annus, "IV") then
			saeculum = "quarti"
		elseif mw.ustring.find(annus, "V") then
			saeculum = "quinti"
		elseif mw.ustring.find(annus, "III") then
			saeculum = "tertii"
		elseif mw.ustring.find(annus, "II") then
			saeculum = "secundi"
		elseif mw.ustring.find(annus, "II") then
			saeculum = "primi"
			
		else --if there is not a roman numeral, will look for year number
			anninumerus = tonumber(string.gsub(annus, "%D", ""), 10) --removes from "annus" anything that is not a digit; than translates the year into the corresponding century
			if anninumerus == nil then anninumerus = 0 end --avoids script error if the year is nonstandard (the page will go in Categoria:Saeculi incogniti opera)
			if anninumerus <= 99 then
				saeculum = "primi"
			elseif anninumerus <= 199 then
				saeculum = "secundi"	
			elseif anninumerus <= 299 then
				saeculum = "tertii"
			elseif anninumerus <= 399 then
				saeculum = "quarti"
			elseif anninumerus <= 499 then
				saeculum = "quinti"
			elseif anninumerus <= 599 then
				saeculum = "sexti"
			elseif anninumerus <= 699 then
				saeculum = "septimi"
			elseif anninumerus <= 799 then
				saeculum = "octavi"
			elseif anninumerus <= 899 then
				saeculum = "noni"
			elseif anninumerus <= 999 then
				saeculum = "decimi"
			elseif anninumerus <= 1099 then
				saeculum = "undecimi"
			elseif anninumerus <= 1199 then
				saeculum = "duodecimi"
			elseif anninumerus <= 1299 then
				saeculum = "tertii decimi"
			elseif anninumerus <= 1399 then
				saeculum = "quarti decimi"
			elseif anninumerus <= 1499 then
				saeculum = "quinti decimi"
			elseif anninumerus <= 1599 then
				saeculum = "sexti decimi"
			elseif anninumerus <= 1699 then
				saeculum = "septimi decimi"
			elseif anninumerus <= 1799 then
				saeculum = "duodevicesimi"
			elseif anninumerus <= 1899 then
				saeculum = "undevicesimi"
			elseif anninumerus <= 1999 then
				saeculum = "vicesimi"
			elseif anninumerus <= 2099 then
				saeculum = "primi vicesimi"
			elseif anninumerus <= 2199 then
				saeculum = "secundi vicesimi" --well, who knows...
			else --if cant' find the year, inserts the century as "incognitus"
				saeculum = "incogniti"
			end
		end
		categoriaanni = "[[Categoria:Saeculi ".. saeculum.. acn.. " opera|".. titulus.. "]]" --generates the category by putting together the "saeculum" and the eventuale "aCn"

	else --if the annus parameter is not compiled, the year is unknown and the corresponding category is added
	nexusanni = "anno incognito"
	categoriaanni = "[[Categoria:Saeculi incogniti opera|".. titulus.. "]]"
	end
	
--RECENSOR and EDITIO, for edition year and curator
	if recensor ~= "0" then
		editioest=true
		nexusrecensoris= "[[Scriptor:".. recensor.. "|".. recensor.. "]] recensuit"
	else
		nexusrecensoris = ""
	end
	if editio ~= "0" then
		if recensor > "0" then comma = "; " else comma = "" end
		nexuseditionis= "</br>editio: ".. editio.. comma
		categoriaeditionis = "[[Categoria:Opera cum editione|".. titulus.. "]]"
	else
		nexuseditionis = "editio: incognita"
		categoriaeditionis = "[[Categoria:Opera sine editione|".. titulus.. "]]"
	end
	
--FONS, generates a link to the source of the text
	if fons ~= "0" then
		nexusfontis = "fons: ".. fons
		categoriafontis = "[[Categoria:Opera cum fonte|".. titulus.. "]]"
	else
		nexusfontis = "fons: incognitus" 
		if mw.title.new("Disputatio:"..mw.title.getCurrentTitle().rootText).exists then --TEMPORARY PATCH (25/06/20): looks for the discussion page to add the "sine fonte" category
			categoriafontis = "[[Categoria:Opera sine fonte|".. titulus.. "]] [[Categoria:Opera cum fonte in disputatione|".. titulus.. "]]" --this category is only a TEMPORARY working tool, the whole string will be deleted after all the works are properly categorized!
		else
			categoriafontis = "[[Categoria:Opera sine fonte|".. titulus.. "]]"
		end	
	end
	nexusfontis = nexusfontis.. categoriafontis
	--LIBER (generates a link to the scanned copy OR, lacking this, the discussion page)
	if liber ~= "0" then
	nexuslibri = "fons: [[Liber:".. liber.. "|librum vide]]"
		if mw.title.new("Liber:"..liber).exists then
			categoriafontis = "[[Categoria:Opera cum libro digitale".. "|".. titulus.. "]]"
		else
			error("Librum ".. liber.. " deest! - there is not such index!")
		end
	nexusfontis = nexuslibri.. categoriafontis
	end 

--GENERA (puts the page into the "genera" categories)
	if genera ~= "0" then --if the "genera" parameter is defined...
		genera = string.gsub(genera, ", ", ",") --adjusts the commas
		genera = string.gsub(genera, ",", "]][[Categoria:") --splits the arguments, separated by commas, generating a category for each one
		categoriagenerum = "[[Categoria:".. genera.. "]]"
	else --if the "genera" parameter is not defined...
		categoriagenerum = "[[Categoria:Opera sine generibus]]" --adds the corresponding category
	end
	
--FRONS (locates a front page for exports)
	if frons ~= "0" then
		nexusfrontis = frons
	else
		nexusfrontis = ""
	end
	
--puts the generic category "Opera omnia", collecting all published works
	categoriaomnia = "[[Categoria:Opera omnia".. "|".. titulus.. "]]"
	
--Retieves Wikidata item
	item = mw.wikibase.getEntity()	
	id = mw.wikibase.getEntityIdForCurrentPage()
	
	if id == nil then
		wikidata_cat = "[[Categoria:Opera sine re wikidata".. "|".. titulus.. "]]"
	else
		wikidata_cat = ""
	end
			
	if subpagina == true then
	categoriacapiti = "[[Categoria:Capita ex operibus".. "|".. titulus.. "]]" --adds the "capita" (''chapter'') category 
	categoriascriptoris = ""
	categoriafontis = ""
	if annus == "0" then nexusanni = "" end
	categoriaanni = ""
	categoriagenerum = ""
	nexusfrontis = ""
	categoriaomnia = ""
	if editio == "0" then nexuseditionis = "" end
	if fons == "0" then nexusfontis = "" end
	if liber ~= "0" then nexusfontis = nexuslibri end
	categoriaeditionis = ""
	wikidata_cat = ""
	end


--builds the table
	tab = '<div id="ws-data" class="ws-noexport" style="display:none; speak:none">'
	tab = tab.. '<span id="ws-author">'.. scriptor..  '</span>'
	tab = tab.. '<span id="ws-title">'.. operaetitulus.. '</span>'
	tab = tab.. '<span id="ws-scan">'.. liber.. '</span>'
	tab = tab.. '<span id="ws-year">'.. annus.. '</span>'
if nexusfrontis > "0" then
	tab = tab.. '<span id="ws-cover">'.. nexusfrontis.. '</span>'
	tab = tab.. '</div>'
else
    tab = tab.. '</div>'
end
	tab = tab.. '<div class="titulusHeaderBox">'
    tab = tab.. '<div class="ws-noexport" style="padding:1ex;font-size:120%; font-weight: bold;">'
    tab = tab.. categoriaomnia.. nexusscriptoris.. categoriascriptoris.. nexusscriptoris2.. categoriascriptoris2.. nexusscriptoris3.. categoriascriptoris3.. nexusscriptoris4.. categoriascriptoris4.. nexusscriptoris5.. categoriascriptoris5.. nexusscriptoris6.. categoriascriptoris6
    tab = tab.. '</div>'
    tab = tab.. '<div class="ws-noexport" style="padding:1ex;font-size:140%;font-variant:small-caps; font-weight: bold;">'
	tab = tab.. nexusoperaetituli.. categoriacapiti.. categoriagenerum
	tab = tab.. '</div>'
	tab = tab.. '<div class="ws-noexport" style="padding:1ex;font-size:110%; font-weight:bold;">'
    tab = tab.. nexussubtituli
    tab = tab.. '</div>'
	tab = tab.. '<div class="ws-noexport" class="ws-noexport" style="padding:1ex; font-weight: bold;">'
    tab = tab.. nexusanni.. categoriaanni
    tab = tab.. '</div>'
    tab = tab.. '<div align="left" class="ws-noexport" style="padding:1ex;font-size:65%; font-weight:bold;">'
    tab = tab.. nexuseditionis.. nexusrecensoris.. categoriaeditionis.. "</br>".. nexusfontis.. wikidata_cat
    tab = tab.. '</div>'
	tab = tab.. '</div>'
	tab = tab.. '<div title="beginning"></div>'
	tab = tab.. '<div class="text">'
	
return tab
    
    end
return p