Module:TreeChart
Appearance
local p = {}
local SLD = '1px solid black'
local DSH = '1px dashed black'
local DOT = '1px dotted black'
local cells = {
['!b'] = ' ',
['!t'] = '<td rowspan="2" style="border-right: 1px solid black;"><div style="width: 1em; height: 2em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['%b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['%t'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['\'b'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['\'t'] = '<td style="border-right: 1px solid black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['(b'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['(t'] = '<td style="border-right: 1px solid black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
[')b'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
[')t'] = '<td rowspan="2" style="border-right: 1px solid black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['*b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['*t'] = '<td style="border-right: 1px dashed black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['+b'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['+t'] = '<td style="border-right: 1px solid black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
[',b'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
[',t'] = '<td><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['-b'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['-t'] = '<td colspan="2" style="border-bottom: 1px solid black;"><div style="width: 2em; height: 1em;"></div></td>',
['.b'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['.t'] = '<td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['7b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['7t'] = '<td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
[':b'] = ' ',
[':t'] = '<td rowspan="2" style="border-right: 1px dashed black;"><div style="width: 1em; height: 2em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Ab'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['At'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['Cb'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['Ct'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Db'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['Dt'] = '<td rowspan="2" style="border-right: 1px dashed black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['Fb'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['Ft'] = '<td><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['Gb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['Gt'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Hb'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['Ht'] = '<td rowspan="2" style="border-right: 1px dotted black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['Jb'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['Jt'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Lb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['Lt'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['Mb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['Mt'] = '<td colspan="2" style="border-bottom: 1px dotted black;"><div style="width: 2em; height: 1em;"></div></td>',
['Pb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['Pt'] = '<td colspan="2" style="border-bottom: 1px dotted black;"><div style="width: 2em; height: 1em;"></div></td>',
['Qb'] = '',
['Qt'] = '<td rowspan="2" style="border-right: 1px dotted black;"><div style="width: 1em; height: 2em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Rb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['Rt'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['Sb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['St'] = '<td><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['T3b'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['T3t'] = '<td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Tb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['Tt'] = '<td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['Vb'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['Vt'] = '<td colspan="2" style="border-bottom: 1px dashed black;"><div style="width: 2em; height: 1em;"></div></td>',
['Wb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['Wt'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['Yb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['Yt'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['Zb'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['Zt'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['^b'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['^t'] = '<td style="border-right: 1px solid black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['$b'] = ' ',
['$t'] = '<td rowspan="2" colspan="2"><div style="width: 2em; height: 2em;"></div></td>',
['`b'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['`t'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['a2b'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['a2t'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dashed #000001;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['ab'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['at'] = '<td style="border-right: 1px dotted black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['b2b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['b2t'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dotted #000001;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['b3b'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['b3t'] = '<td style="border-right: 1px solid black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['bb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['bt'] = '<td style="border-right: 1px solid black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['cb'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['ct'] = '<td style="border-right: 1px dashed black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['db'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['dt'] = '<td rowspan="2" style="border-right: 1px dashed black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['eb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['et'] = '<td style="border-right: 1px solid black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['fb'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['ft'] = '<td rowspan="2" style="border-right: 1px solid black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['hb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['ht'] = '<td style="border-right: 1px solid black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['ib'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['it'] = '<td style="border-right: 1px dashed black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['jb'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['jt'] = '<td colspan="2" style="border-bottom: 1px solid black;"><div style="width: 2em; height: 1em;"></div></td>',
['k2b'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['k2t'] = '<td rowspan="2" style="border-right: 1px dotted black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['k3b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['k3t'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['kb'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['kt'] = '<td rowspan="2" style="border-right: 1px dotted black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['l2b'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['l2t'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dashed #000001;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['l3b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['l3t'] = '<td style="border-right: 1px solid black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['lb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['lt'] = '<td style="border-right: 1px dotted black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['m2b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['m2t'] = '<td colspan="2" style="border-bottom: 1px dotted black;"><div style="width: 2em; height: 1em;"></div></td>',
['mb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['mt'] = '<td colspan="2" style="border-bottom: 1px dotted black;"><div style="width: 2em; height: 1em;"></div></td>',
['n2b'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['n2t'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dotted #000001;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['nb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['nt'] = '<td style="border-right: 1px solid black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['o2b'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['o2t'] = '<td rowspan="2" style="border-right: 1px dashed black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['ob'] = '<td><div style="width: 1em; height: 1em;"></div></td>',
['ot'] = '<td rowspan="2" style="border-right: 1px solid black;"><div style="width: 1em; height: 2em;"></div></td><td style="border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td>',
['p2b'] = '<td style="border-right: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['p2t'] = '<td style="border-right: 1px dashed black; border-bottom: 1px dotted #000001;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['pb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['pt'] = '<td style="border-right: 1px solid black; border-bottom: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td rowspan="2"><div style="width: 1em; height: 2em;"></div></td>',
['q2b'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['q2t'] = '<td style="border-right: 1px dotted black; border-bottom: 1px dashed #000001;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['qb'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['qt'] = '<td style="border-right: 1px dotted black; border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td>',
['r2b'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['r2t'] = '<td colspan="2" style="border-bottom: 1px dashed black;"><div style="width: 2em; height: 1em;"></div></td>',
['rb'] = '<td style="border-right: 1px dotted black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['rt'] = '<td colspan="2" style="border-bottom: 1px solid black;"><div style="width: 2em; height: 1em;"></div></td>',
['tb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['tt'] = '<td style="border-right: 1px solid black; border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td><td style="border-bottom: 1px dashed black;"><div style="width: 1em; height: 1em;"></div></td>',
['vb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['vt'] = '<td colspan="2" style="border-bottom: 1px solid black;"><div style="width: 2em; height: 1em;"></div></td>',
['xb'] = ' ',
['xt'] = ' ',
['yb'] = '<td style="border-right: 1px solid black;"><div style="width: 1em; height: 1em;"></div></td><td><div style="width: 1em; height: 1em;"></div></td>',
['yt'] = '<td colspan="2" style="border-bottom: 1px dashed black;"><div style="width: 2em; height: 1em;"></div></td>',
['~b'] = '<td colspan="2"><div style="width: 2em; height: 1em;"></div></td>',
['~t'] = '<td colspan="2" style="border-bottom: 1px dashed black;"><div style="width: 2em; height: 1em;"></div></td>',
}
function p.main(frame)
local args = frame:getParent().args
local cell_args = {}
for i, v in ipairs(args) do
local w = mw.text.trim(v)
if not w:find('%S') then
w = '$'
end
local cell_x = { }
if cells[w..'t'] then
cell_x.box = nil
cell_x.name = w..'t'
else
cell_x.name = mw.text.trim(v)
local args_v = args[cell_x.name]
if args_v then
cell_x.text = args_v
else
cell_x.text = '{{{'..w..'}}}'
end
cell_x.box = true
cell_x.colspan = args['colspan_'..w] or args.colspan or '6'
cell_x.rowspan = args['rowspan_'..w] or args.rowspan or '2'
cell_x.thick = args['border_'..w] or args.border or '2'
cell_x.css = args['boxstyle_'..w] or args.boxstyle or ''
end
table.insert(cell_args,cell_x)
end
return p._main(cell_args)
end
function p._main(cell_args)
local ret = mw.html.create('tr')
:css({ ['height'] = '1px',
['text-align'] = 'center' })
for i, v in ipairs(cell_args) do
if v.box then
ret:node(make_box(v))
else
ret:wikitext(cells[v.name]) --:node(make_cell(v.name))
end
end
local ret2 = mw.html.create('tr')
:css({ ['height'] = '1px',
['text-align'] = 'center' })
:done()
return tostring(ret:done()) .. tostring(ret2)
end
function make_cell(name)
local props = cells[name]
if not props then
return
end
local ret = ''
for i, v in ipairs(props) do
ret = ret .. tostring(make_tag(v))
end
return ret
end
function make_tag(tbl)
local ret = mw.html.create(tbl.tag)
if tbl.style then
for n, s in pairs(tbl.style) do
ret:css(n,s)
end
end
if tbl.attr then
for n, s in pairs(tbl.attr) do
ret:attr(n,s)
end
end
if tbl.node then
ret:node(make_tag(tbl.node))
end
return ret:done()
end
function make_box(tbl)
local ret = mw.html.create('td')
:attr('colspan',tbl.colspan)
:attr('rowspan',tbl.rowspan)
:css({ ['padding'] = '0.2em',
['border'] = tbl.thick .. 'px solid black' })
:cssText(tbl.css)
:wikitext(tbl.text)
:done()
return ret
end
return p