Modul:CactaceaeTaxonSzinonimák
Megjelenés
A modult a Modul:CactaceaeTaxonSzinonimák/doc lapon tudod dokumentálni
local p = {}
-- Segédfüggvény a nevek megtisztítására a számoktól és szóközöktől
local function cleanName(s)
if not s then return "" end
-- Eltávolítja a számokat és a kettőskeresztet a név végéről, majd trimmeli
local cleaned = s:gsub("%d+ *#*", ""):gsub("%d+", "")
return mw.text.trim(cleaned)
end
function p.keres(frame)
local keresettTaxon = frame.args[1] or frame:getParent().args[1]
if not keresettTaxon or keresettTaxon == "" then return "Nincs megadva taxon!" end
local dataModul = require("Modul:CactaceaeTaxonokData")
local nyersAdat = dataModul.getAdatok()
for sor in nyersAdat:gmatch("[^\r\n]+") do
-- Keressük a taxont a sorban
if sor:find(keresettTaxon, 1, true) then
-- Érvényes név kinyerése (a sor elején az első szám után)
local ervenyesNevNyers = sor:match("%d+ ([^#:=≡%-]+)")
local ervenyesNev = cleanName(ervenyesNevNyers)
-- Szinonimák feldolgozása
local csoportok = {}
-- A sor többi részét daraboljuk fel a szinonima jelek mentén
-- A gmatch itt a jelet és az utána következő szöveget nézi a következő jelig
for jel, szoveg in sor:gmatch("([≡=%-])%s*([^≡=%-]+)") do
local tisztaNev = cleanName(szoveg)
if jel == "≡" then
-- Homotipikus szinonima: fűzzük az utolsó csoporthoz, ha az is ≡ volt
if #csoportok > 0 and csoportok[#csoportok].jel == "≡" then
table.insert(csoportok[#csoportok].nevek, tisztaNev)
else
table.insert(csoportok, {jel = "≡", nevek = {tisztaNev}})
end
else
-- Heterotipikus (=) vagy hibás (-) név: új sor
table.insert(csoportok, {jel = jel, nevek = {tisztaNev}})
end
end
-- Kimenet összeállítása
if ervenyesNev ~= "" then
local eredmeny = "== A ''" .. ervenyesNev .. "'' szinonimái ==\n\n"
for _, csop in ipairs(csoportok) do
local nevekDolt = {}
for _, n in ipairs(csop.nevek) do
table.insert(nevekDolt, "''" .. n .. "''")
end
-- Az azonos típushoz tartozókat " ≡ " jellel kötjük össze egy soron belül
eredmeny = eredmeny .. "* " .. csop.jel .. " " .. table.concat(nevekDolt, " ≡ ") .. "\n"
end
return eredmeny
end
end
end
return "A megadott taxon (''" .. keresettTaxon .. "'') nem található."
end
return p