날개셋 한글 입력기 8.4

<날개셋> 한글 입력기 8.2가 나온 지 거의 4개월 만에 또 새 버전인 8.4가 나왔다.
이번 버전도 짬밥이 어디로 간 게 아니라 정말 많은 부분이 개선되고 중요한 기능들이 많이 추가되었으므로 많이 사용하시기 바란다.

API 구조의 변경으로 인해 타자연습도 3.45로 살짝 업데이트가 됐다.

1. 사용자 정의 후보 문자열에 @ 탈출문자 추가

지난 7.0 버전에서는 사용자 정의 후보 기능이 추가되었다. 덕분에 고급 입력기의 사용자 정의 조합이 아니라 일반적인 한글을 입력하고 있을 때도 한자 키를 눌렀을 때 나타나는 변환 문자들을 사용자가 임의로 정할 수 있게 되었으며, 원래 있던 한자 변환 기능과도 병용이 가능해졌다.

한자 후보에 대해서 한자의 훈과 음이 나오듯이 사용자 후보에 대해서도 사용자가 설명문을 기재할 수 있다. 그런데 어떤 문자에 대해서 들어갈 만한 설명 정보라는 게 뻔할 뻔 자인 경우가 많은 관계로, 이번 버전에서는 그 절차를 간편하게 해 주는 탈출문자를 추가했다. 후보 문자열이 딱 한 글자로만 구성되어 있다면 탈출문자를 사용할 수 있다. 기본 입력기의 사용자 정의 후보와 고급 입력기의 사용자 정의 후보에서 모두 동일하게 쓸 수 있다.

탈출문자는 @로 시작한다. @N은 이 문자의 유니코드 번호이다. 그리고 문자가 BMP 영역에 있는 경우, 문자의 유니코드 명칭을 나타내는 @C를 사용할 수 있다. 이건 내 프로그램이 아니라 운영체제로부터 얻어 오는 명칭이다.
다음으로 @H는 이 문자가 BMP 영역의 한자인 경우 훈과 음이다. @ 자체를 표현하려면 @@이라고 쓰면 된다.

사용자 정의 후보의 설명문과 관련하여 뭔가 2% 부족한 게 있다고 지금까지 생각해 왔는데 그걸 탈출문자를 통해서 해결하게 됐다.
그러면 이제 여러 후보들에 대해서 설명문을 획일적으로 [@N] @C/@H 이런 식으로 지정할 필요도 생기는데, 이것도 대화상자 UI 차원에서 가능해졌다. 후보 목록에서 1개 이상의 후보 문자열들을 선택한 후, 위의 ‘후보 문자열 입력란’은 비우고 설명문만 입력한 뒤 ‘추가’를 누르면 선택된 후보들의 설명문이 모두 동일하게 바뀐다.

2. Alt+=를 끄는 보정 기능 추가

지난 8.2에서는 시스템 계층에 ‘키보드 드라이버의 동작 보정’ 기능이 추가되어서 type 1 키보드에서도 오른쪽 Ctrl/Alt를 인식할 수 있으며 반대로 type 3에서도 Shift+Space와 한영을 구분해서 인식할 수 있게 되었다. 이번 버전에서는 그에 덧붙여 Alt+=도 전/반각이 아니라 있는 그대로 인식하는 기능이 추가되었다.

전통적으로 Windows의 한국어 키보드 드라이버는 Alt+=를 전/반각 전환 글쇠로 인식해 왔다. 하지만 오늘날은 이건 거의 안 쓰다시피 하는 잉여 기능이며, 오히려 자기도 모르는 사이에 저걸 누른 뒤에 알파벳과 숫자가 엉뚱하게 입력되어서 사용자를 놀라게 하는 경우가 많다.
이 보정 기능을 켜면 <날개셋> 외부 모듈에서 Alt+=가 눌려도 전/반각 전환을 하지 않게 만들 수 있으며, 편집기 같은 다른 구현체에서는 거기에다 아예 다른 기능을 배당할 수도 있게 된다.

단, 보정 기능은 언제나 택일 형태이기 때문에 이 기능을 기존 type 1/3 한영 관련 보정과 같이 사용할 수는 없다.

3. 다단계 입력 분리

두벌식 글자판에서 음절 경계에 도달했을 때 앞글자 종성과 뒷글자 초성을 구분하는 방법은 여러가지가 있다.
보통은 자음은 종성에 최대한 붙을 수 있는 데까지 결합시켰다가 안 되면 다음 글자로 넘어가고, 모음은 직전에 입력되었던 종성 한 타만 다음 글자의 초성으로 이동하는 '도깨비불 현상'을 일으킨다. 그것보다 더 세밀한 제어가 필요하다면 크게 다음과 같은 방법들을 사용하면 된다.

  • 특수 도깨비불(3.9에서): 중성이 입력되어 도깨비불 현상이 일어날 때, 종성 입력 순서와 무관하게 아무 종성과 초성으로 쪼개지게 한다. 한글 로마자 입력기에서 ch, l, x 같은 건 이걸로 구현하는 게 제일 무난하다.
  • 초· 종성 공유 낱자 결합(6.0에서): 종성을 2개의 초성을 합성하여 입력하는 구도로 만들어 준다. 낱자 결합 규칙을 훨씬 더 간단하게 만들어도 후속 처리를 프로그램이 알아서 해 주며, 도깨비불도 오른쪽 초성 덩어리 단위로 떼어서(치는 데 몇 타가 들었든) 해 주니 매우 편리하다. 휴대전화 입력 방식은 이걸로 구현하면 된다.
  • 조합 종료 타이머(6.0에서): 특정 오토마타 상태에서 일정 시간 이상 동안 타자를 안 하고 가만히 있으면 자동으로 조합이 끊긴다. 천지인 같은 입력 방식에서 '국가/구카' 구분을 위해 사용하면 된다.

그 뒤 이번 버전에서는 "다단계 입력 분리"라는 제4의 메커니즘이 추가되었다.
이것은 도깨비불과는 달리, 초중종 등 동일한 성분의 낱자가 계속 N-1단계까지 입력되었는데.. 제 N째 낱자가 기존 낱자와 결합이 불가능할 때, N만 다음 글자로 빼는 게 아니라 M<N을 만족하는 임의의 M~N단계의 낱자 결합을 몽땅 다음 글자로 옮기고 앞글자는 1~M-1단계까지만 남기는 역할을 한다.
쉽게 말해 ㄺ 다음에 ㅅ을 입력했는데 ㅩ으로 갈 수는 없을 때, ㄺ+ㅅ으로 있는 그대로 분리되는 게 아니라 느닷없이 ㄹ+ㄳ으로 가게도 해 준다.

도깨비불은 두벌식 종성이 입력된 상태에서 두벌식 "중성"이 입력되었고 이로써 오토마타가 0으로 바뀌었을 때 발생한다. 하지만 저건 초중종 같은 성분의 낱자가 입력됨으로써 낱자 결합이 65531이라는 낱자로 도달했을 때 발생한다. 조합 중인 낱자를 0으로 만드는 역할을 하는 65530에 이어 또 다른 특수 낱자가 추가된 것이다.

그런데 세벌식이나 '종성 두벌식'이 아니라 일반 두벌식 형태의 종성이 분리되었을 때는 다음 글자는 종성이 아니라 초성으로 바뀐다. 그렇기 때문에 다단계 입력 분리로 할 수 있는 일의 일부가 바로 도깨비불과 동일하지는 않지만 비슷한 형태의 '두벌식 음절 경계 구분'이 된 것이다. 개념적으로 종성과 다음 글자 초성을 동시에 결합시키는 날개셋문자와도 좀 비슷하나, 형태가 간편한 대신에 자유도가 그것만치 높지는 않다.

현대 한글에서 초성 ㅃㄸㅉ, 옛한글에도 정치음· 치두음 같은 건 초성에만 존재한다. 이걸 초성과 종성에 공통으로 존재하는 낱자의 결합으로 입력할 수 있는데 두벌식으로 종성을 결합하는 도중에 인위적인 음절 구분(조합 종료) 없이 자동으로 초성으로 넘어가는 형태로 입력하고 싶다면 딱 이 기능을 사용하면 된다.

예전 같았으면 '한글 출력 치환'을 이용해서, 여전히 조합이 끊어지지 않은 종성 상태이지만 겉보기로는 정치· 치두음 초성이라고 글자를 임시로 표시해야 했다. 그 뒤 모음이 입력됐을 때 특수 도깨비불 현상 같은 걸로 정치· 치두음 부분을 떼어냈겠지만 지금은 좀 더 직관적인 방법도 생겼다. 자세한 설명은 프로그램의 도움말에 나와 있다. 연속 입력 가능성 판별 기능도 다단계 입력 분리까지 감안해서 동작하도록 알고리즘이 수정되었다.

요건 원래 개발 계획에는 없던 아이디어였는데 꽤나 무겁고 중요한 기능이 되어 버렸다. 이런 기능이 지금까지 없었다. 예정에 없던 기능 때문에 한 달에 가까운 시간이 그냥 훅 가 버렸지만..ㅠㅠ 투자한 시간이 아깝지는 않다.

4. 허용 한글 범위 관련 처리

아무 한글이나 조합이 되지는 않게 하는 '허용 한글 제약'과 관련하여 여러 기능들이 추가· 강화됐다.
먼저, '다단계 입력 분리'가 이 기능과도 연계된다. 가령, '쌰'를 조합할 수 없는 'KS X 1001 완성형 제약'을 사용하고 있는데 ㅑ를 ㅏ+가획으로 입력해서 '쌰'를 만들려고 시도했다면.. '가획'만 넘어가는 게 아니라 "ㅏ+가획"이 한꺼번에 다음 글자로 넘어가게 할 수 있다. 이전까지는 그게 가능하지 않았기 때문에 이 상황에서 그냥 '싸'와 함께 조합이 중단돼 버리곤 했다.

65031 낱자 결합을 통해 일어나는 다단계 입력 분리와는 달리 저 분리는 별도의 옵션이 지정되어 있을 때만 수행된다. 그리고 앞의 분리는 A+B+C+D와 C+D가 모두 가능하다면 A부터 시작해서 최대한 많은 타수를 분리하는 반면, '허용 한글 제약' 관련 분리는 C+D처럼 최대한 적은 타수를 분리한다. 분리의 성격이 서로 다르기 때문이다.

단순히 낱자 결합 규칙이 더 존재하지 않아서 결합 불가일 때랑, 허용 한글 범위 제약에 걸려서 결합 불가일 때를 구분 인식이 가능해진 것은 예전 글에서 이미 언급했으므로 참고하시고..

끝으로, <날개셋> 한글 입력기가 제공하는 "문자열을 글자판 입력으로" 필터는 '허용 한글 범위 제약' 기능을 전혀 감안하지 않고 동작한다. 즉, '똠'이라는 문자를 조합할 수 없는 상태에서도 '똠'을 입력하는 순서를 구해 준다.
그 동작을 약간 변경하여, 이걸 부분적으로 감안하여 동작하게 로직을 바꿨다. 이제는 KS X 1001 제약이 적용된 상태에서는 '똠'은 입력할 수 없는 글자로 간주하여 입력 순서를 찾아 주지 않는다.

그러나 이 기능은 중간 과정에서 생성되는 모든 글자들을 일일이 체크하지는 않는다. 즉, '썅'은 중간의 '쌰'를 입력할 수 없음에도 불구하고 최종 결과물이 입력 가능하기 때문에 입력 순서를 찾아 준다.

5. Backspace 3과 4 지원

<날개셋> 한글 입력기는 한글 입력 과정에서 사용되는 Backspace와 후보(≒ 한자) 변환이라는 명령을 내부적으로 특수글쇠의 일종으로 취급한다. 그런데 그게 하나만 있는 게 아니라 각각 4종류씩 있다.

먼저 후보 변환의 경우, 지난 7.0 버전에서 4개의 용례가 완전히 정착했다. 1은 고정적으로 제공되는 한자 및 특수문자 변환이며 2와 3은 각각 입력기 계층에서 제공되는 내장 및 외장형 후보 변환이다. 4번은 편집기 계층에서 제공되는 공통 후보 변환이며 형태는 내장과 외장 어느 것이든 될 수 있다.
후보 변환 데이터의 성격에 따라(공통인가, 아니면 특정 입력 방식에 종속인가?) 원하는 변환 방식을 고를 수 있다. 그리고 어떤 단계에서 후보가 존재하지 않을 때 이전 단계로(1) 갈 것인지 다음 단계로(4) 갈 것인지 포워딩 방식도 지정할 수 있게 했다. 이런 식으로 후보 변환과 관련해서 생각할 수 있는 customization 방식을 모두 구현했다.

이번 버전에서는 후보 변환에 이어 Backspace에 대해서도 손을 봤다. 예전부터 Bksp 1은 통상적인 bksp 글쇠에 대응하고 Bksp 2는 Shift+bksp에 대응한다는 관행이 정착해 있었지만, 3과 4는 영역이 배당만 됐고 실제로 쓰이지 않았다.
이제는 Bksp 동작 방식에서 '자세히'를 누르면 1, 2뿐만 아니라 3, 4도 다 제각기 동작 옵션들을 지정할 수 있다. 그리고 아무 글쇠에나 Bksp 3/4를 뜻하는 C0|0x8A 또는 0x8B를 배당하면 그 옵션대로 Bksp가 동작한다.

원래 Backspace는 한글 입력기(IME 프로그램)와 응용 프로그램이 공용하는 글쇠이다. 한글을 조합하는 중일 때는 IME가 Bksp를 가로채지만, 조합 중이지 않고 앞 글자에 딱히 달라붙거나 할 필요도 없을 때에는 IME가 Bksp를 가로채지 않고 그냥 응용 프로그램으로 넘겨 준다. 그렇기 때문에 A나 1 같은 문자 글쇠에다가 Backspace 1 같은 걸 배당하면 평소에는 글자가 지워지는 게 아니라 A나 1이 입력되어 버린다. 앞 글자를 지우고 싶으면 이런 고수준의 Backspace n 특수글쇠를 배당하는 게 아니라, Backspace가 수행하는 저수준 동작인 '한 타 지우기, 마지막 단계의 낱자 전체 지우기, 입력 순서와 관계 없이 마지막 단계의 낱자 한 단계 지우기'를 배당하는 게 보통이다.

Backspace 3과 4는 저런 오동작이 없다. 언제나 글쇠를 가로채며, 구현체의 기술적인 한계로 인해 앞 글자를 건드릴 수 없을 때는 그냥 아무 동작 없이 가만히 있기만 한다. 입력기 차원에서 조합 바깥의 앞 글자를 직접 지울 수 없는 환경에서는 T ? C0|0x8A: KY|8 이렇게.. 한글을 조합하고 있을 때만 bksp 3, 아니면 수동으로 bksp 생성(응용 프로그램이 글자를 직접 지우게) 이렇게 bksp 기능을 혼용해도 된다. 이런 방식으로 bksp가 아닌 자리에 bksp의 기능을 독자적인 동작 옵션으로 온전히 이식이 가능하다.

6. 글쇠배열 편집 UI에 시각 피드백 추가

<날개셋> 한글 입력기는 잘 알다시피 기본 입력 스키마에 글쇠배열을 편집하는 기능이 있다. 그런데 상위 옵션의 영향으로 인해, 여기서 글쇠배열을 아무리 고쳐도 그게 실제 입력 때 반영되지 않는 경우가 있다.

  • 첫째, '빈 입력 스키마와 호환되게' 옵션이 켜져 있고 현재 편집기가 아닌 외부 모듈/입력 패드 구현체를 사용 중일 때. 이때는 해당 입력 항목은 의도적으로 모든 글쇠를 처리하지 않고 넘기는 '빈 입력 스키마'와 동일하게 동작하므로 자신의 모든 입력 설정들이 무효가 된다.
  • 글쇠 인식 옵션에서 기존 글쇠배열의 문자· 숫자· 기호 47개 자리의 일부를 지정하여 다른 용도로 사용하고 있을 때. 여기에는 가로채지 '않게' 하는 것도 포함된다.

이제는 이런 상황에 속하는 글쇠들은 회색으로 흐리게 표시되며, 전부 또는 일부 글쇠가 이런 이유 때문에 동작하지 않는다는 설명문까지 잠시 표시된다. 그러므로 글쇠배열을 고쳤는데도 그게 동작하지 않고 왜 그런지 사용자가 이유를 알지 못하는 상황을 예방할 수 있다.

사용자 삽입 이미지사용자 삽입 이미지

'빈 입력 스키마와 호환되게'의 영향을 받는 구현체에서 해당 옵션을 켜면 추가 글쇠 인식 옵션이라든가, 고급 입력기의 고급 글쇠 인식 옵션도 다 흐리게 표시되어서 값 편집 불가 상태가 되게 했다. 어차피 이런 기능들이 동작하지 않는 상태가 되기 때문이다. 이번 버전에서는 이런 UI도 추가했다.

7. 그 밖에 사소한 개선과 버그 수정

(1) 편집기에는 한 글자만을 찾는데 찾는 조건을 수식을 이용해서 세밀하게 지정하는 '문자 영역 찾기'라는 기능이 있다.
거기에다가 앞글자 P와 뒷글자 N이라는 변수도 추가해서 사실상 최대 3글자까지 연달아 찾을 수 있게 했다. 마침표가 이어지지 않는 '다'를 찾는다거나, 한글 다음에 이어지는 한자를 찾는 식으로 활용이 가능하다. 문단의 앞에서는 P는 0, 문장의 끝에서는 N은 0이 된다.
또한 내정값으로도 한글 낱자 중에 유니코드 5.2 새 낱자만 찾는 수식도 추가했다.

(2) "한글 낱자 정규화" 텍스트 필터에 꽤 황당한 버그가 있는 것을 발견하여 고쳤다.
NFC 정규화를 시켜서 현대 한글이 옛한글처럼 자모 형태로 풀어져 있는 것을 바로잡고 나면, 그 뒤에 등장하는 옛한글들은 이상한 쓰레기 문자로 바뀌곤 했다.
한글의 정규화 방식이 바뀐 지난 8.0 버전에서부터 존재한 버그였다. 내가 스스로 찾아 낸 건 아니고 사용자의 제보를 통해 확인했다.

(3) <날개셋> 한글 입력기는 영문 UI에서 '한글'을 표기할 때 과거에는 Hangeul을 쓰다가 나중에 Hangul로 바꿨다. 당장 유니코드의 영역 이름에도 Hangul이 쓰이고 외국에서는 eu보다 u가 훨씬 더 널리 퍼져 있다고 판단되어서다.
그런데 프로그램 UI 중 특별히 콤보 박스 안의 항목이라든가, xml에 들어가는 내정값 같은 데에서 여전히 eu 표기가 남아 있는 것을 뒤늦게 자체적으로 확인하여 고쳤다.

(4) <날개셋> 제어판의 낱자 결합 탭에서 '낱자 결합 규칙'을 등록하는 UI에서..
'추가'를 그냥 클릭하면 지금까지 그런 것처럼 새 항목이 추가되고 입력 포커스는 A+B=C 중에 A의 위치로 간다.
하지만 Ctrl+클릭을 하면 A와 C의 값이 서로 뒤바뀌고 포커스는 A가 아닌 C에 가게(교환으로 인해 A의 값을 갖게 된) 했다.
그래서 A+B=C에 이어서 역으로 돌아오는 C+B=A라든가, C+B=D처럼 연타에 의한 후속 조합을 지금보다 더 수월하게 등록할 수 있게 했다.

(5) 끝으로 낱자 결합 규칙, 각종 사용자 정의 조합/후보 목록 등, <날개셋> 제어판에서 Windows 폰트가 아니라 자체 비트맵 글꼴로 출력되는 모든 UI들은..
뭔가 아이템을 추가/삭제하거나 순서를 조정하고 나면 지금까지는 스크롤 위치가 엉뚱하게 바뀌고 선택 막대도 화면 맨 아래에 어설프게 걸친 위치로 바뀌곤 했다. 이것 때문에 지금까지 무척 불편했는데 이걸 드디어 원천적으로 개선했다. 스크롤이 필요 없으면 스크롤이 발생하지 않으며, 선택 막대도 언제나 화면 안에 온전히 출력되게 했다.

Posted by 사무엘

2016/02/27 08:30 2016/02/27 08:30
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1197

Trackback URL : http://moogi.new21.org/tc/trackback/1197

Comments List

  1. 사포 2016/02/29 10:45 # M/D Reply Permalink

    수고 많으셨습니다. ㅎㅎ

    1. 사무엘 2016/02/29 23:19 # M/D Permalink

      감사합니다. 세벌식이나 더 일반적인 한글 입력 방식 customization 같은 데에 관심 있으시면 유용하게 사용하세요. :)

Leave a comment
« Previous : 1 : ... 1145 : 1146 : 1147 : 1148 : 1149 : 1150 : 1151 : 1152 : 1153 : ... 2205 : Next »

블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Site Stats

Total hits:
3057721
Today:
2244
Yesterday:
1713