이 모듈에 대한 설명문서는 모듈:Timetable/설명문서에서 만들 수 있습니다
local p = {}
-- CSV 데이터를 받아 wikitable 형식으로 변환하는 함수
function p.csv(frame)
local headerRowCount = tonumber(frame.args["header"]) or 4
local footerRowCount = tonumber(frame.args["footer"]) or 1
local title = frame.args["title"] or '제목 (title 변수 입력)'
local csv = frame.args[1] or ''
local lines = {}
title = title:gsub(">", '│')
title = title:gsub("%.", '</div>')
title = title:gsub("u", 'UNBOLD')
title = title:gsub("l", '<div style="border: var(--text) 1.5px solid; display: inline-block; padding-top: 2px; padding-bottom: 3px; font-size: 1.14rem; font-weight: normal; vertical-align: top; line-height: 1.29rem;">')
title = title:gsub("UNBOLD", '<div style="font-weight: 400; display: inline;">')
local result = '<div style="display: flex; flex-direction: row;"><div class="wm-rl" style="font-size: 1.23rem; padding-right: 4px; font-weight: 700; line-height: 1.54rem;">' .. title .. '</div><div style="border: 2.5px solid var(--text); padding: 3px; overflow-x: scroll;">\n{| class="timetable" style="text-align: right; border-spacing: 30px;"\n'
-- CSV 데이터를 줄 단위로 분리
for line in csv:gmatch("[^\r\n]+") do
table.insert(lines, line)
end
for i = 1, #lines do
local row = lines[i]
local values = {}
-- 데이터를 쉼표로 분리하여 values 테이블에 저장
for value in row:gmatch("[^,]+") do
value = value:gsub("<", ' colspan=')
value = value:gsub(">", '⇨')
value = value:gsub("h", 'HEADERSTYLE')
value = value:gsub("%~", 'HEIGHTSET')
value = value:gsub("r", "RIGHTLEFT")
value = value:gsub("z", "NOBORDERBOTTOM")
value = value:gsub("g", 'GREATER')
value = value:gsub("%^", ' rowspan=')
value = value:gsub(";", ' |')
value = value:gsub("x", "ELLIPSIS")
value = value:gsub("%.","ENDSPAN")
value = value:gsub("i", "align=center | ‖")
value = value:gsub("q", "align=center | 〃")
value = value:gsub("-", "align=center | ⸺")
value = value:gsub("v", 'align=center | レ')
value = value:gsub("k", '<span style="font-weight: 700;">')
value = value:gsub("b", '<span style="font-size: 1.25em; font-weight: 700;">')
value = value:gsub("/", "<br/>")
value = value:gsub("ENDSPAN","</span>")
value = value:gsub("ELLIPSIS",'align=center | ⋯')
value = value:gsub("HEADERSTYLE", 'colspan=2 style="padding-left: 1.08rem; padding-right: 1.08rem; text-align: justify; text-align-last: justify; text-justify: inter-character; border-right: none; vertical-align: middle;"')
value = value:gsub("HEIGHTSET", ' height=')
value = value:gsub("RIGHTLEFT", ' class="wm-rl"')
value = value:gsub("NOBORDERBOTTOM", '<span class="noborderbottom"></span>')
value = value:gsub("GREATER", '<span style="font-size: 1.2em;">')
if string.find(value, "|") then
table.insert(values, value)
else
table.insert(values, "|" .. value)
end
end
for j, value in ipairs(values) do
if j == 1 then
values[j] = [[style="padding-left: 1.1rem; text-align: justify; text-align-last: justify; text-justify: inter-character; border-right: none; vertical-align: middle;"]] .. value
elseif j == 2 then
values[j] = 'style="text-align: center; border-left: none; border-right: 1px solid var(--text); margin-left: -1rem;"' .. value
elseif j == 3 then
values[j] = [[style="width: calc(0.26rem + 4ch); border-left: 1px solid var(--text);"]] .. value
else
values[j] = [[style="width: calc(0.26rem + 4ch);"]] .. value
end
end
for j = #values, 1, -1 do
if string.find(values[j], "!!") then
table.remove(values, j)
end
end
if i < headerRowCount then
result = result .. '|- style="border-bottom: 1px solid var(--text); text-align: center !important;"\n| ' .. table.concat(values, " \n| ") .. "\n"
elseif i == headerRowCount then
result = result .. '|- style="border-bottom: double var(--text); text-align: center !important;"\n| ' .. table.concat(values, " \n| ") .. "\n"
elseif i > #lines - footerRowCount then
result = result .. '|- style="border-top: 1px solid var(--text); text-align: left !important;"\n| ' .. table.concat(values, " \n| ") .. "\n"
else
result = result .. "|-\n| " .. table.concat(values, " \n| ") .. "\n"
end
end
result = result .. "|}\n</div></div>"
return result
end
return p