모듈:한글조합: 두 판 사이의 차이
백괴게임>Gustmd7410 잔글편집 요약 없음 |
편집 요약 없음 |
||
(다른 사용자 한 명의 중간 판 20개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
local p = {} | local p = {} | ||
function | function p.typ(frame) | ||
local | local han = mw.loadJsonData('모듈:한글조합/변환') -- {{모듈:한글조합/변환}} | ||
local text = mw.ustring.toNFD(frame.args[1]) | |||
local key = frame.args[2] | |||
local last = mw.ustring.isutf8(text:sub(-1)) and text:sub(-1) or text:sub(-3) | |||
local left = text:sub(1, -#last - 1) | |||
local keycode = mw.ustring.codepoint(key) | |||
local | local lastcode = mw.ustring.codepoint(last, 3) or mw.ustring.codepoint(last, 2) or mw.ustring.codepoint(last, 1) | ||
local | |||
local | |||
local reallast = last ~= '' and mw.ustring.char(lastcode) | |||
-- | if (last ~= '') then | ||
if (0x3131 <= lastcode and lastcode <= 0x314E) then -- 자음 | |||
if (0x314F <= keycode and keycode <= 0x3163) then -- 모음 | |||
return left .. han.letter.cho[last] .. han.letter.jung[key] -- 초성 .. 중성 | |||
else return text .. key end | |||
elseif (0x1100 <= lastcode and lastcode <= 0x1112) then -- 초성 | |||
if (0x314F <= keycode and keycode <= 0x3163) then -- 모음 | |||
return text .. han.letter.jung[key] -- .. 중성 | |||
else return text .. key end | |||
elseif (0x1161 <= lastcode and lastcode <= 0x1175) then -- 중성 | |||
if (0x314F <= keycode and keycode <= 0x3163) then -- 모음 | |||
return left .. (han.letter.jung[reallast .. key] or last .. key) -- 중성 or 중성 .. 모음 | |||
elseif (0x3131 <= keycode and keycode <= 0x314E) then -- 자음 | |||
return text .. (han.letter.jong[key] or key) -- .. 종성 or 자음 | |||
else return text .. key end | |||
elseif (0x11A8 <= lastcode and lastcode <= 0x11C2) then -- 종성 | |||
if (0x3131 <= keycode and keycode <= 0x314E) then -- 자음 | |||
return left .. (han.letter.jong[reallast .. key] or last .. key) -- 종성 or 종성 .. 초성 | |||
elseif (0x314F <= keycode and keycode <= 0x3163) then -- 모음 | |||
return left .. han.jong.cho[reallast] .. han.letter.jung[key] -- (종성 .. 초성) .. 중성 | |||
else return text .. key end | |||
else return text .. key end | |||
else return text .. key end | |||
end | end | ||
return p | return p |
2023년 10월 29일 (일) 22:35 기준 최신판
위 설명은 모듈:한글조합/설명문서의 내용을 가져와 보여주고 있습니다. (편집 | 역사) 이 모듈에 대한 수정 연습과 시험은 연습장 (만들기 | 미러)과 시험장 (만들기)에서 할 수 있습니다. 분류는 /설명문서에 넣어주세요. 이 모듈에 딸린 문서. |
local p = {}
function p.typ(frame)
local han = mw.loadJsonData('모듈:한글조합/변환') -- {{모듈:한글조합/변환}}
local text = mw.ustring.toNFD(frame.args[1])
local key = frame.args[2]
local last = mw.ustring.isutf8(text:sub(-1)) and text:sub(-1) or text:sub(-3)
local left = text:sub(1, -#last - 1)
local keycode = mw.ustring.codepoint(key)
local lastcode = mw.ustring.codepoint(last, 3) or mw.ustring.codepoint(last, 2) or mw.ustring.codepoint(last, 1)
local reallast = last ~= '' and mw.ustring.char(lastcode)
if (last ~= '') then
if (0x3131 <= lastcode and lastcode <= 0x314E) then -- 자음
if (0x314F <= keycode and keycode <= 0x3163) then -- 모음
return left .. han.letter.cho[last] .. han.letter.jung[key] -- 초성 .. 중성
else return text .. key end
elseif (0x1100 <= lastcode and lastcode <= 0x1112) then -- 초성
if (0x314F <= keycode and keycode <= 0x3163) then -- 모음
return text .. han.letter.jung[key] -- .. 중성
else return text .. key end
elseif (0x1161 <= lastcode and lastcode <= 0x1175) then -- 중성
if (0x314F <= keycode and keycode <= 0x3163) then -- 모음
return left .. (han.letter.jung[reallast .. key] or last .. key) -- 중성 or 중성 .. 모음
elseif (0x3131 <= keycode and keycode <= 0x314E) then -- 자음
return text .. (han.letter.jong[key] or key) -- .. 종성 or 자음
else return text .. key end
elseif (0x11A8 <= lastcode and lastcode <= 0x11C2) then -- 종성
if (0x3131 <= keycode and keycode <= 0x314E) then -- 자음
return left .. (han.letter.jong[reallast .. key] or last .. key) -- 종성 or 종성 .. 초성
elseif (0x314F <= keycode and keycode <= 0x3163) then -- 모음
return left .. han.jong.cho[reallast] .. han.letter.jung[key] -- (종성 .. 초성) .. 중성
else return text .. key end
else return text .. key end
else return text .. key end
end
return p