이 모듈에 대한 설명문서는 모듈:Calendar/설명문서에서 만들 수 있습니다
local p = {}
local function is_leap_year(year)
return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0)
end
local function get_days_in_month(year, month)
if month == 2 and is_leap_year(year) then
return 29
end
local days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
return days_in_month[month]
end
function p.tabular(frame)
local year = frame.args.year + 0
local month = frame.args.month + 0
local previous_month = month - 1
if(previous_month<=0) then previous_month = previous_month + 12 end
local next_month = month + 1
if(next_month >12) then next_month = next_month - 12 end
local days = get_days_in_month(year, month)
local first_day_of_week = os.date("*t", os.time{year=year,month=month,day=1})["wday"]
local n_cells = first_day_of_week - 1 + days
local n_trailing_cells = 7 - (n_cells % 7)
-- Generate date cells
local cells = {}
-- 1. Prepend place holders if needed
for i = 1, first_day_of_week - 1 do
table.insert(cells, "X")
end
-- 2. Insert date cells
for i = 1, days do
table.insert(cells, i)
end
-- 3. Append place holders if needed
for i = 1, n_trailing_cells do
table.insert(cells, "X")
end
-- Render as a table
local html = {
'<table class="fw-calendar">\n',
'<tr>',
'<td colspan=\"2\" style=\'border-top: 0;border-left: 0;border-right: 0\'>' .. '[[' .. previous_month .. '월]]</td>',
'<td colspan=\"3\" style=\'border-top: 0;border-left: 0;border-right: 0\'>' .. '[[' .. month .. '월|\'\'\'' .. month .. '월\'\'\']]</td>',
'<td colspan=\"2\" style=\'border-top: 0;border-left: 0;border-right: 0\'>' .. '[[' .. next_month .. '월]]</td>',
'</tr>\n',
'<tr>',
'<th class="sun">일</th>',
'<th class="mon">월</th>',
'<th class="tue">화</th>',
'<th class="wed">수</th>',
'<th class="thu">목</th>',
'<th class="fri">금</th>',
'<th class="sat">토</th>',
'</tr>\n'
}
local day_names = {'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'}
local index = 1
while cells[index] do
table.insert(html, '<tr>')
for i = 1, 7 do
local cell = cells[index]
local is_placeholder = cell == "X"
if is_placeholder then
table.insert(html, '<td class="placeholder ' .. day_names[i] .. '"> </td>')
else
table.insert(html, '<td class="' .. day_names[i] .. '">[[' .. month .. '월 ' .. cell .. '일|' .. cell .. ']]</td>')
end
index = index + 1
end
table.insert(html, '</tr>\n')
end
table.insert(html, '</table>\n')
return table.concat(html, "")
end
return p