편집 요약 없음 태그: 수동 되돌리기 |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
local mw = mw | local mw = mw | ||
local ustring = mw.ustring | local ustring = mw.ustring | ||
local p = {} | local p = {} | ||
8번째 줄: | 7번째 줄: | ||
function p.tochar(code) | function p.tochar(code) | ||
return ustring.char(tonumber(code:gsub(" ", ""):gsub("[Uu][+]", "0x"), 16)) | return ustring.char(tonumber(code:gsub(" ", ""):gsub("[Uu][+]", "0x"), 16)) | ||
end | |||
------------------------- codepoint (frame) ------------------------------------------ | |||
---return 'U+ABCD' | |||
---@param frame table | |||
---@return string | |||
function p.tounicode(frame) | |||
return 'U+' .. string.format('%x', ustring.codepoint(frame.args[1])):upper() | |||
end | end | ||
------------------------- codepoint ------------------------------------------ | ------------------------- codepoint ------------------------------------------ | ||
---문자 코드를 반환합니다. | ---문자 코드를 반환합니다. | ||
---@param data table | string table : frame, string : char | ---@param data table | string table : frame, string : char | ||
18번째 줄: | 24번째 줄: | ||
---@return string | ---@return string | ||
function p.code(data, base, offset) | function p.code(data, base, offset) | ||
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리 | |||
local char | local char | ||
if type(data) == 'table' then | if type(data) == 'table' then | ||
47번째 줄: | 54번째 줄: | ||
---@return string | ---@return string | ||
function p.nextcode(data) | function p.nextcode(data) | ||
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리 | |||
local char | local char | ||
if type(data) == 'table' then | if type(data) == 'table' then | ||
65번째 줄: | 73번째 줄: | ||
---@return string | ---@return string | ||
function p.prevcode(data) | function p.prevcode(data) | ||
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리 | |||
local char | local char | ||
if type(data) == 'table' then | if type(data) == 'table' then | ||
83번째 줄: | 92번째 줄: | ||
---@return string nextchar | ---@return string nextchar | ||
function p.nextchar(data) | function p.nextchar(data) | ||
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리 | |||
local char | local char | ||
if type(data) == 'table' then | if type(data) == 'table' then | ||
101번째 줄: | 111번째 줄: | ||
---@return string prevchar | ---@return string prevchar | ||
function p.prevchar(data) | function p.prevchar(data) | ||
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리 | |||
local char | local char | ||
if type(data) == 'table' then | if type(data) == 'table' then | ||
113번째 줄: | 124번째 줄: | ||
end | end | ||
end | end | ||
---------------------- {{유니코드문자}} -------------------------- | ---------------------- {{유니코드문자}} -------------------------- | ||
---@param frame table | ---@param frame table | ||
---@return string | ---@return string | ||
function p.unicodechar(frame) | function p.unicodechar(frame) | ||
local unicodeBlock = require('Module:UnicodeBlock').unicodeBlock | |||
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리 | |||
---@type table | ---@type table | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
128번째 줄: | 140번째 줄: | ||
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 | local eng = args['영어이름'] or unicodeBlock(curr) | ||
local lang = args['lang'] or 'ko' | local lang = args['lang'] or 'ko' | ||
local prefix = args['경로'] or '' | local prefix = args['경로'] or '' | ||
206번째 줄: | 218번째 줄: | ||
end | end | ||
end | end | ||
local format = | |||
[[<td class='unicodechar-prev' style="width: 7em;font-size:1.2em;" lang="%s">%s</td> | |||
<td class='unicodechar-prev' style="width: 7em;font-size:1.2em;" lang="%s">%s</td> | |||
<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 | <td class='unicodechar-next' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>]] | ||
if args['순서반전'] then | |||
tr = ustring.format(format .. "%s", lang, prevlink, lang, curr, p.code(curr), lang, nextlink, tr) | |||
else | else | ||
tr = ustring.format( | tr = ustring.format("%s" .. format, tr, lang, prevlink, lang, curr, p.code(curr), lang, nextlink) | ||
end | end | ||
return htmlroot:node(tr) | return tostring(htmlroot:node(tr)) | ||
end | end | ||
return p | return p |
2024년 5월 11일 (토) 01:21 기준 최신판
모듈:Unicode을 이용합니다.
모듈:Unicode Basic Latin | ||
---|---|---|
Z |
[
U+5B |
\ |
{{유니코드문자|[}}
왼쪽 대괄호 Basic Latin | ||
---|---|---|
Z |
[
U+5B |
\ |
{{유니코드문자|이름=왼쪽 대괄호|[}}
아래는 가능한 모든 변수들을 나열한 것입니다.
왼쪽 대괄호 Left Square Bracket | ||
---|---|---|
Z |
[
U+5B |
역슬래시 |
local mw = mw
local ustring = mw.ustring
local p = {}
------------------------- code to char ------------------------------------------
---@param code string string: U+ABCD
function p.tochar(code)
return ustring.char(tonumber(code:gsub(" ", ""):gsub("[Uu][+]", "0x"), 16))
end
------------------------- codepoint (frame) ------------------------------------------
---return 'U+ABCD'
---@param frame table
---@return string
function p.tounicode(frame)
return 'U+' .. string.format('%x', ustring.codepoint(frame.args[1])):upper()
end
------------------------- codepoint ------------------------------------------
---문자 코드를 반환합니다.
---@param data table | string table : frame, string : char
---@param base string example) 10 : U+1234, r10 : 1234, 16(normal) : U+ABCD
---@param offset integer
---@return string
function p.code(data, base, offset)
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리
local char
if type(data) == 'table' then
char = getArgs(data)[1] or nil
else
char = data
end
if type(char) == 'number' or type(char) == 'nil' then
return '입력값이 없습니다.'
end
if offset == nil then offset = 0 end
local baseformat, head
p.codepoint = ustring.codepoint(char)
if base == '10' then
baseformat = '%d';
head = 'U+'
elseif base == 'r10' then
return p.codepoint + offset
else
baseformat = '%x';
head = 'U+'
end
return head ..ustring.upper(ustring.format(baseformat, p.codepoint + offset))
end
---------------------- next codepoint ---------------------------------------
---
---입력된 문자의 이후 문자 코드 반환
---@param data table | string table : frame, string : char
---@return string
function p.nextcode(data)
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리
local char
if type(data) == 'table' then
char = getArgs(data)[1] or nil
else
char = data or nil
end
if char then
return p.code(char, '16', 1)
else
return '입력값이 없습니다.'
end
end
---------------------- prev codepoint ---------------------------------------
---
---입력된 문자의 이전 문자 코드 반환
---@param data table | string table : frame, string : char
---@return string
function p.prevcode(data)
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리
local char
if type(data) == 'table' then
char = getArgs(data)[1] or nil
else
char = data or nil
end
if char then
return p.code(char, '16', -1)
else
return '입력값이 없습니다.'
end
end
---------------------- next char ---------------------------------------
---
---입력된 문자의 이후 문자 반환
---@param data table | string table : frame, string : char
---@return string nextchar
function p.nextchar(data)
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리
local char
if type(data) == 'table' then
char = getArgs(data)[1] or nil
else
char = data or nil
end
if char then
return ustring.char(p.code(char, 'r10', 1))
else
return '입력값이 없습니다.'
end
end
---------------------- prev char ---------------------------------------
---
---입력된 문자의 이전 문자 반환
---@param data table | string table : frame, string : char
---@return string prevchar
function p.prevchar(data)
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리
local char
if type(data) == 'table' then
char = getArgs(data)[1] or nil
else
char = data or nil
end
if char then
return ustring.char(p.code(char, 'r10', -1))
else
return '입력값이 없습니다.'
end
end
---------------------- {{유니코드문자}} --------------------------
---@param frame table
---@return string
function p.unicodechar(frame)
local unicodeBlock = require('Module:UnicodeBlock').unicodeBlock
local getArgs = require('Module:Arguments').getArgs --- frame 인수 처리
---@type table
local args = getArgs(frame)
local class
if args['class'] == 'x' then
class = ''
else
class = args['class'] or 'infobox'
end
local charname = args['이름'] or mw.title.getCurrentTitle().prefixedText
local curr = args[1] or args['기호'] or args['문자'] or nil
local eng = args['영어이름'] or unicodeBlock(curr)
local lang = args['lang'] or 'ko'
local prefix = args['경로'] or ''
local arrow = {
prev = '<i class="fas fa-chevron-left unicodechar-arrow"></i></span>',
next = '<i class="fas fa-chevron-right unicodechar-arrow"></i></span>'
}
local buildlink = require('Module:linkwithtemplate').test
local function link(pagename, linktext, arrow, template, editintro)
if template then
return buildlink({
[1] = pagename,
[2] = string.format('<div>%s<br>%s</div>', linktext, arrow),
['템플릿'] = template,
['editintro'] = editintro,
})
else
return ustring.format('[[%s|<div>%s<br>%s</div>]]', pagename, linktext, arrow or '')
end
end
local htmlroot = mw.html.create('table')
:addClass(class)
:addClass('unicodechar')
:cssText('margin: 0 auto ;max-width: ;width: ;float: right; text-align: center; clear:right')
local tr, td
if args['이름'] == '없음' then
tr = ustring.format('<tr><th colspan="3"><small>%s</small></th></tr>',eng)
else
tr = ustring.format('<tr><th colspan="3"><div>%s</div><small>%s</small></th></tr>',charname, eng)
end
local prevlink, nextlink
if curr == nil then
return '<span class="warning">기호 인수가 없습니다.</span>'
else
if curr:find("[Uu]") then
curr = p.tochar(curr)
end
local prevchar = args['이전'] or args['전문자'];
local prevlinktext = args['전문자이름'] or args['이전이름'] or prevchar
local nextchar = args['이후'] or args['후문자'];
local nextlinktext = args['후문자이름'] or args['이후이름'] or nextchar
--------------------- 이전 문자
if prevchar then
prevlink = link(prevchar, prevlinktext, arrow.prev)
--- 이전 문자 없으면 자동 계산
else
local char = ustring.char(p.code(curr, 'r10', -1))
local pagename = prefix or ''
local linktext = prevlinktext or char
if ustring.codepoint(char) > 65535 then -- 문서 이름 결정
pagename = pagename .. p.code(curr, '16', -1); -- 문자 코드로
else
pagename = pagename .. char; -- 문자로
end
prevlink = link(pagename, linktext, arrow.prev, args['템플릿'], args['editintro'])
end
------------------- 다음 문자
if nextchar then
nextlink = link(nextchar, nextlinktext, arrow.next)
--- 이전 문자 없으면 자동 계산
else
local char = ustring.char(p.code(curr, 'r10', 1))
local pagename = prefix or ''
local linktext = nextlinktext or char
if ustring.codepoint(char) > 65535 then -- 문서 이름 결정
pagename = pagename .. p.code(curr, '16', 1); -- 문자 코드로
else
pagename = pagename .. char; -- 문자로
end
nextlink = link(pagename, linktext, arrow.next, args['템플릿'], args['editintro'])
end
end
local format =
[[<td class='unicodechar-prev' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>
<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>
<td class='unicodechar-next' style="width: 7em;font-size:1.2em;" lang="%s">%s</td>]]
if args['순서반전'] then
tr = ustring.format(format .. "%s", lang, prevlink, lang, curr, p.code(curr), lang, nextlink, tr)
else
tr = ustring.format("%s" .. format, tr, lang, prevlink, lang, curr, p.code(curr), lang, nextlink)
end
return tostring(htmlroot:node(tr))
end
return p