모듈:Zh

require('strict')
local p = {}
local getArgs = require("Module:Arguments").getArgs -- 변수 처리를 단순화하는 함수
local function intersects(lst, mst)
	-- 겹침 여부 판단
	for key in pairs(mst) do
		if lstkey then
			return true
		end
	end
	return false
end
local function alias(args, p, hp)
	-- 동명 변수 처리
	if not argsp and argshp then
		argsp = argshp
	end
end
local function setpref(args, order, orderlists)
	if argsorder and orderlistsargsorder then
		return orderlistsargsorder
	end
	return orderlists"default"
end
function p.zh(frame)
	local args = getArgs(frame)
	local title = mw.title.getCurrentTitle()
	local zhdatalang = mw.loadData("Module:Zh/data/" .. args"lang")
	local labelslist = zhdatalang.labelslist -- 각 부분에 표시할 라벨들
	local articles = zhdatalang.articles -- 각 부분에 링크 걸 문서들
	local ipalangs = zhdatalang.ipalangs -- 각 IPA가 표시하는 발음의 언어들
	local isocodes = zhdatalang.isocodes -- 각 부분의 ISO 코드들
	local cats = zhdatalang.cats -- 각 부분에 붙일 분류들
	local pinyins = zhdatalang.pinyins -- 병음 여부
	local hanguls = zhdatalang.hanguls -- 한글 여부
	local superscript = zhdatalang.superscript -- 자동 위 첨자 여부
	local prefix = zhdatalang.prefix -- 접두어 부착 여부
	local ignorefirst = zhdatalang.ignorefirst
	local savefirst = zhdatalang.savefirst
	local delims = zhdatalang.delims -- 일반 구분자들
	local hanguldelims = zhdatalang.hanguldelims -- 한글 표기 앞의 구분자
	local orderlists = zhdatalang.orderlists -- 각 부분이 표시되는 순서
	-- change parameters and specify labels based on other parameters
	local labels = labelslist1
	if labels"p" and intersects(args, pinyins) then
		labels = labelslist2
	end
	if args"s" and args"s" == args"t" then
		-- 일치하는 간번체자 병합
		args"c" = args"s"
		args"s" = nil
		args"t" = nil
	end
	alias(args, "p", "hp")
	alias(args, savefirst, 1)
	if intersects(args, ignorefirst) then
		-- 대체 가능한 주 변수 제거
		argssavefirst = nil
	end
	local body = "" -- 출력 문자열
	local params -- HTML span을 위한 변수
	local label -- 텍스트 앞에 붙는 언어 라벨
	local val -- 텍스트
	local uselinks = not (args"links" == "no") -- 라벨 링크 추가 여부
	local uselabels = not (args"labels" == "no") -- 라벨 표시 여부
	local useprefix = not (args"prefix" == "no") -- 맨 앞에 언어 이름 부착 여부
	local usesmall = not (args"small" == "no") -- 언어 라벨 작게 하기 여부
	local delim = setpref(args, "delim", delims)
	local hanguldelim = setpref(args, "delim", hanguldelims)
	local orderlist = setpref(args, "order", orderlists)
	
	-- go through all possible fields in loop, adding them to the output
	for i, part in ipairs(orderlist) do
		if argspart then
			-- build label
			label = ""
			if uselabels then
				label = labelspart
				if (uselinks and articlespart) or hangulspart then
					label = "" .. articlespart .. "|" .. label .. ""
				end
				if ipalangspart then
					if uselinks then
						label = label .. "(" .. ipalangspart .. ")"
					else
						label = label .. "(" .. ipalangspart .. ")"
					end
				end
				if body == "" and useprefix and prefixpart then
					if uselinks then
						label = "" .. labelssavefirst .. " " .. label
					else
						label = labelssavefirst .. " " .. label
					end
				end
				if hangulspart then
					label = "" .. label .. ""
				else
					label = label .. ": "
				end
				if usesmall and not hangulspart then
					label = "" .. label .. ""
				end
			end
			-- build value
			val = argspart
			if catspart and title.namespace == 0 then
				-- if has associated category AND current page in article namespace, add category
				val = catspart .. val
			end
			if isocodespart then
				-- add span for language if needed
				params = {"lang" = isocodespart, "xml:lang" = isocodespart}
				val = mw.text.tag({name = "span", attrs = params, content = val})
			elseif ipalangspart then
				params = {"class" = "IPA"}
				val = mw.text.tag({name = "span", attrs = params, content = val})
			end
			if string.match(val, "") then
				val = val .. "분류:모듈 zh에서 태그 sup를 사용하는 문서"
			end
			if superscriptpart or ipalangspart then
				-- superscript
				val = mw.ustring.gsub(val, "(%d%*°+)", "%1")
				val = mw.ustring.gsub(val, "(%d%*°+)", "%1")
			end
			-- add both to body
			if body > "" then
				if hangulspart then
					body = body .. hanguldelim
				else
					body = body .. delim
				end
			end
			if not hangulspart then
				body = body .. label .. val
			elseif not usesmall then
				body = body .. val .. label
			else
				body = body .. "" .. val .. label .. ""
			end
		end
	end
	
	if delim == "\n|" then
		body = "|" .. body
	end
	
	return body
end
return p