모듈:Duration

젊은리버럴 (토론 | 기여)님의 2024년 7월 23일 (화) 13:57 판 (새 문서: local p = {} function p._error( error_str ) return '분류:입력 오류가 있는 Duration<strong class="error">모듈:Duration에 오류가 있음: ' .. error_str .. '</strong>' end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {wrappers = {'틀:Duration', '틀:Duration/연습장'}}) local tmp = args.duration or args[1] or '' local duration = {} if tonumber(args[1]) or args[2] or args[3] then if args[4] then return p._error('4...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

이 모듈에 대한 설명문서는 모듈:Duration/설명문서에서 만들 수 있습니다

local p = {}

function p._error( error_str )
    return '[[분류:입력 오류가 있는 Duration]]<strong class="error">모듈:Duration에 오류가 있음: ' .. error_str .. '</strong>'
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {wrappers = {'틀:Duration', '틀:Duration/연습장'}})
	local tmp = args.duration or args[1] or ''
	local duration = {}
	if tonumber(args[1]) or args[2] or args[3] then
		if args[4] then return p._error('4번째 변수는 지정해서는 안 됩니다') end
		if not args[1] or args[1] == '' then
			duration = {args[2] or 0, args[3] or 0}
		else
			duration = {args[1], args[2] or 0, args[3] or 0}
		end
		tmp = nil
		for k, v in ipairs(duration) do
			duration[k] = tonumber(v)
			if not duration[k] then return p._error('유효하지 않은 값') end
		end
	elseif args.h or args.m or args.s then
		if not args.h or args.h == '' then
			duration = {args.m or 0, args.s or 0}
		else
			duration = {args.h, args.m or 0, args.s or 0}
		end
		tmp = nil
		for k, v in ipairs(duration) do
			duration[k] = tonumber(v)
			if not duration[k] then return p._error('유효하지 않은 값') end
		end
	else
		if mw.ustring.find(tmp, 'class="duration"', 1, yes) then return tmp end -- if there is already a microformat, don't do anything
		duration = mw.text.split(mw.ustring.match(tmp, '%d*:?%d+:%d+%.?%d*') or '', ':') -- split into table
		if duration[4] then return p._error('최대 2개의 콜론 허용') end
		for k, v in ipairs(duration) do duration[k] = tonumber(v) or 0 end -- convert values to numbers
	end
	if duration[3] then
		if (duration[1] + duration[2] + duration[3]) == 0 then return nil end
		if (duration[1] ~= math.ceil(duration[1])) or (duration[2] ~= math.ceil(duration[2])) then return p._error('Hours and minutes values must be integers') end
		if duration[3] >= 60 then return p._error('Seconds value must be less than 60') end
		if duration[2] >= 60 then return p._error('Minutes value must be less than 60 if hours value is specified') end
		if duration[2] < 10 then duration[2] = '0'..duration[2] end -- zero padding
		if duration[3] < 10 then duration[3] = '0'..duration[3] end
		duration = '<span class="duration"><span class="h">' .. duration[1] .. '</span>:<span class="min">' .. duration[2] .. '</span>:<span class="s">' .. duration[3] .. '</span></span>'
	elseif duration[2] then
		if (duration[1] + duration[2]) == 0 then return nil end
		if duration[1] ~= math.ceil(duration[1]) then return p._error('Hours and minutes values must be integers') end
		if duration[2] >= 60 then return p._error('Seconds value must be less than 60') end
		if duration[2] < 10 then duration[2] = '0'..duration[2] end -- zero padding
		duration = '<span class="duration"><span class="min">' .. duration[1] .. '</span>:<span class="s">' .. duration[2] .. '</span></span>'
	else
		duration = ''
	end
	
	if tmp and tmp ~= '' then
		if duration ~= '' then tmp = mw.ustring.gsub(tmp, '%d*:?%d+:%d+%.?%d*', duration, 1) else tmp = tmp .. ' [[분류:HAudio 마이크로포맷을 사용하지 않은 Duration]]' end
	else
		if duration ~= '' then tmp = duration end
	end
	return tmp
end

return p