편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
local | local p = {} | ||
local html = mw.html | |||
local title_ = mw.title | |||
local ustring = mw.ustring | |||
local getArgs = require('Module:Arguments').getArgs | |||
local unicodechar = require('모듈:unicode').unicodechar | |||
function p.test(frame) return 'asdf' end | |||
p.strokeOrder = function(frame) | |||
local func = require('Module:한자/획순').strokeOrder | |||
return func(frame) | |||
end | |||
local strokeOrder = require('Module:한자/획순').strokeOrder_ | |||
p.list = function(frame) | |||
local func = require('Module:한자/목록').list | |||
return func(frame) | |||
end | |||
local | ---@param str string | ||
function | ---@return string 'U+ABCD' | ||
local | local function unicode(str) | ||
if | return 'U+' .. ustring.upper(string.format("%x", ustring.codepoint(str))) | ||
return ' ' | end | ||
elseif | ----------------------------------------------------------------------------------------------------- | ||
local function renderVariant(text, hanja, lang) | |||
local torender = html.create("span") | |||
torender:addClass('variant') | |||
:tag("span"):cssText("font-size: 11px; line-height: 1em;"):wikitext(text):done() | |||
:tag("span"):attr("lang", lang):wikitext(hanja) | |||
return torender | |||
end | |||
local function ThTd(th, td) | |||
if td ~= '' then | |||
local torender = html.create("tr") | |||
torender:tag("th"):css("text-align", "left"):wikitext(th) | |||
torender:tag("td"):wikitext(td) | |||
return torender | |||
end | |||
end | |||
local function Th(th, class) | |||
local torender = html.create("tr") | |||
if type(th) == 'table' then | |||
torender:tag("th"):attr("colspan", "2"):addClass(class):css("text-align","center"):node(th) | |||
else | |||
torender:tag("th"):attr("colspan", "2"):addClass(class):css("text-align","center"):wikitext(th) | |||
end | |||
return torender | |||
end | |||
local function Td(td, class) | |||
local torender = html.create("tr") | |||
if type(td) == 'table' then | |||
torender:tag("td"):attr("colspan", "2"):addClass(class):css("text-align","center"):node(td) | |||
else | |||
torender:tag("td"):attr("colspan", "2"):addClass(class):css("text-align","center"):wikitext(td) | |||
end | |||
return torender | |||
end | |||
----------------------------------------------------------------------------------------- | |||
-- 메인 상자 | |||
function p: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 tabtitles = { ['traditional'] = '정자[韓/臺]', ['simplified'] = '간체자[中]', ['japan'] = '신자체[日]' } | |||
local torender = 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") | |||
libre_tab_btns:tag("div"):addClass("libre-tab-btn 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 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) | |||
torender:node(libre_tab) | |||
return tostring(self.hanja_header)..tostring(torender)..unicodechar({ ['영어이름'] = '', | |||
['문자'] = self.trad['한자'],}) | |||
end | |||
function p: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(ThTd("뜻(訓)", self.jap["뜻"])) | |||
render:node(ThTd("훈독(訓読)", self.jap["훈독"])) | |||
if self.jap["오음"] == '' and self.jap["한음"] == '' and self.jap["당음"] == '' and | |||
self.jap["관용음"] == '' then | |||
render:node(ThTd("음독(音読)", self.jap["음독"])) | |||
else | else | ||
render:node(Th("음독(音読)")) | |||
render:node(ThTd("오음(吳音)", self.jap["오음"])) | |||
render:node(ThTd("한음(漢音)", self.jap["한음"])) | |||
render:node(ThTd("당음(唐音)", self.jap["당음"])) | |||
render:node(ThTd("관용음", self.jap["관용음"])) | |||
end | end | ||
local | |||
local | render:node(ThTd("[[부수]]", '[[' .. self.jap["부수"] .. ']]')) | ||
for | render:node(ThTd("[[유니코드]]", unicode(self.jap["한자"]))) | ||
-- | render:node(Td(strokeOrder(self.jap["획수"] .. "획", self.jap["한자"], "", self.jap["획순파일"], 'ja'))) | ||
if | |||
-- | self['japan'] = render | ||
--if | end | ||
--end | function p: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(ThTd("뜻(訓)", self.simp["뜻"])) | |||
render:node(ThTd("중국어 병음", self.simp["병음"])) | |||
if self.simp["중고한어"] ~= "" then | |||
render:node(ThTd("중고한어", self.simp["중고한어"])) | |||
end | |||
render:node(ThTd("[[부수]]", '[[' .. self.simp["부수"] .. ']]')) | |||
render:node(ThTd("[[유니코드]]", unicode(self.simp["한자"]))) | |||
render:node(Td(strokeOrder(self.simp["획수"] .. "획", self.simp["한자"], "", self.simp["획순파일"]))) | |||
self['simplified'] = render | |||
end | |||
function p: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(ThTd("뜻(訓)", self.trad["뜻"])) | |||
render:node(ThTd("소리(音)", self.trad["소리"])) | |||
render:node(ThTd("[[부수]]", '[[' .. self.trad["부수"] .. ']]')) | |||
render:node(ThTd("[[유니코드]]", 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 | |||
render:node(Td(strokeOrder(self.trad["획수"] .. "획", self.trad["한자"], "", self.trad["획순파일"]))) | |||
self['traditional'] = render | |||
end | |||
function p.main(frame) return p:main_(frame) end | |||
function p:main_(frame) | |||
local args = getArgs(frame) | |||
local css = args['css'] | |||
self.hanja_header = html.create('div'):addClass("hanja-info-head") | |||
if args['모드'] == '한자만' then | |||
self.hanja_header:tag('span'):addClass('hanja') | |||
:wikitext('[[' ..args["한자"] ..']]' .. css) | |||
return self.hanja_header | |||
elseif args['모드'] == '신자체만' or args['모드'] == '일본어만' then | |||
self.hanja_header:tag('span'):addClass('hanja'):attr('lang', 'ja'):css('font-family', 'Noto Serif CJK KR, serif') | |||
:wikitext('[[' ..args['신자체'] ..']]' .. css) | |||
return self.hanja_header | |||
elseif args['모드'] == '훈음' then | |||
local hanja, mean, sound | |||
if args['한자 정보2'] then | |||
hanja = args[1]; mean = args[2]; sound = args[3] | |||
else | |||
hanja = args['한자'] ; mean = args['뜻'] ; sound = args['소리'] | |||
end | |||
self.hanja_header:tag('span'):addClass('hanja'):wikitext('[[' ..hanja ..']]') | |||
if sound == " " then | |||
self.hanja_header:tag('span'):addClass('mean'):wikitext(' ' .. mean) | |||
else | |||
self.hanja_header:tag('span'):addClass('mean'):wikitext(ustring.format(' %s <i>〔</i>%s</i>〕</i>', mean, sound)) | |||
end | |||
self.hanja_header:wikitext(css) | |||
return self.hanja_header | |||
elseif args['모드'] == '풀이' then | |||
return '' | |||
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 "" | |||
}, | |||
["이체자 이름"] = { | |||
"약자", "속자", "본자", " ", " ", " ", | |||
" ", " " | |||
} | |||
} | |||
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 " " | |||
} | |||
local currentPage = title_.getCurrentTitle().prefixedText | |||
local index = ustring.find(currentPage, '/') or 0 | |||
local subPage | |||
local rootPage | |||
subPage = ustring.sub(currentPage, index+1, -1) | |||
rootPage = ustring.sub(currentPage, 1, index-1) | |||
self.hanjalink = ustring.codepoint(self.trad["한자"]); self.unicode = unicode(self.trad["한자"]) | |||
if self.hanjalink > 65535 then --유니코드 U+10000 초과 | |||
self.hanja_header:tag('span'):addClass('hanja'):wikitext(ustring.format('[[%s|%s]]', self.unicode, self.trad["한자"])) | |||
else --아닐 때 | |||
self.hanja_header:tag('span'):addClass('hanja'):wikitext(ustring.format('[[%s]]', self.trad["한자"])) | |||
end | |||
if rootPage == '시리즈:리브레 한자사전' then | |||
if self.trad["부수"] == subPage then -- 제부수일 때 | |||
self.hanja_header:wikitext(ustring.format('[[분류:%s| ]]', self.trad["부수"])) | |||
else -- 제부수가 아닐 때 | |||
self.hanja_header:wikitext(ustring.format('[[분류:%s|-]]', self.trad["부수"])) | |||
end | |||
if not args['상위문서x'] then self.hanja_header:wikitext(ustring.format('[[%s]]<br/>', rootPage)) end | |||
if self.trad["소리"] == '-' or args['미분류'] then -- 소리가 없을 때 | |||
self.hanja_header:wikitext('[[분류:한자/문자|-]]') | |||
else -- 소리 있을 때 | |||
self.hanja_header:wikitext(ustring.format('[[분류:한자/문자|%s]]', self.trad['소리'])) | |||
end | |||
if self.hanjalink > 65535 then --유니코드 U+10000 초과 | |||
self.hanja_header:wikitext(ustring.format('[[분류:%s| ]]', self.unicode)) | |||
else --아닐 때 | |||
self.hanja_header:wikitext(ustring.format('[[분류:%s| ]]', self.trad["한자"])) | |||
end | end | ||
end | end | ||
self.hanja_header:tag('span'):addClass('mean'):wikitext(ustring.format(' %s <i>〔</i>%s</i>〕</i>__NOTOC__', self.trad["뜻"], self.trad["소리"]) ..css) | |||
return self:render(args["모드"]) | |||
end | end | ||
-- | ------------------------------------------------------------------------------------ | ||
return p | return p |