Modul:Taksoboks
Denne modulen implementerer {{taksoboksLua}}. Sjå Modul:Taksoboks/norske namn for automatisk omsetjing av latinske namn.
Alle undermodular:
local eksport = {}
local omsetjingsdata = require('Modul:Taksoboks/norske namn')
local taksonomiWD = require('Modul:Taksoboks/Taksonomidata frå Wikidata')
function eksport.hentNorskNamn(rang, vitskaplegNamn)
if omsetjingsdata[rang] then
return omsetjingsdata[rang][vitskaplegNamn]
else
return nil
end
end
function eksport.formaterNamn(vitskaplegNamn, norskNamn, sidetittel, rang, art, erListeelement, lenk, uthev, utdoeydd, erVirus)
local tekst = ''
local skalKursiverast = erVirus or rang:match('slekt') or rang:match('art')
local mellomrom = ' '
local vitskaplegNamnFormatert = vitskaplegNamn:gsub(' ', ' ')
if erListeelement then
mellomrom = ' '
end
if norskNamn == vitskaplegNamn then -- samanfallande norsk og vitskapleg namn tyder gjerne på uynskt duplikasjon
norskNamn = nil
end
if norskNamn then
norskNamn = mw.language.getContentLanguage():ucfirst(norskNamn) -- stor fyrstebokstav
if art and mw.title.getCurrentTitle().text == norskNamn and not sidetittel then
tekst = '[[' .. norskNamn .. ' (' .. rang .. ')|' .. norskNamn .. ']]' -- unngå utheving av høgre rang ved samanfallande namn
else
if uthev then
tekst = "'''" .. norskNamn .. "'''"
elseif sidetittel then
tekst = '[[' .. sidetittel ..'|' .. norskNamn .. ']]'
elseif lenk ~= false then
tekst = '[[' .. norskNamn .. ']]'
else
tekst = norskNamn
end
end
if skalKursiverast then -- legg til vitskapleg namn
tekst = tekst .. mellomrom .. "''" .. '<small>' .. vitskaplegNamnFormatert .. '</small>' .. "''"
else
tekst = tekst .. mellomrom .. '<small>' .. vitskaplegNamnFormatert .. '</small>'
end
else
if uthev then
tekst = "'''" .. vitskaplegNamnFormatert .. "'''"
elseif sidetittel then
tekst = '[[' .. sidetittel .. '|' .. vitskaplegNamnFormatert .. ']]'
elseif lenk ~= false then
tekst = '[[' .. vitskaplegNamn .. '|' .. vitskaplegNamnFormatert .. ']]'
else
tekst = vitskaplegNamnFormatert
end
if skalKursiverast then
tekst = "''" .. tekst .. "''"
end
end
if utdoeydd then
tekst = '†' .. tekst
end
return tekst
end
function eksport.klassifisertAvWD(Wikidataelement, rike)
if Wikidataelement.claims and Wikidataelement.claims.P225 then
local kategoriar = ''
local resultat = ''
local klassifisertAv, klassifisertAar, parentesar
if Wikidataelement.claims.P225[1]['qualifiers'] and Wikidataelement.claims.P225[1]['qualifiers']['P405'] then
n = #Wikidataelement.claims.P225[1]['qualifiers']['P405'] -- talet på forfattarar for dette taksonet
for i = 1, n do
personID = 'Q' .. Wikidataelement.claims.P225[1]['qualifiers']['P405'][i]['datavalue']['value']['numeric-id'] -- person
personelement = mw.wikibase.getEntity(personID) -- hent elementet til personen
klassifisertAvNamn = personelement:getLabel()
personsidetittel = personelement:getSitelink('nnwiki') -- finn evt. lokal wikiside
splittaNamn = mw.text.split(klassifisertAvNamn, ' ')
if rike == 'Animalia' and personelement.claims.P835 then -- zoologisk sitering
personskildring = personelement.claims.P835[1]['mainsnak']['datavalue']['value']
for i = 1, #personelement.claims.P835 do
if mw.ustring.find(klassifisertAvNamn, personelement.claims.P835[i]['mainsnak']['datavalue']['value']) then -- føretrekk sitering som speglar namn på norsk
personskildring = personelement.claims.P835[i]['mainsnak']['datavalue']['value']
break
end
end
elseif rike == 'Plantae' or rike == 'Fungi' and personelement.claims.P428 then -- botanikkavstytting
personskildring = personelement.claims.P428[1]['mainsnak']['datavalue']['value']
elseif personelement.claims.P734 and personelement.claims.P734[1]['mainsnak']['datavalue'] then -- nytt etternamnet
etternamnID = personelement.claims.P734[1]['mainsnak']['datavalue']['value']['id']
personskildring = mw.wikibase.getEntity(etternamnID):getLabel()
else
personskildring = splittaNamn[#splittaNamn] -- nytt berre sisteleddet av namnet
end
tittel = personsidetittel or klassifisertAvNamn
if i == 1 then
klassifisertAv = '[[' .. tittel .. '|' .. personskildring .. ']]'
elseif i ~= n then
klassifisertAv = klassifisertAv .. ', ' .. '[[' .. tittel .. '|' .. personskildring .. ']]'
else
klassifisertAv = klassifisertAv .. ' & ' .. '[[' .. tittel .. '|' .. personskildring .. ']]'
end
if mw.title.getCurrentTitle().namespace == 0 and mw.title.new('Kategori:Takson namngjevne av ' .. klassifisertAvNamn):getContent() ~= nil then
kategoriar = kategoriar .. '[[Kategori:Takson namngjevne av ' .. klassifisertAvNamn .. ']]'
else
klassifisertAvModul = require('Modul:Klassifisert av')
kategoriar = kategoriar .. klassifisertAvModul.hovud(personskildring, 'berre kategori', 'om finst')
end
end
end
if Wikidataelement.claims.P225[1]['qualifiers'] and Wikidataelement.claims.P225[1]['qualifiers']['P574'] then
klassifisertDato = Wikidataelement.claims.P225[1]['qualifiers']['P574'][1]['datavalue']['value']['time'] -- dato
klassifisertAar = '[[' .. mw.text.split(mw.ustring.sub(klassifisertDato, 2), '-')[1] .. ']]'
end
if Wikidataelement.claims.P225[1]['qualifiers'] and Wikidataelement.claims.P225[1]['qualifiers']['P31'] then
if Wikidataelement.claims.P225[1]['qualifiers']['P31'][1]['datavalue']['value']['numeric-id'] == 14594740 then -- skal ha parentesar
parentesar = true
end
end
if klassifisertAv and klassifisertAar then
resultat = klassifisertAv .. ', ' .. klassifisertAar
else
resultat = klassifisertAv or klassifisertAar or resultat
end
if parentesar then
resultat = '(' .. resultat .. ')'
end
resultat = resultat .. kategoriar
return resultat
else
return nil
end
end
function eksport.nyRadseksjon(innhald)
local tekst = string.format('\n|- valign="top"\n|-\n| style="text-align:center;background: #EEDDAA; color:black;" colspan="2"|%s', innhald)
return tekst
end
function eksport.nyRad(skildring, innhald)
if skildring ~= '' then
skildring = skildring .. '\n| '
end
local tekst = string.format('\n|- valign="top"\n| %s%s', skildring, innhald)
return tekst
end
function eksport.lagListe(listedata, rang, erVirus)
local listeelement = mw.text.split(listedata, ',')
local liste = ''
for i = 1, #listeelement do
local listeelementet = listeelement[i]:gsub('^%s*', '') -- fjern leiande mellomrom
local norskNamn = eksport.hentNorskNamn(rang, listeelementet)
listeelementet = eksport.formaterNamn(listeelementet, norskNamn, nil, rang, false, true, true, false, false, erVirus)
liste = liste .. listeelementet .. '<br />'
end
return liste
end
function eksport.statustekst(status, omraade)
local tekst = ''
local kategoriar = ''
local WD = {Q211005 = 'lc', Q719675 = 'nt', Q278113 = 'vu', Q11394 = 'en',
Q219127 = 'cr', Q239509 = 'ew', Q237350 = 'ex', Q3245245 = 'dd'}
if mw.ustring.sub(status, 1, 1) == 'q' then -- stoda vart henta frå Wikidata
status = WD[mw.ustring.upper(mw.ustring.sub(status, 1, 1)) .. mw.ustring.sub(status, 2)]
end
if omraade == 'verda' then
tekst = '<small>\'\'\'[[Global raudliste|Status i verda:]]\'\'\' '
end
if omraade == 'Noreg' then
tekst = tekst .. '<small>\'\'\'[[Norsk raudliste for artar|Status i Noreg:]]\'\'\' '
end
if status == 'secure' or status == 'ikkje truga'then
tekst = tekst .. 'Ikkje truga'
elseif status == 'dom' or status == 'domesticated' or status == 'husdyr' then
tekst = tekst .. 'Husdyr'
elseif status == 'dd' or status == 'datamangel' or status == 'data' then
tekst = tekst .. 'Datamangel'
elseif status == 'lc' or status == 'livskraftig' then
tekst = tekst .. '[[Fil:Status iucn LC icon.svg|15px|LC]] [[Livskraftig]]'
if omraade == 'verda' then
kategoriar = kategoriar .. '[[Kategori:Livskraftige artar]]'
elseif omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Livskraftige artar i Noreg]]'
end
elseif status == 'nt' or status == 'nær truga' then
tekst = tekst .. '[[Fil:Status iucn NT icon.svg|15px|NT]] [[Nær truga]]'
if omraade == 'verda' then
kategoriar = kategoriar .. '[[Kategori:Nær truga artar]]'
elseif omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Nær truga artar i Noreg]]'
end
elseif status == 'vu' or status == 'sårbar' then
tekst = tekst .. '[[Fil:Status iucn VU icon.svg|15px|VU]] [[Sårbare artar|Sårbar]]'
if omraade == 'verda' then
kategoriar = kategoriar .. '[[Kategori:Sårbare artar]]'
elseif omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Truga artar i Noreg]]'
end
elseif status == 'en' or status == 'sterkt truga' then
tekst = tekst .. '[[Fil:Status iucn EN icon.svg|15px|EN]] [[Sterkt truga]]'
if omraade == 'verda' then
kategoriar = kategoriar .. '[[Kategori:Sterkt truga artar]]'
elseif omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Truga artar i Noreg]]'
end
elseif status == 'cr' or status == 'kritisk truga' then
tekst = tekst .. '[[Fil:Status iucn CR icon.svg|15px|CR]] [[Kritisk truga]]'
if omraade == 'verda' then
kategoriar = kategoriar .. '[[Kategori:Kritisk truga artar]]'
elseif omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Truga artar i Noreg]]'
end
elseif status == 'ew' then
tekst = tekst .. '[[Fil:Status iucn EW icon.svg|15px|EW]] [[Utrydda art|Utrydda]] i vill tilstand'
if omraade == 'verda' then
kategoriar = kategoriar .. '[[Kategori:Artar utrydda i vill tilstand]]'
end
elseif status == 're' or status == 'ex' or status == 'ew' or status == 'utrydda' then
if omraade == 'verda' then
tekst = tekst .. '[[Fil:Status iucn EX icon.svg|15px|EX]] [[Utrydda art|Utdøydd]]'
kategoriar = kategoriar .. '[[Kategori:Utdøydde artar]]'
elseif omraade == 'Noreg' then
tekst = tekst .. '[[Fil:Status iucn RE icon.svg|15px|RE]] [[Utrydda art|Regionalt utdøydd]]'
kategoriar = kategoriar .. '[[Kategori:Utdøydde artar i Noreg]]'
end
elseif status == 'se' or status == 'svært høg risiko' then
tekst = tekst .. ' [[Framandartslista|Framandart]] med svært høg risiko'
if omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Artar på Framandartslista]]'
end
elseif status == 'hi' or status == 'høg risiko' then
tekst = tekst .. ' [[Framandartslista|Framandart]] med høg risiko'
if omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Artar på Framandartslista]]'
end
elseif status == 'ph' or status == 'potensielt høg risiko' then
tekst = tekst .. ' [[Framandartslista|Framandart]] med potensielt høg risiko'
if omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Artar på Framandartslista]]'
end
elseif status == 'lo' or status == 'låg risiko' then
tekst = tekst .. ' [[Framandartslista|Framandart]] med låg risiko'
if omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Artar på Framandartslista]]'
end
elseif status == 'nk' or status == 'ingen kjend risiko' then
tekst = tekst .. ' [[Framandartslista|Framandart]] med ingen kjend risiko'
if omraade == 'Noreg' then
kategoriar = kategoriar .. '[[Kategori:Artar på Framandartslista]]'
end
elseif status == 'nr' or status == 'ikkje risikovurdert' then
tekst = tekst .. ' [[Framandartslista|Framandart]] som ikkje er risikovurdert'
end
tekst = tekst .. '</small>'
if mw.title.getCurrentTitle().namespace == 0 then -- legg berre til kategoriar i hovudnamnerommet
tekst = tekst .. kategoriar
end
return tekst
end
function eksport.bilete(bilete, bilettekst, biletstorleik)
local bilettekst1 = ''; local bilettekst2 = ''
local biletstorleik = biletstorleik or ''
if bilettekst then
bilettekst1 = '|' .. bilettekst
bilettekst2 = string.format('<br />%s', bilettekst)
end
if biletstorleik ~= '' then
biletstorleik = '|' .. biletstorleik
end
return string.format('[[Fil:%s%s|frameless%s]]', bilete, biletstorleik, bilettekst1) .. bilettekst2
end
function eksport.hovud(frame)
local tabell = {}
local taksoboks = ''
local args = frame:getParent().args
local namn = {}
local erVirus = args['er_virus']
local status = args['status']
if status == '' then status = nil end
local statusNoreg = args['status_noreg']
if statusNoreg == '' then statusNoreg = nil end
local bilete = args['bilete'] or args['bilde']
if bilete == '' then bilete = nil end
local bilettekst1 = args['bilettekst'] or args['bildetekst']
if bilettekst1 == '' then bilettekst1 = nil end
local bilettekst2 = args['bilettekst2'] or args['bildetekst2']
if bilettekst2 == '' then bilettekst2 = nil end
local bilete2 = args['bilete2'] or args['bilde2']
if bilete2 == '' then bilete2 = nil end
local kart = args['kart']
if kart == '' then kart = nil end
local karttekst = args['karttekst']
if karttekst == '' then karttekst = nil end
local ID = args['id'] or args['ID']
if ID == '' then ID = nil end
local Wikidataelement
if not args['ingen_Wikidata'] or args['ingen_Wikidata'] ~= 'ja' then
elementID = ID or mw.wikibase.getEntityIdForCurrentPage()
Wikidataelement = mw.wikibase.getEntity(elementID) -- Wikidata-elementet til sida (eller oppgjeven førehandsvisings-ID)
end
local taksonomiFraaWDArg = args['taksonomidata_frå_Wikidata'] or args['taksonomi_WD']
local taksonomiFraaWD = false
if not taksonomiFraaWDArg or taksonomiFraaWDArg == '' or taksonomiFraaWDArg == 'nei' then
taksonomiFraaWD = false
elseif Wikidataelement then
taksonomiFraaWD = true
end
SIDETITTEL = mw.title.getCurrentTitle().text
--
tabell['status og utbreiing'] = {}
tabell.bilete = {[1] = {}, [2] = {}}
tabell.taksonomi = {hierarki = {}, rangar = {}}
tabell.klassifiseringsboks = {innhald = {}}
--
-- handsam bilete
local kjoenn = {Q44148 = 'hann', Q43445 = 'hoe'}
if not bilete and not bilete2 then -- sjå om det finst bilete på Wikidata
if Wikidataelement and Wikidataelement.claims and Wikidataelement.claims.P18 then
local besteBileta = Wikidataelement:getBestStatements('P18')
if besteBileta[1]['mainsnak']['datavalue'] then
if besteBileta[1]['qualifiers'] and besteBileta[1]['qualifiers']['P21'] then
tabell.bilete[1]['kjønn'] = kjoenn[besteBileta[1]['qualifiers']['P21'][1]['datavalue']['value']['id']]
bilete = besteBileta[1]['mainsnak']['datavalue']['value']
end
end
if besteBileta[2] and besteBileta[2]['mainsnak']['datavalue'] then
if besteBileta[2]['qualifiers'] and besteBileta[2]['qualifiers']['P21'] then
bilete2 = besteBileta[2]['mainsnak']['datavalue']['value']
tabell.bilete[2]['kjønn'] = kjoenn[besteBileta[2]['qualifiers']['P21'][1]['datavalue']['value']['id']]
end
end
if not bilete then
local besteBiletet = nil
for k, v in pairs(besteBileta) do -- plukk ut bilete med nynorsk eller engelsk tekst
if not besteBiletet then
besteBiletet = {bilete = v, rang = 9000}
end
if v['qualifiers'] and v['qualifiers']['P2439'] and v['qualifiers']['P2439'][1]['datavalue']['value']['id'] then
if v['qualifiers']['P2439'][1]['datavalue']['value']['id'] =='Q25164' and besteBiletet.rang > 1 then
besteBiletet = {bilete = v, rang = 1}
elseif v['qualifiers']['P2439'][1]['datavalue']['value']['id'] =='Q1860' and besteBiletet.rang > 2 then
besteBiletet = {bilete = v, rang = 2}
end
end
end
bilete = besteBiletet.bilete['mainsnak']['datavalue']['value']
end
end
end
if bilete then
tabell.bilete[1] = {fil = bilete, skildring = bilettekst1, storleik = args['biletstorleik'] or args['bildestorleik'], ['kjønn'] = tabell.bilete[1]['kjønn']}
end
if bilete2 then
tabell.bilete[2] = {fil = bilete2, skildring = bilettekst2, storleik = args['biletstorleik2'] or args['bildestorleik2'], ['kjønn'] = tabell.bilete[2]['kjønn']}
end
if not status and Wikidataelement then
if Wikidataelement.claims and Wikidataelement.claims.P141 then -- hent IUCN-stode frå Wikidata
status = Wikidataelement.claims.P141[1]['mainsnak']['datavalue']['value']['id']
end
end
local karttekstmerke = false
if not kart and Wikidataelement then
if Wikidataelement.claims and Wikidataelement.claims.P181 then -- hent kart frå Wikidata
kart = Wikidataelement.claims.P181[1]['mainsnak']['datavalue']['value']
end
end
-- handsam status
if status or statusNoreg or kart then
local seksjonstittel
if kart then
seksjonstittel = 'Utbreiing'
if status or statusNoreg then
seksjonstittel = seksjonstittel .. ' og status'
end
elseif status or statusNoreg then
seksjonstittel = 'Status'
end
tabell['status og utbreiing'].overskrift = eksport.nyRadseksjon(string.format("'''%s'''", seksjonstittel))
tabell['status og utbreiing'].status = {}
end
if status and status ~= '' then
status = status:lower()
tabell['status og utbreiing'].status.verda = eksport.statustekst(status, 'verda')
if args['status_kjelde'] then
tabell['status og utbreiing'].status.verda = tabell['status og utbreiing'].status.verda .. args['status_kjelde']
end
end
if statusNoreg and statusNoreg ~= '' then
statusNoreg = statusNoreg:lower()
tabell['status og utbreiing'].status.Noreg = ''
if status then
tabell['status og utbreiing'].status.Noreg = '<br />'
end
tabell['status og utbreiing'].status.Noreg = tabell['status og utbreiing'].status.Noreg .. eksport.statustekst(statusNoreg, 'Noreg')
if args['status_noreg_kjelde'] then
tabell['status og utbreiing'].status.Noreg = tabell['status og utbreiing'].status.Noreg .. args['status_noreg_kjelde']
end
end
-- handsam kart
if kart then
tabell['status og utbreiing'].kart = {}
tabell['status og utbreiing'].kart.fil = kart
if karttekst then
tabell['status og utbreiing'].kart.skildring = karttekst
end
if args['kartstorleik'] then
tabell['status og utbreiing'].kart.storleik = args['kartstorleik']
end
end
-- byrjing på klassifisering
if taksonomiFraaWD then -- skal henta inn taksonomidata frå Wikidata
taksonomidataWD = taksonomiWD.hovud(ID)
end
tabell.taksonomi.overskrift = eksport.nyRadseksjon("'''[[Biologisk systematikk|Systematikk]]'''")
-- særhandsaming for dette argumentet
local rike = args['rike']
if not rike and taksonomiFraaWD and taksonomidataWD['rike'] then
rike = taksonomidataWD['rike'][1]
end
local klassifisertAv = args['klassifisert_av']
-- format: {<liste over gyldige argumentnamn>}, <skildring av raden>}
local gyldigeArgument = {{{'domene'}, "'''[[Biologisk domene|Domene:]]'''"}, {{'overrike'}, "'''[[Biologisk rike|Overrike:]]'''"},
{{'rike'}, "'''[[Biologisk rike|Rike:]]'''"}, {{'underrike'}, "'''[[Biologisk rike|Underrike:]]'''"},
{{'infrarike'}, "'''[[Biologisk rike|Infrarike:]]'''"}, {{'overrekkje', 'overrekke'}, "'''[[Biologisk rekkje|Overrekkje:]]'''"},
{{'rekkje', 'rekke'}, "'''[[Biologisk rekkje|Rekkje:]]'''"}, {{'underrekkje', 'underrekke'}, "'''[[Biologisk rekkje|Underrekkje:]]'''"},
{{'infrarekkje', 'infrarekke'}, "'''[[Biologisk rekkje|Infrarekkje:]]'''"}, {{'megaklasse'}, "'''[[Biologisk klasse|Megaklasse:]]'''"},
{{'overklasse'}, "'''[[Biologisk klasse|Overklasse:]]'''"}, {{'klasse'}, "'''[[Biologisk klasse|Klasse:]]'''"},
{{'underklasse'}, "'''[[Biologisk klasse|Underklasse:]]'''"}, {{'infraklasse'}, "'''[[Biologisk klasse|Infraklasse:]]'''"},
{{'overorden'}, "'''[[Biologisk orden|Overorden:]]'''"}, {{'orden'}, "'''[[Biologisk orden|Orden:]]'''"},
{{'underorden'}, "'''[[Biologisk orden|Underorden:]]'''"}, {{'infraorden'}, "'''[[Biologisk orden|Infraorden:]]'''"},
{{'parvorden'}, "'''[[Biologisk orden|Parvorden:]]'''"},
{{'overfamilie'}, "'''[[Biologisk familie|Overfamilie:]]'''"}, {{'familie'}, "'''[[Biologisk familie|Familie:]]'''"},
{{'underfamilie'}, "'''[[Biologisk familie|Underfamilie:]]'''"}, {{'overstamme', 'overtribus'}, "'''[[Biologisk tribus|Overstamme:]]'''"},
{{'stamme', 'tribus'}, "'''[[Biologisk tribus|Stamme:]]'''"}, {{'understamme', 'undertribus'}, "'''[[Biologisk tribus|Understamme:]]'''"},
{{'slekt'}, "'''[[Biologisk slekt|Slekt:]]'''"}, {{'underslekt'}, "'''[[Biologisk slekt|Underslekt:]]'''"}, {{'seksjon_over_art'}, "'''Seksjon:'''"},
{{'art'}, "'''[[Biologisk art|Art:]]'''"}, {{'underart'}, "'''[[Underart|Underart:]]'''"}, {{'varietet'}, "'''[[Varietet|Varietet:]]'''"}, {{'form'}, "'''[[Form i botanikk|Form:]]'''"},
{{'kultivar'}, "'''[[Kultivar|Kultivar:]]'''"}, {{'rosekultivar'}, "'''[[Kultivar|Kultivar:]]'''"}, {{'potetkultivar'}, "'''[[Kultivar|Kultivar:]]'''"},
{{'klade'}, "'''''[[Klade|Klade:]]'''''"}, {{'urangert'}, "'''''[[Biologisk klassifisering|(Urangert)]]''''':"}}
local rangskildring = {}
for i = 1, #gyldigeArgument do
rangskildring[gyldigeArgument[i][1][1]] = gyldigeArgument[i][2] -- bygg tabell som kan indekserast med rangnamn
end
local rangnummer = 0
for i = 1, #gyldigeArgument do -- bygg infoboksen, rang for rang
local erWDData = false -- om taksonomidataet er henta frå Wikidata
local argumenthovudnamn = gyldigeArgument[i][1][1] -- t.d. 'rekkje'; for å vera eintydig
for j = 1, #gyldigeArgument[i][1] do -- iterer over alle mogelege argumentsynonym
argumentnamn = gyldigeArgument[i][1][j]
argumentinndata = args[argumentnamn .. '_rå'] or args[argumentnamn]
if not argumentinndata and taksonomiFraaWD then
if taksonomidataWD[argumentnamn] then
argumentinndata = taksonomidataWD[argumentnamn]
erWDData = true
end
end
if argumentinndata then
break
end
end
local vitskaplegNamn
local lenk = true -- om det skal opprettast ei wikilenkje
local uthev = false -- om namnet skal uthevast (t.d. for monotypi)
local utdoeydd = false -- om taksoner er utdøydd
if argumentinndata then
rangnummer = rangnummer + 1
tabell.taksonomi.hierarki[rangnummer] = {innhald = {}}
tabell.taksonomi.hierarki[rangnummer].rangnamn = argumenthovudnamn
if args[argumentnamn .. '_rå'] then
tabell.taksonomi.hierarki[rangnummer].innhald['rå'] = argumentinndata
elseif args[argumentnamn .. '_norsk'] then
tabell.taksonomi.hierarki[rangnummer].innhald['norsk namn'] = args[argumentnamn .. '_norsk']
tabell.taksonomi.hierarki[rangnummer].innhald['vitskapleg namn'] = argumentinndata
else
local sidetittel = nil
if erWDData then
vitskaplegNamn = argumentinndata[1]
sidetittel = argumentinndata[3]
monotypisk = argumentinndata[4]
utdoeydd = argumentinndata[5]
tabell.taksonomi.hierarki[rangnummer].innhald.monotypisk = monotypisk
if argumentinndata[2] then -- fann det norske namnet på Wikidata
norskNamn = argumentinndata[2]
else
norskNamn = eksport.hentNorskNamn(argumenthovudnamn, vitskaplegNamn)
end
if argumenthovudnamn == 'seksjon_over_art' then
if vitskaplegNamn:find('sect.') then
vitskaplegNamn = mw.text.split(vitskaplegNamn, 'sect. ')[2]
end
if not sidetittel then -- unngår potensielt uheldig lenking
lenk = false
end
end
if vitskaplegNamn:find('subg.') then
vitskaplegNamn = mw.text.split(vitskaplegNamn, 'subg. ')[2]
end
if vitskaplegNamn:find('subsp.') then
vitskaplegNamn = mw.ustring.gsub(vitskaplegNamn, ' subsp. ', ' ')
end
else
if argumenthovudnamn == 'art' then
vitskaplegNamn = tabell.taksonomi.rangar['slekt'].innhald['vitskapleg namn'] .. ' ' .. argumentinndata
elseif argumenthovudnamn == 'underart' then
vitskaplegNamn = tabell.taksonomi.rangar['slekt'].innhald['vitskapleg namn'] .. ' ' .. tabell.taksonomi.rangar['art'].innhald['vitskapleg namn'] .. ' ' .. argumentinndata
else
vitskaplegNamn = argumentinndata
end
norskNamn = eksport.hentNorskNamn(argumenthovudnamn, vitskaplegNamn)
end
tabell.taksonomi.hierarki[rangnummer].innhald['vitskapleg namn'] = vitskaplegNamn
if norskNamn ~= vitskaplegNamn then
tabell.taksonomi.hierarki[rangnummer].innhald['norsk namn'] = norskNamn
end
tabell.taksonomi.hierarki[rangnummer].innhald.sidetittel = sidetittel
tabell.taksonomi.hierarki[rangnummer].innhald.lenk = lenk
tabell.taksonomi.hierarki[rangnummer].innhald['utdøydd'] = utdoeydd
tabell.taksonomi.rangar[argumenthovudnamn] = tabell.taksonomi.hierarki[rangnummer]
end
end
end
if tabell.taksonomi.hierarki[1] then
ARTIKKELRANGNAMN = tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].rangnamn
namn['vitskapleg'] = tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].innhald['vitskapleg namn']
if tabell.taksonomi.hierarki[1].innhald['vitskapleg namn']:match('Virus') then
erVirus = true
end
end
if args['namn'] then
namn['formatert'] = args['namn']:gsub(' ', ' ')
namn['uformatert'] = args['namn']:gsub("'''", ''):gsub("''", ''):gsub(' ', ' ')
namn['norsk'] = namn['uformatert']
local fyrst = mw.ustring.find(namn['formatert'], '%a')
local storFyrste = mw.ustring.upper(namn['formatert']:sub(fyrst, fyrst))
namn['formatert, stor fyrstebokstav'] = namn['formatert']:sub(1, fyrst-1) .. storFyrste .. namn['formatert']:sub(fyrst + 1)
elseif tabell.taksonomi.hierarki[1] then
if tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].norsk then
namn['norsk'] = tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].norsk
namn['formatert'] = namn['norsk']:gsub(" ", ' ')
namn['uformatert'] = namn['norsk']
namn['formatert, stor fyrstebokstav'] = mw.ustring.upper(mw.ustring.sub(namn['norsk'], 1, 1)) .. mw.ustring.sub(namn['norsk'], 2)
elseif taksonomiFraaWD and Wikidataelement and Wikidataelement.labels['nn'] and Wikidataelement.labels['nn']['language'] == 'nn' and Wikidataelement:getLabel('nn') ~= namn['vitskapleg'] then -- nytt merkelappen på Wikidata som namn
local merkelapp = Wikidataelement:getLabel('nn')
namn['uformatert'] = merkelapp
namn['formatert'] = merkelapp
namn['norsk'] = merkelapp
namn['formatert, stor fyrstebokstav'] = mw.ustring.upper(mw.ustring.sub(merkelapp, 1, 1)) .. mw.ustring.sub(merkelapp, 2)
elseif not namn['uformatert'] then
namn['uformatert'] = namn['vitskapleg']
if mw.ustring.match(ARTIKKELRANGNAMN, 'slekt') or mw.ustring.match(ARTIKKELRANGNAMN, 'art') or erVirus then
namn['formatert'] = "''" .. namn['vitskapleg'] .. "''"
else
namn['formatert'] = namn['vitskapleg']
end
namn['formatert, stor fyrstebokstav'] = namn['formatert']
end
end
if tabell.taksonomi.hierarki[1] and namn['uformatert'] == namn['vitskapleg'] and not mw.ustring.find(SIDETITTEL, namn['vitskapleg']:gsub(' ', ' ')) then -- det ser ut som at sidetittelen er eit norsk namn på taksonet
namn['uformatert'] = mw.language.getContentLanguage():lcfirst(SIDETITTEL)
namn['norsk'] = namn['uformatert']
namn['formatert'] = namn['uformatert']
namn['formatert, stor fyrstebokstav'] = SIDETITTEL
end
if tabell.taksonomi.hierarki[1] then
namn['uformatert, stor fyrstebokstav'] = mw.ustring.upper(mw.ustring.sub(namn['uformatert'], 1, 1)) .. mw.ustring.sub(namn['uformatert'], 2)
end
if klassifisertAv then -- hent inn namn om det finst
klassifisertAvModul = require('Modul:Klassifisert av')
tabell.klassifiseringsboks.innhald['av, rå'] = klassifisertAvModul.hovud(klassifisertAv, 'wikilenkje, argument', 'om finst')
elseif Wikidataelement then
tabell.klassifiseringsboks.innhald['av, rå'] = eksport.klassifisertAvWD(Wikidataelement, rike)
end
tabell.lister = {}
local gyldigeLister = {{{'rekkjer', 'rekker'}, 'rekkje'}, {{'underrekkjer', 'underrekker'}, 'underrekkje'}, {{'klassar', 'klasser'}, 'klasse'},
{{'ordenar'}, 'orden'}, {{'underordenar'}, 'underorden'},
{{'familiar'}, 'familie'}, {{'underfamiliar'}, 'underfamilie'}, {{'slekter'}, 'slekt'}, {{'artar'}, 'art'}, {{'underartar'}, 'underart'}}
for i = 1, #gyldigeLister do -- finn ut om det er gjeve eit listeargument
local listedata = nil
local listerang = gyldigeLister[i][2]
for j = 1, #gyldigeLister[i][1] do -- iterer over alle mogelege listeargumentsynonym
listenamn = gyldigeLister[i][1][j]
listedata = args[listenamn .. '_rå'] or args[listenamn]
if listedata then
break
end
end
if listedata then
radinnhald = ' colspan="2" |'
if args[listenamn .. '_rå'] then
radinnhald = radinnhald .. '\n' .. listedata -- sleng på eit lineskift fyrst for å få lista til å verka
else
radinnhald = radinnhald .. eksport.lagListe(listedata, listerang, erVirus)
end
listetittel = "'''" .. mw.ustring.upper(mw.ustring.sub(listenamn, 1, 1)) .. mw.ustring.sub(listenamn, 2) .. "'''"
liste = eksport.nyRadseksjon(listetittel) .. eksport.nyRad('', radinnhald)
table.insert(tabell.lister, liste)
end
end
----- Samansetjing av taksoboksen -----
---
--
-- byrjinga på taksboksen
taksoboks = string.format([[{| class="infobox" style="float:right; clear:right; width:250px; margin-left: 1em; font-size=small;"
| colspan="2" style="text-align:center; background: #EEDDAA; color:black;"|'''%s''' ]], namn['formatert, stor fyrstebokstav'] or SIDETITTEL )
taksoboks = taksoboks .. '\n|-\n| colspan="2" align="center" style="text-align: center; | '
-- bilete
if tabell['bilete'][1].fil or tabell['bilete'][2].fil then
if tabell['bilete'][1]['kjønn'] or tabell['bilete'][2]['kjønn'] then
if mw.ustring.find(namn['formatert'], ' ') or mw.ustring.find(namn['formatert'], ' ') then
sep = '-'
else
sep = ''
end
end
local bilettekst1
if not tabell.bilete[1].skildring and ARTIKKELRANGNAMN == 'art' or ARTIKKELRANGNAMN == 'underart' then -- vil berre ha taksonnamnet som bilettekst for artar og underartar
if tabell.bilete[1]['kjønn'] then
bilettekst1 = namn['formatert, stor fyrstebokstav'] .. sep .. tabell.bilete[1]['kjønn']
else
bilettekst1 = namn['formatert, stor fyrstebokstav']
end
else
bilettekst1 = tabell.bilete[1].skildring
end
taksoboks = taksoboks .. eksport.bilete(tabell.bilete[1].fil, bilettekst1, tabell.bilete[1].storleik)
if tabell.bilete[2].fil then
if tabell.bilete[1] then
taksoboks = taksoboks .. '\n|-\n| colspan="2" align="center" style="text-align: center; | '
end
local bilettekst2
if not tabell.bilete[2].skildring then
if tabell.bilete[2]['kjønn'] then
bilettekst2 = namn['formatert, stor fyrstebokstav'] .. sep .. tabell.bilete[2]['kjønn']
else
bilettekst2 = namn['formatert, stor fyrstebokstav']
end
else
bilettekst2 = tabell.bilete[2].skildring
end
taksoboks = taksoboks .. eksport.bilete(tabell.bilete[2].fil, bilettekst2, tabell.bilete[2].storleik)
end
end
-- status og utbreiing
if tabell['status og utbreiing'].overskrift then
taksoboks = taksoboks .. tabell['status og utbreiing'].overskrift .. '\n|-\n|colspan="2" align="center" style="text-align: center;|'
if tabell['status og utbreiing'].status.verda then
taksoboks = taksoboks .. tabell['status og utbreiing'].status.verda
end
if tabell['status og utbreiing'].status.Noreg then
taksoboks = taksoboks .. tabell['status og utbreiing'].status.Noreg
end
if tabell['status og utbreiing'].kart then
local skildring = tabell['status og utbreiing'].kart.skildring or 'Utbreiinga av ' .. namn['formatert']
karttekst1 = '|' .. skildring
karttekst2 = string.format('<br /> %s', skildring)
taksoboks = taksoboks .. string.format('[[Fil:%s%s|frameless%s]]', tabell['status og utbreiing'].kart.fil, tabell['status og utbreiing'].kart.storleik or '', karttekst1) .. karttekst2
end
end
-- taksonomi
if tabell.taksonomi.hierarki[1] then
taksoboks = taksoboks .. tabell.taksonomi.overskrift
for i = 1, #tabell.taksonomi.hierarki do
vitskaplegNamn = tabell.taksonomi.hierarki[i].innhald['vitskapleg namn']
norskNamn = tabell.taksonomi.hierarki[i].innhald['norsk namn']
sidetittel = tabell.taksonomi.hierarki[i].innhald.sidetittel
lenk = tabell.taksonomi.hierarki[i].innhald.lenk
monotypisk = tabell.taksonomi.hierarki[i].innhald.monotypisk
utdoeydd = tabell.taksonomi.hierarki[i].innhald['utdøydd']
rangnamn = tabell.taksonomi.hierarki[i].rangnamn
local uthev
if monotypisk then
uthev = true
elseif ARTIKKELRANGNAMN == rangnamn then
uthev = true
end
if rangnamn == ARTIKKELRANGNAMN and not norskNamn and namn['norsk'] then -- norsk namn henta frå artikkeltittelen
norskNamn = namn['norsk']
end
if not erVirus then
if rangnamn == 'art' then -- avstytta namn
local namnelement = mw.text.split(vitskaplegNamn, ' ')
vitskaplegNamn = mw.ustring.sub(namnelement[1], 1, 1) .. '. ' ..namnelement[2]
elseif rangnamn == 'underart' then
local namnelement = mw.text.split(vitskaplegNamn, ' ')
vitskaplegNamn = mw.ustring.sub(namnelement[1], 1, 1) .. '. ' .. mw.ustring.sub(namnelement[2], 1, 1) .. '. ' .. namnelement[3]
end
end
if tabell.taksonomi.hierarki[i].innhald['rå'] then
radinnhald = tabell.taksonomi.hierarki[i].innhald['rå']
else
radinnhald = eksport.formaterNamn(vitskaplegNamn, norskNamn, sidetittel, rangnamn, art, false, lenk, uthev, utdoeydd, erVirus)
end
taksoboks = taksoboks .. eksport.nyRad(rangskildring[rangnamn], radinnhald)
end
if mw.ustring.match(ARTIKKELRANGNAMN, 'art') then
taksoboks = taksoboks .. eksport.nyRadseksjon("'''[[Vitskapleg namn]]'''") .. '\n|- valign="top"\n| style="text-align: center;" colspan="2" |'
taksoboks = taksoboks .. "'''''" .. tabell.taksonomi.rangar[ARTIKKELRANGNAMN].innhald['vitskapleg namn'] .. "'''''"
if tabell.klassifiseringsboks.innhald['av, rå'] then
taksoboks = taksoboks .. '<div style="text-align: center; font-size: smaller; ">' .. tabell.klassifiseringsboks.innhald['av, rå'] .. '</div>'
end
elseif tabell.klassifiseringsboks.innhald['av, rå'] then
taksoboks = taksoboks .. '<br /><small>' .. tabell.klassifiseringsboks.innhald['av, rå'] .. '</small>'
end
end
-- lister
if tabell['lister'] then
for i = 1, #tabell.lister do
taksoboks = taksoboks .. tabell.lister[i]
end
end
-- enden på taksoboksen
taksoboks = taksoboks .. '\n|}'
--
----
----- Taksoboks ferdig sett saman -----
if SIDETITTEL == namn['uformatert'] and SIDETITTEL ~= mw.ustring.gsub(namn['formatert'], ' ', ' ') then
frame:callParserFunction('VISTITTEL', namn['formatert'])
end
if ID and mw.title.getCurrentTitle().namespace == 0 then -- åtvaring ved førehandsvising i hovudnamnerommet
if ID == mw.wikibase.getEntityIdForCurrentPage() then
mw.addWarning('Argumentet <code>| id = ' .. ID .. '</code> er identisk med elmentet artikkelen er kopla til ' ..
'og skal difor ikkje ha nokon verknad. <code>id</code>-argumentet bør berre nyttast når Wikidata-elementet som har taksonomidataa er ' ..
'eit anna element enn det artikkelen er kopla til, og bør fjernast her.</span></strong>')
else
mw.addWarning('Merk: argumentet <code>| id = ' .. ID .. '</code> kan tyda på at artikkelen er kopla til feil ' ..
'Wikidata-element sidan taksonomidataa ligg på eit anna Wikidata-element enn det artikkelen er kopla til.</span></strong>')
end
end
return taksoboks
end
return eksport