모듈:한글조합: 두 판 사이의 차이

리버티게임, 모두가 만들어가는 자유로운 게임
백괴게임>Gustmd7410
잔글편집 요약 없음
편집 요약 없음
 
(다른 사용자 한 명의 중간 판 25개는 보이지 않습니다)
1번째 줄: 1번째 줄:
local p = {}
local p = {}


function CGI2param(params)
function p.typ(frame)
local data = {}
local han = mw.loadJsonData('모듈:한글조합/변환') -- {{모듈:한글조합/변환}}
local index = 1
for key in pairs(params) do
local text = mw.ustring.toNFD(frame.args[1])
data[index] = {set = {key, params[key]}}
local key = frame.args[2]
index = index + 1
end
return mw.text.jsonEncode(data):sub(2, -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
end
--[[function p.mer(frame)
초성 => 그대로
중성 => /한글의 테이블을 바탕으로 변환
종성 => 1. 뒤에 중성이 있다면 마지막 1개 분리
2. /한글의 테이블을 바탕으로 변환
변환한 결과를 바탕으로 16진수 변환
16진수를 다시 한글로 변환 (변환 과정에서 합쳐짐)
end]]
--[[function p.spl(frame)
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