로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!local p = {} local mw = mw local html = mw.html local title_ = mw.title local ustring = mw.ustring ---return 'U+ABCD' ---@param str string ---@return string local function tounicode(str) return 'U+' .. string.format('%x', ustring.codepoint(str)):upper() end --------------------------------------------------------------------------------------------------------- function p.main(frame) return p:main_(frame) end function p:main_(frame) local args = require('Module:Arguments').getArgs(frame) local header = { mean_sound = {} } header.mean_sound.html = html.create('p'):addClass('hanja-info-header hanja-mean-sound') function header.mean_sound:tostring() return tostring(self.html) end header.projectlink = "" local lang = args[1] -- 1번 변수에 값이 있을 때 우선 처리 ------------------------------------------------------------- if lang == '한자만' then return header.mean_sound.html:addClass('onlyhanja') :tag('span'):addClass('hanja') :wikitext('[[', args['한자'], ']]'):done() elseif lang == '신자체 글자만' or lang == '일본어 글자만' then return header.mean_sound.html:addClass('onlyhanja') :tag('span'):addClass('hanja') :wikitext(frame:preprocess { text = '{{일본어=|[[' .. (args['신자체'] or args['한자'] or '') .. ']]}}' }):done() end --------------------------------------------------------------------------------------------------------- ---------- 수행 local hanja = { char = args['한자'] or '', -- codepoint 65535를 넘어가는지 체크할 변수, unicode의 예 U+10000 codepoint = ustring.codepoint(args['한자']), unicode = tounicode(args['한자']), mean = args['뜻'] or '', sound = args['소리'] or '-', mean_sound = args['뜻 소리'], rating = args['급수'] or args['어문회급수'] } --------------------------------------------------------------------------------------------------------- ---------- 분류 정렬키 조작 local currentPage = mw.text.split(title_.getCurrentTitle().prefixedText, '/') local pageName = { currentPage[1], currentPage[2] or '' } local inProject = false if pageName[1] == '시리즈:리브레 한자사전' and (hanja.char == pageName[2] or hanja.unicode == pageName[2]) then inProject = true end function header.mean_sound:Build() self.html:wikitext('<span class="hanja">[[', hanja.char, ']]</span> ') if lang == "간체자만" or lang == "중국어만" then self.html:wikitext('<span class="mean"> ', hanja.inChina.pinyin or '', '</span>') else self.html:node(hanja.mean_sound) end if inProject then -- 이름공간 식별 self.html:addClass('is-hanja-dict') self.html:wikitext("[[분류:", hanja.char, "| ]][[분류:한자/문자]]") if args['부수'] then self.html:wikitext("[[분류:", args['부수'], "|", (args['부수'] == pageName[2]) and ' ' or '-', ']]') end -- 기본 정렬키 = 미분류거나 소리없음 ? 한/한자 : '-' if hanja.sound == '-' or args['미분류'] then self.html:wikitext(frame:preprocess("{{DEFAULTSORT:" .. string.gsub(hanja.sound .. hanja.char, ' ', '') .. "}}")) else self.html:wikitext(frame:preprocess("{{DEFAULTSORT:-}}")) end if hanja.rating then self.html:wikitext('[[분류:', hanja.rating, ' 한자]]') end end end header.mean_sound:Build() if inProject then if hanja.rating then hanja.rating = (hanja.rating:find("급") == nil) and hanja.rating .. "급" or hanja.rating end if not args['상위문서x'] then header.projectlink = require('Module:한자 정보/구현').projectlink:tostring() end end local wikitable = require('Module:표') local strokeOrder = require('Module:한자/획순').strokeOrder_ local unicodeBox = require('Module:한자 정보/구현').unicodeBox local new = function(char, strokes, strokeOrderFile, radical) local self = { char = nil, strokes = nil, radical = nil, strokeOrderFile = nil, content = '', title = '' } self.char = char; self.strokes = strokes; self.strokeOrderFile = strokeOrderFile; self.radical = radical ---@param key string ---@param value any function self:setKeyValue(key, value) self[key] = value end return self end hanja.inKorea = new( args['한자'] or '', args['획수'] or '', args['획순파일'] or 'norm', args['부수'] or '') hanja.inChina = new( args['간체자'] or hanja.char, args['간체자 획수'] or hanja.inKorea.strokes, args['간체자획순파일'], args['간체자 부수'] or hanja.inKorea.radical) hanja.inChina:setKeyValue('pinyin', args['병음']) hanja.inJapan = new( args['신자체'] or hanja.char, args['신자체 획수'] or hanja.inKorea.strokes, args['신자체획순파일'], args['신자체 부수'] or hanja.inKorea.radical) function hanja.inChina:makeHTML() wikitable:setClass("hanja-info-table") :appendTd(unicodeBox(self.char, 'zh-cn')) :appendTd(string.format('[[%s]]부 %s획', self.radical, self.strokes), 'unicodechar-sub') :appendThTd('뜻과 소리', hanja.mean_sound, 'mean_sound') :appendThTd('병음', self.pinyin) :appendTd(strokeOrder("쓰는 순서", self.char, self.strokeOrderFile)) self.title = '중국어[中]' self.content = wikitable:ret() wikitable:clear() end function hanja.inJapan:makeHTML() wikitable:setClass("hanja-info-table") :appendTd(unicodeBox(self.char, 'ja')) :appendTd(string.format('[[%s]]부 %s획', self.radical, self.strokes), 'unicodechar-sub') :appendThTd('뜻과 소리', hanja.mean_sound, 'mean_sound') :appendThTd('훈독(<span lang="ja">訓</span>読)', args['훈독']) if args['오음'] or args['한음'] or args['당음'] or args['관용음'] then wikitable:appendTh('음독(<span lang="ja">音読</span>)') :appendThTd('오음(<span lang="ja">呉音</span>)', args['오음']) :appendThTd('한음(<span lang="ja">漢音</span>)', args['한음']) :appendThTd('당음(<span lang="ja">唐音)', args['당음']) :appendThTd('관용음', args['관용음']) else wikitable:appendThTd('음독(<span lang="ja">音読</span>)', args['음독']) end wikitable:appendTd(strokeOrder("쓰는 순서", self.char, self.strokeOrderFile)) self.content = wikitable:ret() self.title = '일본어[日]' wikitable:clear() end function hanja.inKorea:makeHTML() local hanja_variants = html.create('span'):addClass('variants') local hasAlter = false local function renderVariant(caption, hanja_, langcode) if hanja_ then return html.create('span'):addClass('variant') :tag('span'):cssText('font-size: 11px; line-height: 1em;'):wikitext(caption):done() :tag('span'):attr('lang', langcode):wikitext(hanja_):done() else return '' end end hanja.inTaiwan = args['정체자'] or args['대만식'] if hanja.inTaiwan then hanja_variants:node(renderVariant('대만', hanja.inTaiwan, 'zh-tw')) hasAlter = true end local alterForm = { { args['약자'], '약자' }, { args['속자'], '속자' }, { args['본자'], '본자' }, { args['고자'], '고자' }, { args['이체자'], ' ' } } for _, elem in pairs(alterForm) do if elem[1] then hasAlter = true hanja_variants:node(renderVariant(elem[2], elem[1], 'ko')) end end if hasAlter == false then hanja_variants = nil end wikitable:setClass("hanja-info-table") :appendTd(unicodeBox(self.char, 'ko')) :appendTd(string.format('[[%s]]부 %s획', self.radical, self.strokes), 'unicodechar-sub') :appendThTd('뜻과 소리', hanja.mean_sound, 'mean_sound') :appendThTd('[[중고한어]]', args['중고한어']) :appendThTd('[[동국정운]]', args['동국정운'], 'jamocomposed_block') :appendThTd('[[훈몽자회]]', args['훈몽자회'], 'jamocomposed_block') if hanja.rating then wikitable:appendThTd('[[어문회|어문회 급수]]', string.format('[[%s 한자|%s]]', hanja.rating, hanja.rating)) end wikitable:appendThTd('이체자', hanja_variants) :appendTd(strokeOrder("쓰는 순서", self.char, self.strokeOrderFile)) self.title = '정자[韓/臺]' self.content = wikitable:ret() wikitable:clear() end --------------------------------------------------------------------------------------------------------- ---------- 렌더링 do local outerbox = { source = [[ <div class="libre hanja-info" style=" 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; background:rgb(255, 255, 255, 17%%);">%s</div>]] } function outerbox:make(text) return ustring.format(self.source, text) end local Taboxes = { source = [[ <div class="libre-tab"> <div class="libre-tab-btns"> <div class="libre-tab-btn libre-tab-btn-active">%s</div> <div class="libre-tab-btn">%s</div> <div class="libre-tab-btn">%s</div> </div> <div class="libre-tab-main"> <div class="libre-tab-main-content libre-tab-main-content-active">%s</div> <div class="libre-tab-main-content">%s</div> <div class="libre-tab-main-content">%s</div> </div> </div>]], } function Taboxes:make(...) return ustring.format(self.source, ...) end local hanja_info if lang == nil then hanja.inJapan:makeHTML() hanja.inChina:makeHTML() hanja.inKorea:makeHTML() hanja_info = outerbox:make( Taboxes:make(hanja.inKorea.title, hanja.inJapan.title, hanja.inChina.title, hanja.inKorea.content, hanja.inJapan.content, hanja.inChina.content)) elseif lang == '중국어' or lang == '간체자' then hanja.inJapan:makeHTML() hanja.inChina:makeHTML() hanja.inKorea:makeHTML() hanja_info = outerbox:make( Taboxes:make(hanja.inKorea.title, hanja.inJapan.title, hanja.inChina.title, hanja.inKorea.content, hanja.inJapan.content, hanja.inChina.content)) elseif lang == "간체자만" or lang == "중국어만" then hanja.codepoint = ustring.codepoint(args['간체자']) hanja.unicode = tounicode(args['간체자']) hanja.inChina:makeHTML() hanja_info = outerbox:make(hanja.inChina.content) elseif lang == '일본어' or lang == '신자체' then hanja.inJapan:makeHTML() hanja.inChina:makeHTML() hanja.inKorea:makeHTML() hanja_info = outerbox:make( Taboxes:make(hanja.inKorea.title, hanja.inJapan.title, hanja.inChina.title, hanja.inKorea.content, hanja.inJapan.content, hanja.inChina.content)) elseif lang == '일본어만' or lang == '신자체만' then hanja.codepoint = ustring.codepoint(args['신자체']) hanja.unicode = tounicode(args['신자체']) hanja.inJapan:makeHTML() hanja_info = outerbox:make(hanja.inJapan.content) end return table.concat({ header.projectlink, hanja_info, header.mean_sound:tostring(), frame:preprocess([[<templatestyles src='틀:한자 정보/styles.css'/>]]) }) end end return p 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 漢 (편집) 틀:Linkwithtemplate (편집) 틀:새로고침 (원본 보기) (준보호됨)틀:설명문서 (원본 보기) (준보호됨)틀:탭 (원본 보기) (준보호됨)틀:탭/styles.css (편집) 틀:하위문서 목록 (편집) 틀:하위문서 목록/styles.css (편집) 틀:한자 정보 (편집) 틀:한자 정보/styles.css (편집) 틀:한자 정보/일본어 (편집) 틀:한자 정보/중국어 (편집) 틀:한자 정보/한국어 (편집) 틀:한자 정보/훈음 (편집) 모듈:Unicode (편집) 모듈:UnicodeBlock (편집) 모듈:한자 정보/설명문서 (편집) 시리즈:리브레 한자사전/漢 (편집) 이 문서는 다음의 숨은 분류 1개에 속해 있습니다: 분류:깨진 파일 링크가 포함된 문서