Մոդուլ:Taxobox

Վիքիպեդիայից՝ ազատ հանրագիտարանից

Documentation for this module may be created at Մոդուլ:Taxobox/doc

local export = {}
local omsetjingsdata = require('Module:Taxobox/Armenian names')
local taksonomiWD = require('Module:Taxobox/Taxonomy from Wikidata')

function export.hentarmenianName(rang, vitskaplegName)
	if omsetjingsdata[rang] then
		return omsetjingsdata[rang][vitskaplegName]
	else
		return nil
	end
end

function export.formaterName(vitskaplegName, armenianName, sidetittel, rang, art, erListeelement, lenk, uthev, utdoeydd, erVirus)
	local text = ''
	local skalKursiverast = erVirus or rang:match('genus') or rang:match('species')
	local mellomrom = ' '
	local vitskaplegNameFormatert = vitskaplegName:gsub(" ", "")
	if erListeelement then
		mellomrom = ' '
	end

	if armenianName == vitskaplegName then -- samanfallande armenian og vitskapleg name tyder gjerne på uynskt duplikasjon
		armenianName = nil
	end

	if armenianName then
		armenianName =  mw.language.getContentLanguage():ucfirst(armenianName) -- stor fyrstebokstav
		if art and mw.title.getCurrentTitle().text == armenianName and not sidetittel then
			text = '[[' .. armenianName .. ' (' .. rang .. ')|' .. armenianName .. ']]' -- unngå utheving av høgre rang ved samanfallande name
		else
			if uthev then
				text = "'''" .. armenianName .. "'''"
			elseif sidetittel then
				text = '[[' .. sidetittel ..'|' .. armenianName .. ']]'
			elseif lenk ~= false then
				text = '[[' .. armenianName .. ']]'
			else
				text = armenianName
			end
		end
		
		if skalKursiverast then -- legg til vitskapleg name
			text = text .. mellomrom .. "''" .. '<small>(' .. vitskaplegNameFormatert .. ')</small>' .. "''"
		else
			text = text .. mellomrom .. '<small>(' .. vitskaplegNameFormatert .. ')</small>'
		end
	else
		if uthev then 
			text = "'''" .. vitskaplegNameFormatert .. "'''"
		elseif sidetittel then
			text = '[[' .. sidetittel .. '|' .. vitskaplegNameFormatert .. ']]'
		elseif lenk ~= false then
			text = "''".. vitskaplegNameFormatert .. "''"
		else
			text = vitskaplegNameFormatert
		end
		if skalKursiverast then
			text = "'" .. text .. "'"
		end
	end
	if utdoeydd then
		text = '†' .. text
	end
	return text
end

function export.klassifisertAvWD(Wikidataelement, regnum)
	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
				klassifisertAvName = personelement:getLabel()
				personsidetittel = personelement:getSitelink('hywiki') -- finn evt. lokal wikiside
				splittaName = mw.text.split(klassifisertAvName, ' ')
				if regnum == '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(klassifisertAvName, personelement.claims.P835[i]['mainsnak']['datavalue']['value']) then -- føretrekk sitering som speglar name på armenian
							personskildring = personelement.claims.P835[i]['mainsnak']['datavalue']['value']
							break
						end
					end
				elseif regnum == 'Plantae' or regnum == '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 etternameet
					etternameID = personelement.claims.P734[1]['mainsnak']['datavalue']['value']['id']
					personskildring = mw.wikibase.getEntity(etternameID):getLabel()
				else
					personskildring = splittaName[#splittaName]  -- nytt berre sisteleddet av nameet
				end
				tittel = personsidetittel or klassifisertAvName
				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('Կատեգորիա:' .. klassifisertAvName .. ' հեղինակի անվանած տաքսոններ'):getContent() ~= nil then
					kategoriar = kategoriar .. '[[Կատեգորիա:' .. klassifisertAvName .. ' հեղինակի անվանած տաքսոններ]]'
				else
					klassifisertAvModul = require('Module:Taxobox/Classification')
					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 export.nyRadseksjon(innhald)
	local cat = ''
	if regnum  == 'Animalia' then
			bckcolor = '#FFC0CB'
			cat = cat .. '[[Կատեգորիա:Կենդանիներ այբբենական կարգով]]'
	elseif regnum == 'Plantae' then
			bckcolor = 'lightgreen'
			cat = cat .. '[[Կատեգորիա:Բույսեր այբբենական կարգով]]'
	elseif regnum == 'Fungi' then
			bckcolor = 'lightblue'
			cat = cat .. '[[Կատեգորիա:Սնկեր այբբենական կարգով]]'
	elseif regnum == 'Bacteria' then
			bckcolor = '#D3D3D3'
			cat = cat .. '[[Կատեգորիա:Բակտերիաներ այբբենական կարգով]]'
	elseif regnum == 'Archaea' then
			bckcolor = '#F3E0E0'
			cat = cat .. '[[Կատեգորիա:Արքեաներ այբբենական կարգով]]'
	else
			bckcolor ='#eaecf0'
	end
	local text = string.format('\n|- valign="top"\n|-\n| style="text-align:center; font-size:1.1em; padding:0.5em 0 0.5em 0; background: #eaecf0" colspan="2"|%s', innhald)
	return text .. cat
end

function export.nyRad(skildring, innhald)
	if skildring ~= '' then
		skildring = skildring .. '\n| '
	end
	local text = string.format('\n|- valign="top"\n| %s%s', skildring, innhald)
	return text
end

function export.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 armenianName = export.hentarmenianName(rang, listeelementet)
		listeelementet = export.formaterName(listeelementet, armenianName, nil, rang, false, true, true, false, false, erVirus)
		liste = liste .. listeelementet .. '<br />'
	end
	return liste
end

function export.statustext(status, omraade)
	local text = ''
	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
		text = '<span style="text-align:center"><small>\'\'\'[[Կարմիր գիրք|Հատուկ պահպանության կարգավիճակ՝]]\'\'\' '
	end
	if omraade == 'Armenian' then
		text = text .. '\'\'\'[[Հայաստանի կարմիր գիրք|Կարգավիճակը ՀՀ-ում՝]]\'\'\' '
	end
	if status == 'se' or status == 'secure'  or status == 'ikkje truga'then
		text = text ..  'Չվտանգված'
	elseif status == 'dom' or status == 'domesticated'  or status == 'husdyr' then
		text = text ..  'Ընտելացված'
	elseif status == 'dd' or status == 'datamangel'  or status == 'data' then
		text = text ..  '[[Պատկեր:Status none DD.svg|frameless]] <br/> Տվյալների անբավարարություն'
		if omraade == 'verda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Տվյալների անբավարարությամբ տեսակներ]]'
		end
	elseif status == 'lc' or status == 'livskraftig'  then
		text = text ..  '[[Պատկեր:Status iucn3.1 LC hy.svg|frameless]] <br/> [[Քիչ մտահոգող տեսակ|Քիչ մտահոգող տեսակ]]'
		if omraade == 'verda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Քիչ մտահոգող տեսակներ]]'
		end
	elseif status == 'nt' or status == 'nær truga' then
		text = text ..  '[[Պատկեր:Status iucn3.1 NT hy.svg|frameless]] <br/> [[Վտանգման սպառնացող վիճակին մոտ գտնվող տեսակ|Վտանգման սպառնացող վիճակին մոտ գտնվող տեսակ]]'
		if omraade == 'verda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Վտանգման սպառնացող վիճակին մոտ գտնվող տեսակներ]]'
		end
	elseif status == 'vu' or status == 'sårbar' then
		text = text ..  '[[Պատկեր:Status iucn3.1 VU hy.svg|frameless]] <br/> [[Խոցելի տեսակ|Խոցելի տեսակ]]'
		if omraade == 'verda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Խոցելի տեսակներ]]'
		elseif omraade == 'Armenian' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Հայաստանի խոցելի տեսակներ]]'
		end
	elseif status == 'en' or status == 'sterkt truga'  then
		text = text ..  '[[Պատկեր:Status iucn3.1 EN hy.svg|frameless]] <br/> [[Վտանգված տեսակ|Վտանգված տեսակ]]'
		if omraade == 'verda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Վտանգված տեսակներ]]'
		elseif omraade == 'Armenian' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Հայաստանի վտանգված տեսակներ]]'
		end
	elseif status == 'cr' or status == 'kritisk truga'  then
		text = text ..  '[[Պատկեր:Status iucn3.1 CR hy.svg|frameless]] <br/> [[Կրիտիկական վիճակում գտնվող տեսակ|Կրիտիկական վիճակում գտնվող]]'
		if omraade == 'verda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Կրիտիկական վիճակում գտնվող տեսակներ]]'
		elseif omraade == 'Armenian' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Հայաստանի կրիտիկական վիճակում գտնվող տեսակներ]]'
		end
	elseif status == 'ex' or status == 'utrydda' then
		text = text ..  '[[Պատկեր:Status iucn3.1 EX hy.svg|frameless]] <br/> [[Անհետացած տեսակ|Անհետացած]]'
			if omraade == 'utrydda' then
			kategoriar = kategoriar .. '[[Կատեգորիա:Անհետացած տեսակներ]]'
		end
	elseif status == 'ew' then
		text = text ..  '[[Պատկեր:Status iucn3.1 EW hy.svg|frameless]] <br/> [[Վայրի բնության մեջ անհետացած տեսակ|Անհետացած վայրի բնության մեջ]]'
		kategoriar = kategoriar .. '[[Կատեգորիա:Վայրի բնության մեջ անհետացած տեսակ]]'
	end
	text = text .. '</small>'
	
	if mw.title.getCurrentTitle().namespace == 0 then -- legg berre til kategoriar i hovudnameerommet
		text = text .. kategoriar
	end
	
	return text
end

function export.bilete(bilete, bilettext, biletstorleik)
	local bilettext1 = ''; local bilettext2 = ''
	local biletstorleik = biletstorleik or ''
	if bilettext then
		bilettext1 = '|' .. bilettext
		bilettext2 = string.format('<br /><small>%s</small>', bilettext)
	end
	if biletstorleik ~= '' then
		biletstorleik = '|' .. biletstorleik
	end
	
	return string.format('[[Պատկեր:%s%s|frameless%s]]', bilete, biletstorleik, bilettext1) .. bilettext2
end


function export.hovud(frame)
	local tabell = {}
	local taxobox = ''
	local args = frame:getParent().args
	local name = {}
	local erVirus = args['er_virus']
	local status = args['status']
	if status == '' then status = nil end
	local statusArmenian = args['status_armenian']
	if statusArmenian == '' then statusArmenian = nil end
	local bilete = args['bilete'] or args['image']
	if bilete == '' then bilete = nil end
	local bilettext1 = args['bilettext'] or args['imagetext']
	if bilettext1 == '' then bilettext1 = nil end
	local bilettext2 = args['bilettext2'] or args['imagetext2']
	if bilettext2 == '' then bilettext2 = nil end
	local bilete2 = args['bilete2'] or args['image2']
	if bilete2 == '' then bilete2 = nil end
	local rangemap = args['range_map']
	if rangemap == '' then rangemap = nil end
	local rangelegend = args['range_legend']
	if rangelegend == '' then rangelegend = 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'] ~= 'այո' 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['taxonomy_WD'] or args['Վիքիդատա']
	local taksonomiFraaWD = false
	if not taksonomiFraaWDArg or taksonomiFraaWDArg == '' or taksonomiFraaWDArg == 'ոչ' 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 = ' (արու)', Q43445 = ' (էգ)'}
	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 nyarmenian eller engelsk text
					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 = bilettext1, storleik = args['biletstorleik'] or args['imagestorleik'], ['kjønn'] = tabell.bilete[1]['kjønn']}
	end
	if bilete2 then
		tabell.bilete[2] = {fil = bilete2, skildring = bilettext2, storleik = args['biletstorleik2'] or args['imagestorleik2'], ['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 rangelegendmerke = false
	if not rangemap and Wikidataelement then
		if Wikidataelement.claims and Wikidataelement.claims.P181 then -- hent rangemap frå Wikidata
			rangemap = Wikidataelement.claims.P181[1]['mainsnak']['datavalue']['value']
		end
	end

	-- handsam status
	if status or statusArmenian or rangemap then
		local seksjonstittel
		if rangemap then
			seksjonstittel = 'Տարածվածություն'
			if status or statusArmenian then
				seksjonstittel = seksjonstittel .. ' և պահպանություն'
			end
		elseif status or statusArmenian then
			seksjonstittel = 'Կարգավիճակ'
		end
		tabell['status og utbreiing'].superskrift = export.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 = export.statustext(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 statusArmenian and statusArmenian ~= '' then
		statusArmenian = statusArmenian:lower()
		tabell['status og utbreiing'].status.Armenian = ''
		if status then
			tabell['status og utbreiing'].status.Armenian = '<br />'
		end
		tabell['status og utbreiing'].status.Armenian = tabell['status og utbreiing'].status.Armenian .. export.statustext(statusArmenian, 'Armenian')
		if args['status_armenian_kjelde'] then
			tabell['status og utbreiing'].status.Armenian = tabell['status og utbreiing'].status.Armenian .. args['status_armenian_kjelde']
		end
	end
	
	-- handsam rangemap
	if rangemap then
		tabell['status og utbreiing'].rangemap = {}
		tabell['status og utbreiing'].rangemap.fil = rangemap
		if rangelegend then
			tabell['status og utbreiing'].rangemap.skildring = rangelegend
		end
		if args['rangemapstorleik'] then
			tabell['status og utbreiing'].rangemap.storleik = args['rangemapstorleik']
		end
	end
	
	-- byrjing på klassifisering
	if taksonomiFraaWD then -- skal henta inn taksonomidata frå Wikidata
		taksonomidataWD = taksonomiWD.hovud(ID)
	end
	
	tabell.taksonomi.superskrift = export.nyRadseksjon("'''[[Կենսաբանական դասակարգում|Դասակարգում]]'''")
	
	
	-- særhandsaming for dette argumentet
	local regnum = args['regnum']
	if not regnum and taksonomiFraaWD and taksonomidataWD['regnum'] then
		regnum = taksonomidataWD['regnum'][1]
	end

	local klassifisertAv = args['klassifisert_av']
	
	-- format: {<liste super gyldige argumentname>}, <skildring av raden>}
	
	local gyldigeArgument = {{{'domain'}, "'''[[Դոմեն (կենսաբանություն)|Դոմեն]]'''"}, {{'superregnum'}, "'''[[Թագավորություն (կենսաբանություն)|Վերնաթագավորություն&#8199;]]'''"}, 
		{{'regnum'}, "'''[[Թագավորություն (կենսաբանություն)|Թագավորություն&#8199;]]'''"}, {{'subregnum'}, "'''[[Թագավորություն (կենսաբանություն)|Ենթաթագավորություն&#8199;]]'''"}, 
		{{'infraregnum'}, "'''[[Թագավորություն (կենսաբանություն)|Ինֆրաթագավորություն]]'''"},	{{'superphylum', 'superdivisio'}, "'''[[Տիպ (կենսաբանություն)|Վերնաբաժին]]'''"},
		{{'phylum', 'divisio'}, "'''[[Տիպ (կենսաբանություն)|Տիպ/Բաժին]]'''"}, {{'subphylum', 'subdivisio'}, "'''[[Տիպ (կենսաբանություն)|Ենթատիպ]]'''"},
		{{'infraphylum', 'infradivisio'}, "'''[[Տիպ (կենսաբանություն)|Ինֆրատիպ]]'''"},
		{{'superclassis'}, "'''[[Դաս (կենսաբանություն)|Վերնադաս]]'''"}, {{'classis'}, "'''[[Դաս (կենսաբանություն)|Դաս]]'''"},
		{{'subclassis'}, "'''[[Դաս (կենսաբանություն)|Ենթադաս]]'''"},  {{'infraclassis'}, "'''[[Դաս (կենսաբանություն)|Ինֆրադաս]]'''"},
		{{'superordo'}, "'''[[Կարգ|Վերնակարգ]]'''"}, {{'ordo'}, "'''[[Կարգ]]'''"},
		{{'subordo'}, "'''[[Կարգ|Ենթակարգ]]'''"}, {{'infraordo'}, "'''[[Կարգ|Ինֆրակարգ]]'''"},
		{{'superfamilia'}, "'''[[Ընտանիք (կենսաբանություն)|Վերնաընտանիք]]'''"}, {{'familia'}, "'''[[Ընտանիք (կենսաբանություն)|Ընտանիք]]'''"},
		{{'subfamilia'}, "'''[[Ընտանիք (կենսաբանություն)|Ենթաընտանիք]]'''"}, {{'superstamme', 'supertribus'}, "'''Վերնատրիբա'''"},
		{{'stamme', 'tribus'}, "'''Տրիբա'''"}, {{'substamme', 'subtribus'}, "'''Ենթատրիբա'''"},
		{{'genus'}, "'''[[Ցեղ (կենսաբանություն)|Ցեղ]]'''"}, {{'subgenus'}, "'''[[Ցեղ (կենսաբանություն)|Ենթացեղ]]'''"}, {{'section_super_species'}, "'''Վերնատեսակ'''"},
		{{'species'}, "'''[[Կենսաբանական տեսակ|Տեսակ]]'''"}, {{'subspecies'}, "'''[[Կենսաբանական տեսակ|Ենթատեսակ]]'''"},
		{{'clade'}, "'''''Կլադ'''''"}, {{'unranked'}, "'''''(առանց աստիճանակարգի)''''':"}}
	
	local rangskildring = {}
	for i = 1, #gyldigeArgument do 
		rangskildring[gyldigeArgument[i][1][1]] = gyldigeArgument[i][2] -- bygg tabell som kan indekserast med rangname
	end

	local rangnummer = 0
	for i = 1, #gyldigeArgument do -- bygg infoboksen, rang for rang
		local erWDData = false -- om taksonomidataet er henta frå Wikidata
		local argumenthovudname = gyldigeArgument[i][1][1] -- t.d. 'phylum'; for å vera eintydig
		for j = 1, #gyldigeArgument[i][1] do -- iterer super alle mogelege argumentsynonym
			argumentname = gyldigeArgument[i][1][j]
			argumentinndata = args[argumentname .. '_rå'] or args[argumentname]
			
			if not argumentinndata and taksonomiFraaWD then
				if taksonomidataWD[argumentname] then
					argumentinndata = taksonomidataWD[argumentname]
					erWDData = true
				end
			end
			
			if argumentinndata then
				break
			end
		end
		
		local vitskaplegName
		local lenk = true -- om det skal opprettast ei wikilenkje
		local uthev = false -- om nameet 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].rangname = argumenthovudname
			if args[argumentname .. '_rå'] then
				tabell.taksonomi.hierarki[rangnummer].innhald['rå'] = argumentinndata
			elseif args[argumentname .. '_armenian'] then
				tabell.taksonomi.hierarki[rangnummer].innhald['armenian name'] = args[argumentname .. '_armenian']
				tabell.taksonomi.hierarki[rangnummer].innhald['vitskapleg name'] = argumentinndata
			else 
				local sidetittel = nil
				if erWDData then
					vitskaplegName = argumentinndata[1]
					sidetittel = argumentinndata[3]
					monotypisk = argumentinndata[4]
					utdoeydd = argumentinndata[5]

					tabell.taksonomi.hierarki[rangnummer].innhald.monotypisk = monotypisk
					
					if argumentinndata[2] then -- fann det armeniane nameet på Wikidata
						armenianName = argumentinndata[2] 
					else
						armenianName = export.hentarmenianName(argumenthovudname, vitskaplegName)
					end
						
					if argumenthovudname == 'section_super_species' then
						if vitskaplegName:find('sect.') then
							vitskaplegName = mw.text.split(vitskaplegName, 'sect.')[2]
						end
						if not sidetittel then -- unngår potensielt uheldig lenking
							lenk = false
						end
					end
					if vitskaplegName:find('subg.') then
							vitskaplegName = mw.text.split(vitskaplegName, 'subg.')[2]
					end
					if vitskaplegName:find('subsp.') then
							vitskaplegName = mw.ustring.gsub(vitskaplegName, ' subsp. ', ' ')
					end
				else
					if argumenthovudname == 'species' then
						vitskaplegName = tabell.taksonomi.rangar['genus'].innhald['vitskapleg name'] .. ' ' .. argumentinndata
					elseif argumenthovudname == 'subspecies' then
						vitskaplegName = tabell.taksonomi.rangar['genus'].innhald['vitskapleg name'] .. ' ' .. tabell.taksonomi.rangar['species'].innhald['vitskapleg name'] .. ' ' .. argumentinndata
					else
						vitskaplegName = argumentinndata
					end
					armenianName = export.hentarmenianName(argumenthovudname, vitskaplegName)
				end
				tabell.taksonomi.hierarki[rangnummer].innhald['vitskapleg name'] = vitskaplegName
				if armenianName ~= vitskaplegName then
					tabell.taksonomi.hierarki[rangnummer].innhald['armenian name'] = armenianName
				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[argumenthovudname] = tabell.taksonomi.hierarki[rangnummer]
			end
		end
	end
	
	if tabell.taksonomi.hierarki[1] then
		ARTIKKELRANGNAME = tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].rangname
		name['vitskapleg'] = tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].innhald['vitskapleg name']
		if tabell.taksonomi.hierarki[1].innhald['vitskapleg name']:match('Virus') then
			erVirus = true
		end
	end


	if args['name'] then
		name['formatert'] = args['name']:gsub(' ', '&nbsp;')
		name['uformatert'] = args['name']:gsub("'''", ''):gsub("''", ''):gsub('&nbsp;', ' ')
		name['armenian'] = name['uformatert']
		local fyrst = mw.ustring.find(name['formatert'], '%a')
		local storFyrste = mw.ustring.upper(name['formatert']:sub(fyrst, fyrst))
		name['formatert, stor fyrstebokstav'] = name['formatert']:sub(1, fyrst-1) .. storFyrste .. name['formatert']:sub(fyrst + 1)
	elseif tabell.taksonomi.hierarki[1] then
		if tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].armenian then
			name['armenian'] = tabell.taksonomi.hierarki[#tabell.taksonomi.hierarki].armenian
			name['formatert'] = name['armenian']:gsub(" ", '&nbsp;')
			name['uformatert'] = name['armenian']
			name['formatert, stor fyrstebokstav'] = mw.ustring.upper(mw.ustring.sub(name['armenian'], 1, 1)) .. mw.ustring.sub(name['armenian'], 2)
		elseif taksonomiFraaWD and Wikidataelement and Wikidataelement.labels['hy'] and Wikidataelement.labels['hy']['language'] == 'hy' and Wikidataelement:getLabel('hy') ~= name['vitskapleg'] then -- nytt merkelappen på Wikidata som name
			local merkelapp = Wikidataelement:getLabel('hy')
			name['uformatert'] = merkelapp
			name['formatert'] = merkelapp
			name['armenian'] = merkelapp
			name['formatert, stor fyrstebokstav'] = mw.ustring.upper(mw.ustring.sub(merkelapp, 1, 1)) .. mw.ustring.sub(merkelapp, 2)
		elseif not name['uformatert'] then
			name['uformatert'] = name['vitskapleg']
			if mw.ustring.match(ARTIKKELRANGNAME, 'genus') or mw.ustring.match(ARTIKKELRANGNAME, 'species') or erVirus then
				name['formatert'] = "''" .. name['vitskapleg'] .. "''"
			else
				name['formatert'] = name['vitskapleg']
			end
			name['formatert, stor fyrstebokstav'] = name['formatert']
		end
	end

	if tabell.taksonomi.hierarki[1] and name['uformatert'] == name['vitskapleg'] and not mw.ustring.find(SIDETITTEL, name['vitskapleg']:gsub('&nbsp;', ' ')) then -- det ser ut som at sidetittelen er eit armenian name på taksonet
		name['uformatert'] = mw.language.getContentLanguage():lcfirst(SIDETITTEL)
		name['armenian'] = name['uformatert']
		name['formatert'] = name['uformatert']
		name['formatert, stor fyrstebokstav'] = SIDETITTEL
	end
	
	if tabell.taksonomi.hierarki[1] then
		name['uformatert, stor fyrstebokstav'] = mw.ustring.upper(mw.ustring.sub(name['uformatert'], 1, 1)) .. mw.ustring.sub(name['uformatert'], 2)
	end

	if klassifisertAv then -- hent inn name om det finst
		klassifisertAvModul = require('Module:Taxobox/Classification')
		tabell.klassifiseringsboks.innhald['av, rå'] = klassifisertAvModul.hovud(klassifisertAv, 'wikilenkje, argument', 'om finst')
	elseif Wikidataelement then
		tabell.klassifiseringsboks.innhald['av, rå'] = export.klassifisertAvWD(Wikidataelement, regnum)
	end
	
	tabell.lister = {}
	local gyldigeLister = {{{'phylumr', 'divisior'}, 'phylum'}, {{'subphylumr', 'subdivisior'}, 'subphylum'}, {{'klassar', 'classisr'}, 'classis'}, 
		{{'ordoar'}, 'ordo'}, {{'subordoar'}, 'subordo'},
		{{'familiar'}, 'familia'}, {{'subfamiliar'}, 'subfamilia'}, {{'genuser'}, 'genus'}, {{'artar'}, 'species'}, {{'subartar'}, 'subspecies'}}
	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 super alle mogelege listeargumentsynonym
			listename = gyldigeLister[i][1][j]
			listedata = args[listename .. '_rå'] or args[listename]
			if listedata then
				break
			end
		end
		if listedata then
			radinnhald = ' colspan="2" |'
			if args[listename .. '_rå'] then
				radinnhald = radinnhald .. '\n' .. listedata -- sleng på eit lineskift fyrst for å få lista til å verka
			else 
				radinnhald = radinnhald .. export.lagListe(listedata, listerang, erVirus)
			end
			listetittel = "'''" .. mw.ustring.upper(mw.ustring.sub(listename, 1, 1)) .. mw.ustring.sub(listename, 2) .. "'''"
			liste = export.nyRadseksjon(listetittel) .. export.nyRad('', radinnhald)
			table.insert(tabell.lister, liste)
		end
	end
	
	----- Samansetjing av taxoboxen -----
	---
	--

	-- byrjinga på taksboksen
	taxobox = string.format([[{| class="toccolours" style="float:right; clear:right; width:300px; margin-left: 1em;"
| colspan="2"  style="text-align:center; font-size:1.2em; padding:0.5em 0 0.5em 0; background: %s"|'''%s''' ]], bckcolor, name['formatert, stor fyrstebokstav'] or SIDETITTEL )
	taxobox = taxobox .. '\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(name['formatert'], ' ') or mw.ustring.find(name['formatert'], '&nbsp;') then
				sep = ''
			else
				sep = ''
			end
		end
	
		local bilettext1
		if not tabell.bilete[1].skildring and ARTIKKELRANGNAME == 'species' or ARTIKKELRANGNAME == 'subspecies' then -- vil berre ha taksonnameet som bilettext for artar og subartar
			if tabell.bilete[1]['kjønn'] then
				bilettext1 = name['formatert, stor fyrstebokstav'] .. sep .. tabell.bilete[1]['kjønn']
			else
				bilettext1 = name['formatert, stor fyrstebokstav']
			end
		else
			bilettext1 = tabell.bilete[1].skildring
		end
		
		taxobox = taxobox .. export.bilete(tabell.bilete[1].fil, bilettext1, tabell.bilete[1].storleik)
		
		if tabell.bilete[2].fil then
			if tabell.bilete[1] then
				taxobox = taxobox .. '\n|-\n| colspan="2" align="center" style="text-align: center; | '
			end
			local bilettext2
			if not tabell.bilete[2].skildring then
				if tabell.bilete[2]['kjønn'] then
					bilettext2 = name['formatert, stor fyrstebokstav'] .. sep .. tabell.bilete[2]['kjønn']
				else
					bilettext2 = name['formatert, stor fyrstebokstav']
				end
			else
				bilettext2 = tabell.bilete[2].skildring
			end
			taxobox = taxobox .. export.bilete(tabell.bilete[2].fil, bilettext2, tabell.bilete[2].storleik)
		end
	end
	
	-- taksonomi
	if tabell.taksonomi.hierarki[1] then
		taxobox = taxobox .. tabell.taksonomi.superskrift
		for i = 1, #tabell.taksonomi.hierarki do
			vitskaplegName = tabell.taksonomi.hierarki[i].innhald['vitskapleg name']
			armenianName = tabell.taksonomi.hierarki[i].innhald['armenian name']
			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']
			rangname = tabell.taksonomi.hierarki[i].rangname
			
			local uthev
			if monotypisk then
				uthev = true
			elseif ARTIKKELRANGNAME == rangname then
				uthev = true
			end
			
			if rangname == ARTIKKELRANGNAME and not armenianName and name['armenian'] then -- armenian name henta frå artikkeltittelen
				armenianName = name['armenian']
			end
			
			if not erVirus then
				if rangname == 'species' then -- avstytta name
					local nameelement = mw.text.split(vitskaplegName, ' ')
					vitskaplegName = mw.ustring.sub(nameelement[1], 1, 1) .. '.&nbsp;' ..nameelement[2]
				elseif rangname == 'subspecies' then
					local nameelement = mw.text.split(vitskaplegName, ' ')
					vitskaplegName = mw.ustring.sub(nameelement[1], 1, 1) .. '.&nbsp;' .. mw.ustring.sub(nameelement[2], 1, 1) .. '.&nbsp;' .. nameelement[3]
				end
			end
			if tabell.taksonomi.hierarki[i].innhald['rå'] then
				radinnhald = tabell.taksonomi.hierarki[i].innhald['rå']
			else
				radinnhald = export.formaterName(vitskaplegName, armenianName, sidetittel, rangname, art, false, lenk, uthev, utdoeydd, erVirus)
			end
			taxobox = taxobox .. export.nyRad(rangskildring[rangname], radinnhald)
		end

		if mw.ustring.match(ARTIKKELRANGNAME, 'species') then
			taxobox = taxobox .. export.nyRadseksjon("'''Միջազգային անվանում'''") .. '\n|- valign="top"\n| style="text-align: center; " colspan="2" |'
			taxobox = taxobox .. "'''''" .. tabell.taksonomi.rangar[ARTIKKELRANGNAME].innhald['vitskapleg name'] .. "'''''"
			if tabell.klassifiseringsboks.innhald['av, rå'] then
				taxobox = taxobox .. '<div style="text-align: center; font-size: smaller; ">' .. tabell.klassifiseringsboks.innhald['av, rå'] .. '</div>'
			end
		elseif tabell.klassifiseringsboks.innhald['av, rå'] then
			taxobox = taxobox .. '<br \><small>' .. tabell.klassifiseringsboks.innhald['av, rå'] .. '</small>'
		end
	end

	-- status og utbreiing
	if tabell['status og utbreiing'].superskrift then
		taxobox = taxobox .. tabell['status og utbreiing'].superskrift .. '\n|-\n|colspan="2" align="center" style="text-align: center;|'
		if tabell['status og utbreiing'].status.verda then
			taxobox = taxobox .. tabell['status og utbreiing'].status.verda
		end
		if tabell['status og utbreiing'].status.Armenian then
			taxobox = taxobox .. tabell['status og utbreiing'].status.Armenian
		end
		if tabell['status og utbreiing'].rangemap then
			local skildring = tabell['status og utbreiing'].rangemap.skildring or 'Տաքսոնի տարածվածությունը'
			rangelegend1 = '|' .. skildring
			rangelegend2 = string.format('<br /> <small>%s</small>', skildring)
			taxobox = taxobox .. string.format('<br/>[[Պատկեր:%s%s|frameless%s]]', tabell['status og utbreiing'].rangemap.fil, tabell['status og utbreiing'].rangemap.storleik or '', rangelegend1) .. rangelegend2
		end
	end
	
	-- lister
	if tabell['lister'] then
		for i = 1, #tabell.lister do
			taxobox = taxobox .. tabell.lister[i]
		end
	end

	-- enden på taxoboxen
	taxobox = taxobox .. '\n|}'
	
	--
	----
	----- taxobox ferdig sett saman -----
	if SIDETITTEL == name['uformatert'] and SIDETITTEL ~= mw.ustring.gsub(name['formatert'], '&nbsp;', ' ') then
		frame:callParserFunction('VISTITTEL', name['formatert'])
	end
	
	if ID and mw.title.getCurrentTitle().namespace == 0 then -- åtvaring ved førehandsvising i hovudnameerommet
		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 taxobox
end

return export