|
|
(사용자 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 ""
| |
| },
| |
| ["이체자 이름"] = {
| |
| "약자", "속자", "본자", " ",
| |
| " ", " ", " ", " "
| |
| },
| |
| 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
| |