2014년의 끝을 앞두고 <날개셋> 한글 입력기가 새 버전이 나왔다.
그 어느 때보다도 다방면에서 리팩터링, 기능 추가, 버그 수정이 진행되어 프로그램의 완성도가 더욱 향상되었다. 이 글은 지난달에 썼던 GUI 개선 사항에다 또 덧붙여진 주요 변화 사항에 대한 설명이다.
※ 한글 입력 관련
1. 일부 특수글쇠의 '두벌식 종성' 지원 강화
'도깨비불', 그리고 '초· 종성 교환' 특수글쇠가 두벌식 종성까지 감안해서 동작하게 했다.
전자의 경우, 두벌식 종성 글쇠로 '않' 같은 글자를 입력하고 있었다면 '안ㅎ'에서 ㅎ이 초성이 아닌 종성 형태로 분리되어 나온다. 또한 지금까지 이 글쇠는 종성이 단독으로만 있을 때는 동작하지 않았지만, 이제는 종성 단독이더라도 ㄶ 자음끼리 분리가 가능할 때는 동작하게 알고리즘을 개선했다.
후자의 경우를 설명하자면 이렇다. '강'이라는 글자를 '악'이라고 바꿔 주는데, 애초에 글자를 두벌식 종성으로 입력하고 있었다면 이때에도 '악'을 지울 때 ㅇ은 비록 지금은 초성 모양이지만 처음에 종성으로 입력한 것처럼 재현을 해 준다. 이런 변칙적인 상황에 대한 배려를 추가했다. 두벌식은 역시 세벌식보다 근본적으로 처리가 복잡한 방식임을 알 수 있다.
2. 외부 모듈에서 글쇠를 인식하는 알고리즘 개선
사용자에게는 예전 것이나 지금 것이나 큰 차이가 안 느껴지겠지만, 이번 버전에서는 외부 모듈도 글쇠를 인식하는 뼈대 부분을 다시 구현했다.
이 과정에서 외부 모듈에서는 구조적으로 Alt 조합의 인식이 지원되지 않는다는 것을 UI 차원에서 확실하게 표시하게 했다. 외부 모듈에서 단축글쇠 추가/편집 대화상자를 꺼내면 Alt에 해당하는 슬라이더가 사용 불가능 상태가 된다.
또한 우리 프로그램이 가로채지 않는 글쇠는 조합이 있는 중에도 확실하게 가로채지 않게 동작을 개선했다. 예를 들어 space 같은 글쇠는 예전까지는 한글을 조합 중일 때 누르면 우리 프로그램이 언제나 가로채지만 다음 버전부터는 그걸 가로채지 않고도 모든 구현체에서 조합 종료 처리도 매끄럽게 된다.
3. 초-종성 공유 방식의 종성 결합에 대해 가상 낱자와 낱자 치환 규칙 자동 적용
글쇠 수가 매우 적은 휴대전화 입력 방식에서는 어지간한 거센소리나 된소리 계열 자모도 2타 이상의 합성으로 만들곤 한다. 그렇기 때문에 조합 과정에서 ㄴ+ㅇ, ㄱ+ㅆ처럼 현실에서 존재하지 않는 낱자를 특히 종성에다 임시로 풀어서 표현해야 하는 일이 생긴다.
앞부분을 표현하기 위해서는 기존 가상 낱자를 쓰면 되고, 현재 글자의 경계를 넘어가는 뒷부분을 표현하기 위해서는 지난 7.4 버전에서부터 고급 입력기에다 '낱자 치환' 규칙이 추가되어 현재는 이 문제가 깔끔하게 해결되었다.
그러나 ㄴ+ㅇ을 300 같은 가상의 낱자 결합으로 등록하고, 그 300에 대해서 ㄴ과 ㅇ에 대한 표현 규칙을 일일이 등록해 줘야 하는 번거로운 문제가 여전히 남아 있었다.
이번 버전에서는 그 문제까지 싹 해결했다.
'고급 입력기'를 문자 생성기로 사용하고 '초· 종성 공유 낱자 결합' 옵션이 지정된 상태에서
종성 A+B=C에 해당하는 C라는 종성을 조합하는 상태가 됐고, C는 물리적으로 표현 가능한 낱자의 범위를 초과하는 값이고
C에 대해 다른 가상 낱자나 낱자 치환 규칙이 존재하지 않는다면...
이 복잡한 조건을 모두 만족할 경우 <날개셋> 한글 입력기는 자체적으로 C를 종성 A와 다음 글자 초성 B로 풀어서 표현해 준다.
그래서 당장 천지인, 나랏글 같은 예제 입력 방식에서도 300 이후의 수십 개의 종성 결합이 존재하지만 그에 대한 가상 낱자와 낱자 치환 규칙은 이제부터 삭제되었다. 이제 그런 추상적인 낱자는 낱자 결합 규칙에다가 한 번만 지정해 주면 되니, 휴대전화 입력 방식을 구현하기가 더욱 수월해졌다.
4. 수식 변수에 대소문자 구분 추가
예전에도 한번.. <날개셋> 한글 입력기의 글쇠 수식에서 변수의 용도 구분과 공간 부족이 앞으로 문제가 될 수 있다고 언급한 적이 있었다. 이 문제를 간단한 방법으로 깔끔하게, 완전히 해결했다. 변수는 여전히 알파벳 한 글자이긴 한데, 여기에다가 대소문자 구분을 추가함으로써 지원되는 변수의 개수를 종전의 두 배로 늘린 것이다.
그리고 이 프로그램이 버전업되어 입력 스키마 차원에서 여러 변수들이 추가로 제공되더라도, 프로그램은 언제나 오로지 대문자 변수만을 사용한다. 소문자 변수 26개는 사용자가 자신만의 내부 상태를 구현하는 용도로 얼마든지 사용하면 된다. 대소문자이니 형태를 구분하기도 아주 쉽다. 수식을 입력할 일이 있을 때 대소문자 상태만 좀 조심하면 된다.
고유한 내부 상태를 사용하는 복벌식 입력기 플러그 인은 글쇠배열에서 Q 대신 q 변수를 사용해서 수식을 생성하도록 수정되었다.
※ 동기화 관련
5. 타입간에 입력 설정 자료 보존
<날개셋> 한글 입력기의 오랜 숙원이 이뤄졌다.
빠른설정이나 예제 파일을 통해서 '기본 입력 스키마'와 '기본 입력기' 방식으로 어떤 입력 설정이 구축되었는데, 이것을 그대로 '고급 입력 스키마'와 '고급 입력기'에다 가져올 수는 없을까?
입력 항목의 기반 루틴을 넘나들면서 입력 설정을 가져오는 것은 지금 체계에서는 일반적으로 가능하지 않았다. 그래서 편법으로 입력 항목을 XML 방식으로 저장한 뒤, 텍스트 에디터로 object를 수동으로 고쳐서 다시 불러오는 것밖에 방법이 없었다. (어차피 기본이든 고급이든.. 공통 설정은 공통된 XML 형태로 저장을 하기 때문에 가능한 일)
이제는 사용자가 원한다면 이 일을 프로그램이 직접 해 준다.
입력 스키마나 문자 생성기를 변경하고 나면 '초기화' 버튼의 메뉴에 '예전 설정 가져오기'라는 명령이 사용 가능해진다. 그리고 이것을 선택하면 변경 전에 사용하던 입력 스키마/문자 생성기가 갖고 있던 설정을 지금의 입력 스키마/문자 생성기에다가 적용을 하게 된다.
앞으로 고급 입력 스키마와 고급 입력기가 많이 쓰이게 될 텐데 이것은 꼭 필요한 기능으로 자리잡을 듯하다.
당연히, 고급에서 쓰이던 설정을 기본으로 가져오는 것도 가능하다. 기본이 지원하지 않는 기능에 대한 설정치들은 물론 소실된다.
6. 처음에 무조건 지금 default로 지정되어 있는 입력 항목으로 구동
지금까지 외부 모듈의 '고급 시스템 옵션'에는 TSF 지원 확장 하나밖에 옵션이 없었는데, 다음 버전에서는 옵션이 두 개가 더 추가되었다. 하나는 위의 기능인데, 이것은 유용하다면 굉장히 유용한 옵션이다.
Windows 운영체제는 프로그램들의 GUI에 내부적으로 한영 상태를 관리하고 있다. 외부 모듈들은 그 상태를 따라 동작하며, 자신의 상태와 운영체제의 상태 중 어느 하나가 바뀌면 다른 한쪽도 알아서 동기화를 해야 한다. <날개셋> 한글 입력기 역시 외부 모듈 구현체는 그런 규격을 따르며 동작한다.
이런 공통 프로토콜이 스펙에 규정되어 있기 때문에 응용 프로그램은 자신이 지금 무슨 IME를 사용하고 있든지간에 소프트웨어적으로 한/영 상태 정도는 강제로 바꾸는 게 가능하다.
그런데 <날개셋> 한글 입력기 외부 모듈은 사용자가 직접 글자판을 강제로 전환하지 않았다면 자기가 먼저 운영체제의 상태는 절대로 바꾸지 않는.. 일종의 read-only 전략으로 개발되었다. 이것은 MS 한글 IME도 동일하게 따르는 정책이다.
그래서 입력 설정상으로 한글 글자판이 지정돼 있더라도 그 내부 상태가 영문이라면 <날개셋>도 자기 설정을 무시하고 빈 입력 스키마 계열을 기본으로 선택하며, 그런 게 없으면 자동으로 추가도 했다. 이런 동작 방식을 이상하다고 지금까지 사용자들로부터 문의도 엄청 많이 받았다.
하지만 "안 되면 되게 하라" 정신으로.. 이 옵션을 켜 주면 외부 모듈도 편집기처럼 무조건 설정대로 동작하며, 운영체제의 상태를 자신의 상태에다 강제로 맞춰 버린다. 프로그램이 실행되자마자 영문이 아닌 한글 모드에서 시작하는 것도 이제 가능하다. 운영체제의 여타 외국어 IME/글쇠배열을 <날개셋> 한글 입력기와 병행해서 쓰는 것도 좀 더 수월해질 것이다.
7. 응용 프로그램간에 <날개셋> 한글 입력기의 활성 입력 항목 동기화
Windows 8부터는 응용 프로그램간에 사용하는 키보드 로케일/IME와 내부 한영 상태가 모조리 자동 동기화되는 옵션이 추가되었으며 이 방식이 기본으로 지정되어 있다. 하지만 운영체제가 동기화해 주는 것은 한글 아니면 영문이라는 이분법적인 논리값인 반면, <날개셋> 한글 입력기는 3개 이상의 임의의 개수의 입력 항목을 가질 수 있다. '한글'이라고 분류되는 입력 방식 중에 세벌식, 두벌식, 드보락 같은 것은 여전히 응용 프로그램별로 따로 놀며, 동기화되지 않는다.
이 옵션을 켜면 <날개셋> 한글 입력기는 프로그램간에 자기가 사용하는 구체적인 입력 항목의 번호까지 동기화해 준다. 즉, 한 프로그램에서 입력 항목을 다른 걸로 전환하고 다른 프로그램으로 이동하면, 그쪽에서도 그걸로 동기화가 된다.
이 기능은 완전 만능 동기화 기능은 아니고 운영체제의 내부 상태가 맞아야만 동작하는 등 이것저것 단서와 제약이 있긴 하지만(도움말에 명시되어 있음), <날개셋> 한글 입력기를 Windows 8 스타일에 맞춰서 좀 더 매끄럽게 사용하는 데 큰 도움을 줄 것이다.
※ 기타 다른 개선
8. 버그 수정
Windows 8.1에서 권한 부족한 Metro 앱을 사용할 때, 단어 단위 한자 변환이 되지 않던 문제를 해결했다. 지난 7.4 버전에서 추가되었던 사용자 한자어 사전 연계 기능에 문제가 있음을 뒤늦게 발견했다.
권한 부족한 Metro 앱에서 동작이 실패할 때에 대한 처리를 해야 했는데 그걸 하지 않아서 내부적으로 프로그램이 죽었다가 다시 구동되곤 했다. 이런 실행 모드에서는 화면에 로그조차도 제대로 찍히지 않아서 디버깅을 상당히 특수한 방식으로 힘들게 해야 했다.
조금 더 심각한 문제로는 텍스트 조작을 온전하게 할 수 없는 TSF B급 프로그램에서 지금 글자 앞으로 이동하는 부류의 특수글쇠를 사용했을 때 단순히 거절만 되는 게 아니라 프로그램 전체가 무한 루프에 빠지는 문제가 있어서 이를 해결했다. 이 부분의 로직이 크게 바뀐 바로 직전 7.5에만 있던 문제이다.
그리고 편집기에 있는 '키 입력으로 붙여넣기' 기능이 언젠가 space를 제대로 처리하지 못해서 조합 중이던 한글이 덧난 채 붙여지던 문제를 해결했다. 이 역시 아마 이 부분 로직이 크게 바뀌었던 7.4때부터 생긴 버그가 아닌가 싶다.
Windows 7은 콘솔에서 세벌식을 사용할 때 '다다.' 이런 식으로 글자가 덧나는 문제가 있었는데 그런 것과 기술적으로 비슷한 문제이다.
이에 덧붙여 편집기의 '현재 편집 중인 문서의 경로 복사' 기능이 언제부턴가 텍스트를 클립보드에다 제대로 저장하지 않고 있던 문제, 그리고 아무 문자를 입력하지 않을 때에도 겹침 모드에서는 뒷글자를 무조건 하나씩 지우던 사소한 문제도 해결했다. 이것도 아마 7.4~7.5 사이에 슬며시 들어간 버그가 아니었나 싶다.
9. 제어판에서 설정 파일을 초기에 저장하는 위치
날개셋 제어판에서 글쇠배열, 유형, 전체 설정 등.. 뭔가 파일로 설정 데이터를 열 때는 처음엔 예제 데이터가 있는 디렉터리가 시작 위치로 표시된다. 그러다가 파일을 한번 저장하고 나면 마지막으로 저장했던 파일이 있는 디렉터리가 열 때에도 그대로 표시된다.
그런데, 최초로 저장을 할 때는 지금까지 기본 입력 설정 파일이 저장되는 생뚱맞은 이상한 디렉터리가 표시되곤 했다. 이것을 개선하여 이제는 사용자에게 친근한 '내 문서' 디렉터리가 표시되게 바꿨다. 지금까지 이게 상당히 불편한 점이었을 것 같다.
단, 전체 설정(set)은 제공되는 예제 데이터가 없기 때문에 저장뿐만 아니라 '열기'를 처음 할 때도 '내 문서'에서 시작한다.
10. 사용자 정의 후보 관련
7.0에서 첫 도입되었던 사용자 정의 후보 관련 기능에도 엔진이나 GUI에 이것저것 개선이 있었다.
(1) 외부 후보 파일을 불러왔을 때 설명문이 space 이후가 몽땅 잘려서 출력되던 어이없는 버그가 이제야 발견되어 고쳤다. (신고해 주신 분께 감사~)
(2) 그리고 후보 데이터를 추가하는 버튼을 Ctrl을 누르고 클릭하면... 후보 데이터를 한 덩어리로 등록하는 게 아니라 각 글자 단위로 독립적으로 한꺼번에 등록하는 기능을 추가했다. 즉, "☆★○●◎"이라고 입력하고 Ctrl+클릭을 하면 ☆, ★, ○, ●, ◎ 라고 5개의 후보 문자들이 떼어져서 등록되는 것이다.
(3) 이 외에도, 호환용 한글 자모 하나를 사용자 정의 후보의 key값으로 등록해 놓으면, 유니코드 표준 자모로도 그 key에 접근할 수 있게 했다.
초성 자음 중에 ㅉ은 한자 키 특수문자 변환이 전혀 존재하지 않는 유일한 낱자이다. 그리고 모음이나 종성 겹받침도 자리가 비어 있다. 그렇기 때문에 이런 자리에다가 사용자가 자주 사용하는 상용구나 특수문자를 제2 후보에 내장형으로든 외장형으로든 등록해 놓고, "한자 1 + 오름차순 포워딩" 또는 "한자 2 + 내림차순 포워딩"을 쓰면 기존 한자 변환과 내 custom 변환을 손쉽게 같이 쓸 수 있다.
물론, 낱자뿐만 아니라 한자 독음이 없는 한글, 가령 '바'나 '카' 같은 것도 유용하게 활용할 수 있다.
11. 사용자의 건의를 반영한 GUI 개선 추가분
제어판 대화상자가 대화상자 자체의 크기뿐만 아니라 좌우(분야 vs 각 항목)의 내부 크기 조절도 드디어 가능해졌다.단, 좌우의 폭은 양쪽 모두 지금보다 키우는 것만 가능하지, 줄이는 것은 가능하지 않다.
좌우의 크기 조절이 가능하려면 먼저 대화상자의 폭부터 더 키워야 한다. 많은 사용자들의 요청에 힘입어, 글쇠배열 수식 대화상자도 가로로 크기 조절이 가능해졌다. 생각보다 길고 복잡한 수식을 고안해서 사용하는 분들이 많은 줄을 이제야 알았다. ㅎㅎ
3.0 버전 이래로 거의 10년간 S, P, N, L 등 알아보기 어렵게 돼 있던 인접글쇠 버튼들 역시 저렇게 깔끔하게 바꿨다.
12. 설명문 추가
<날개셋> 한글 입력기에서 XML 저장이 가능한 단위인 글쇠배열, 입력 항목(유형 ist), 전체 입력 설정(set)에 대해서..
자신만의 고유한 설명문을 집어넣는 기능을 추가했다. 그리고 옵션을 줄 경우, 사용자가 제어판에서 해당 파일을 불러왔을 때 그 설명문을 반드시 먼저 사용자에게 표시하게 할 수 있다.
이 입력 방식은 언제 누가 만들었고 버전과 저작권이 어떻게 되며 제작자와 연락은 어떻게 하는지 등의 정보를 설명문에다 간단히 기재해 넣을 수 있다.
또한 복잡한 글쇠배열의 수식 로직 해설을 메모해 두는 용도로도 쓸 수 있으니 여러 모로 유용하다.
Posted by 사무엘