Modul:SimpleTaxobox
Megjelenés
A modult a Modul:SimpleTaxobox/doc lapon tudod dokumentálni
-- Modul:SimpleTaxobox (Frissítve: Fajnév automatikus szétválasztása)
local p = {}
-- Betölti a központi adatmodult, amiben a hierarchia szerepel.
local TaxonData = require('Modul:TaxonData')
-- Segédfüggvény: Kinyeri a nemzetség nevét a fajnévből (pl. "Echinocactus grusonii" -> "Echinocactus")
local function extract_genus(full_species_name)
local genus_name = full_species_name:match("([^%s]+)") -- Kinyeri az első szót (szóközig)
return genus_name
end
function p.buildTaxobox(frame)
local args = frame:getParent().args
local currentTaxon = args.taxon
local hierarchy = {}
local taxon = currentTaxon
if not currentTaxon then
return "'''Taxobox Hiba:''' Hiányzó taxon paraméter."
end
-- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
while taxon do
local data = TaxonData.getData(taxon)
if data then
-- 1a. Talált adatot (Nemzetség, Család, Rend, Alfaj, stb.)
table.insert(hierarchy, { rank = data.rank, name = taxon })
taxon = data.parent -- Áttérés a szülőre
else
-- 1b. Nem talált adatot a Modul:TaxonData-ban. Feltételezzük, hogy FAJ.
if taxon == currentTaxon then
-- Csak a legelső elem esetén végezzük el a szétválasztást
local genus_name = extract_genus(currentTaxon)
-- Hozzáadjuk magát a fajt a hierarchiához (a Nemzetség lesz a szülő)
table.insert(hierarchy, { rank = "Faj", name = currentTaxon })
taxon = genus_name -- Áttérünk a Nemzetségre
else
-- Nem a legelső elem, és nincs adat (Hiba, vagy elértük a lánc végét a Nemzetség felett)
break
end
end
end
-- 2. Wikitext Taxobox táblázat felépítése
local output = '{| class="infobox biota" style="text-align: left; width: 20em;"\n'
output = output .. '|+ Rendszertani besorolás\n'
-- A hierarchia fordított sorrendben van. Felülről lefelé haladunk.
for i = #hierarchy, 1, -1 do
local item = hierarchy[i]
local name_display = item.name
-- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
if item.rank == "Faj" then
name_display = "'''" .. name_display .. "'''"
end
output = output .. '|-\n'
output = output .. '| style="text-align: right;" | ' .. item.rank .. '\n'
output = output .. '| ' .. name_display .. '\n'
end
output = output .. '|}\n'
return output
end
return p