모듈:연습장/Doyoon1995/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
function p.zh(frame)
	local args = getArgs(frame)
	local title = mw.title.getCurrentTitle()
	local zhdatalang = require("Module:Zh/data/" .. args"lang")
	local labels = zhdatalang.labels -- 각 언어 또는 발음에 표시할 라벨들
	local articles = zhdatalang.articles -- 각 언어 또는 발음에 링크 걸 문서들
	local labelsuffixes = zhdatalang.labelsuffixes
	local suffixesarticles = zhdatalang.suffixesarticles
	local isocodes = zhdatalang.isocodes -- 각 언어 또는 발음의 ISO 코드들
	local cats = zhdatalang.cats
	local pinyins = zhdatalang.pinyins -- 한어 병음을 제외한 병음들
	local hanguls = zhdatalang.hanguls -- 한글 표기들
	local superscript = zhdatalang.superscript -- 숫자와 "*" 또는 "°"를 자동 위 첨자 할 발음들
	local ignorefirst = zhdatalang.ignorefirst
	local savefirst = zhdatalang.savefirst
	local orderlists = zhdatalang.orderlists -- 각 부분이 표시되는 순서의 방식들
	local prefix = zhdatalang.prefix
	-- change parameters and labels based on other parameters
	if labels"p" then
		if not args"p" and args"hp" then
			-- hp an alias for p (hanyu pinyin)
			args"p" = args"hp"
		end
		if intersects(args, pinyins) then
			labels"p" = "한어 병음"
		end
	end
	if labels"t" then
		if args"s" and args"s" == args"t" then
			-- 일치하는 간번체자 병합
			args"c" = args"s"
			args"s" = nil
			args"t" = nil
		end
	end
	if not argssavefirst and args1 then
		argssavefirst = args1
	end
	if intersects(args, ignorefirst) then
		-- if there is an irreplaceable first parameter treat it as the main paratmeter
		argssavefirst = nil
	end
	-- based on setting/preference specify order
	local ordkey = "default"
	if args"order" and orderlistsargs"order" then
		ordkey = args"order"
	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") -- 언어 라벨 작게 하기 여부
	
	-- go through all possible fields in loop, adding them to the output
	for i, part in ipairs(orderlistsordkey) do
		if argspart then
			-- build label
			label = ""
			if uselabels or hangulspart then
				label = labelspart
				if (uselinks and articlespart) or hangulspart then
					label = "" .. articlespart .. "|" .. label .. ""
				end
				if labelsuffixespart then
					if uselinks and suffixesarticlespart then
						label = label .. "(" .. suffixesarticlespart .. "|" .. labelsuffixespart .. ")"
					else
						label = label .. "(" .. labelsuffixespart .. ")"
					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 then
					label = label .. ""
					if not hangulspart then
						label = "" .. label
					end
				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 part:sub(1, 3) == "ipa" 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 then
				-- superscript
				val = val:gsub("(%d%*°+)", "%1"):gsub("(%d%*°+)", "%1")
			end
			if usesmall and hangulspart then
				val = "" .. val
			end
			-- add both to body
			if body > "" then
				if hangulspart then
					body = body .. " "
				else
					body = body .. ", "
				end
			end
			if hangulspart then
				body = body .. val .. label
			else
				body = body .. label .. val
			end
		end
	end
	
	return body
end
return p