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, kettőskereszttől és felesleges 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, majd a felesleges szóközöket
local cleaned = s:gsub("%d+", ""):gsub("#", "")
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 keresett kifejezést a sorban
if sor:find(keresettTaxon, 1, true) then
-- 1. É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)
-- 2. Szinonima-blokkok feldolgozása
-- A sor többi részét daraboljuk fel a főbb elválasztójelek mentén (= vagy -)
-- A ≡ jelet belső elválasztónak használjuk
local eredmeny = "== A ''" .. ervenyesNev .. "'' szinonimái ==\n\n"
-- Eltávolítjuk a sor elejéről az érvényes nevet és az első számot
local szinonimaResz = sor:gsub("^%d+ [^#]+#", "")
-- Azokat a részeket keressük, amik = vagy - jellel kezdődnek, vagy az elején vannak ≡ jellel
-- A logikát átalakítjuk: minden "=" vagy "-" új sort kezd.
-- A "≡" jelekkel elválasztott neveket egy csoportba gyűjtjük.
local sorok = {}
-- Először szétvágjuk a heterotipikus (=) és hibás (-) jelek mentén
-- De a ≡ jeleket megtartjuk a darabokon belül
local utolsoPozicio = 1
for pozicio, jel in szinonimaResz:gmatch("()([=≡%-])") do
local darab = szinonimaResz:sub(utolsoPozicio, pozicio - 1)
if utolsoPozicio > 1 then
local elozoJel = szinonimaResz:sub(utolsoPozicio - 1, utolsoPozicio - 1)
table.insert(sorok, {jel = elozoJel, szoveg = cleanName(darab)})
end
utolsoPozicio = pozicio + 1
end
-- Utolsó darab hozzáadása
local utolsoDarab = szinonimaResz:sub(utolsoPozicio)
if utolsoPozicio > 1 then
local elozoJel = szinonimaResz:sub(utolsoPozicio - 1, utolsoPozicio - 1)
table.insert(sorok, {jel = elozoJel, szoveg = cleanName(utolsoDarab)})
end
-- 3. Csoportosítás és kiírás
local aktualisListaElem = ""
for i, elem in ipairs(sorok) do
if elem.jel == "≡" then
-- Ha ez egy homotipikus szinonima, hozzáfűzzük az aktuális sorhoz
if aktualisListaElem == "" then
aktualisListaElem = "* ≡ ''" .. elem.szoveg .. "''"
else
aktualisListaElem = aktualisListaElem .. " ≡ ''" .. elem.szoveg .. "''"
end
else
-- Ha "=" vagy "-", akkor az eddigit kiírjuk, és újat kezdünk
if aktualisListaElem ~= "" then
eredmeny = eredmeny .. aktualisListaElem .. "\n"
end
aktualisListaElem = "* " .. elem.jel .. " ''" .. elem.szoveg .. "''"
end
end
-- Az utolsó kint maradt elemet is hozzáadjuk
if aktualisListaElem ~= "" then
eredmeny = eredmeny .. aktualisListaElem .. "\n"
end
return eredmeny
end
end
return "A megadott taxon nem található."
end
return p