모듈:UnicodeBlock: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
272번째 줄: 272번째 줄:
-- self.hanja_header:wikitext('[[분류:'..self.trad["부수"]..']]')
-- self.hanja_header:wikitext('[[분류:'..self.trad["부수"]..']]')
--end
--end
self.hanja_header:wikitext(rootPage)
self.hanja_header:wikitext('시리즈:리브레 한자사전')
if rootPage == '시리즈:리브레 한자사전' then
if rootPage == '시리즈:리브레 한자사전' then
self.hanja_header:wikitext(rootPage)
if self.trad["소리"] == '-' then
if self.trad["소리"] == '-' then
self.hanja_header:wikitext('[[분류:한자/문자|  ]]')
self.hanja_header:wikitext('[[분류:한자/문자|  ]]')

2021년 11월 27일 (토) 12:27 판

설명문서 [편집] [역사] [새로고침]

문자를 입력하면 유니코드 블록 위치가 출력됩니다.

스크립트 오류: 함수 "unicodeBlock"가 존재하지 않습니다.

스크립트 오류: 함수 "unicodeBlock"가 존재하지 않습니다.

스크립트 오류: 함수 "_"가 존재하지 않습니다.

스크립트 오류: 함수 "_"가 존재하지 않습니다.

{{#invoke:unicodeBlock|unicodeBlock|1}}
{{#invoke:unicodeBlock|unicodeBlock|Z}}
{{#invoke:unicodeBlock|_|한}}
{{#invoke:unicodeBlock|_|Σ}}
연습장이나 사용자 문서에서 틀의 사용이나 수정을 연습할 수 있습니다.
분류는 /설명문서에 넣어주세요.

local hanjaInfo = {}
local html = mw.html
local title_ = mw.title
local ustring = mw.ustring
local getArgs = require('Module:Arguments').getArgs
local strokeOrder = require('Module:한자/획순').strokeOrder_

function hanjaInfo.test(frame) return 'asdf' end

local function unicode(str)
	return 'U+' .. ustring.upper(string.format("%x", ustring.codepoint(str)))
end

-----------------------------------------------------------------------------------------------------

local function renderVariant(text, hanja, lang)
	local render = html.create("span"):addClass('variant')
	render:tag("span"):cssText("font-size: 11px; line-height: 1em;"):wikitext(text)
	render:tag("span"):attr("lang", lang):wikitext(hanja)
	return render
end

local function renderTrThTd(th, td)
	if td ~= '' then
		local render = html.create("tr")
		render:tag("th"):css("text-align", "left"):wikitext(th)
		render:tag("td"):wikitext(td)
		return render
	end
end

local function renderTrTh(th, class)
	local render = html.create("tr")
	render:tag("th"):attr("colspan", "2"):addClass(class):css("text-align","center")
		:wikitext(th)
	return render
end
-- 메인 상자
function hanjaInfo:render(lang)
	local langTable = {}
	if lang == "중국어" or lang == '간체자' then
        langTable = { 'simplified', 'traditional', 'japan' }
	elseif lang == "일본어" or lang == '신자체' then
        langTable = { 'japan', 'traditional', 'simplified' }
	else
		langTable = { 'traditional', 'japan', 'simplified' }
	end
    local render = html.create("div"):addClass("libre hanja-info"):cssText('box-shadow: 0 0.5em 1em -0.125em rgb(10 10 10 / 10%), 0 0 0 1px rgb(10 10 10 / 2%); border-radius: .25rem;')
    local libre_tab = html.create("div"):addClass("libre-tab")
    local libre_tab_btns = html.create("div"):addClass("libre-tab-btns")
    local libre_tab_main = html.create("div"):addClass("libre-tab-main")

    local tabtitles = {
        ['traditional'] = '한국어[韓/臺]',
        ['simplified'] = '중국어[中]',
        ['japan'] = '일본어[日]'
    }
	libre_tab_btns:tag("div"):addClass("libre-tab-btn"):addClass("libre-tab-btn-active"):wikitext(tabtitles[langTable[1]])
	libre_tab_btns:tag("div"):addClass("libre-tab-btn"):wikitext(tabtitles[langTable[2]])
	libre_tab_btns:tag("div"):addClass("libre-tab-btn"):wikitext(tabtitles[langTable[3]])
	
	self:traditional(); self:japan(); self:simplified()
	libre_tab_main:tag("div"):addClass("libre-tab-main-content"):addClass("libre-tab-main-content-active"):node(self[langTable[1]])
	libre_tab_main:tag("div"):addClass("libre-tab-main-content"):node(self[langTable[2]])
	libre_tab_main:tag("div"):addClass("libre-tab-main-content"):node(self[langTable[3]])
	libre_tab:node(libre_tab_btns)
	libre_tab:node(libre_tab_main)
	render:node(libre_tab)

	return tostring(self.hanja_header)..tostring(render)
end

function hanjaInfo:japan()
	local render = html.create("table"):css("width", "100%")

	local hanja_ = html.create("td"):attr("colspan", "2"):addClass("hanja"):css("text-align", "center")
	hanja_:tag("span"):attr("lang", "ja"):wikitext(self.jap["한자"])
	render:tag("tr"):node(hanja_)

	render:node(renderTrThTd("뜻(訓)", self.jap["뜻"]))
	render:node(renderTrThTd("훈독(訓読)", self.jap["훈독"]))
	if self.jap["오음"] == '' and self.jap["한음"] == '' and self.jap["당음"] == '' and
		self.jap["관용음"] == '' then
		render:node(renderTrThTd("음독(音読)", self.jap["음독"]))
	else
		render:node(renderTrTh("음독(音読)", self.jap["음독"]))
		render:node(renderTrThTd("오음(吳音)", self.jap["오음"]))
		render:node(renderTrThTd("한음(漢音)", self.jap["한음"]))
		render:node(renderTrThTd("당음(唐音)", self.jap["당음"]))
		render:node(renderTrThTd("관용음", self.jap["관용음"]))
	end

	render:node(renderTrThTd("[[부수]]", '[[' .. self.jap["부수"] .. ']]'))
	render:node(renderTrThTd("[[유니코드]]", unicode(self.jap["한자"])))

	local strokeorder = html.create("tr")
	strokeorder:tag("td"):attr("colspan", "2"):css("text-align", "center"):node(strokeOrder(self.jap["획수"] .. "획", self.jap["한자"], "", self.jap["획순파일"], 'japan'))

	render:node(strokeorder)
	self['japan'] = render
end

function hanjaInfo:simplified()
	local render = html.create("table"):css("width", "100%")

	local hanja_ = html.create("td"):attr("colspan", "2"):addClass("hanja"):css("text-align", "center")
	hanja_:tag("span"):attr("lang", "zh-cn"):wikitext(self.simp["한자"])

	render:tag("tr"):node(hanja_)

	render:node(renderTrThTd("뜻(訓)", self.simp["뜻"]))
	render:node(renderTrThTd("중국어 병음", self.simp["병음"]))
	if self.simp["중고한어"] ~= "" then
		render:node(renderTrThTd("중고한어", self.simp["중고한어"]))
	end
	render:node(renderTrThTd("[[부수]]", '[[' .. self.simp["부수"] .. ']]'))
	render:node(renderTrThTd("[[유니코드]]", unicode(self.simp["한자"])))

	local strokeorder = html.create("tr")
	strokeorder:tag("td"):attr("colspan", "2"):css("text-align", "center"):node(strokeOrder(self.simp["획수"] .. "획", self.simp["한자"], "",self.simp["획순파일"]))

	render:node(strokeorder)
	self['simplified'] = render
end

function hanjaInfo:traditional()
	local render = html.create("table"):css("width", "100%")
	local hanja_text = html.create("td"):attr("colspan", "2"):addClass("hanja"):css("text-align", "center")
	hanja_text:tag("span"):attr("lang", "ko"):wikitext(self.trad["한자"])

	if self.trad["대만식"] ~= "" then
		hanja_text:node(renderVariant("대만", self.trad["대만식"], "zh-tw"))
	end
	render:tag("tr"):node(hanja_text)

	render:node(renderTrThTd("뜻(訓)", self.trad["뜻"]))
	render:node(renderTrThTd("소리(音)", self.trad["소리"]))
	render:node(renderTrThTd("[[부수]]", '[[' .. self.trad["부수"] .. ']]'))
	render:node(renderTrThTd("[[유니코드]]", unicode(self.trad["한자"])))

	local bool
	for k in pairs(self.trad["이체자"]) do
		if self.trad["이체자"][k] ~= "" then
			bool = true
			break
		end
	end

	if bool == true then
		local hanja_variant = html.create("tr"):tag("th"):css("text-align","left"):wikitext("이체자")
		local hanja_variants = html.create("span"):addClass('variants')

		local i = 1
		while  i < 6 do
			if self.trad["이체자"][i] ~= '' then
				hanja_variants:node(renderVariant(self.trad["이체자 이름"][i],self.trad["이체자"][i], "ko"))
			end
			i = i + 1
		end
		hanja_variant:tag("td"):node(hanja_variants)
		render:node(hanja_variant)
	end

	local strokeorder = html.create("tr")
	strokeorder:tag("td"):attr("colspan", "2"):css("text-align", "center"):node(strokeOrder(self.trad["획수"] .. "획", self.trad["한자"], "", self.trad["획순파일"]))
	render:node(strokeorder)

	self['traditional'] = render
end

function hanjaInfo.main(frame) return hanjaInfo:main_(frame) end
function hanjaInfo:main_(frame)
	local args = getArgs(frame)
	local css

	if args['모드'] == '목록' then
		local hanja = args["한자"]
		self.hanja_header = html.create('span')
		self.hanja_header:tag('span'):addClass("hanja")
			:wikitext('【[[시리즈:리브레 한자사전/' .. hanja ..'|' .. hanja .. ']]】')
		if args['소리'] == " " then
			self.hanja_header:tag('span'):addClass('mean')
				:wikitext(args["뜻"])
		else
			self.hanja_header:tag('span'):addClass('mean')
				:wikitext(args["뜻"] .. '〔' .. args["소리"] .. '〕')
		end

		return self.hanja_header
	else
		self.hanja_header = html.create('div'):addClass("hanja-info-head")
		css = args['css']
	end

	self.trad = {
		["한자"] = args["한자"] or " ",
		["뜻"] = args["뜻"] or " ",
		["소리"] = args["소리"] or '-',
		["부수"] = args["부수"] or " ",
		["획수"] = args["획수"] or " ",
		["획순파일"] = args["획순파일"],
		["대만식"] = args["정체자"] or args["대만식"] or "",
		["이체자"] = {
			args["약자"] or "", args["속자"] or "", args['본자'] or "",
			args["이체자"] or args["이체자1"] or "",
			args["이체자2"] or "", args["이체자3"] or "",
			args["이체자4"] or "", args["이체자5"] or ""
		},
		["이체자 이름"] = {
			"약자", "속자", "본자", "&nbsp;", "&nbsp;", "&nbsp;",
			"&nbsp;", "&nbsp;"
		}
	}
	self.jap = {
		["한자"] = args["신자체"] or args["한자"] or " ",
		["뜻"] = args["뜻"] or " ",
		["훈독"] = args["훈독"] or "",
		["음독"] = args["음독"] or "",
		["오음"] = args["오음"] or "",
		["한음"] = args["한음"] or "",
		["당음"] = args["당음"] or "",
		["관용음"] = args["관용음"] or "",
		["획수"] = args["신자체 획수"] or args["획수"] or " ",
		["획순파일"] = args["신자체 획순파일"] or
			args["획순파일"],
		["부수"] = args["신자체 부수"] or args["부수"] or " "
	}
	self.simp = {
		["한자"] = args["간체자"] or args["한자"] or " ",
		["뜻"] = args["뜻"] or " ",
		["병음"] = args["병음"] or " ",
		["중고한어"] = args["중고한어"] or "",
		["획수"] = args["간체자 획수"] or args["획수"] or " ",
		["획순파일"] = args["간체자 획순파일"] or
			args["획순파일"],
		["부수"] = args["간체자 부수"] or args["부수"] or " "
	}

	if args['모드'] == '한자' then
		self.hanja_header:tag('span'):addClass('hanja')
		:wikitext('[[' ..self.trad["한자"] ..']]' .. css)
		return self.hanja_header

	elseif args['모드'] == '신자체' or args[1] == '일본어' then
		self.hanja_header:tag('span'):addClass('hanja'):attr('lang', 'ja'):css('font-family', 'Noto Serif CJK KR, serif')
		:wikitext('[[' ..self.jap["한자"] ..']]' .. css)
		return self.hanja_header

	elseif args['모드'] == '훈음' then
		self.hanja_header:tag('span'):addClass('hanja')
		:wikitext('[[' ..self.trad["한자"] ..']]')
		if args['소리'] == " " then
			self.hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. self.trad["뜻"] ..css)
		else
			self.hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. self.trad["뜻"] .. ' <i>〔</i>' .. self.trad["소리"] .. '<i>〕</i>' ..css)
		end
		return self.hanja_header

	elseif args['모드'] == '풀이' then
		return ''
	end
	local currentPage = title_.getCurrentTitle().prefixedText
	local index = ustring.find(currentPage, '/') or 0
	if index ~= 0 then
		local subPage = ustring.sub(currentPage, index+1, -1)
		local rootPage = ustring.sub(currentPage, 1, index-1)
	else
		local subPage = ''
		local rootPage = currentPage
	end
	--if self.trad["한자"] == subPage then
	--	self.hanja_header:wikitext('[[분류:'..self.trad["부수"]..']]')
	--end
	self.hanja_header:wikitext(rootPage)
	self.hanja_header:wikitext('시리즈:리브레 한자사전')
	if rootPage == '시리즈:리브레 한자사전' then
		if self.trad["소리"] == '-' then
			self.hanja_header:wikitext('[[분류:한자/문자|  ]]')
		else
			self.hanja_header:wikitext('[[분류:한자/문자|'..self.trad['소리']..']]')
		end
		if ustring.codepoint(self.trad["한자"]) > 65535 then
    	    self.hanja_header:wikitext('[[분류:'..unicode(self.trad["한자"])..']]')
    	    if not args['상위문서x'] then self.hanja_header:wikitext(args['parentLink']) end
			self.hanja_header:tag('span'):addClass('hanja'):wikitext('[[' .. unicode(self.trad["한자"]) ..'|'.. self.trad["한자"] ..']]')
		else
  	        self.hanja_header:wikitext('[[분류:'..self.trad["한자"]..']]')
    	    if not args['상위문서x'] then self.hanja_header:wikitext(args['parentLink']) end
			self.hanja_header:tag('span'):addClass('hanja'):wikitext('[[' ..self.trad["한자"] ..']]')
		end
	end
	
    --[[
        if hanja['소리'] == " " then
            self.hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. hanja["뜻"] .. '__NOTOC__' ..css)
        else]]
	self.hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. self.trad["뜻"] .. ' <i>〔</i>' .. self.trad["소리"] .. '<i>〕</i>__NOTOC__' ..css)
	--end
	
	return self:render(args["기본"])
end
------------------------------------------------------------------------------------
--[[function hanja.flexlist(frame)
	local args = getArgs(frame)
	local i = 1
	local list = html.create('div'):addClass('hanja-list-flex'):cssText('display: flex;flex-wrap: wrap;text-align:center;')

	while args[i] do
		local _ = html.create('div'):cssText('width: 130px')
		local j = 1
		for w in ustring.gmatch(args[i], '[^;]+') do
			if j == 1 then
				_:tag('div'):cssText('font-size: 1.8em;line-height: 1em;'):wikitext(w)
			end
			if j == 2 then
				_:tag('div'):wikitext(w)
			end
			j = j + 1
		end
		list:node(_)
		i = i + 1
	end
	return list
end]]

return hanjaInfo