Ugrás a tartalomhoz

„Modul:CactaceaeTaxonSzinonimák” változatai közötti eltérés

Innen: MKOE wiki
Nincs szerkesztési összefoglaló
Nincs szerkesztési összefoglaló
 
(4 közbenső módosítás ugyanattól a felhasználótól nincs mutatva)
4. sor: 4. sor:
local function cleanName(s)
local function cleanName(s)
     if not s or s == "" then return "" end
     if not s or s == "" then return "" end
     -- Eltávolítjuk a sallangokat: számok, jelek, kettőskereszt, @, kettőspontok
     -- MÓDOSÍTVA: A @ jelet meghagyjuk, hogy később linkelhessünk,  
     local cleaned = mw.ustring.gsub(s, "[%d#@≡=%-−%:]+", "")
    -- de a számokat, egyéb jeleket, kettőskeresztet és kettőspontokat töröljük.
     local cleaned = mw.ustring.gsub(s, "[%d#≡=%-−%:]+", "")
     return mw.text.trim(cleaned)
     return mw.text.trim(cleaned)
end
end


-- Függvény a nevek dőlt betűs formázásához a rövidítések kihagyásával
-- Függvény a nevek dőlt betűs formázásához és linkeléséhez
local function formatItalic(name)
local function formatItalic(name)
     if not name or name == "" then return "" end
     if not name or name == "" then return "" end
      
      
     -- A dőlt betűs formázásból kihagyandó rendszertani kategóriák (vesszővel elválasztva)
    -- Ellenőrizzük, hogy van-e @ jel (link jelölő)
    local isLinked = mw.ustring.sub(name, 1, 1) == "@"
    local workingName = name
    if isLinked then
        workingName = mw.ustring.sub(name, 2) -- Levágjuk a @ jelet
    end
   
     -- A dőlt betűs formázásból kihagyandó rendszertani kategóriák
     local keywords = {"subgen%.", "subg%.", "sect%.", "subsect%.", "subsp%.", "var%.", "subvar%.", "f%."}
     local keywords = {"subgen%.", "subg%.", "sect%.", "subsect%.", "subsp%.", "var%.", "subvar%.", "f%."}
      
      
     local formatted = name
     local formatted = workingName
     for _, kw in ipairs(keywords) do
     for _, kw in ipairs(keywords) do
        -- Megkeressük a kulcsszót, és köré rakjuk a dőlt betűket lezáró/nyitó jeleket
        -- Példa: ''Lobivia'' var. ''glauca''
         formatted = mw.ustring.gsub(formatted, " (" .. kw .. ") ", "'' %1 ''")
         formatted = mw.ustring.gsub(formatted, " (" .. kw .. ") ", "'' %1 ''")
     end
     end
      
      
     -- Az egész nevet dőltbe tesszük, de ha voltak benne kulcsszavak, a dupla '' jelek kioltják egymást
     -- Alap dőlt formázás
     return "''" .. formatted .. "''"
     formatted = "''" .. formatted .. "''"
   
    -- Ha volt @ jel, akkor linkeljük az egészet
    if isLinked then
        formatted = "[[" .. workingName .. "|" .. formatted .. "]]"
    end
   
    return formatted
end
end


31. sor: 44. sor:
     if not keresettTaxon or keresettTaxon == "" then return "Nincs megadva taxon!" end
     if not keresettTaxon or keresettTaxon == "" then return "Nincs megadva taxon!" end
      
      
     keresettTaxon = mw.text.trim(keresettTaxon)
    -- Alulvonás kezelése a PAGENAME miatt
     local keresettAlacsony = cleanName(keresettTaxon):lower()
     keresettTaxon = mw.ustring.gsub(mw.text.trim(keresettTaxon), "_", " ")
    -- Az összehasonlításhoz továbbra is @ nélkül kell a név
     local keresettAlacsony = mw.ustring.gsub(cleanName(keresettTaxon), "@", ""):lower()
      
      
     local dataModul = require("Modul:CactaceaeTaxonokData")
     local dataModul = require("Modul:CactaceaeTaxonokData")
44. sor: 59. sor:
     -- 1. KERESÉS ÉS ELŐTISZTÍTÁS
     -- 1. KERESÉS ÉS ELŐTISZTÍTÁS
     for sor in nyersAdat:gmatch("[^\r\n]+") do
     for sor in nyersAdat:gmatch("[^\r\n]+") do
        -- Kivágjuk a ":: Type: ..." részt
         local tisztaSor = mw.ustring.gsub(sor, "%s*::%s*Type:.-(%d#)", " %1")
         local tisztaSor = mw.ustring.gsub(sor, "%s*::%s*Type:.-(%d#)", " %1")
          
          
         if mw.ustring.find(tisztaSor:lower(), keresettAlacsony, 1, true) then
         -- Az előszűrésnél levágjuk a @ jelet, hogy megtalálja a nevet
        local sorAlacsony = mw.ustring.gsub(tisztaSor:lower(), "@", "")
       
        if mw.ustring.find(sorAlacsony, keresettAlacsony, 1, true) then
             local darabok = mw.text.split(tisztaSor, "#")
             local darabok = mw.text.split(tisztaSor, "#")
             for _, darab in ipairs(darabok) do
             for _, darab in ipairs(darabok) do
                 if cleanName(darab):lower() == keresettAlacsony then
                 -- Az összehasonlításhoz itt is @ mentesítünk
                local nevAdatban = mw.ustring.gsub(cleanName(darab), "@", "")
                if nevAdatban:lower() == keresettAlacsony then
                     talaltSor = tisztaSor
                     talaltSor = tisztaSor
                     break
                     break
59. sor: 78. sor:
     end
     end
      
      
     if not talaltSor then
     if not talaltSor or talaltSor == "" then
         return "A megadott taxon (''" .. keresettTaxon .. "'') nem található az adatbázisban."
         return "A megadott taxon (''" .. keresettTaxon .. "'') nem található az adatbázisban."
     end
     end
67. sor: 86. sor:
     local ervenyesNevFinal = cleanName(elsoNevMatch or "Ismeretlen taxon")
     local ervenyesNevFinal = cleanName(elsoNevMatch or "Ismeretlen taxon")


     if ervenyesNevFinal == keresettTaxon then
    local eredmeny = ""
         local eredmeny = "=== A(z) " .. formatItalic(ervenyesNevFinal) .. " szinonimái ===\n\n"
    -- Összehasonlítás @ nélkül
    local tisztaErvenyes = mw.ustring.gsub(ervenyesNevFinal, "@", ""):lower()
   
     if tisztaErvenyes == keresettAlacsony then
         eredmeny = "=== A(z) " .. formatItalic(ervenyesNevFinal) .. " szinonimái ===\n\n"
     else
     else
         local eredmeny = "=== A(z) " .. formatItalic(ervenyesNevFinal) .. " szinonimái (köztük a " .. formatItalic(keresettTaxon) .. " szinonima) ===\n\n"
         eredmeny = "=== A(z) " .. formatItalic(ervenyesNevFinal) .. " szinonimái ===\n* (A keresett ''" .. keresettTaxon .. "'' ennek a taxonnak a szinonimája)*\n\n"
     end
     end
      
      

A lap jelenlegi, 2026. január 11., 15:53-kori változata

A modult a Modul:CactaceaeTaxonSzinonimák/doc lapon tudod dokumentálni

local p = {}

-- Szigorú tisztítás az összehasonlításhoz és megjelenítéshez
local function cleanName(s)
    if not s or s == "" then return "" end
    -- MÓDOSÍTVA: A @ jelet meghagyjuk, hogy később linkelhessünk, 
    -- de a számokat, egyéb jeleket, kettőskeresztet és kettőspontokat töröljük.
    local cleaned = mw.ustring.gsub(s, "[%d#≡=%-−%:]+", "")
    return mw.text.trim(cleaned)
end

-- Függvény a nevek dőlt betűs formázásához és linkeléséhez
local function formatItalic(name)
    if not name or name == "" then return "" end
    
    -- Ellenőrizzük, hogy van-e @ jel (link jelölő)
    local isLinked = mw.ustring.sub(name, 1, 1) == "@"
    local workingName = name
    if isLinked then
        workingName = mw.ustring.sub(name, 2) -- Levágjuk a @ jelet
    end
    
    -- A dőlt betűs formázásból kihagyandó rendszertani kategóriák
    local keywords = {"subgen%.", "subg%.", "sect%.", "subsect%.", "subsp%.", "var%.", "subvar%.", "f%."}
    
    local formatted = workingName
    for _, kw in ipairs(keywords) do
        formatted = mw.ustring.gsub(formatted, " (" .. kw .. ") ", "'' %1 ''")
    end
    
    -- Alap dőlt formázás
    formatted = "''" .. formatted .. "''"
    
    -- Ha volt @ jel, akkor linkeljük az egészet
    if isLinked then
        formatted = "[[" .. workingName .. "|" .. formatted .. "]]"
    end
    
    return formatted
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
    
    -- Alulvonás kezelése a PAGENAME miatt
    keresettTaxon = mw.ustring.gsub(mw.text.trim(keresettTaxon), "_", " ")
    -- Az összehasonlításhoz továbbra is @ nélkül kell a név
    local keresettAlacsony = mw.ustring.gsub(cleanName(keresettTaxon), "@", ""):lower()
    
    local dataModul = require("Modul:CactaceaeTaxonokData")
    local nyersAdat = dataModul.getAdatok()
    
    local homoHTML = "≡" 
    local hibaHTML = "−" 
    
    local talaltSor = nil

    -- 1. KERESÉS ÉS ELŐTISZTÍTÁS
    for sor in nyersAdat:gmatch("[^\r\n]+") do
        local tisztaSor = mw.ustring.gsub(sor, "%s*::%s*Type:.-(%d#)", " %1")
        
        -- Az előszűrésnél levágjuk a @ jelet, hogy megtalálja a nevet
        local sorAlacsony = mw.ustring.gsub(tisztaSor:lower(), "@", "")
        
        if mw.ustring.find(sorAlacsony, keresettAlacsony, 1, true) then
            local darabok = mw.text.split(tisztaSor, "#")
            for _, darab in ipairs(darabok) do
                -- Az összehasonlításhoz itt is @ mentesítünk
                local nevAdatban = mw.ustring.gsub(cleanName(darab), "@", "")
                if nevAdatban:lower() == keresettAlacsony then
                    talaltSor = tisztaSor
                    break
                end
            end
        end
        if talaltSor then break end
    end
    
    if not talaltSor or talaltSor == "" then
        return "A megadott taxon (''" .. keresettTaxon .. "'') nem található az adatbázisban."
    end
    
    -- 2. FELDOLGOZÁS
    local elsoNevMatch = mw.ustring.match(talaltSor, "^%d+ ([^#≡=%-−]+)")
    local ervenyesNevFinal = cleanName(elsoNevMatch or "Ismeretlen taxon")

    local eredmeny = ""
    -- Összehasonlítás @ nélkül
    local tisztaErvenyes = mw.ustring.gsub(ervenyesNevFinal, "@", ""):lower()
    
    if tisztaErvenyes == keresettAlacsony then
        eredmeny = "=== A(z) " .. formatItalic(ervenyesNevFinal) .. " szinonimái ===\n\n"
    else
        eredmeny = "=== A(z) " .. formatItalic(ervenyesNevFinal) .. " szinonimái ===\n* (A keresett ''" .. keresettTaxon .. "'' ennek a taxonnak a szinonimája)*\n\n"
    end
    
    local lista = {}
    local szinonimaDarabok = mw.text.split(talaltSor, "#")
    
    for _, darab in ipairs(szinonimaDarabok) do
        local jel = mw.ustring.match(darab, "([≡=%-−])")
        local szint = mw.ustring.match(darab, "(%d+)$")
        
        if jel and szint then
            local tisztaNev = cleanName(darab)
            local szam = tonumber(szint)
            local aktJel = (jel == "≡") and homoHTML or ((jel == "-" or jel == "−") and hibaHTML or jel)
            
            if tisztaNev ~= "" then
                if szam == 4 and #lista > 0 then
                    table.insert(lista[#lista].nevek, {jel = aktJel, nev = tisztaNev})
                else
                    table.insert(lista, {
                        elsoJel = aktJel,
                        nevek = {{jel = "", nev = tisztaNev}}
                    })
                end
            end
        end
    end
    
    -- 3. ÖSSZEÁLLÍTÁS
    if #lista == 0 then return eredmeny .. "* Nincsenek szinonimák." end
    
    for _, csoport in ipairs(lista) do
        local sorElemei = {}
        for i, adat in ipairs(csoport.nevek) do
            local elem = formatItalic(adat.nev)
            if i > 1 then elem = adat.jel .. " " .. elem end
            table.insert(sorElemei, elem)
        end
        eredmeny = eredmeny .. "* " .. csoport.elsoJel .. " " .. table.concat(sorElemei, ", ") .. "\n"
    end
    
    return eredmeny
end

return p