Modul:TreeChart

Z Wikipedie, otevřené encyklopedie

TreeChart může být použit k vytvoření rodokmenů, kladogramů a jiných stromů.

Použití[editovat zdroj]

Modul 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;">&nbsp;</span></div></td><td style="~B~"><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;">&nbsp;</span></div></td>'
	local row2 = '<td style="~C~"><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;">&nbsp;</span></div></td><td><div style="width: 1em; height: 1em;"><span style="font: 1px/1px serif;">&nbsp;</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