[온라인 한글 입력기] 새로 넣은 갈마들이 세벌식 자판 기능들 (+ 참신세벌식 자판)
(1) 첫가끝 갈마들이 처리 함수를 정리하고 통합함
다음은 첫가끝 갈마들이를 쓰는 세벌식 자판들의 종류와 간략한 특징들이다.
- 신세벌식 자판 (배열 방식에 따라)
- 본디꼴 신세벌식 자판 : 1995년 신세벌식 자판 원안의 배열 방식을 따름
- 바꾼꼴 신세벌식 자판 : 원안에서 홀소리/받침 자리가 맞바꾼 배열 방식
- 참신세벌식 자판 : 홀소리가 자리가 바꾼꼴 신세벌식 자판과 같고, 기본 배열에 받침 자리가 따로 없음
- 갈마들이 공세벌식 자판 : 홀소리/받침 자리가 맞바뀐 것이 바꾼꼴 신세벌식 자판 비슷함
첫가끝 갈마들이 처리는 어느 갈마들이 세벌식 자판에서나 근본 원리가 다르지 않고, 공통으로 적용할 수 있는 처리 과정이 많다. 배열 방식이 달라서 생기는 예외 처리가 더 필요할 뿐이다. 하지만 그 동안 온라인 한글 입력기에서는 신세벌식 자판과 갈마들이 공세벌식 자판의 갈마들이 처리를 서로 다른 전처리 함수에서 따로 하였다. 신세벌식 자판 쪽에 있는 기능이 갈마들이 공세벌식 자판에서도 필요하면 따로 넣곤 하였다. 이 때문에 전처리 함수의 내용과 처리 과정이 자꾸 길어지고 난잡해져서 유지/관리에 애를 먹고 있었다. 기능 하나를 더 넣으면 다른 기능이 잘 되지 않는 일을 자꾸 겪었고, 어느 기능이 어디에서 어떻게 잘못 작동하는지를 알아내기도 수월하지 않았다.
1995년에 신광조 님이 제안한 원안 신세벌식 자판의 배열 방식은 가장 적은 입력 규칙을 써서 가장 넓은 폭으로 한글을 나타낼 수 있는 틀이다. 그래서 원조 신세벌식 자판을 기준으로 하는 전처리 함수를 갈마들이 세벌식 자판들이 공통으로 거치는 전처리 함수로 삼아 통합하였고, 특정 계열 갈마들이 자판이 원조 신세벌식 자판과 배열 방식이 다른 것에서 생기는 예외를 또 다른 전처리 함수에서 먼저 다루게 하였다.
배열 정보에서 특정 계열 갈마들이 자판 예외 처리 → 갈마들이 자판 공통 전처리 (원안 신세벌식 기준) → 세벌식 자판 공통 처리
공통 전처리 함수를 거치기 앞서 배열 방식이 다른 갈마들이 세벌식 자판의 같은 글쇠에 들어간 낱자들의 자리를 때에 맞게 맞바꾸고 공통 전처리 함수를 거치는 흐름이다.
이 방법을 홀소리/받침 자리가 맞바뀐 신세벌식 자판에서 쓰고 있었는데, 갈마들이 공세벌식 자판에까지 이 방법을 쓰는 범위를 넓혔다.
(2) 조합용 홀소리를 지정하기 위한 배열 정보 형식
같은 글쇠에서 한글 낱자가 윗글 자리와 아랫글 자리에 하나씩 들어간 것은 갈마들이 세벌식 자판들에서 흔히 볼 수 있는 모습니다. 하지만 구석구석 살피면 다른 모습도 볼 수 있다.
신세벌식 자판에는 쿼티 자판의 빗금(/) 자리에 첫소리 ㅋ과 조합용 ㅗ가 함께 들어가곤 한다. 빗금(/) 자리는 아랫글 자리인데, 아랫글 자리에 한글 낱자가 하나가 아니라 두 개가 들어간다. 원안 신세벌식 자판에는 아랫글 자리에 한글 낱자가 2개 들어간 경우가 빗금 자리에만 있으므로, 이 모습을 규칙이 아닌 예외로 볼 수도 있다.
그런데 자판 배열을 만들 때에는 갈마들이 유형를 다양하게 활용하고 싶을 때가 있다. 빗금 자리에 ㅗ가 아닌 다른 조합용 홀소리를 넣고 싶을 수도 있고, 빗금 자리와 같은 갈마들이를 다른 글쇠 자리에서 하고 싶을 수도 있다.
딱 어느 글쇠 자리에서만 일어나는 갈마들이 예외 처리는 프로그램 내부에 조건문을 달아서 할 수 있지만, 글쇠 자리와 넣으려는 한글 낱자를 마음대로 바꿀 필요가 있다면 배열 정보를 달리 넣는 방법으로 갈마들이 유형을 바꾸는 것이 바람직하다.
지난날의 온라인 한글 입력기에 첫소리 ㅋ 자리에 들어가는 배열 정보 형식을 간략하게 나타내면 이런 꼴이었다.
K3_Sin3_???_layout = [
…
0x110F, /* 0x2F slash: choseong kieuk */
…
];
쿼티 자판의 빗금(/) 자리에 첫소리 ㅋ만을 넣고, 프로그램 내부 코드에 조건문을 달아서 때에 따라 이 자리에서 조합용 ㅗ를 넣게 하는 방식이었다.
프로그램 내부 코드에 조건문과 관계 없이 배열 정보에 따라 조합용 홀소리를 넣을 수 있게 하려고 썼던 배열 정보 형식은 다음과 같다.
K3_Sin3_???_layout = [
…
0x110F, /* 0x2F slash: choseong kieuk */
…
];
K3_Sin3_??_sublayout = [
…
0x1169, /* 0x2F slash: jungseong o */
…
];
본래 자판 배열에 보조 배열(sublayou) 정보를 덧붙여서 조합용 홀소리 ㅗ를 넣게 하려는 표현 형식이다. 그런데 본래 배열과 보조 배열을 지정하는 이 표현 형식을 쓰면, 배열 정보가 위/아래로 2배 길어져서 본 배열과 보조 배열을 견주면서 고치기가 어렵다. 그래서 본래 배열과 보조 배열을 함께 나타내는 다음 형식도 쓸 수 있게 하였다.
K3_Sin3_???_layout = [
…
[0x110F, 0x1169], /* 0x2F slash: choseong kieuk, jungseong o */
…
];
현재 온라인 한글 입력기에서 첫소리와 같은 글쇠 자리에 있는 홀소리가 조합용 홀소리로 구실하게 하려면, 기본 배열이 아니라 보조 배열에 넣어야 한다. 기본 배열의 윗글 자리에만 넣으면 윗글쇠를 누르고 넣을 수 있을 뿐이다.
1995년의 원안 신세벌식 자판의 쿼티 기준 o 자리에 들어간 글쇠 배열 정보는 다음과 같다.
K3_Sin3_1995_layout = [
…
[0x116E,0x0000], /* 0x4F O: jungseong u */
…
[0x110E,0x116E], /* 0x6F o: choseong chieuch, jungseong u */
…
];
여기에서 0x4F 자리의 기본 배열에 들어간 ㅜ(0x116E)는 윗글쇠를 눌러서 들어가는 문자 정보를 나타낼 뿐이다. ㅜ가 조합용 홀소리로서 첫소리/가운뎃소리 갈마들이로 들어가게 하는 근거는 0x6F에 들어간 ㅜ(0x116E)에 있다.
(3) 참신세벌식 자판 지원
참신세벌식 자판은 소유 님이 개발한 신세벌식 자판의 바꾼꼴(변형) 또는 응용판으로 보는 것이 옳을 것 같은데, 다른 신세벌식 자판과 다른 한글 낱자 배열 방식 때문인지 현재 나무위키에는 신세벌식 자판과 다른 계열로 분류되어 있다.
온라인 한글 입력기에서 참신세벌식 자판을 더 일찍 넣지 못하고 지난달에야 넣은 까닭은 크게 세 가지이다.
첫째는 참신세벌식 자판의 낱자 배열이 다른 신세벌식 자판들과 많이 다르고, 예외로 볼 수 있는 낱자 조합 규칙들이 적지 않으면서 자꾸 바뀌었기 때문이다. 참신세벌식 자판의 배열 정보와 낱자 조합 규칙 정보는 제안된 글에서 얻거나 날개셋을 통해서 뽑아야 하는데, 이를 눈으로 보면서 옮기고 잘 들어갔는지 확인하는 시간이 많이 걸렸다. 한 번은 자판 배열 정보와 낱자 조합 규칙을 날개셋 파일에서 보고 옮겨 넣는 작업을 드문드문 이틀에 걸쳐 했는데, 파일로 저장하지 않고 있다가 실수로 창을 닫는 바람에 싹 날린 적이 있었다.
두째는 참신세벌식 자판에는 첫소리 ㅉ처럼 반드시 조합해서 넣을 수밖에 없는 요즘한글 낱자가 있고, 따로 넣지 못하는 낱자들(주로 받침)이 있다. 여기에 글쓴이가 거부감을 느끼고 서둘러 지원할 마음을 품지 않은 탓이 있다.
세째로 온라인 한글 입력기가 참신세벌식 자판을 받아들이기 좋게 내부 정리가 되어 있지 않았기 때문이다. 마음만 먹는다면 오직 참신세벌식 자판만을 바라보고 프로그램을 구현할 수는 있었다. 하지만 그랬다가는 본래 난잡했던 온라인 한글 입력기의 내부 코드가 더 어지러워질 수 있었고, 다른 갈마들이 세벌식 자판을 다루는 일까지 늪에 빠져 허우적거리게 될 위험이 컸다. 앞에서 이야기한 대로 온라인 한글 입력기의 첫가끝 갈마들이 처리 흐름을 개선하고 배열 정보 표현 형식을 가다듬고 나서야 비로소 참신세벌식 자판을 안정감 있게 다룰 수 있는 틀을 갖추었다.
- [온라인 한글 입력기] 참신세벌식 자판 - http://ohi.pat.im/?ko=sin3-cham
참신세벌식 자판의 아래아(ㆍ)는 첫소리 ㄴ의 윗글 자리에 있는데, 이 아래아(ㆍ)는 갈마들이로 넣지 않는다. 다른 신세벌식 자판에서는 볼 수 없던 모습이다. 앞에서 본 것처럼 보조 배열에 지정해야 조합용 홀소리가 갈마들이로 들어가게 한 방법으로 참신세벌식 자판에서 아래아(ㆍ) 넣기를 구현할 수 있다.
다른 신세벌식 자판들은 왼손 쪽 글쇠들에서 홀소리와 받침이 윗글 자리와 아랫글 자리를 나누어 차지하고, 아랫글 자리에서 홀소리와 받침을 갈마들이로 넣는다. 참신세벌식 자판도 왼손 쪽 글쇠들의 아랫글 자리에서 홀소리와 받침을 갈마들이로 넣지만, 윗글 자리에는 한글 낱자가 아니라 기호가 있는 것이 다르다. 온라인 한글 입력기에서는 프로그램 내부에서 참신세벌식 자판의 같은 글쇠에 있는 홀소리와 받침의 자리를 본디꼴 신세벌식 자판처럼 바꾸는 처리를 거치고 나서 세세한 갈마들이 처리가 공통 전처리 함수에서 이루어진다.
(4) 주저리
아직도 온라인 한글 입력기는 내부 코드를 다듬을 일들이 많이 남아 있다. 그 가운데 하나가 완성형 방식과 첫가끝 방식으로 나뉜 한글 조합 처리 방식을 합치는 일인데, 당장은 절실하지 않아서 통합 작업을 미루고 있다.
이 글에 담은 온라인 한글 입력기의 개선 사항은 3-D1 자판의 부가 기능을 구현하는 과정에서 필요를 느끼고 작업을 시작했다. 신세벌식 자판에서 잘 쓰던 기능을 갈마들이 공세벌식 자판에서 쓰려고 하니 프로그램 코드를 복사해 붙이는 일이 거듭되므로 어떤 식으로든 개편할 필요를 느꼈다. 그 결과로 한때는 쉽사리 구현할 수 없을 것 같았던 참신세벌식 자판까지 구현할 수 있었다.
갈마들이 세벌식 자판은 기본적으로 챙겨야 할 갈마들이 규칙들이 많은데, 여기에 더하여 변칙이나 예외 사항을 더 챙겨야 하는 것은 괴로운 일이다. 예외 사항을 한눈에 파악할 수 있게 잘 정리된 표가 있거나 날개셋 파일 같은 자료가 있으면 입력기로 구현하는 일에 도움이 될 수 있다. 라이브러리 성격을 띠는 프로그램 코드가 공개되어 있으면 더욱 좋은데, 어설프게나마 이 구실을 하는 것이 지금의 온라인 한글 입력기를 공개하는 목적 가운데 하나이다.
자판 배열과 조합 규칙을 만들고 꾸리는 사람에게도 어려움이 있다. 갈마들이 세벌식 자판은 첫가끝 갈마들이 때문에 한글 낱자들의 자리를 바꿀 수 있는 폭이 좁다. 이 때문에 개선하고 싶은 점이 뚜렷이 보여도 해결책이 쉽사리 나오지 않을 수 있다. 이미 나와 있는 한글 자판들과의 경쟁에서 밀리지 않는 수준을 바란다면, 만족스러운 자판 배열과 조합 규칙이 연구와 실험을 오래 거치지 않고 한 번에 뚝딱 나오는 것은 그야말로 기적이다.
온라인 한글 입력기가 자판 배열을 실험/시연하는 도구로 쓰고 더 나아가 분석 기능을 더 넣고 발전시키는 것도 생각할 수 있는데, 분석 기능을 넣는 일은 아직 생각에만 그치고 있다.
덧글을 달아 주세요