Modulo:Autore
La documentazione per questo modulo può essere creata in Modulo:Autore/man
-- elemento su Wikidata
local item = mw.wikibase.getEntityObject()
local c = require('Modulo:Common')
local d = require('Modulo:Date')
local controlloAutorita = require('Modulo:Controllo di autorità')
local p = {}
-- lingua predefinfita
local lang = mw.language.getContentLanguage()
local attrs = {
nome = 'Nome',
cognome = 'Cognome',
professioneNazionalita = 'Professione e nazionalità'
}
function p.autodetect(frame)
local aut = frame:getParent().args[1]
local t = mw.title.getCurrentTitle().text
if aut == nil or aut == '' then
local m = string.match(t,'^Libbre \'e (.+)$')
if m == nil then
m = string.match(t,'^Fatiche \'e (.+)$')
end
if m == nil then
m = string.match(t,'addò stà citate (.+)$')
end
if m ~= nil then
return m
end
end
return aut
end
function p.dato(frame)
local page = mw.title.new(frame:getParent().args[1], 102)
local c = string.gsub(page:getContent(), '^(.*%{%{%s*[Aa]utore)(\n*%|.-%}%}).*$', '{{DatoAutore/dato|dato='..frame:getParent().args[2]..'%2')
return frame:preprocess(c)
end
function p.prendiDato(frame)
return frame:getParent().args[attrs[frame:getParent().args.dato]]
end
-- controllo di autorita'
function cda()
if item then return controlloAutorita.box(item) end
end
-- stringa da restituire
local output = ''
local outputCat = '' --le categorie le metto qui, per tenerle separate e metterle poi in fondo al testo generato
function add(str)
output = output..str
end
-- aggiunge una categoria (solo in ns Autore)
function addCat(name)
if c.isNSAutore() then
outputCat = outputCat .. c.category(mw.text.trim(name))
end
end
-- richiama un template che ha il compito di aggiungere una o più categorie (solo in ns Autore)
function addTmp(title, args)
if c.isNSAutore() then
outputCat = outputCat .. c.template(title, args)
end
end
--ritorna true se autore umano, false altrimenti
function p.isHuman()
return c.instanceof(5)
end
--data una stringa di solo testo contenente giono e mese, ritorna il link a quel giorno e mese
function linkGiornoMese(giornoMese)
if giornoMese then return c.template('DataGiorno', {giornoMese} )
else return '' end
end
--data una stringa di solo testo contenente l'anno, ritorna il link a quell'anno
function linkAnno(anno)
if anno then return c.template('Autore/Anno', {anno} )
else return '' end
end
--data una stringa di solo testo contenente il secolo, ritorna il link a quel secolo
function linkSecolo(secolo)
local stringa = ''
if secolo then
for sec in string.gmatch(secolo, '([^/]+)') do
if stringa ~= '' then
stringa = stringa .. '/'
end
local catname = 'Auture d\'\'o '
if sec == 'antichità' then
catname = 'Auture \'e ll\''
end
stringa = stringa .. c.category(catname..sec, sec, true)
end
end
return stringa
end
-- crea un collegamento a una categoria (non vuota) relativa all'autore
function catLink(cat, icon)
local fcat = mw.ustring.format(cat, nomeAutore)
if c.pagesInCat(fcat) > 0 then
add('<div>[[File:'..(icon or 'Nuvola filesystems folder open.png')..'|20px]] \'\''
..c.category(fcat, mw.ustring.format(cat, (args.Nome or '')..' '..(args.Cognome or '')), true)
..' ('..c.pagesInCat(fcat)..')\'\'</div>')
end
end
-- l'autore è maschio o femmina?
function p.sesso()
return c.getLabelFromValue(c.getClaimValue(c.getSingleClaimByProperty('P21')))
end
-- ritorna l'immagine che rappresenta l'autore (la prima, se ce ne sono più di una)
function p.immagine()
if p.isHuman() then
return c.getSingleClaimValueByProperty('P18') -- immagine
or c.getSingleClaimValueByProperty('P94') -- coat of arms image
or c.getSingleClaimValueByProperty('P41') -- bandiera
else
return c.getSingleClaimValueByProperty('P41') -- bandiera
or c.getSingleClaimValueByProperty('P94') -- coat of arms image
or c.getSingleClaimValueByProperty('P18') -- immagine
end
end
function p.attivita(full)
local list = {}
for str in mw.text.gsplit(full, '/', true) do
table.insert(list, lang:lcfirst(str))
end
return mw.text.listToText(list)
end
--ritorna una lista di note <ref>testo</ref> leggendo P854 (Reference URL) e P248 (stated in)
function getRefList(references)
refList = ''
for i, r in pairs(references or {}) do
if r.snaks then
local refURL = r.snaks.P854
local refStatedIn = r.snaks.P248
local refLink, refText, refLabel
if refStatedIn and not c.empty(refStatedIn) then
source = 'Q'..refStatedIn[1].datavalue.value["numeric-id"]
refLabel = mw.wikibase.label(source)
refText = refLabel
if source == 'Q1128537' then
dbiLink = c.getSingleClaimValueByProperty('P1986')
if dbiLink then
refText = '[http://www.treccani.it/enciclopedia/' .. dbiLink .. '_(Dizionario-Biografico) ' .. mw.wikibase.label(source) .. ']'
end
elseif source == 'Q36578' then
gndLink = c.getSingleClaimValueByProperty('P227')
if gndLink then
refText = '[http://d-nb.info/gnd/' .. gndLink .. ' ' .. mw.wikibase.label(source) .. ']'
end
end
--cerco l'url della fonte in "described by source" (P1343)
describedBySource = c.getClaimByPropertyAndValue('P1343', source)
if describedBySource and describedBySource.qualifiers then
sourceURL = describedBySource.qualifiers.P854
if sourceURL and not c.empty(sourceURL) then
refURL = sourceURL
end
end
end
if refURL and not c.empty(refURL) then
if refLabel == nil then
refLabel = 'Fonte'
end
refLink = refURL[1].datavalue.value
refText = '['..refLink..' '..refLabel..']'
end
if refText then
refList = refList .. mw.getCurrentFrame():extensionTag( 'ref', refText, { name = refText } )
end
end
end
return refList
end
--ritorna le 4 componenti della data formattate, più la stringa finale con i link e l'eventuale "circa"
local function getFormattedDate(value, prima, dopo, isEsatta, refList)
local data = {
dayMonth = '',
decade = '',
year = '',
century = '',
stringa = '',
esatta = isEsatta,
calendar = nil,
precision = nil
}
date = d.getDate(value)
if date then
data.calendar = date.calendar
data.precision = date.precision
if date.precision >= 9 and date.precision <= 11 then
data.year = d.formatYear(date)
end
--precision: 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day
if date.precision == 7 then
data.stringa = linkSecolo(d.formatCentury(date)) -- "XVI secolo"
elseif date.precision == 8 then
data.decade = d.formatDecade(date)
data.stringa = data.decade .. ' del ' .. linkSecolo(d.formatCentury(date)) -- "anni 50 del XVI secolo"
elseif date.precision == 9 then
data.stringa = linkAnno(d.formatYear(date)) -- "1556"; "24 a.C."
elseif date.precision == 10 then
data.dayMonth = d.formatMonth(date)
data.stringa = linkGiornoMese(data.dayMonth) .. ' ' .. linkAnno(d.formatYear(date)) -- agosto 1556
elseif date.precision == 11 then
data.dayMonth = d.formatDayMonth(date)
data.stringa = linkGiornoMese(data.dayMonth) .. ' ' .. linkAnno(d.formatYear(date)) -- 1° agosto 1556
end
--mostra il tipo di calendario (solo per precisioni almeno di mese, e solo per il periodo in cui alcuni usavano ancora il giuliano)
if date.precision >= 10 and date.year and date.year >= 1582 and date.year <= 1924 then
data.stringa = data.stringa .. '<sup>' .. d.linkCalendar(value.calendarmodel) .. '</sup>'
end
--la frasetta prima e dopo la data
if prima then data.stringa = prima .. ' ' .. data.stringa end
if dopo then data.stringa = data.stringa .. ' ' .. dopo end
--aggiungo le note (TODO: per il momento escludo il ns Opera per evitare le note "inutili", da vedere come sistemare meglio)
if c.notEmpty(data.stringa) and c.isNSAutore() then
data.stringa = data.stringa .. getRefList(refList)
end
--categoria di controllo per date < 15 Oct 1582 ma segnate come GREGORIANE
if date.precision >= 10 and date.year and date.year <= 1582 and date.calendar == 'gregoriano' then
addCat('Autori con date fino al 1582 segnate come gregoriane')
end
end
return data
end
--ritorna la lista di tutte le date per la proprietà indicata (P569=nascita, P570=morte), con la stringa finale
function getAllDates(property)
local list = {} --lista di tutte le date
local stringa --stringa con il testo finale con i link, e concatenato da "o" oppure "tra il e il"
claims = c.sortClaimsByDate(c.getClaimsByProperty(property) or {})
for index, claim in pairs(claims) do
local val = c.getClaimValue(claim)
local preStringa = ''
local circa = c.getLabelFromValue(c.getQualifierValueFromClaim(claim, 'P1480'));
local ante = c.getQualifierValueFromClaim(claim, 'P1326')
local post = c.getQualifierValueFromClaim(claim, 'P1319')
if val then
preStringa = getFormattedDate(val, nil, circa, (circa == nil), nil).stringa .. ', '
end
if ante and post then
--caso "tra il"
local list = {}
table.insert(list, getFormattedDate(post, nil, nil, true, nil))
table.insert(list, getFormattedDate(ante, nil, nil, true, claim.references))
stringa = preStringa .. 'tra il ' .. list[1].stringa .. ' e il ' .. list[2].stringa
--in questo caso ritorniamo direttamente questa coppia di date con la stringa "tra il"
return list, stringa
elseif ante ~= nil and post == nil then
--caso ante
table.insert(list, getFormattedDate(ante, preStringa .. 'primma d\'\'o', nil, false, claim.references))
elseif ante == nil and post ~= nil then
--caso post
table.insert(list, getFormattedDate(post, preStringa .. 'aroppo d\'\'o', nil, false, claim.references))
elseif val then
--caso normale
table.insert(list, getFormattedDate(val, nil, circa, (circa == nil), claim.references))
end
end
--a questo punto va costruita la stringa finale con gli "o" tra le varie date
local stringaList = {}
for i, e in pairs(list) do
if c.notEmpty(e.stringa) then table.insert(stringaList, e.stringa) end
end
stringa = mw.text.listToText(stringaList, ' o ', ' o ')
--default se non ci sono valori
if stringa == '' then stringa = '...' end
return list, stringa
end
--ritorna tutte le date di nascita (o di fondazione/creazione)
function getBirthDates()
local dates, stringa = getAllDates('P569') --data di nascita
if c.empty(dates) then
dates, stringa = getAllDates('P571') --data di fondazione
end
return dates, stringa
end
--ritorna tutte le date di morte (o di scioglimento/chiusura)
function getDeathDates()
local dates, stringa = getAllDates('P570') --data di morte
if c.empty(dates) then
dates, stringa = getAllDates('P576') --data di scioglimento
end
return dates, stringa
end
--ritorna le date del floruit
function getFloruitDates()
--property floruit
local dates, stringa = getAllDates('P1317')
if c.size(dates) == 2 then
stringa = 'tra il '..dates[1].stringa..' e il '..dates[2].stringa
else
--properties work period start/end
dateStart, stringaStart = getAllDates('P2031')
dateEnd, stringaEnd = getAllDates('P2032')
if c.size(dateStart) == 1 and c.size(dateEnd) == 1 then
dates = {}
table.insert(dates, dateStart[1])
table.insert(dates, dateEnd[1])
stringa = 'tra il '..stringaStart..' e il '..stringaEnd
end
end
return dates, '\'\'[[:w:Floruit|floruit]]\'\' '..stringa
end
--data una lista di date, ritorna la data più precisa possibile che si possa individuare con certezza, oppure nil
--es: se abbiamo una sola data, senza "circa", ritorna quella
--se abbiamo 2 date, senza "circa", con stesso anno e giorno diverso: ritorna la data col solo anno
function getDataCerta(dates)
--se c'è una data incerta ritorna nil
for i, d in pairs(dates) do
if not d.esatta then return nil end
end
--se c'è una sola data che arriva almeno all'anno, ritorna quella
if c.size(dates) == 1 and dates[1].year ~= '' then
--se la precisione è inferiore al giorno, ritorna solo l'anno
if dates[1].precision < 11 then dates[1].dayMonth = nil end
return dates[1]
elseif c.size(dates) > 1 then
--se le diverse date non concordano almeno sull'anno, non c'è una data certa
local anno = dates[1].year
for i, d in pairs(dates) do
if anno ~= d.year then return nil end
end
local dataCerta = dates[1]
--se le date sono 2, una gregoriana e l'altra giuliana, ritorna la gregoriana
if c.size(dates) == 2 and dates[1].calendar ~= dates[2].calendar then
if dates[2].calendar == 'gregoriano' then dataCerta = dates[2] end
--se la precisione è inferiore al giorno, ritorna solo l'anno
if dataCerta.precision < 11 then dataCerta.dayMonth = nil end
return dataCerta
end
--se ho più date, ritorna solo l'anno
dataCerta.dayMonth = nil
return dataCerta
end
end
--cerca di calcolare i secoli in cui l'autore era attivo, sulla base delle date di nascita/morte o del floruit
function p.getSecoloAttivita()
--cerca le date di nascita e morte esatte
local startDates = d.getDatesFromProperty('P569', 'asc')
local endDates = d.getDatesFromProperty('P570', 'desc')
--oppure cerca le date di fondazione / cessazione
if c.empty(startDates) then startDates = d.getDatesFromProperty('P571', 'asc') end
if c.empty(endDates) then endDates = d.getDatesFromProperty('P576', 'desc') end
local floruitDates = d.getDatesFromProperty('P1317')
--se non ci sono cerca "ante" e "post"
if c.empty(startDates) then
ap = d.getAnteOrPostFromProperty('P569')
if ap then table.insert(startDates, ap) end
end
if c.empty(endDates) then
ap = d.getAnteOrPostFromProperty('P570')
if ap then table.insert(endDates, ap) end
end
if c.empty(startDates) then
ap = d.getAnteOrPostFromProperty('P571')
if ap then table.insert(startDates, ap) end
end
if c.empty(endDates) then
ap = d.getAnteOrPostFromProperty('P576')
if ap then table.insert(endDates, ap) end
end
--se ancora non trovi nulla cerca work period start/end
if c.empty(startDates) then startDates = d.getDatesFromProperty('P2031', 'asc') end
if c.empty(endDates) then endDates = d.getDatesFromProperty('P2032', 'desc') end
mw.log('calcolo il secolo di attivita...')
mw.log('start: ' .. c.printElement(startDates))
mw.log('end: ' .. c.printElement(endDates))
mw.log('floruit: ' .. c.printElement(floruitDates))
local startDate = c.first(startDates)
local endDate = c.first(endDates)
if not startDate and endDate then
startDate = c.deepcopy(endDate)
startDate = d.addYears(startDate, -25) --ipotizziamo che sia vissuto almeno 25 anni
elseif not endDate and startDate then
endDate = c.deepcopy(startDate)
--gli autori senza data di morte e nati nel XX secolo si suppongono viventi nel XXI
if not p.isHuman() or (startDate and startDate.century and startDate.century == 20) then
endDate.century = 21
endDate.year = 2050
else
endDate = d.addYears(endDate, 25) --ipotizziamo che sia vissuto almeno 25 anni
end
end
if c.empty(startDate) and not c.empty(floruitDates) then
startDate = floruitDates[1]
else
if p.isHuman() and startDate and startDate.precision and startDate.precision >= 9 and startDate.year then
--supponiamo che un autore non sia "attivo" prima dei 15 anni di eta' + 5 anni di "tolleranza".
--(Es. se ha pubblicato dal 1896 al 1950 lo consideriamo solo nel XX secolo)
startDate = d.addYears(startDate, 20)
end
end
if c.empty(endDate) and not c.empty(floruitDates) then
if #floruitDates > 1 then endDate = floruitDates[2]
else endDate = floruitDates[1] end
else
if p.isHuman() and endDate and endDate.precision and endDate.precision >= 9 and endDate.year then
--5 anni di "tolleranza" (se un autore è morto nel 1901 non ha senso considerarlo "del XX secolo")
endDate = d.addYears(endDate, -5)
end
end
local centuries = {}
if not c.empty(startDate) and not c.empty(endDate) and endDate.century and startDate.century then
mw.log('start common: ' .. c.printElement(startDate))
mw.log('end common: ' .. c.printElement(endDate))
mw.log('secoli: ' .. tostring(startDate.century) .. '-' .. tostring(endDate.century))
mw.log('secolo di attivita: ' .. tostring(startDate.century))
-- se aggiungendo la tolleranza alla nascita siamo finiti nel secolo successivo alla morte, lo scartiamo
if startDate.century > endDate.century then
startDate = endDate
end
table.insert(centuries, d.formatCentury(startDate))
while #centuries < 10 and (endDate.century ~= startDate.century or endDate.ac ~= startDate.ac) do
if startDate.ac then
startDate.century = startDate.century - 1
if startDate.century == 0 then
startDate.ac = false
startDate.century = 1
end
else
startDate.century = startDate.century + 1
end
mw.log('secolo di attivita: ' .. tostring(startDate.century))
table.insert(centuries, d.formatCentury(startDate))
end
end
return centuries
end
function getSitelinksOrLabelsFromPropertyValues(propertyId, siteId, langCode)
local claims = c.getClaimsByProperty(propertyId) or {}
local sitelinksOrLabels = {}
for _, claim in ipairs(claims) do
if claim and claim.mainsnak and claim.mainsnak.datavalue then
local entity = mw.wikibase.getEntity('Q'..claim.mainsnak.datavalue.value['numeric-id'])
local sitelinkOrLabel = entity:getSitelink(siteId) or entity:getLabel(langCode)
local isLink = true
if not entity:getSitelink(siteId) then
sitelinkOrLabel = entity:getLabel(langCode) or entity:getLabel('en') or entity:getLabel('fr') or entity:getLabel('de')
isLink = false
if not entity:getLabel(langCode) then
addCat('Auture senza n\'etichetta \'ncopp\'a Wikidata')
end
end
if sitelinkOrLabel then
table.insert(sitelinksOrLabels, {text = sitelinkOrLabel, isSitelink = isLink})
end
end
end
return sitelinksOrLabels
end
function getPlaceOfBirth()
local places = getSitelinksOrLabelsFromPropertyValues('P19', 'napwiki', 'nap')
if c.size(places) > 1 then
addCat('Auture ca nun se sape addò so nate')
elseif c.size(places) == 1 and places[1].isSitelink then
addCat('Nate a '..places[1].text)
end
for k, v in pairs(places) do
if v.isSitelink then
places[k] = c.link(v.text, v.text, 'w')
else
places[k] = v.text
addCat('Auture co nu luoco \'e nascita o \'e muorte ca nun ce stà \'ncopp\'a Wikipedia')
end
end
return c.concat(places, ' o ')
end
function getPlaceOfDeath()
places = getSitelinksOrLabelsFromPropertyValues('P20', 'napwiki', 'nap')
if c.size(places) > 1 then
addCat('Auture ca nun se sape addò so muorte')
elseif c.size(places) == 1 and places[1].isSitelink then
addCat('Muorte a '..places[1].text)
end
for k, v in pairs(places) do
if v.isSitelink then
places[k] = c.link(v.text, v.text, 'w')
else
places[k] = v.text
addCat('Auture co nu luoco \'e nascita o \'e muorte ca nun ce stà \'ncopp\'a Wikipedia')
end
end
return c.concat(places, ' o ')
end
--funzione che recupera i dati dell'autore, richiamabile anche con un item qualunque
function p.getDatiAutore(autoreItem)
item = autoreItem or item
c.setItem(item)
local dati = {}
--DATI ANAGRAFICI da Wikidata
dati.nomeCognome = c.getLabel()
dati.gender = p.sesso()
dati.immagine = p.immagine()
dati.birthDates, dati.birthStringa = getBirthDates()
dati.deathDates, dati.deathStringa = getDeathDates()
dati.birthPlaceList = c.getLabelsFromPropertyValues('P19')
dati.deathPlaceList = c.getLabelsFromPropertyValues('P20')
dati.birthPlace = c.concat(dati.birthPlaceList, ' o ')
dati.deathPlace = c.concat(dati.deathPlaceList, ' o ')
dati.floruitDates, dati.floruitStringa = getFloruitDates()
--pseudonimo P742
dati.pseudonimi = c.getClaimValuesByProperty('P742')
dati.numeroPseudonimi = c.size(dati.pseudonimi)
dati.stringaPseudonimo = c.concat(dati.pseudonimi, "''', '''", "''' e '''")
--nome reale (birth name) P1477
dati.nomiReali = c.getClaimValuesByProperty('P1477')
dati.stringaNomeReale = c.concat(dati.nomiReali, "''' o '''")
--alias (da cui vanno esclusi i precedenti campi e il nome "principale")
dati.alias = c.sublist(c.getLabelAndAliases(), 1, 5) --max 5 alias
c.subtractTable(dati.alias, dati.pseudonimi)
c.subtractTable(dati.alias, dati.nomiReali)
c.subtractTable(dati.alias, {dati.nomeCognome})
dati.stringaAlias = c.concat(dati.alias, "''', '''", "''' e '''")
--anni di nascita e morte esatti
dataNascitaCerta = getDataCerta(dati.birthDates)
dataMorteCerta = getDataCerta(dati.deathDates)
if dataNascitaCerta then
dati.annoNascita = dataNascitaCerta.year
dati.ricorrenzaNascita = dataNascitaCerta.dayMonth
end
if dataMorteCerta then
dati.annoMorte = dataMorteCerta.year
dati.ricorrenzaMorte = dataMorteCerta.dayMonth
end
--link al Diz. Biogr. degli Italiani
dati.dbiLink = c.getSingleClaimValueByProperty('P1986')
return dati
end
function p.autore(frame)
if frame == nil or frame:getParent() == nil then
error('Nessun frame rilevato')
end
-- parametri passati al template Autore
args = c.getParameters(frame)
if args.Wikidata then
item = mw.wikibase.getEntityObject(args.Wikidata)
c.setItem(item)
end
-- nome dell'autore: Nome, Cognome e Disambigua
local nomeCognome = mw.text.trim((args.Nome or '')..' '..(args.Cognome or ''))
if nomeCognome == '' then error('Nomme \'e ll\'auture ca nun è valido') end
-- nome UNIVOCO dell'autore: Nome, Cognome e Disambigua
nomeAutore = mw.text.trim(nomeCognome..' '..(args.Disambigua or ''))
--cognome, nome (per ordinamenti)
local cognonome = args.Cognome or ''
if cognonome ~= '' then cognonome = cognonome ..' , ' end
cognonome = c.stripAccents( cognonome .. (args.Nome or '') )
add(c.template('DEFAULTSORT', {cognonome} ))
local spanDati = mw.html.create('span'):attr('id', 'dati')
for k, v in pairs(attrs) do
spanDati:attr('data-'..k, (args[v] or ''))
end
add(tostring(spanDati))
-- DATI ANAGRAFICI
local secoloAttivita = p.getSecoloAttivita()
local secolo = c.concat(secoloAttivita, '/')
mw.log('Secolo di attivita da wikidata: ' .. secolo)
dati = p.getDatiAutore()
mw.log(c.printElement(dati))
--DATI ANAGRAFICI da Wikidata
local birthPlace = getPlaceOfBirth()
local deathPlace = getPlaceOfDeath()
--pseudonimo P742
local pseudonimi = c.getClaimValuesByProperty('P742')
local numeroPseudonimi = c.size(pseudonimi)
local stringaPseudonimo = c.concat(pseudonimi, "''', '''", "''' e '''")
--nome reale (birth name) P1477
local nomiReali = c.getClaimValuesByProperty('P1477')
local stringaNomeReale = c.concat(nomiReali, "''' o '''")
--alias (da cui vanno esclusi i precedenti campi e il nome "principale")
local alias = dati.alias
c.subtractTable(alias, pseudonimi)
c.subtractTable(alias, nomiReali)
c.subtractTable(alias, {nomeCognome})
local stringaAlias = c.concat(alias, "''', '''", "''' e '''")
--inizio CATEGORIE
-- CAT: AUTORI NATI/MORTI NELL'ANNO
if dati.annoNascita and dati.annoNascita ~= '' then
addCat('Nate no '..dati.annoNascita)
end
if c.size(dati.birthDates) > 1 then
if c.size(dati.birthDates) > 2 or dati.birthDates[1].calendar == dati.birthDates[2].calendar then
addCat('Auture ca nun tenene na data \'e nascita')
end
end
if dati.annoMorte and dati.annoMorte ~= '' then
addCat('Muorte no '..dati.annoMorte)
end
if c.size(dati.deathDates) > 1 then
if c.size(dati.deathDates) > 2 or dati.deathDates[1].calendar == dati.deathDates[2].calendar then
addCat('Auture ca nun se sape quanne so\' muorte')
end
end
if p.isHuman() and dati.ricorrenzaNascita and dati.ricorrenzaNascita ~= '' then
if dati.ricorrenzaNascita:sub(1, 2) == '8 ' or dati.ricorrenzaNascita:sub(1, 3) == '11 ' then
addCat("Nate ll\'"..dati.ricorrenzaNascita)
else
addCat('Nate \'o '..dati.ricorrenzaNascita)
end
end
if p.isHuman() and dati.ricorrenzaMorte and dati.ricorrenzaMorte ~= '' then
if dati.ricorrenzaMorte:sub(1, 2) == '8 ' or dati.ricorrenzaMorte:sub(1, 3) == '11 ' then
addCat("Muorte ll\'"..dati.ricorrenzaMorte)
else
addCat('Muorte \'o '..dati.ricorrenzaMorte)
end
end
-- CAT: AUTORI-INIZIALE
addCat('Auture')
local primaLettera = mw.ustring.upper(c.template('Prima lettera', { (args.Cognome or '')..(args.Nome or '') } ))
addCat('Auture-'..primaLettera)
-- CAT: AUTORI OMONIMI (cioè che usano il campo Disambigua per distinguersi da omonimi)
if args.Disambigua then addCat('Auture cu nomme uguale') end
-- CAT: AUTORI DEL SECOLO
if secolo == '' then addCat('Auture ca nun teneno secolo')
else
if lang:ucfirst(secolo) == 'antichità' then addCat('Autori \'e ll\'antichità')
else addTmp('Autore/CategorieSecolo', { secolo, cognonome }) end
-- CAT: AUTORI PER NAZIONALITÀ E SECOLO
local plur = c.template('Autore/PluraleNazionalità', { args['Nazionalità'] } )
if plur and plur ~= '' then
if lang:ucfirst(secolo) == 'antichità' then
addCat('Auture '..plur.." \'e ll\'antichità")
else
addTmp('Autore/CategorieSecolo', { secolo, cognonome, plur })
end
end
end
-- CAT: AUTORI PER ATTIVITÀ
local att = args['Attività']
if att then
addTmp('Autore/CategorieAttività', { att, cognonome })
-- CAT: AUTORI PER ATTIVITÀ E SECOLO
if lang:ucfirst(secolo) == 'antichità' then
addTmp('Autore/CategorieAttività', { att, cognonome, '\'e ll\'antichità' })
else
addTmp('Autore/CategorieAttivitàSecolo', { att, secolo, cognonome })
end
else
addCat('Auture ca nun teneno n\'attività')
end
-- CAT: AUTORI PER NAZIONALITÀ
local naz = args['Nazionalità']
if naz then
local plur = c.template('Autore/PluraleNazionalità', { naz } )
if plur and plur ~= '' then
addCat('Autori '..plur)
-- AUTORI PER ATTIVITÀ + NAZIONALITÀ
if att then addTmp('Autore/CategorieAttività', { att, cognonome, plur }) end
else
addCat('Auture cu na nazziunalità non censita')
end
else
addCat('Auture ca nun teneno na nazziunalità')
end
-- CAT: AUTORI CON/SENZA OPERE
if (c.pagesInCat('Fatiche \'e '..nomeAutore)) > 0 then
addCat('Auture cu fatiche \'ngopp\'a Wikisource')
else
addCat('Auture senza fatiche \'ngopp\'a Wikisource')
end
-- CAT: AUTORI DI TESTI MUSICALI
if c.pagesInCat('Fatiche musicate da '..nomeAutore) > 0 then
addCat('Auture \'e fatiche musicale')
end
-- CAT: AUTORI CITATI IN OPERE PUBBLICATE
if c.pagesInCat('Fatiche addò sta citato '..nomeAutore) > 0 then
addCat('Auture citate int\'e fatiche pubbrecate')
elseif c.pagesInCat('Paggene addò sta citato '..nomeAutore) > 0 then
addCat('Auture citate int\'e paggene non transcluse')
end
-- CAT: AUTORI SENZA DATI BIOGRAFICI
if ((args['Professione e nazionalità'] or '')..
(args['Attività'] or '')..
(args['Nazionalità'] or '') ) == '' then
addCat('Auture ca nun tenene date biografici')
end
-- CAT: AUTORI VIVENTI
if dati.annoMorte == nil and tonumber(dati.annoNascita) ~= nil and tonumber(dati.annoNascita) >= 1900 then
addCat('Auture vivente')
end
local wp = c.wikipedia()
local com = c.commons()
local wq = c.wikiquote()
-- CAT: AUTORI SENZA VOCE SUI VARI PROGETTI
local naz = args['Nazionalità']
if (wp or '') == '' then
addCat('Auture ca nun tenene na voce \'ncopp\'a Wikipedia')
elseif (wp and wp ~= 'nap') then
addCat('Auture ca nun tenene na voce \'ncopp\'a Wikipedia \'nnapulitano')
end
if (wq or '') == '' then addCat('Auture ca nun tenene na paggena \'ncopp\'a Wikiquote') end
if (com or '') == '' then addCat('Auture ca nun tenene na paggena \'ncopp\'a Commons') end
-- AUTORI SENZA ELEMENTO SU WIKIDATA
if not item then
add(c.template('Paggene ca nun so cullegate a Wikidata', {}))
addCat('Auture ca nun so cullegate a Wikidata')
end
if not dati.gender and p.isHuman() then
addCat('Auture senza proprietà sesso su Wikidata')
end
if dati.dbiLink then
addCat('Auture ca stanne \'ncopp\'o Dizionario Biografico \'e ll\'Italiane')
end
if nomeAutore ~= mw.title.getCurrentTitle().text then
addCat('Nome autore non corretto')
end
--FINE CATEGORIE
-- IMMAGINE AUTORE con CATEGORIE
if dati.immagine then
add('[[File:'..dati.immagine..'|140px|right|<!--'..(args.Nome or '')..' '..(args.Cognome or '')..'-->]]')
addCat('Auture cu na fiùra')
else
addCat('Auture senza fiùra')
end
-- SCHEDE DI AUTORITÀ
local authcon = cda()
if authcon == nil or authcon == '' then
addCat('Auture ca nun tenene na scheda d\'autorità')
else
add(authcon)
end
--INIZIO TESTO "Nome Cognome (1900-2000), scrittore italiano"
-- NOME E COGNOME
add(tostring(mw.html.create('b'):css('white-space', 'nowrap'):wikitext(nomeCognome)))
--date di nascita e morte
local datiAnagraficiMancanti = false
if dati.birthStringa == '...' and dati.deathStringa == '...' then
-- CAT: AUTORI SENZA DATI ANAGRAFICI
addCat('Auture ca nun tenene date anagrafici')
datiAnagraficiMancanti = true
if secolo and secolo ~= '' and c.empty(dati.floruitDates) then
if not dati.gender or secolo == 'antichità' then
add(' ('..linkSecolo(secolo)..')')
end
end
if (birthPlace and birthPlace ~= '') or (deathPlace and deathPlace ~= '') then
if birthPlace and birthPlace ~= '' then dati.birthStringa = birthPlace .. ', ' .. dati.birthStringa end
if deathPlace and deathPlace ~= '' then dati.deathStringa = deathPlace .. ', ' .. dati.deathStringa end
add(' ('..dati.birthStringa..' – '..dati.deathStringa..')')
end
elseif dati.birthStringa == dati.deathStringa and (not birthPlace or birthPlace == '') and (not deathPlace or deathPlace == '') then
add(' ('..dati.birthStringa..')')
else
if birthPlace and birthPlace ~= '' then dati.birthStringa = birthPlace .. ', ' .. dati.birthStringa end
if deathPlace and deathPlace ~= '' then dati.deathStringa = deathPlace .. ', ' .. dati.deathStringa end
add(' ('..dati.birthStringa..' – '..dati.deathStringa..')')
end
--floruit
if not c.empty(dati.floruitDates) then
add(', '..dati.floruitStringa)
elseif datiAnagraficiMancanti and secolo and secolo ~= '' then
if dati.gender and secolo ~= 'antichità' then
add(', '..'\'\'[[:w:Floruit|floruit]]\'\' '..linkSecolo(secolo))
end
end
local oa = 'o/a'
if dati.gender then
if dati.gender == 'maschio' then oa = 'o'
elseif dati.gender == 'femmina' then oa = 'a' end
end
-- EVENTUALE ALTRO NOME
if stringaAlias ~= '' then
add(', not'..oa..' anche come \'\'\''..stringaAlias..'\'\'\'')
end
-- EVENTUALE PSEUDONIMO
if stringaPseudonimo ~= '' then
add(', canosciut'..oa..' pure co ')
if numeroPseudonimi > 1 then add('\'e cuntranomme')
else add('\'o cuntranomme') end
add(' \'\'\''..stringaPseudonimo..'\'\'\'')
addCat('Auture canusciute co nu cuntranomme')
end
-- EVENTUALE NOME REALE
if stringaNomeReale ~= '' then
add(', nate \'\'\''..stringaNomeReale..'\'\'\'')
end
-- DATI BIOGRAFICI
if args['Professione e nazionalità'] then
add(', '..lang:lcfirst(args['Professione e nazionalità']))
elseif args['Attività'] then
add(', '..p.attivita(args['Attività']))
if args['Nazionalità'] then add(' '..args['Nazionalità']) end
end
add('.')
--fine della frase iniziale
-- INTERPROGETTO
add(tostring(mw.html.create('div'):css('margin-top', '15px'):wikitext(c.template('Interprogetto'))))
if args.Nome ~= 'Anonimo' then
-- LINK ALLA CATEGORIA TESTI DI ...
catLink('Fatiche \'e %s')
-- LINK ALLA CATEGORIA TESTI MUSICATI DA...
catLink('Fatiche musecate da %s', 'Nuvola filesystems folder sound.png')
end
-- LINK ALLA CATEGORIA TRADUZIONI DI ...
catLink('Traduzzione \'e %s')
-- LINK ALLA CATEGORIA TESTI IN CUI È CITATO ...
catLink('Fatiche addò sta citato %s')
-- LINK ALLA CATEGORIA PAGINE IN CUI È CITATO ...
if c.pagesInCat('Fatiche addò sta citato '..nomeAutore) == 0 then
catLink('Paggene addò sta citato %s')
end
--link a ricerca (per cercare altre citazioni)
add('<div>[[File:Nuvola_apps_xmag.png|24px]][[Speciale:Ricerca/'..nomeAutore..'|Cerca citazioni su '..nomeAutore..'...]]</div>')
if c.wikinews() then addCat('Auture cu na paggena \'ncopp\'a Wikinews') end
if c.wikispecies() then addCat('Auture cu na paggena \'ncopp\'a Wikispecies') end
mw.log(output..outputCat)
return output..outputCat
end
p['attività'] = function(frame)
return p.attivita(frame.args[1])
end
return p