모듈:UnicodeBlock
보이기
local hanja = {}
local html = mw.html
local title_ = mw.title
local ustring = mw.ustring
local getArgs = require('Module:Arguments').getArgs
local strokeOrder = require('Module:한자/획순').strokeOrder_
local function unicode(str)
return 'U+' .. ustring.upper(string.format("%x", ustring.codepoint(str)))
end
function hanja.test(frame) return 'asdf' 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
-- 메인 상자
local function renderLibreTab(titleTable, contTable)
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")
libre_tab_btns:tag("div"):addClass("libre-tab-btn"):addClass("libre-tab-btn-active"):wikitext(titleTable[1])
libre_tab_btns:tag("div"):addClass("libre-tab-btn"):wikitext(titleTable[2])
libre_tab_btns:tag("div"):addClass("libre-tab-btn"):wikitext(titleTable[3])
libre_tab:node(libre_tab_btns)
local libre_tab_main = html.create("div"):addClass("libre-tab-main")
libre_tab_main:tag("div"):addClass("libre-tab-main-content"):addClass("libre-tab-main-content-active"):node(contTable[1])
libre_tab_main:tag("div"):addClass("libre-tab-main-content"):node(contTable[2])
libre_tab_main:tag("div"):addClass("libre-tab-main-content"):node(contTable[3])
libre_tab:node(libre_tab_main)
render:node(libre_tab)
return render
end
local function japan(hanja)
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(hanja["한자"])
render:tag("tr"):node(hanja_)
render:node(renderTrThTd("뜻(訓)", hanja["뜻"]))
render:node(renderTrThTd("훈독(訓読)", hanja["훈독"]))
if hanja["오음"] == '' and hanja["한음"] == '' and hanja["당음"] == '' and
hanja["관용음"] == '' then
render:node(renderTrThTd("음독(音読)", hanja["음독"]))
else
render:node(renderTrTh("음독(音読)", hanja["음독"]))
render:node(renderTrThTd("오음(吳音)", hanja["오음"]))
render:node(renderTrThTd("한음(漢音)", hanja["한음"]))
render:node(renderTrThTd("당음(唐音)", hanja["당음"]))
render:node(renderTrThTd("관용음", hanja["관용음"]))
end
render:node(renderTrThTd("[[부수]]", '[[' .. hanja["부수"] .. ']]'))
render:node(renderTrThTd("[[유니코드]]", unicode(hanja["한자"])))
local strokeorder = html.create("tr")
strokeorder:tag("td"):attr("colspan", "2"):css("text-align", "center"):node(strokeOrder(hanja["획수"] .. "획", hanja["한자"], "", hanja["획순파일"], 'japan'))
render:node(strokeorder)
return render
end
local function simplicial(hanja)
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(hanja["한자"])
render:tag("tr"):node(hanja_)
render:node(renderTrThTd("뜻(訓)", hanja["뜻"]))
render:node(renderTrThTd("중국어 병음", hanja["병음"]))
if hanja["중고한어"] ~= "" then
render:node(renderTrThTd("중고한어", hanja["중고한어"]))
end
render:node(renderTrThTd("[[부수]]", '[[' .. hanja["부수"] .. ']]'))
render:node(renderTrThTd("[[유니코드]]", unicode(hanja["한자"])))
local strokeorder = html.create("tr")
strokeorder:tag("td"):attr("colspan", "2"):css("text-align", "center"):node(strokeOrder(hanja["획수"] .. "획", hanja["한자"], "",hanja["획순파일"]))
render:node(strokeorder)
return render
end
function hanja:traditional()
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", "ko"):wikitext(self.hanja["한자"])
if self.hanja["대만식"] ~= "" then
hanja_:node(renderVariant("대만", self.hanja["대만식"], "zh-tw"))
end
render:tag("tr"):node(hanja_)
render:node(renderTrThTd("뜻(訓)", self.hanja["뜻"]))
render:node(renderTrThTd("소리(音)", self.hanja["소리"]))
render:node(renderTrThTd("[[부수]]", '[[' .. self.hanja["부수"] .. ']]'))
render:node(renderTrThTd("[[유니코드]]", unicode(self.hanja["한자"])))
local bool
for k in pairs(self.hanja["이체자"]) do
if self.hanja["이체자"][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.hanja["이체자"][i] ~= '' then
hanja_variants:node(renderVariant(self.hanja["이체자 이름"][i],self.hanja["이체자"][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.hanja["획수"] .. "획", self.hanja["한자"], "",self.hanja["획순파일"]))
render:node(strokeorder)
return render
end
function hanja.info(frame, self)
local args = getArgs(frame)
local css
local hanja_header
if args['모드'] == '목록' then
local hanja = args["한자"]
hanja_header = html.create('span')
hanja_header:tag('span'):addClass("hanja")
:wikitext('【[[시리즈:리브레 한자사전/' .. hanja ..'|' .. hanja .. ']]】')
if args['소리'] == " " then
hanja_header:tag('span'):addClass('mean')
:wikitext(args["뜻"])
else
hanja_header:tag('span'):addClass('mean')
:wikitext(args["뜻"] .. '〔' .. args["소리"] .. '〕')
end
return hanja_header
else
hanja_header = html.create('div'):addClass("hanja-info-head")
css = args['css']
end
self.hanja = {
["한자"] = 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 ""
},
["이체자 이름"] = {
"약자", "속자", "본자", " ", " ", " ",
" ", " "
}
}
local 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 " "
}
local 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
hanja_header:tag('span'):addClass('hanja')
:wikitext('[[' ..self.hanja["한자"] ..']]' .. css)
return hanja_header
elseif args['모드'] == '신자체' or args[1] == '일본어' then
hanja_header:tag('span'):addClass('hanja'):attr('lang', 'ja'):css('font-family', 'Noto Serif CJK KR, serif')
:wikitext('[[' ..jap["한자"] ..']]' .. css)
return hanja_header
elseif args['모드'] == '훈음' then
hanja_header:tag('span'):addClass('hanja')
:wikitext('[[' ..self.hanja["한자"] ..']]')
if args['소리'] == " " then
hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. self.hanja["뜻"] ..css)
else
hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. self.hanja["뜻"] .. ' <i>〔</i>' .. self.hanja["소리"] .. '<i>〕</i>' ..css)
end
return hanja_header
elseif args['모드'] == '풀이' then
return ''
end
local fullpagename = title_.getCurrentTitle().prefixedText
if ustring.find(fullpagename, '시리즈:리브레 한자사전') then
hanja_header:wikitext('[[분류:'..self.hanja["한자"]..']]')
if args['상위문서x'] == nil then
hanja_header:wikitext(args['parent'])
end
end
if mw.ustring.codepoint(self.hanja["한자"]) > 65535 then
hanja_header:tag('span'):addClass('hanja'):wikitext('[[' .. unicode(self.hanja["한자"]) ..'|'.. self.hanja["한자"] ..']]')
else
hanja_header:tag('span'):addClass('hanja'):wikitext('[[' ..self.hanja["한자"] ..']]')
end--[[
if hanja['소리'] == " " then
hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. hanja["뜻"] .. '__NOTOC__' ..css)
else]]
hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. self.hanja["뜻"] .. ' <i>〔</i>' .. self.hanja["소리"] .. '<i>〕</i>__NOTOC__' ..css)
--end
local torender
if args["기본"] == "중국어" or args['기본'] == '간체자' then
return tostring(hanja_header) .. tostring(renderLibreTab(
{ "중국어[中]", "한국어[韓/臺]", "일본어[日]"},
{ simplicial(simp), self.traditional(), japan(jap)}
))
elseif args["기본"] == "일본어" or args['기본'] == '신자체' then
return tostring(hanja_header) .. tostring(renderLibreTab(
{"일본어[日]", "한국어[韓/臺]", "중국어[中]"},
{ japan(jap), self.traditional(), simplicial(simp)}
))
else
return tostring(hanja_header) .. tostring(renderLibreTab(
{"한국어[韓/臺]", "일본어[日]", "중국어[中]"},
{ self.traditional(), japan(jap), simplicial(simp)}
))
end
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 hanja