편집 요약 없음
편집 요약 없음
113번째 줄: 113번째 줄:
end
end
end
end
p.block = require('Module:UnicodeBlock').unicodeBlock
p.unicodeBlock = require('Module:UnicodeBlock').unicodeBlock
----------------------  {{유니코드문자}}  --------------------------
----------------------  {{유니코드문자}}  --------------------------
---@param frame table
---@param frame table
119번째 줄: 119번째 줄:
function p.unicodechar(frame)
function p.unicodechar(frame)
---@type table
---@type table
---@
local args = getArgs(frame)
local args = getArgs(frame)
local class
local class
if args['class'] == 'x' then
if args['class'] == 'x' then
class = ''
class = ''
elseif args['class'] == nil then
class = 'infobox'
else
else
class = args['class']
class = args['class'] or 'infobox'
end
end
local charname = args['이름'] or mw.title.getCurrentTitle().prefixedText
local charname = args['이름'] or mw.title.getCurrentTitle().prefixedText
local curr = args[1] or args['기호'] or args['문자'] or nil
local curr = args[1] or args['기호'] or args['문자'] or nil
local eng = args['영어이름'] or p.block(curr)
local eng = args['영어이름'] or p.unicodeBlock(curr)
local lang = args['lang'] or 'ko'
local lang = args['lang'] or 'ko'
local prefix = args['경로'] or ''
local prefix = args['경로'] or ''
local arrowPrev = '<i class="fas fa-chevron-left unicodechar-arrow"></i></span>'
local arrow = {
local arrowNext = '<i class="fas fa-chevron-right unicodechar-arrow"></i></span>'
        prev = '<i class="fas fa-chevron-left unicodechar-arrow"></i></span>',
        next = '<i class="fas fa-chevron-right unicodechar-arrow"></i></span>'
    }
local link
    local buildlink = require('Module:linkwithtemplate').test
if args['템플릿'] then
local function link(pagename, linktext, arrow, template, editintro)
local buildlink = require('Module:linkwithtemplate').test
        if template then
link = function(doc, linkname, template, editintro, arrow)
            return buildlink({
return buildlink({
                [1] = pagename,
['템플릿'] = template,
                [2] = string.format('<div>%s<br>%s</div>', linktext, arrow),
['editintro'] = editintro,
                ['템플릿'] = template,
[1] = doc,
                ['editintro'] = editintro,
[2] = string.format('<div>%s<br>%s</div>', linkname, arrow)
            })
})
        else
end
            return ustring.format('[[%s|<div>%s<br>%s</div>]]', pagename, linktext, arrow or '')
end
        end
    end


local htmlroot = mw.html.create('table')
local htmlroot = mw.html.create('table')
162번째 줄: 162번째 줄:
end
end
local prev, next
local prevlink, nextlink
if curr == nil then
if curr == nil then
return
return '<span class="warning">기호(문자)를 입력하지 않았습니다. |문자 = (문자)</span>'
'<span class="warning">기호(문자)를 입력하지 않았습니다. |문자 = (문자)</span>'
    else
end
        if curr:find("[Uu]") then
if curr:find("[Uu]") then
            curr = p.tochar(curr)
curr = p.tochar(curr)
        end
end
local prevchar = args['이전'] or args['전문자'];
if curr then
        local prevlinktext = args['전문자이름'] or args['이전이름'] or prevchar
function internalLink( pagename, text, arrow)
local nextchar = args['이후'] or args['후문자'];
arrow = arrow or ''
        local nextlinktext = args['후문자이름'] or args['이후이름'] or nextchar
return ustring.format('[[%s|<div>%s<br>%s</div>]]', pagename, text, arrow)
        --------------------- 이전 문자
end
if prevchar then
local prev_ = args['이전'] or args['전문자'] or nil;
prevlink = link(prevchar, prevlinktext, arrow.prev)
local next_ = args['이후'] or args['후문자'] or nil;
        --- 이전 문자 없으면 자동 계산
if prev_ then
local prevname = args['전문자이름'] or args['이전이름'] or prev_
prev = internalLink(prev_, prevname, arrowPrev)
else
else
local prevchar = ustring.char(p.code(curr, 'r10', -1))
local char = ustring.char(p.code(curr, 'r10', -1))
local page, linkname
local pagename = prefix or ''
if ustring.codepoint(prevchar) > 65535 then
            local linktext = prevlinktext or char
local prevcode = p.code(curr, '16', -1)
 
page = prevcode; linkname = prevchar
if ustring.codepoint(char) > 65535 then -- 문서 이름 결정
pagename = p.code(curr, '16', -1) .. pagename; -- 문자 코드로
else
else
page = prevchar; linkname = prevchar
pagename = char .. pagename; -- 문자로
end
end
if args['템플릿'] then
if args['템플릿'] and not mw.title.new(pagename).exists then -- 템플릿 있고 페이지 없음
if mw.title.new(page).exists then
prevlink = link(pagename, linktext, arrow.prev, args['템플릿'], args['editintro'])
prev = internalLink( page, linkname, arrowPrev)
else
prev = link(prefix .. page, linkname, args['템플릿'],args['editintro'], arrowPrev)
end
else
else
prev = internalLink( page, linkname, arrowPrev)
prevlink = link(pagename, linktext, arrow.prev)
end
end
end
end
if next_ then
        ------------------- 다음 문자
local nextname = args['후문자이름'] or args['이후이름'] or next_
if nextchar then
next = internalLink( next_, nextname, arrowNext)
nextlink = link(nextchar, nextlinktext, arrow.next)
        --- 이전 문자 없으면 자동 계산
else
else
local nextchar = ustring.char(p.code(curr, 'r10', 1))
local char = ustring.char(p.code(curr, 'r10', 1))
local page, linkname
local pagename = prefix or ''
if ustring.codepoint(nextchar) > 65535 then
            local linktext = nextlinktext or char
local nextcode = p.code(curr, '16', 1)
           
page = nextcode; linkname = nextchar
if ustring.codepoint(char) > 65535 then
local nextcode = p.code(curr, '16', 1); pagename = nextcode;
else
else
page = nextchar; linkname = nextchar
pagename = char;
end
end
if args['템플릿'] then
if args['템플릿'] and not mw.title.new(pagename).exists then
if mw.title.new(page).exists then
nextlink = link(pagename, linktext, arrow.next, args['템플릿'], args['editintro'])
next = internalLink( page, linkname, arrowNext)
else
next = link(prefix .. page, linkname, args['템플릿'],args['editintro'], arrowNext)
end
else
else
next = internalLink( page, linkname, arrowNext)
nextlink = link(pagename, linktext, arrow.next)
end
end
end
end
227번째 줄: 219번째 줄:
<td class='unicodechar-char' style="width: 6em"><div style="font-size: 1.8em;line-height: 1.4em;"><b lang="%s">%s</b></div>
<td class='unicodechar-char' style="width: 6em"><div style="font-size: 1.8em;line-height: 1.4em;"><b lang="%s">%s</b></div>
<div style="font-size:80%%; color: gray; ">%s</div></td>
<div style="font-size:80%%; color: gray; ">%s</div></td>
<td class='unicodechar-next' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>%s]], lang, prev, lang, curr, p.code(curr), lang, next, tr)
<td class='unicodechar-next' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>%s]], lang, prevlink, lang, curr, p.code(curr), lang, nextlink, tr)
else
else
tr = ustring.format([[%s
tr = ustring.format([[%s
233번째 줄: 225번째 줄:
<td class='unicodechar-char' style="width: 6em"><div style="font-size: 1.8em;line-height: 1.4em;"><b lang="%s">%s</b></div>
<td class='unicodechar-char' style="width: 6em"><div style="font-size: 1.8em;line-height: 1.4em;"><b lang="%s">%s</b></div>
<div style="font-size:80%%; color: gray; ">%s</div></td>
<div style="font-size:80%%; color: gray; ">%s</div></td>
<td class='unicodechar-next' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>]], tr, lang, prev, lang, curr, p.code(curr), lang, next)
<td class='unicodechar-next' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>]], tr, lang, prevlink, lang, curr, p.code(curr), lang, nextlink)
end
end
return htmlroot:node(tr)
return htmlroot:node(tr)