{{트리|
* 1
** 2
** 3
*** 4
*** 5
*** 6
** 7
*** 8
*** 9
**** 10
**** 11
**** 12
**** 13
*** 14
**** 15
**** 16
**** 17
***** 18
***** 19
**** 20
***** 21
}}
{{트리|
* 1
** 2
** 3
*** 4
*** 5
*** 6
** 7
*** 8
*** 9
**** 10
**** 11
**** 12
**** 13
*** 14
**** 15
**** 16
**** 17
***** 18
***** 19
**** 20
***** 21
|수직|노드색 = skyblue|링크색 = deepskyblue}}
연습장이나 사용자 문서에서 틀의 사용이나 수정을 연습할 수 있습니다.
분류는
/설명문서에 넣어주세요.
local p = {}
--============ tree root ================
function p.main(frame)
local i = 0
local str, gene = {}, {}
local code = {}
local codeinput = string.gsub(string.gsub(frame.args[1], "[\n]+", "\n"), "\n", "", 1)
-- 입력한 코드
local rootClass = frame.args[2]
local nodestyle = frame.args[3] -- 노드 스타일
local nodeClass = frame.args[4] -- 노드 클래스
local linkstyle = frame.args[5] -- 링크 스타일
local linkclass = frame.args[6] -- 링크 클래스
-- make tree node, link
local function link() -- link
return tostring(mw.html.create("div"):addClass(linkclass):cssText(linkstyle):done())
end
local function node(text) -- node
return '<li>' .. link() .. tostring(
mw.html.create("span")
:addClass('node ' .. nodeClass)
:cssText(nodestyle):wikitext(link() .. text):done())
end
local function repeats(str, cha)
local _, n = string.gsub(str, cha, "")
return n
end
for line in string.gmatch(codeinput, "([^\n]*)\n+") do
str[i] = string.gsub(string.gsub(line, "*%s*", "*"), "*", "")
gene[i] = repeats(line, "*")
i = i + 1
end
--====================================
local rootBox = "<ul " .. rootClass .. ">" .. link()
i = -1
while str[i + 1] do
i = i + 1
local cont = node(str[i])
if i == 0 then
table.insert(code, rootBox .. cont)
-- 앞에보다 뒤에가 작다
elseif gene[i - 1] < gene[i] then
local times = gene[i] - gene[i - 1]
for _ = 1, times do
cont = '<ul>' .. link() .. cont
end
table.insert(code, cont)
elseif gene[i - 1] == gene[i] then
table.insert(code, '</li>' .. cont)
elseif gene[i - 1] > gene[i] then
local times = gene[i - 1] - gene[i]
for _ = 1, times do
cont = '</ul></li>' .. cont
end
table.insert(code, cont)
end
end
return table.concat(code)
end
return p