모듈:Unsigned

local p = {}

local function endswith(String, End)
	return End == '' or string.sub(String,-string.len(End)) == End
end

local function trim(s)
	return s:gsub("^%s+", ""):gsub("%s+$", ""):gsub("\226\128\142", "")
end

local function addKstToStringIfItDoesNotEndWithKst(s)
	if s == "" or endswith(s, "~~~~") then return s end
	if not endswith(s, "(KST)") then
		return s .. " (KST)"
	end
	return s
end

local function getDay(s)
	return s:gsub("Mon", "월"):gsub("Tue", "화"):gsub("Wed", "수")
	:gsub("Thu", "목"):gsub("Fri", "금"):gsub("Sat", "토")
	:gsub("Sun", "일")
end

local function getCurrentKstTime()
	local ksttime = os.time() + 9 * 60 * 60
	return os.date('%Y년 ', ksttime)
		.. os.date('%m월 ', ksttime):gsub("^0+", "")
		.. os.date('%d일 ', ksttime):gsub("^0+", "")
		.. '(' .. getDay(os.date('%a'), ksttime) .. ') '
		.. os.date('%H:%M (KST)', ksttime)
end

local function _main(args)
	local ret = '<span class="autosigned" style="font-size:85%;">—&nbsp;'
	local signpattern = "^%d+년%s+%d+월%s+%d+일"
	local defaultuser = "양아치"
	local username = ""
	local date = ""
	local delim = "‎ "
	if args[1]:match(signpattern) then
		if args[2]:match(signpattern) then
			return '<span class="autosigned" style="color:red; ' ..
			'font-size:85%;">서명 오류: 두 변수에 날짜가 ' ..
			'모두 올 수 없습니다.</span>'
		end
		if args[1]:match(delim) then
			username = args[1]:gsub("^.*" .. delim, "")
			date = args[1]:gsub(delim .. ".*", "")
		else
			username = args[2]
			date = args[1]
		end
	elseif args[2]:match(signpattern) then
		username = args[1]
		date = args[2]
	else
		if args[1] and args[1]:match("%S") then
			username = args[1]
		elseif args[2] and args[2]:match("%S") then
			username = args[2]
		end
	end
	if not username or not username:match("%S") then
		username = defaultuser
	end
	ret = ret .. "이 의견은 [[사용자:" .. username .. "|"
		.. username .. "]]님이 "
	if date and date:match("%S") then
		ret = ret .. addKstToStringIfItDoesNotEndWithKst(trim(date)) .. "에 "
	end

	ret = ret .. "작성하였으나, 서명을 하지 않아 "
		.. getCurrentKstTime() .. "에 다른 사용자가 추가하였습니다. "
		.. "의견을 입력한 후에는 <code>--&#126;&#126;&#126;&#126;</code>를 사용해 서명을 남깁니다. "
	ret = ret .. "</span>"
	return ret
end

function p.main(frame)
	local args
	if type(frame.args) == 'table' then
		args = frame.args
	else
		args = frame
	end
	return _main(args)
end

return p