„Modul:Cultivarbox” változatai közötti eltérés
Megjelenés
Nincs szerkesztési összefoglaló |
Nincs szerkesztési összefoglaló |
||
| (5 közbenső módosítás ugyanattól a felhasználótól nincs mutatva) | |||
| 17. sor: | 17. sor: | ||
local clean = full_name:gsub("'''''", ""):gsub("''''", ""):gsub("'''", ""):gsub("''", ""):match("^%s*(.-)%s*$") | local clean = full_name:gsub("'''''", ""):gsub("''''", ""):gsub("'''", ""):gsub("''", ""):match("^%s*(.-)%s*$") | ||
-- Különválasztjuk a nemzetséget ( | -- Különválasztjuk a nemzetséget (akár hibridjellel) a kultivár résztől | ||
local genus, cv_part = clean:match("^(.-)%s+(['\"].+['\"])$") | local genus, cv_part = clean:match("^(.-)%s+(['\"].+['\"])$") | ||
if not genus or not cv_part then | if not genus or not cv_part then | ||
local formatted_plain = "'''" .. clean .. "'''" | |||
return formatted_plain, formatted_plain, clean | |||
end | end | ||
-- 1. Infobox fejléc & Besorolás sor: '''''Genus'' 'Cultivar''' | -- Kicseréljük a cv_part záró aposztrófját '-re, hogy a MediaWiki parser ne nyelje el a 4x ' találkozásánál | ||
local header_formatted = "'''''" .. genus .. "'' " .. | local cv_inner = cv_part:sub(1, -2) .. "'" | ||
-- 1. Infobox fejléc & Besorolás sor: '''''Genus'' 'Cultivar'''' (a genus tartalmazza a × jelet is) | |||
local header_formatted = "'''''" .. genus .. "'' " .. cv_inner .. "'''" | |||
-- 2. Tudományos név szakasz: '''''Genus'' 'Cultivar''' | -- 2. Tudományos név szakasz: '''''Genus'' 'Cultivar''' | ||
local scientific_formatted = "'''''" .. genus .. "'' " .. cv_part .. "'''" | local scientific_formatted = "'''''" .. genus .. "'' " .. cv_part .. "'''" | ||
-- 3. Tiszta név | -- 3. Tiszta név | ||
local plain_name = genus .. " " .. cv_part | local plain_name = genus .. " " .. cv_part | ||
| 71. sor: | 75. sor: | ||
table.insert(hierarchy, { rank = current_rank, name = taxonName }) | table.insert(hierarchy, { rank = current_rank, name = taxonName }) | ||
if | -- Megnézzük, hogy maga a nemzetség / hibridnemzetség benne van-e a TaxonData-ban | ||
taxonName = | local _, genusLookup = TaxonBox.format_taxon_clean(genus_part) | ||
local genusData = TaxonData[genusLookup] or TaxonData[genus_part] | |||
if genusData then | |||
taxonName = genusLookup | |||
else | else | ||
taxonName = | -- Ha a nemzetség sincs a TaxonData-ban, manuálisan beszúrjuk a Nothogenus / Nemzetség sort | ||
local genus_rank = (genus_part:sub(1, 2) == "×" or genus_part:sub(1, 1) == "x") and "Nothogenus" or "Nemzetség" | |||
table.insert(hierarchy, { rank = genus_rank, name = genus_part }) | |||
if overrideParent and overrideParent ~= '' then | |||
taxonName = overrideParent | |||
overrideParent = nil | |||
else | |||
break | |||
end | |||
end | end | ||
else | else | ||
| 100. sor: | 116. sor: | ||
output = output .. "|-\n" | output = output .. "|-\n" | ||
output = output .. '! class="suha-svg" colspan="2"|[[Fájl: | output = output .. '! class="suha-svg" colspan="2"|[[Fájl:cv2.png|x160px|link=]]<br>Kultivár, termesztett változat.\n' | ||
if taxonImage ~= '' then | if taxonImage ~= '' then | ||
| 122. sor: | 138. sor: | ||
name_display = "[[" .. clean_plain .. "|" .. clean_formatted .. "]]" | name_display = "[[" .. clean_plain .. "|" .. clean_formatted .. "]]" | ||
elseif item.rank == "Nemzetség" then | elseif item.rank == "Nemzetség" then | ||
local _, clean_plain = TaxonBox.format_taxon_clean(item.name) | |||
name_display = "[[:Kategória:" .. clean_plain .. "|''" .. clean_plain .. "'']]" | |||
elseif item.rank == "Nothogenus" or item.rank == "Hibridnemzetség" then | |||
rank_display = "Hibridnemzetség" | |||
local _, clean_plain = TaxonBox.format_taxon_clean(item.name) | local _, clean_plain = TaxonBox.format_taxon_clean(item.name) | ||
name_display = "[[:Kategória:" .. clean_plain .. "|''" .. clean_plain .. "'']]" | name_display = "[[:Kategória:" .. clean_plain .. "|''" .. clean_plain .. "'']]" | ||
| 153. sor: | 173. sor: | ||
if synonymName then | if synonymName then | ||
local syn_hierarchy = {} | local syn_hierarchy = {} | ||
table.insert(syn_hierarchy, { rank = " | table.insert(syn_hierarchy, { rank = "Kultivár", name = synonymName }) | ||
local header_syn, _, _ = parse_and_format_cultivar(synonymName) | local header_syn, _, _ = parse_and_format_cultivar(synonymName) | ||
| 162. sor: | 182. sor: | ||
output = output .. "|-\n" | output = output .. "|-\n" | ||
output = output .. '! class="suha-svg" colspan="2"|[[Fájl:syn.svg|x160px|link=]]<br>Szinonima név\n' | output = output .. '! class="suha-svg" colspan="2"|[[Fájl:syn.svg|x160px|link=]]<br>Szinonima név\n' | ||
for i = #syn_hierarchy, 1, -1 do | for i = #syn_hierarchy, 1, -1 do | ||
| 169. sor: | 187. sor: | ||
local syn_disp = parse_and_format_cultivar(item.name) | local syn_disp = parse_and_format_cultivar(item.name) | ||
output = output .. '|-\n' | output = output .. '|-\n' | ||
output = output .. '| class = "left" | | output = output .. '| class = "left" | Szinonim kultivárnév\n' | ||
output = output .. '| class = "right" | ' .. syn_disp .. '\n' | output = output .. '| class = "right" | ' .. syn_disp .. '\n' | ||
end | end | ||
| 183. sor: | 201. sor: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local names = { | local names = { | ||
{ val = args.cultivar, class = "tnb tnb-cv", class2 = "tns tns-cv", txt= "kultivár"}, | { val = args.cultivar, class = "tnb tnb-cv", class2 = "tns tns-cv", txt = "kultivár"}, | ||
{ val = args.synonym, class = "tnb tnb-syn", class2 = "tns tns-syn", txt= "szinonima név"}, | { val = args.synonym, class = "tnb tnb-syn", class2 = "tns tns-syn", txt = "szinonima név"}, | ||
{ val = args.hybrid, class = "tnb tnb-hyb", class2 = "tns tns-hyb", txt= "hibrid név"} | { val = args.hybrid, class = "tnb tnb-hyb", class2 = "tns tns-hyb", txt = "hibrid név"} | ||
} | } | ||
| 196. sor: | 214. sor: | ||
end | end | ||
end | end | ||
output = output .. '</div> | output = output .. '</div>' | ||
return output | return output | ||
end | end | ||
| 226. sor: | 244. sor: | ||
print(success2 and result2 or "HIBA: " .. result2) | print(success2 and result2 or "HIBA: " .. result2) | ||
end | end | ||
-- ========================================================== | |||
-- ONLINE | |||
-- ========================================================== | |||
-- {{Cultivarbox | |||
-- | cultivar = ×Graptoveria 'Lovely Rose' | |||
-- | synonym = Graptopetalum 'Lovely Rose' | |||
-- | parent = Sedinae | |||
-- | image = test_image.jpg | |||
-- | imageTitle = ×Graptoveria 'Lovely Rose' | |||
-- }} | |||
return p | return p | ||
A lap jelenlegi, 2026. szeptember 13., 19:29-kori változata
A modult a Modul:Cultivarbox/doc lapon tudod dokumentálni
-- =======================================================================================
-- TaxonokRawData.lua > TaxonokRawDataConvert.lua > Taxonbox2.lua > buildCultivarbox.lua
-- =======================================================================================
local p = {}
-- Betölti a központi taxonbox modult és a nyers adatokat
local TaxonBox = require('Modul:Taxonbox2')
local TaxonData = require('Modul:TaxonokData')
----------------------------------------------------------------------------------------------------------------
-- Segédfüggvény: Kultivárnév pontos MediaWiki aposztróf-formázása
local function parse_and_format_cultivar(full_name)
if not full_name or full_name == "" then return "", "", "" end
-- Megtisztítjuk az esetleges korábbi wiki tagektől
local clean = full_name:gsub("'''''", ""):gsub("''''", ""):gsub("'''", ""):gsub("''", ""):match("^%s*(.-)%s*$")
-- Különválasztjuk a nemzetséget (akár hibridjellel) a kultivár résztől
local genus, cv_part = clean:match("^(.-)%s+(['\"].+['\"])$")
if not genus or not cv_part then
local formatted_plain = "'''" .. clean .. "'''"
return formatted_plain, formatted_plain, clean
end
-- Kicseréljük a cv_part záró aposztrófját '-re, hogy a MediaWiki parser ne nyelje el a 4x ' találkozásánál
local cv_inner = cv_part:sub(1, -2) .. "'"
-- 1. Infobox fejléc & Besorolás sor: '''''Genus'' 'Cultivar'''' (a genus tartalmazza a × jelet is)
local header_formatted = "'''''" .. genus .. "'' " .. cv_inner .. "'''"
-- 2. Tudományos név szakasz: '''''Genus'' 'Cultivar'''
local scientific_formatted = "'''''" .. genus .. "'' " .. cv_part .. "'''"
-- 3. Tiszta név
local plain_name = genus .. " " .. cv_part
return header_formatted, scientific_formatted, plain_name
end
----------------------------------------------------------------------------------------------------------------
function p.buildCultivarbox(frame)
local args = frame:getParent().args
local cultivarName = (args.cultivar ~= '' and args.cultivar) or nil
local synonymName = (args.synonym ~= '' and args.synonym) or nil
local hybridName = (args.hybrid ~= '' and args.hybrid) or nil
local parentName = (args.parent ~= '' and args.parent) or nil
local taxonImage = args.image or ''
local imageTitle = args.imageTitle or ''
local output = ""
-- cultivarName ----------------------------------
if cultivarName then
local hierarchy = {}
local taxonName = cultivarName
local overrideParent = parentName
while taxonName and taxonName ~= "" and taxonName ~= "nil" do
local _, lookupName = TaxonBox.format_taxon_clean(taxonName)
local data = TaxonData[lookupName] or TaxonData[taxonName]
if data then
table.insert(hierarchy, { rank = data.rank, name = lookupName })
taxonName = data.parent
overrideParent = nil
else
-- Ha a taxon nincs az adatbázisban (összetett név, pl. kultivár)
local genus_part, rest_part = taxonName:match("^([%a%-%×%s%.]+)%s+(.+)$")
if genus_part and rest_part then
local current_rank = rest_part:match("^['\"].+['\"]") and "Kultivár" or "Faj"
table.insert(hierarchy, { rank = current_rank, name = taxonName })
-- Megnézzük, hogy maga a nemzetség / hibridnemzetség benne van-e a TaxonData-ban
local _, genusLookup = TaxonBox.format_taxon_clean(genus_part)
local genusData = TaxonData[genusLookup] or TaxonData[genus_part]
if genusData then
taxonName = genusLookup
else
-- Ha a nemzetség sincs a TaxonData-ban, manuálisan beszúrjuk a Nothogenus / Nemzetség sort
local genus_rank = (genus_part:sub(1, 2) == "×" or genus_part:sub(1, 1) == "x") and "Nothogenus" or "Nemzetség"
table.insert(hierarchy, { rank = genus_rank, name = genus_part })
if overrideParent and overrideParent ~= '' then
taxonName = overrideParent
overrideParent = nil
else
break
end
end
else
-- Egytagú név, ami hiányzik a TaxonData-ból
if overrideParent and overrideParent ~= '' then
taxonName = overrideParent
overrideParent = nil
else
break
end
end
end
end
if #hierarchy == 0 then
return '<div style="color:red;">Cultivarbox hiba: Nem található adat a "' .. tostring(cultivarName) .. '" taxonhoz.</div>'
end
local header_cv, _, plain_cv = parse_and_format_cultivar(cultivarName)
output = output .. '{| class="infobox biota cv"\n'
output = output .. "|-\n"
output = output .. '! class="taxonnev" colspan="2" | ' .. header_cv .. "\n"
output = output .. "|-\n"
output = output .. '! class="suha-svg" colspan="2"|[[Fájl:cv2.png|x160px|link=]]<br>Kultivár, termesztett változat.\n'
if taxonImage ~= '' then
output = output .. '|-\n'
output = output .. '! class="suha-svg" colspan="2"|[[Fájl:' .. taxonImage .. '|340px|' .. imageTitle .. ']]\n'
end
output = output .. '|-\n'
output = output .. '! class="besorolas" colspan="2"|Rendszertani besorolás\n'
for i = #hierarchy, 1, -1 do
local item = hierarchy[i]
local rank_display = item.rank or "Taxon"
local name_display = ""
if item.rank == "Kultivár" then
local cv_header = parse_and_format_cultivar(item.name)
name_display = cv_header
elseif item.rank == "Faj" then
local clean_formatted, clean_plain = TaxonBox.format_taxon_clean(item.name)
name_display = "[[" .. clean_plain .. "|" .. clean_formatted .. "]]"
elseif item.rank == "Nemzetség" then
local _, clean_plain = TaxonBox.format_taxon_clean(item.name)
name_display = "[[:Kategória:" .. clean_plain .. "|''" .. clean_plain .. "'']]"
elseif item.rank == "Nothogenus" or item.rank == "Hibridnemzetség" then
rank_display = "Hibridnemzetség"
local _, clean_plain = TaxonBox.format_taxon_clean(item.name)
name_display = "[[:Kategória:" .. clean_plain .. "|''" .. clean_plain .. "'']]"
else
local _, clean_plain = TaxonBox.format_taxon_clean(item.name)
name_display = "[[:Kategória:" .. clean_plain .. "|" .. clean_plain .. "]]"
end
if rank_display == "Nemzetségcsoport" then rank_display = "Nemzetség-<br>csoport" end
if rank_display == "Alnemzetség-csoport" or rank_display == "Alnemzetségcsoport" then
rank_display = "Alnemzetség-<br>csoport"
end
output = output .. '|-\n'
output = output .. '| class = "left" | ' .. rank_display .. '\n'
output = output .. '| class = "right" | ' .. name_display .. '\n'
end
if hierarchy[1] and (hierarchy[1].rank == "Faj" or hierarchy[1].rank == "Kultivár") then
local encodedTerm = mw.uri.encode(plain_cv)
output = output .. '|-\n'
output = output .. '!colspan="2" class="taxobox-icons" |'
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'
end
-- synonymName ----------------------------------
if synonymName then
local syn_hierarchy = {}
table.insert(syn_hierarchy, { rank = "Kultivár", name = synonymName })
local header_syn, _, _ = parse_and_format_cultivar(synonymName)
output = output .. '{| class="infobox biota syn"\n'
output = output .. "|-\n"
output = output .. '! class="taxonnev" colspan="2" | ' .. header_syn .. "\n"
output = output .. "|-\n"
output = output .. '! class="suha-svg" colspan="2"|[[Fájl:syn.svg|x160px|link=]]<br>Szinonima név\n'
for i = #syn_hierarchy, 1, -1 do
local item = syn_hierarchy[i]
local syn_disp = parse_and_format_cultivar(item.name)
output = output .. '|-\n'
output = output .. '| class = "left" | Szinonim kultivárnév\n'
output = output .. '| class = "right" | ' .. syn_disp .. '\n'
end
output = output .. '|}\n'
end
return output
end
----------------------------------------------------------------------------------------------------------------
function p.format_tudomanyos_nev(frame)
local args = frame:getParent().args
local names = {
{ val = args.cultivar, class = "tnb tnb-cv", class2 = "tns tns-cv", txt = "kultivár"},
{ val = args.synonym, class = "tnb tnb-syn", class2 = "tns tns-syn", txt = "szinonima név"},
{ val = args.hybrid, class = "tnb tnb-hyb", class2 = "tns tns-hyb", txt = "hibrid név"}
}
local output = '== Kultivárnév (fajta-, hibridnév) ==\n'
output = output .. '<div class="tn">\n'
for _, n in ipairs(names) do
if n.val and n.val ~= '' then
local _, sci_formatted, _ = parse_and_format_cultivar(n.val)
output = output .. '* <span class="' .. n.class .. '">' .. sci_formatted .. '</span><br><span class="' .. n.class2 .. '">' .. (n.txt) .. '</span>\n'
end
end
output = output .. '</div>'
return output
end
-- ==========================================================
-- OFFLINE TESZTELŐ SZAKASZ
-- ==========================================================
if arg then
mw = { uri = { encode = function(s) return s:gsub(" ", "%%20") end } }
local mock_frame = {
getParent = function()
return {
args = {
cultivar = arg[1] or "×Graptoveria 'Lovely Rose'",
parent = arg[2] or "Sedinae",
image = "test.jpg",
imageTitle = "Teszt kép"
}
}
end
}
print("\n--- Cultivarbox GENERÁLT WIKITEXT ---")
local success, result = pcall(p.buildCultivarbox, mock_frame)
print(success and result or "HIBA: " .. result)
print("\n--- TUDOMÁNYOS NÉV SZAKASZ ---")
local success2, result2 = pcall(p.format_tudomanyos_nev, mock_frame)
print(success2 and result2 or "HIBA: " .. result2)
end
-- ==========================================================
-- ONLINE
-- ==========================================================
-- {{Cultivarbox
-- | cultivar = ×Graptoveria 'Lovely Rose'
-- | synonym = Graptopetalum 'Lovely Rose'
-- | parent = Sedinae
-- | image = test_image.jpg
-- | imageTitle = ×Graptoveria 'Lovely Rose'
-- }}
return p