Ugrás a tartalomhoz

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

Innen: MKOE wiki
Nincs szerkesztési összefoglaló
Címke: Visszaállítva
Nincs szerkesztési összefoglaló
Címke: Visszaállítva
1. sor: 1. sor:
-- Modul:SimpleTaxobox (Frissítve: Fajnév automatikus szétválasztása)
-- Modul:SimpleTaxobox
local p = {}
local p = {}


-- Betölti a központi adatmodult, amiben a hierarchia szerepel.
-- A rangok megjelenítendő nevei.
local TaxonData = require('Modul:TaxonData')
-- Ez a tábla kezeli a rangok magyar nevét a megjelenítéshez.
local RANK_NAMES = {
    ['Domén'] = 'Domén',
    ['Ország'] = 'Ország',
    ['Törzs'] = 'Törzs',
    ['Osztály'] = 'Osztály',
    ['Alosztály'] = 'Alosztály',
    ['Klád'] = 'Klád',
    ['Rend'] = 'Rend',
    ['Család'] = 'Család',
    ['Nemzetség'] = 'Nemzetség',
    ['Alnemzetség'] = 'Alnemzetség',
    ['Szekció'] = 'Szekció',
    ['Faj'] = 'Faj',
    -- További rangok ide
}


-- Segédfüggvény: Kinyeri a nemzetség nevét a fajnévből (pl. "Echinocactus grusonii" -> "Echinocactus")
-- [[Modul:TaxonData]] betöltése és biztonságos elérése.
local function extract_genus(full_species_name)
local function getData(frame)
     local genus_name = full_species_name:match("([^%s]+)") -- Kinyeri az első szót (szóközig)
    local success, data = pcall(require, 'Modul:TaxonData')
     return genus_name
    if not success then
        return nil, "Hiba: A Modul:TaxonData nem tölthető be: " .. data
    end
    -- Feltételezzük, hogy a Modul:TaxonData visszaad egy 'p' táblát, amiben van egy 'getData' függvény.
    if type(data.getData) ~= 'function' then
        return nil, "Hiba: A Modul:TaxonData nem tartalmazza a 'getData' függvényt."
    end
    return data, nil
end
 
-- Meghatározza a teljes taxonómiai hierarchiát a megadott taxontól a gyökérig.
-- Visszaad egy táblát: { {id=ID, rank=RANK}, ... } a gyökértől a kiinduló taxonig.
local function determineHierarchy(startTaxonID, data)
     local hierarchy = {}
    local currentID = startTaxonID
    local path = {}
   
    -- Végigmegyünk a szülőkön, amíg el nem érjük a gyökért (parent=nil).
    while currentID do
        local taxonData = data.getData(currentID)
        if not taxonData then
            -- Ha hiányzik az adat, akkor a hierarchia megszakad.
            table.insert(path, 1, { id = currentID, rank = "HIÁNYZÓ ADAT" })
            break
        end
       
        table.insert(path, 1, { id = currentID, rank = taxonData.rank })
        currentID = taxonData.parent
    end
   
     return path
end
end


-- A fő függvény, ami a taxoboxot építi.
function p.buildTaxobox(frame)
function p.buildTaxobox(frame)
     local args = frame:getParent().args
     local args = frame.args
     local currentTaxon = args.taxon  
     local startTaxonID = args.taxon
     local hierarchy = {}
      
    local taxon = currentTaxon
    if not startTaxonID or startTaxonID == '' then
        return '<div style="color:red;">Hiba: Hiányzik a <code>|taxon=</code> paraméter.</div>'
    end


     if not currentTaxon then
    local data, errorMsg = getData(frame)
         return "'''Taxobox Hiba:''' Hiányzó taxon paraméter."
     if errorMsg then
         return '<div style="color:red;">' .. errorMsg .. '</div>'
     end
     end
      
      
     -- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
     local hierarchy = determineHierarchy(startTaxonID, data)
     while taxon do
    local taxoboxLines = {}
         local data = TaxonData.getData(taxon)
   
    -- [[Taxobox fejléc]]
    table.insert(taxoboxLines, '{| class="biota" style="text-align:left; width:200px;"')
   
    -- Taxonómiai cím
    table.insert(taxoboxLines, '|-')
    table.insert(taxoboxLines, '| colspan="2" style="text-align:center; font-size:1.25em; padding:0.1em; line-height:1.2em;" | ' .. startTaxonID)
      
    -- Hierarchia soronkénti megjelenítése
    for i, taxonInfo in ipairs(hierarchy) do
         local taxonID = taxonInfo.id
        local rank = taxonInfo.rank
        local isTerminalTaxon = (i == #hierarchy) -- Az utolsó elem a bemeneti taxon
        local displayName = taxonID
          
          
         if data then
         -- 1. Rang neve: A rang magyar nevét vesszük alapul a RANK_NAMES táblából
            -- 1a. Talált adatot (Nemzetség, Család, Rend, Alfaj, stb.)
        local rankName = RANK_NAMES[rank] or rank -- Ha nincs benne, az eredeti rangot használjuk
            table.insert(hierarchy, { rank = data.rank, name = taxon })
 
             taxon = data.parent -- Áttérés a szülőre
        -- 2. Display Name (Taxon Név) formázása
         else
        -- Fajok és Nemzetségek esetén dőlt betű
             -- 1b. Nem talált adatot a Modul:TaxonData-ban. Feltételezzük, hogy FAJ.
        if rank == 'Faj' or rank == 'Nemzetség' or rank == 'Alnemzetség' or rank == 'Szekció' then
             if taxon == currentTaxon then
             displayName = "''" .. displayName .. "''"
                -- Csak a legelső elem esetén végezzük el a szétválasztást
        end
                local genus_name = extract_genus(currentTaxon)
 
               
        -- A bemeneti taxon (Speciesbox-nál a Faj) neve vastag betűvel jelenik meg
                -- Hozzáadjuk magát a fajt a hierarchiához (a Nemzetség lesz a szülő)
         if isTerminalTaxon then
                table.insert(hierarchy, { rank = "Faj", name = currentTaxon })
             displayName = "'''" .. displayName .. "'''"
                taxon = genus_name -- Áttérünk a Nemzetségre
             rankName = '' -- A legalsó taxon neve előtt nem kell a rang megnevezése
            else
        end
                -- Nem a legelső elem, és nincs adat (Hiba, vagy elértük a lánc végét a Nemzetség felett)
       
                break
        -- Csatolás (linkelés)
             end
        -- A taxont a megfelelő (azonos nevű) cikkre linkeljük.
        if not isTerminalTaxon then
             displayName = '[[' .. taxonID .. '|' .. displayName .. ']]'
         end
         end
    end
 
   
        -- 3. Taxobox sor generálása
    -- 2. Wikitext Taxobox táblázat felépítése
        local taxoLine = '|- style="vertical-align:top;"\n'
    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
         if rankName ~= '' then
         -- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
            taxoLine = taxoLine .. '| ' .. rankName .. ':\n'
        if item.rank == "Faj" then
            taxoLine = taxoLine .. '| ' .. displayName
            name_display = "'''" .. name_display .. "'''"
         else
            -- Ha a rangnév üres (a terminális taxonnál), akkor a taxon neve két oszlopban jelenik meg.
            taxoLine = taxoLine .. '| colspan="2" style="text-align:center;" | ' .. displayName
         end
         end
          
          
         output = output .. '|-\n'
         table.insert(taxoboxLines, taxoLine)
        output = output .. '| style="text-align: right;" | ' .. item.rank .. '\n'
        output = output .. '| ' .. name_display .. '\n'
     end
     end
      
      
     output = output .. '|}\n'
     -- [[Taxobox lábléc]]
    table.insert(taxoboxLines, '|}')
      
      
     return output
     return table.concat(taxoboxLines, '\n')
end
end


return p
return p

A lap 2025. november 23., 12:51-kori változata

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

-- Modul:SimpleTaxobox
local p = {}

-- A rangok megjelenítendő nevei.
-- Ez a tábla kezeli a rangok magyar nevét a megjelenítéshez.
local RANK_NAMES = {
    ['Domén'] = 'Domén',
    ['Ország'] = 'Ország',
    ['Törzs'] = 'Törzs',
    ['Osztály'] = 'Osztály',
    ['Alosztály'] = 'Alosztály',
    ['Klád'] = 'Klád',
    ['Rend'] = 'Rend',
    ['Család'] = 'Család',
    ['Nemzetség'] = 'Nemzetség',
    ['Alnemzetség'] = 'Alnemzetség',
    ['Szekció'] = 'Szekció',
    ['Faj'] = 'Faj',
    -- További rangok ide
}

-- [[Modul:TaxonData]] betöltése és biztonságos elérése.
local function getData(frame)
    local success, data = pcall(require, 'Modul:TaxonData')
    if not success then
        return nil, "Hiba: A Modul:TaxonData nem tölthető be: " .. data
    end
    -- Feltételezzük, hogy a Modul:TaxonData visszaad egy 'p' táblát, amiben van egy 'getData' függvény.
    if type(data.getData) ~= 'function' then
        return nil, "Hiba: A Modul:TaxonData nem tartalmazza a 'getData' függvényt."
    end
    return data, nil
end

-- Meghatározza a teljes taxonómiai hierarchiát a megadott taxontól a gyökérig.
-- Visszaad egy táblát: { {id=ID, rank=RANK}, ... } a gyökértől a kiinduló taxonig.
local function determineHierarchy(startTaxonID, data)
    local hierarchy = {}
    local currentID = startTaxonID
    local path = {}
    
    -- Végigmegyünk a szülőkön, amíg el nem érjük a gyökért (parent=nil).
    while currentID do
        local taxonData = data.getData(currentID)
        if not taxonData then
            -- Ha hiányzik az adat, akkor a hierarchia megszakad.
            table.insert(path, 1, { id = currentID, rank = "HIÁNYZÓ ADAT" })
            break 
        end
        
        table.insert(path, 1, { id = currentID, rank = taxonData.rank })
        currentID = taxonData.parent 
    end
    
    return path
end

-- A fő függvény, ami a taxoboxot építi.
function p.buildTaxobox(frame)
    local args = frame.args
    local startTaxonID = args.taxon
    
    if not startTaxonID or startTaxonID == '' then
        return '<div style="color:red;">Hiba: Hiányzik a <code>|taxon=</code> paraméter.</div>'
    end

    local data, errorMsg = getData(frame)
    if errorMsg then
        return '<div style="color:red;">' .. errorMsg .. '</div>'
    end
    
    local hierarchy = determineHierarchy(startTaxonID, data)
    local taxoboxLines = {}
    
    -- [[Taxobox fejléc]]
    table.insert(taxoboxLines, '{| class="biota" style="text-align:left; width:200px;"')
    
    -- Taxonómiai cím
    table.insert(taxoboxLines, '|-')
    table.insert(taxoboxLines, '| colspan="2" style="text-align:center; font-size:1.25em; padding:0.1em; line-height:1.2em;" | ' .. startTaxonID)
    
    -- Hierarchia soronkénti megjelenítése
    for i, taxonInfo in ipairs(hierarchy) do
        local taxonID = taxonInfo.id
        local rank = taxonInfo.rank
        local isTerminalTaxon = (i == #hierarchy) -- Az utolsó elem a bemeneti taxon
        local displayName = taxonID
        
        -- 1. Rang neve: A rang magyar nevét vesszük alapul a RANK_NAMES táblából
        local rankName = RANK_NAMES[rank] or rank -- Ha nincs benne, az eredeti rangot használjuk

        -- 2. Display Name (Taxon Név) formázása
        -- Fajok és Nemzetségek esetén dőlt betű
        if rank == 'Faj' or rank == 'Nemzetség' or rank == 'Alnemzetség' or rank == 'Szekció' then
            displayName = "''" .. displayName .. "''"
        end

        -- A bemeneti taxon (Speciesbox-nál a Faj) neve vastag betűvel jelenik meg
        if isTerminalTaxon then
            displayName = "'''" .. displayName .. "'''"
            rankName = '' -- A legalsó taxon neve előtt nem kell a rang megnevezése
        end
        
        -- Csatolás (linkelés)
        -- A taxont a megfelelő (azonos nevű) cikkre linkeljük.
        if not isTerminalTaxon then
            displayName = '[[' .. taxonID .. '|' .. displayName .. ']]'
        end

        -- 3. Taxobox sor generálása
        local taxoLine = '|- style="vertical-align:top;"\n'
        
        if rankName ~= '' then
            taxoLine = taxoLine .. '| ' .. rankName .. ':\n'
            taxoLine = taxoLine .. '| ' .. displayName 
        else
            -- Ha a rangnév üres (a terminális taxonnál), akkor a taxon neve két oszlopban jelenik meg.
            taxoLine = taxoLine .. '| colspan="2" style="text-align:center;" | ' .. displayName
        end
        
        table.insert(taxoboxLines, taxoLine)
    end
    
    -- [[Taxobox lábléc]]
    table.insert(taxoboxLines, '|}')
    
    return table.concat(taxoboxLines, '\n')
end

return p