본문으로 이동

모듈:Hide

위키문헌 ― 우리 모두의 도서관.
모듈 설명문서[만들기]
local export = {}

-- 틀에서 각종 매개변수들을 모듈 안으로 불러 오는 역할을 수행.
local m_parameter = require("모듈:parameters")
-- 문자열 대체 라이브러리.
local gsub = mw.ustring.gsub

-- 트래킹 툴. 주로 "제목=낱말 풀이"의 형식으로 사용된 파라미터를 추적하여 사용률 현황을 집계할 목적으로 사용.
local function track(page)
	require("모듈:debug").track("글 숨기기 (틀)/" .. page)
	return true
end

function export.hide_format(data)
	-- 병렬 불러오기.
	local head, width, color, style, content = data.head, data.width, data.color, data.style, data.content
	local first_line, second_line, third_line
	-- result의 줄임말.
	local res
	-- 기본값 설정
	if not width then width = '100%' end
	if not color then color = '#E8E8E8' end
	if not head then head = "이 내용을 보려면 오른쪽 '펼치기' 버튼을 클릭" end
	if not style then style = "" end
	if not content then content = "" end
	-- 포맷팅.
	first_line = '{| class="noprint toctitle mw-collapsible mw-collapsed mw" width="' .. width .. '"\n'
	second_line = '! align="left" style="background-color:' .. color .. '; margin: 0 auto; padding: 0 10px 0 10px; font-size:small;' .. style .. '"|' .. head .. '\n'
	third_line = '|- \n|style="border-bottom: 1px solid silver;"|\n' .. content .. '\n|}'
	res = first_line .. second_line .. third_line
	
	-- 형식을 내보냄
	return res
end

function export.hide_format_end()
	track("글 숨김 끝 틀을 사용한 문서")
end

-- 위키낱말사전으로 자동 연결되도록 링크해 주는 로직.
function export.hide_make_link(text)
    -- 낱말과 괄호 안의 뜻을 추출
    local text = text:gsub("%* ([^%(]+)%(([^%)]+)%)", function(word, meanings)
        -- 뜻을 ','로 구분하여 배열로 변환
        local meanings_list = mw.text.split(meanings, ",%s*")  -- %s*는 공백 허용
        -- 각 뜻에 대해 링크 생성
        for i, meaning in ipairs(meanings_list) do
            meanings_list[i] = string.format("[[wikt:%s|%s]]", meaning, meaning)
        end
        -- 낱말과 함께 변환된 링크들을 결합
        return string.format("* [[wikt:%s|%s]](%s)", word, word, table.concat(meanings_list, ", "))
    end)

    return text
end

-- {{글 숨김|제목=낱말풀이}}과 같은 틀을 파싱하는 함수.
function export.hide_template(frame)
	-- 기존 파서함수를 이용한 틀에서 사용되는 각종 변수들.
	-- 루아로 이식되더라도 기존 틀이 정상적으로 작동되어야 하기 때문에 그대로 사용. 
	local params = {
		-- 기존 [[틀:글 숨김]] 파서함수 매개변수들.
		-- 영어로 된 건 내부 변수로, 실질적인 성격에서도 사용 가능한 매개변수.
		[1] = {},
		["head"] = {},
		["제목"] = { alias_of = "head" },
		["width"] = {},
		["너비"] = { alias_of = "width" },
		["color"] = {},
		["제목색"] = { alias_of = "color" },
		["style"] = {},
		["제목모양"] = { alias_of = "style" },
		-- 추가한 매개변수는 아래에 작성.
		["content"] = {},
		["내용"] = { alias_of = "content" }
	}
	
	-- 매개변수를 불러오는 부분
	local args = m_parameter.process(frame:getParent().args, params)
	local content = ""
	content = args.content
	
	-- 글숨김이 낱말풀이 용도로 사용되었는지를 검사하는 로직.
	if args.head and #args.head > 0 then
		track("제목 매개변수를 사용하는 글 숨김 틀")
		if args.head == "낱말풀이" then
			track("제목이 낱말풀이인 글 숨김 틀 사용 현황")
			head = "낱말풀이"
			content = export.hide_make_link(args.content)
		else
			head = args.head
		end
	end

	-- 다른 함수에 전달하는 데이터.
	local data = {
		head = head,
		width = args.width,
		color = args.color,
		style = args.style,
		content = content
	}
	
	-- 함수 호출.
	return export.hide_format(data)
end

return export