„Modul:SimpleTaxobox” változatai közötti eltérés
Megjelenés
Nincs szerkesztési összefoglaló |
Nincs szerkesztési összefoglaló |
||
| (13 közbenső módosítás ugyanattól a felhasználótól nincs mutatva) | |||
| 10. sor: | 10. sor: | ||
local genus_name = full_species_name:match("([^%s]+)") | local genus_name = full_species_name:match("([^%s]+)") | ||
return genus_name | return genus_name | ||
end | |||
-- Segédfüggvény: Dőlt betűs taxonnév | |||
local function format_name(name) | |||
if string.match(name, "subsp%.") then | |||
local minta = "([%a%-]+)%s+([%a%-]+)%s+subsp%.%s+([%a%-]+)" | |||
local csere = "''%1 %2'' subsp. ''%3''" | |||
formattedName = string.gsub(name, minta, csere) | |||
elseif string.match(name, "var%.") then | |||
local minta = "([%a%-]+)%s+([%a%-]+)%s+var%.%s+([%a%-]+)" | |||
local csere = "''%1 %2'' var. ''%3''" | |||
formattedName = string.gsub(name, minta, csere) | |||
elseif string.match(name, "subvar%.") then | |||
local minta = "([%a%-]+)%s+([%a%-]+)%s+subvar%.%s+([%a%-]+)" | |||
local csere = "''%1 %2'' subvar. ''%3''" | |||
formattedName = string.gsub(name, minta, csere) | |||
elseif string.match(name, "f%.") then | |||
local minta = "([%a%-]+)%s+([%a%-]+)%s+f%.%s+([%a%-]+)" | |||
local csere = "''%1 %2'' f. ''%3''" | |||
formattedName = string.gsub(name, minta, csere) | |||
elseif string.match(name, "[%a%-]+%s+[%a%-]+") then | |||
local minta = "([%a%-]+)%s+([%a%-]+)" | |||
local csere = "''%1 %2''" | |||
formattedName = string.gsub(name, minta, csere) | |||
else | |||
formattedName = name | |||
end | |||
return formattedName | |||
end | end | ||
| 16. sor: | 44. sor: | ||
-- A taxon neve, amit a cikkből kaptunk (ez lehet faj vagy nemzetség) | -- A taxon neve, amit a cikkből kaptunk (ez lehet faj vagy nemzetség) | ||
local | local initialTaxonName = args.taxon | ||
-- Javítás: biztosítsuk, hogy az image ne legyen nil, ha nincs megadva | -- Javítás: biztosítsuk, hogy az image ne legyen nil, ha nincs megadva | ||
local taxonImage = args.image or '' | local taxonImage = args.image or '' | ||
local imageTitle = args.imageTitle or '' | |||
local hierarchy = {} | local hierarchy = {} | ||
local | local taxonName = initialTaxonName -- Ez a változó lépked felfelé a hierarchiában | ||
local parentOverride = args.parent -- A manuálisan átadott szülő (pl. Szekció) | local parentOverride = args.parent -- A manuálisan átadott szülő (pl. Szekció) | ||
if not | if not initialTaxonName or initialTaxonName == '' then | ||
return '<div style="color:red;">Taxobox Hiba: Hiányzó <code>|taxon=</code> paraméter.</div>' | return '<div style="color:red;">Taxobox Hiba: Hiányzó <code>|taxon=</code> paraméter.</div>' | ||
end | end | ||
-- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból | -- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból | ||
while | while taxonName do | ||
local data = TaxonData.getData( | local data = TaxonData.getData(taxonName) | ||
if data then | if data then | ||
-- 1a. Talált adatot (Rend, Család, Nemzetség, Szekció, stb.) | -- 1a. Talált adatot (Rend, Család, Nemzetség, Szekció, stb.) | ||
table.insert(hierarchy, { rank = data.rank, name = | table.insert(hierarchy, { rank = data.rank, name = taxonName }) | ||
taxonName = data.parent -- Áttérés a szülőre | |||
else | else | ||
-- 1b. Nem talált adatot. Ez a pont csak a legelső elemre lehet a Faj! | -- 1b. Nem talált adatot. Ez a pont csak a legelső elemre lehet a Faj! | ||
if | if taxonName == initialTaxonName then | ||
-- Megjegyzés: Ellenőrizzük, van-e szóköz a | -- Megjegyzés: Ellenőrizzük, van-e szóköz a taxonName nevében. | ||
local is_species = | local is_species = initialTaxonName:find("%s") | ||
if is_species then | if is_species then | ||
| 51. sor: | 80. sor: | ||
else | else | ||
-- 2. Különben kinyerjük a nemzetséget a fajnévből (automatikusan) | -- 2. Különben kinyerjük a nemzetséget a fajnévből (automatikusan) | ||
actual_parent = extract_genus( | actual_parent = extract_genus(initialTaxonName) | ||
end | end | ||
-- Hozzáadjuk magát a fajt a hierarchiához | -- Hozzáadjuk magát a fajt a hierarchiához | ||
table.insert(hierarchy, { rank = "Faj", name = | table.insert(hierarchy, { rank = "Faj", name = initialTaxonName }) | ||
-- Áttérünk a Nemzetségre VAGY a Szekcióra | -- Áttérünk a Nemzetségre VAGY a Szekcióra | ||
taxonName = actual_parent | |||
else | else | ||
-- Ez egy Nemzetség VAGY magasabb | -- Ez egy Nemzetség VAGY magasabb taxonName (egy szó), de nincs adata. | ||
-- Ez hibás TaxonData bejegyzésre utal. | -- Ez hibás TaxonData bejegyzésre utal. | ||
return '<div style="color:red;">Taxobox Hiba: A Modul:TaxonData nem tartalmazza a "' .. | return '<div style="color:red;">Taxobox Hiba: A Modul:TaxonData nem tartalmazza a "' .. initialTaxonName .. '" taxont, ami egy Nemzetség vagy magasabb szintű taxon. Kérem adja hozzá.</div>' | ||
end -- is_species vége | end -- is_species vége | ||
else | else | ||
-- Nem a legelső elem, és nincs adat (a lánc megszakad) | -- Nem a legelső elem, és nincs adat (a lánc megszakad) | ||
return '<div style="color:red;">Taxobox Hiba: Nem található adat a "' .. | return '<div style="color:red;">Taxobox Hiba: Nem található adat a "' .. taxonName .. '" taxonhoz a Modul:TaxonData-ban.</div>' | ||
end | end | ||
end | end | ||
end | end | ||
-- 2. Wikitext Taxobox táblázat felépítése | -- 2. Wikitext Taxobox táblázat felépítése | ||
local output = '{| class="infobox biota" style="text-align: left; width: 22em;"\n' | local output = '{| class="infobox biota" style="text-align: left; width: 22em;"\n' | ||
output = output .. "|+'''" .. | -- A caption kódja: "|+"" | ||
-- output = output .. "|+'''" .. initialTaxonName .. "'''\n" | |||
-- A caption helyett th-t használunk (a th kódja: "|-!"): | |||
output = output .. "|-\n" | |||
output = output .. '! class="taxonnev" colspan="2" | ' .. format_name(initialTaxonName) .. "\n" | |||
if taxonImage and taxonImage ~= '' then -- nem egyenlő ~= | if taxonImage and taxonImage ~= '' then -- nem egyenlő ~= | ||
output = output .. '|-\n' | output = output .. '|-\n' | ||
output = output .. '!colspan="2"|[[Fájl:' .. taxonImage .. '|340px]]\n' | output = output .. '!colspan="2"|[[Fájl:' .. taxonImage .. '|340px' | ||
if imageTitle and imageTitle ~= '' then -- nem egyenlő ~= | |||
output = output .. '|' .. imageTitle | |||
end | |||
output = output .. ']]\n' | |||
end | end | ||
output = output .. '|-\n' | output = output .. '|-\n' | ||
output = output .. '!colspan="2"|Rendszertani besorolás\n' | output = output .. '!colspan="2"|Rendszertani besorolás\n' | ||
| 116. sor: | 155. sor: | ||
-- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van) | -- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van) | ||
if item.rank == "Faj" then | if item.rank == "Faj" then | ||
name_display = "''" .. name_display .. "''" | -- name_display = "''" .. name_display .. "''" | ||
name_display = format_name(name_display) | |||
end | end | ||
| 128. sor: | 168. sor: | ||
-- A hierarchy[1] az az elem, amit legelőször adtunk hozzá (az aktuális taxon) | -- A hierarchy[1] az az elem, amit legelőször adtunk hozzá (az aktuális taxon) | ||
if hierarchy[1] and hierarchy[1].rank == "Faj" then | if hierarchy[1] and hierarchy[1].rank == "Faj" then | ||
local searchTerm = | local searchTerm = initialTaxonName -- Így nem csak egy növényre fog működni | ||
-- A szóközöket URL-kompatibilis + jellé alakítjuk | -- A szóközöket URL-kompatibilis + jellé alakítjuk | ||
-- local encodedTerm = searchTerm:gsub(" ", "+") | -- local encodedTerm = searchTerm:gsub(" ", "+") | ||
| 140. sor: | 180. sor: | ||
-- output = output .. '[https://www.bing.com/images/search?q=' .. encodedTerm .. ' Bing képek]\n' | -- output = output .. '[https://www.bing.com/images/search?q=' .. encodedTerm .. ' Bing képek]\n' | ||
-- Az ikonok maradnak a span-ek között, de a stílust majd a CSS-ből kapják | -- Az ikonok maradnak a span-ek között, de a stílust majd a CSS-ből kapják | ||
output = output .. ' | output = output .. '[[Fájl:Google logo gyz.svg|x30px|link=http://images.google.com/search?tbm=isch&q=' .. encodedTerm .. '|Google képek]] ' | ||
output = output .. ' | output = output .. '[[Fájl:Bing fluent logo gyz.svg|x30px|link=https://www.bing.com/images/search?q=' .. encodedTerm .. '|Bing képek]]\n' | ||
end | end | ||
A lap jelenlegi, 2025. december 29., 10:01-kori változata
A modult a Modul:SimpleTaxobox/doc lapon tudod dokumentálni
-- Modul:SimpleTaxobox (Javított verzió)
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)
-- Kinyeri az első szót (szóközig)
local genus_name = full_species_name:match("([^%s]+)")
return genus_name
end
-- Segédfüggvény: Dőlt betűs taxonnév
local function format_name(name)
if string.match(name, "subsp%.") then
local minta = "([%a%-]+)%s+([%a%-]+)%s+subsp%.%s+([%a%-]+)"
local csere = "''%1 %2'' subsp. ''%3''"
formattedName = string.gsub(name, minta, csere)
elseif string.match(name, "var%.") then
local minta = "([%a%-]+)%s+([%a%-]+)%s+var%.%s+([%a%-]+)"
local csere = "''%1 %2'' var. ''%3''"
formattedName = string.gsub(name, minta, csere)
elseif string.match(name, "subvar%.") then
local minta = "([%a%-]+)%s+([%a%-]+)%s+subvar%.%s+([%a%-]+)"
local csere = "''%1 %2'' subvar. ''%3''"
formattedName = string.gsub(name, minta, csere)
elseif string.match(name, "f%.") then
local minta = "([%a%-]+)%s+([%a%-]+)%s+f%.%s+([%a%-]+)"
local csere = "''%1 %2'' f. ''%3''"
formattedName = string.gsub(name, minta, csere)
elseif string.match(name, "[%a%-]+%s+[%a%-]+") then
local minta = "([%a%-]+)%s+([%a%-]+)"
local csere = "''%1 %2''"
formattedName = string.gsub(name, minta, csere)
else
formattedName = name
end
return formattedName
end
function p.buildTaxobox(frame)
local args = frame:getParent().args
-- A taxon neve, amit a cikkből kaptunk (ez lehet faj vagy nemzetség)
local initialTaxonName = args.taxon
-- Javítás: biztosítsuk, hogy az image ne legyen nil, ha nincs megadva
local taxonImage = args.image or ''
local imageTitle = args.imageTitle or ''
local hierarchy = {}
local taxonName = initialTaxonName -- Ez a változó lépked felfelé a hierarchiában
local parentOverride = args.parent -- A manuálisan átadott szülő (pl. Szekció)
if not initialTaxonName or initialTaxonName == '' then
return '<div style="color:red;">Taxobox Hiba: Hiányzó <code>|taxon=</code> paraméter.</div>'
end
-- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
while taxonName do
local data = TaxonData.getData(taxonName)
if data then
-- 1a. Talált adatot (Rend, Család, Nemzetség, Szekció, stb.)
table.insert(hierarchy, { rank = data.rank, name = taxonName })
taxonName = data.parent -- Áttérés a szülőre
else
-- 1b. Nem talált adatot. Ez a pont csak a legelső elemre lehet a Faj!
if taxonName == initialTaxonName then
-- Megjegyzés: Ellenőrizzük, van-e szóköz a taxonName nevében.
local is_species = initialTaxonName:find("%s")
if is_species then
-- Az eredeti logika fut: Ez egy faj (két szó).
local actual_parent
-- 1. Ellenőrizzük, van-e átadott szülő (parentOverride)
if parentOverride and parentOverride ~= '' then
actual_parent = parentOverride
else
-- 2. Különben kinyerjük a nemzetséget a fajnévből (automatikusan)
actual_parent = extract_genus(initialTaxonName)
end
-- Hozzáadjuk magát a fajt a hierarchiához
table.insert(hierarchy, { rank = "Faj", name = initialTaxonName })
-- Áttérünk a Nemzetségre VAGY a Szekcióra
taxonName = actual_parent
else
-- Ez egy Nemzetség VAGY magasabb taxonName (egy szó), de nincs adata.
-- Ez hibás TaxonData bejegyzésre utal.
return '<div style="color:red;">Taxobox Hiba: A Modul:TaxonData nem tartalmazza a "' .. initialTaxonName .. '" taxont, ami egy Nemzetség vagy magasabb szintű taxon. Kérem adja hozzá.</div>'
end -- is_species vége
else
-- Nem a legelső elem, és nincs adat (a lánc megszakad)
return '<div style="color:red;">Taxobox Hiba: Nem található adat a "' .. taxonName .. '" taxonhoz a Modul:TaxonData-ban.</div>'
end
end
end
-- 2. Wikitext Taxobox táblázat felépítése
local output = '{| class="infobox biota" style="text-align: left; width: 22em;"\n'
-- A caption kódja: "|+""
-- output = output .. "|+'''" .. initialTaxonName .. "'''\n"
-- A caption helyett th-t használunk (a th kódja: "|-!"):
output = output .. "|-\n"
output = output .. '! class="taxonnev" colspan="2" | ' .. format_name(initialTaxonName) .. "\n"
if taxonImage and taxonImage ~= '' then -- nem egyenlő ~=
output = output .. '|-\n'
output = output .. '!colspan="2"|[[Fájl:' .. taxonImage .. '|340px'
if imageTitle and imageTitle ~= '' then -- nem egyenlő ~=
output = output .. '|' .. imageTitle
end
output = output .. ']]\n'
end
output = output .. '|-\n'
output = output .. '!colspan="2"|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 item.rank == "Rend" then
name_display = "[[:Kategória:" .. name_display .."|".. name_display .. "]]"
end
if item.rank == "Család" then
name_display = "[[:Kategória:" .. name_display .."|".. name_display .. "]]"
end
if item.rank == "Alcsalád" then
name_display = "[[:Kategória:" .. name_display .."|".. name_display .. "]]"
end
if item.rank == "Nemzetségcsoport" then
item.rank = "Nemzetség-<br>csoport"
name_display = "[[:Kategória:" .. name_display .."|".. name_display .. "]]"
end
if item.rank == "Alnemzetségcsoport" then
item.rank = "Alnemzetség-<br>csoport"
name_display = "[[:Kategória:" .. name_display .."|".. name_display .. "]]"
end
if item.rank == "Nemzetség" then
name_display = "''[[:Kategória:" .. name_display .."|".. name_display .. "]]''"
end
-- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
if item.rank == "Faj" then
-- name_display = "''" .. name_display .. "''"
name_display = format_name(name_display)
end
output = output .. '|-\n'
output = output .. '| style="text-align: right; line-height: 95%;" | ' .. item.rank .. '\n'
output = output .. '| style="line-height: 95%;" | ' .. name_display .. '\n'
end
-- 3. Google és Bing linkek (csak ha a taxon egy Faj)
-- A hierarchy[1] az az elem, amit legelőször adtunk hozzá (az aktuális taxon)
if hierarchy[1] and hierarchy[1].rank == "Faj" then
local searchTerm = initialTaxonName -- Így nem csak egy növényre fog működni
-- A szóközöket URL-kompatibilis + jellé alakítjuk
-- local encodedTerm = searchTerm:gsub(" ", "+")
local encodedTerm = mw.uri.encode(searchTerm) -- Biztonságos kódolás (szóköz -> %20)
output = output .. '|-\n'
-- output = output .. '!colspan="2" style="text-align:center;" |'
output = output .. '!colspan="2" class="taxobox-icons" |'
-- Itt használhatod a korábban megbeszélt ikonokat is, ha szeretnéd:
-- output = output .. '[http://images.google.com/search?tbm=isch&q=' .. encodedTerm .. ' Google képek] '
-- output = output .. '[https://www.bing.com/images/search?q=' .. encodedTerm .. ' Bing képek]\n'
-- Az ikonok maradnak a span-ek között, de a stílust majd a CSS-ből kapják
output = output .. '[[Fájl:Google logo gyz.svg|x30px|link=http://images.google.com/search?tbm=isch&q=' .. encodedTerm .. '|Google képek]] '
output = output .. '[[Fájl:Bing fluent logo gyz.svg|x30px|link=https://www.bing.com/images/search?q=' .. encodedTerm .. '|Bing képek]]\n'
end
output = output .. '|}\n'
return output
end
return p