Modul:TreeChart
TreeChart může být použit k vytvoření rodokmenů, kladogramů a jiných stromů.
Použití
editovatModul podle zadaného klíče seskládá čtverec spojení položek grafu. Pro každý vyplněný směr (po směru hodinových ručiček: A vzhůru, B vpravo, C dolů, D vlevo) zobrazí čáru. Pokud je za písmenem ještě vlnovka, zobrazí přerušovanou čáru, pokud P, zobrazí tečkovanou čáru. Používá se ve dvojici, první s označením 1 tvoří první řádek modulu, druhá s označením 2 tvoří druhý řádek modulu.
Modul byl specificky připraven pro šablonu Šablona:Rodokmen/step2. Použití modulu v šabloně vypadá následovně:
{{Rodokmen/step2
|row1 "on2"={{#invoke:TreeChart|treechart|A~BP|1}}|
|row2 "on2"={{#invoke:TreeChart|treechart|A~BP|2}}|
}}
⇓ VÝSTUP ŠABLONY ⇓
⇑ VÝSTUP ŠABLONY ⇑
local p = {}
function p.treechart (frame)
local pattern = frame.args[1]
local row = frame.args[2]
local dirs = {'A', 'B', 'C', 'D'}
local row1 = '<td style="~A~; ~D~"><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;"> </span></div></td><td style="~B~"><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;"> </span></div></td>'
local row2 = '<td style="~C~"><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;"> </span></div></td><td><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;"> </span></div></td>'
local type = ''
for _, dir in pairs(dirs) do
match = string.match(pattern, '(' .. dir .. ')[^ABCD]*')
arg = string.match(pattern, '' .. dir .. '([^ABCD]*)')
if match then
if arg == '~' then
type = 'dashed'
elseif arg == 'P' then
type = 'dotted'
else
type = 'solid'
end
if string.sub(match, 1, 1) == 'A' then
row1 = string.gsub(row1, '~A~', 'border-right:1px ' .. type .. ' black', 1)
elseif string.sub(match, 1, 1) == 'B' then
row1 = string.gsub(row1, '~B~', 'border-bottom:1px ' .. type .. ' black', 1)
elseif string.sub(match, 1, 1) == 'C' then
row2 = string.gsub(row2, '~C~', 'border-right:1px ' .. type .. ' black', 1)
elseif string.sub(match, 1, 1) == 'D' then
row1 = string.gsub(row1, '~D~', 'border-bottom:1px ' .. type .. ' black', 1)
end
end
end
row1 = string.gsub(row1, '~[A-D]~', '')
row2 = string.gsub(row2, '~[A-D]~', '')
if row == '1' then
return row1
elseif row == '2' then
return row2
end
end
return p