모듈:한자: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
 
(사용자 2명의 중간 판 382개는 보이지 않습니다)
1번째 줄: 1번째 줄:
local hanja = {}
-- 다른 모듈로의 링크를 위해 남겨놓음.
 
local html = mw.html
local title_ = mw.title
local ustring = mw.ustring
 
local getArgs = require('Module:Arguments').getArgs
 
local function unicode(str)
return 'U+0'..ustring.upper(string.format("%x", ustring.codepoint(str)))
end
 
function hanja.test(frame)
return mw.title.getCurrentTitle().prefixedText
end
 
function hanja.glyphStyle(frame)
local args = getArgs(frame)
local hanja = ustring.sub(args['한자'], -1, -1)
local lowerCodepoint = string.format("%x", ustring.codepoint(hanja))
local codepoint = string.upper( lowerCodepoint )
local root = html.create('div'):css('display', 'flex'):addClass('hanja-style')
local spanCss = 'display: flex;flex-direction: column;align-items: center;'
local count = 0
if title_.new('media:'..hanja..'-oracle.svg').exists then count = count + 1 -- 갑골문
root:tag('span'):cssText(spanCss):wikitext('[[파일:'..hanja..'-oracle.svg|80px]]'):tag('div'):wikitext('갑골문')
end
if title_.new('media:'..hanja..'-bronze.svg').exists then count = count + 1 -- 금문
root:tag('span'):cssText(spanCss):wikitext('[[파일:'..hanja..'-bronze.svg|80px]]'):tag('div'):wikitext('금문')
end
if title_.new('media:'..hanja..'-bigseal.svg').exists then count = count + 1 -- 대전
root:tag('span'):cssText(spanCss):wikitext('[[파일:'..hanja..'-bigseal.svg|80px]]'):tag('div'):wikitext('대전')
end
if title_.new('media:'..hanja..'-seal.svg').exists then count = count + 1 -- 소전
root:tag('span'):cssText(spanCss):wikitext('[[파일:'..hanja..'-seal.svg|80px]]'):tag('div'):wikitext('소전')
end
if title_.new('media:U'..codepoint..'.svg').exists then count = count + 1
local file = '[[파일:U'..codepoint..'.svg|80px]]'
root:tag('span'):cssText(spanCss):wikitext(file):tag('div'):wikitext('명조')
elseif title_.new('media:Gw u'..lowerCodepoint..'.svg').exists then count = count + 1
local file = '[[파일:Gw u'..lowerCodepoint..'.svg|80px]]'
root:tag('span'):cssText(spanCss):wikitext(file):tag('div'):wikitext('명조')
elseif title_.new('file:'..hanja..'-명조.svg').exists then count = count + 1
local file = '[[파일:'..hanja..'-명조.svg|80px]]'
root:tag('span'):cssText(spanCss):wikitext(file):tag('div'):wikitext('명조')
end
local i = 1
while args[i] ~= nil and i < 13 do
root:tag('span'):cssText(spanCss):wikitext('[[파일:'..args[i]..'|80px]]'):tag('div'):wikitext(args[i + 1])
i = i + 2
count = 1
end
if count ~= 0 then
return '<h2>한자 유래/서체</h2>'..tostring(root)
end
end
 
local function strokeOrder(title, hanja, style)
local unicode = unicode(hanja)
local file, class
if title_.new('media:'..hanja..' - '..unicode..' - KanjiVG stroke order.svg').exists then
class = 'NavFrame collapsed hanja-strokeorder KanjiVG'
file = '[[파일:'..hanja..' - '..unicode..' - KanjiVG stroke order.svg|200px]]'
elseif title_.new('media:'..hanja..' - '..unicode..'- KanjiVG stroke order.svg').exists then
class = 'NavFrame collapsed hanja-strokeorder KanjiVG'
file = '[[파일:'..hanja..' - '..unicode..'- KanjiVG stroke order.svg|200px]]'
elseif title_.new('media:'..hanja..'-bw.png').exists then
class = 'NavFrame collapsed hanja-strokeorder'
file = '[[파일:'..hanja..'-bw.png]]'
elseif title_.new('media:'..hanja..'-order.gif').exists then
class = 'NavFrame collapsed hanja-strokeorder'
file = '[[파일:'..hanja..'-order.gif|100px]]'
else
return title
end
 
local root = html.create( 'div' ):addClass(class):css('border', 'none'):cssText(style)
:tag('div'):addClass('NavHead'):wikitext(title):done()
root:tag('div'):addClass('NavContent'):wikitext(file)
return root
end
 
function hanja.strokeOrder(frame)
local title = frame.args[1]
local hanja = frame.args[2]
local style = frame.args[3]
return strokeOrder(title, hanja, style)
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(name1, name2, name3, cont1, cont2, cont3)
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(name1)
libre_tab_btns:tag("div"):addClass("libre-tab-btn"):wikitext(name2)
libre_tab_btns:tag("div"):addClass("libre-tab-btn"):wikitext(name3)
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(cont1)
libre_tab_main:tag("div"):addClass("libre-tab-main-content"):node(cont2)
libre_tab_main:tag("div"):addClass("libre-tab-main-content"):node(cont3)
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["획순 파일"] or hanja["한자"], "" ))
 
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["획순 파일"] or hanja["한자"], "" ))
render:node(strokeorder)
return render
end
 
local function traditional(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", "ko"):wikitext(hanja["한자"])
 
if hanja["대만식"] ~= "" then
hanja_:node(renderVariant("대만", hanja["대만식"], "zh-tw"))
end
render:tag("tr"):node(hanja_)
 
render:node(renderTrThTd("뜻(訓)", hanja["뜻"]))
render:node(renderTrThTd("소리(音)", hanja["소리"]))
render:node(renderTrThTd("[[부수]]", '[['..hanja["부수"]..']]'))
render:node(renderTrThTd("[[유니코드]]", unicode(hanja["한자"])))
 
local bool
for k in pairs(hanja["이체자"]) do
if hanja["이체자"][k] ~= "" then
bool = 1
break
end
end
 
if bool == 1 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 hanja["이체자"][i] ~= '' then
hanja_variants:node(renderVariant(hanja["이체자 이름"][i], 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( hanja["획수"] .. "획", hanja["획순 파일"] or hanja["한자"], "" ))
render:node(strokeorder)
 
return render
end
 
function hanja.info(frame)
local args = getArgs(frame)
local fullpagename = title_.getCurrentTitle().prefixedText
local 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 ""
},
["이체자 이름"] = {
"약자", "속자", "본자", "&nbsp;",
"&nbsp;", "&nbsp;", "&nbsp;", "&nbsp;"
},
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 " "
},
simp = {
["한자"] = args["간체자"] or args["한자"] or " ",
["뜻"] = args["뜻"] or " ",
["병음"] = args["병음"] or " ",
["중고한어"] = args["중고한어"] or "",
["획수"] = args["간체자 획수"] or args["획수"] or " ",
["획순파일"] = args["간체자 획순파일"] or args["획순파일"],
["부수"] = args["간체자 부수"] or args["부수"] or " "
}
}
local css
local root
if fullpagename == '시리즈:리브레 한자사전/음으로 찾기' then
local EducatinalHanja = require('Module:한자/data').isEducatinalHanja
root = html.create('li'):addClass("hanja-info-head")
:css('display', 'block')
root:tag('span')
:addClass("hanja"..' '..EducatinalHanja(hanja["한자"]))
:wikitext('【[[시리즈:리브레 한자사전/'..hanja["한자"]..'|'..hanja["한자"]..']]】')
root:tag('span')
:addClass('mean')
:wikitext(hanja["뜻"]..'〔'..hanja["소리"]..'〕')
 
return root
else
root = html.create('div'):addClass("hanja-info-head")
css = args['css']
end
if args['모드'] == '한자' then
root:tag('span')
:addClass('hanja')
:wikitext('[['..hanja["한자"]..']]'..css)
return root
 
elseif args['모드'] == '신자체' or args[1] == '일본어' then
root:tag('span')
:addClass('hanja')
:attr('lang', 'ja')
:css('font-family', 'Noto Serif CJK KR, serif')
:wikitext('[['..hanja.jap["한자"]..']]'..css)
return root
 
elseif args['모드'] == '훈음'then
root:tag('span')
:addClass('hanja')
:wikitext('[['..hanja["한자"]..']]')
root:tag('span')
:addClass('mean')
:wikitext(' '..hanja["뜻"]..'〔'..hanja["소리"]..'〕'..css)
return root
 
elseif args['모드'] == '풀이' then
return ''
else
if ustring.find( fullpagename, '시리즈:리브레 한자사전') then
if args['상위문서x'] == nil then
root:wikitext(args['parent'])
end
if args['미분류'] == nil then
root:wikitext('[[분류:한자/문자|'..hanja["소리"]..']]')
else
root:wikitext('[[분류:한자/문자|*]]')
end
end
root:tag('span')
:addClass('hanja')
:wikitext('[['..hanja["한자"]..']]')
root:tag('span')
:addClass('mean')
:wikitext(' '..hanja["뜻"]..'〔'..hanja["소리"]..'〕__NOTOC__'..css)
end
 
if args["기본"] == "중국어" or args['기본'] == '간체자' then
return tostring(root)..tostring(renderLibreTab(
"간체자[中]",
"정자[韓/臺]",
"신자체[日]",
simplicial(hanja.simp),
traditional(hanja),
japan(hanja.jap)))
elseif args["기본"] == "일본어" or args['기본'] == '신자체' then
return tostring(root)..tostring(renderLibreTab(
"신자체[日]",
"정자[韓/臺]",
"간체자[中]",
japan(hanja.jap),
traditional(hanja),
simplicial(hanja.simp)))
else
return tostring(root)..tostring(renderLibreTab(
"정자[韓/臺]",
"신자체[日]",
"간체자[中]",
traditional(hanja),
japan(hanja.jap),
simplicial(hanja.simp)))
end
end
 
function hanja.flexlist(frame)
    local args = getArgs(frame)
    local i = 1
    local list = html.create('div'):addClass('hanja-list-flex')
   
    while args[i] do
    --local hanja = ustring.match(args[i], '%S+')
    --local name = ustring.match(args[i], '%s.+')
    local _ = html.create('div')
    _:tag('div'):wikitext(args[i])
    _:tag('div'):wikitext(args[i + 1])
        list:node(_)
        i = i + 2
    end
    return list
end
 
 
return hanja

2022년 3월 1일 (화) 19:57 기준 최신판

설명문서 [편집] [역사] [새로고침]
연습장이나 사용자 문서에서 틀의 사용이나 수정을 연습할 수 있습니다.
분류는 /설명문서에 넣어주세요.

-- 다른 모듈로의 링크를 위해 남겨놓음.