키보드/IME별 차이
키보드·IME별 조합 알고리즘 차이와 에디터 구현에 주는 함의
키보드 레이아웃(어떤 물리 키에 어떤 문자가 매핑되는지)과 IME(그 키 시퀀스를 어떻게 조합할지)는 별개다. 같은 키를 같은 순서로 눌러도 IME에 따라 조합 결과가 다르다.
차이가 나는 이유
Section titled “차이가 나는 이유”- 키보드: 키 코드·문자 매핑만 제공한다. 한/영 전환, IME on/off는 OS·IME 쪽에서 결정한다.
- IME: “지금까지 누른 키 시퀀스”를 “조합 중인 문자열”과 “commit할 문자열”로 바꾼다. 한글 2벌식·3벌식, 일본어 로마자→가나, 중국어 병음 등 조합 알고리즘이 입력기마다 다르다.
그래서 에디터는 “어떤 IME를 쓰는지”를 알 필요 없이, composition 이벤트로 오는 문자열만 처리하면 된다. IME가 commit한 문자열을 문서에 넣고, 조합 중 문자열을 preedit으로만 표시하면 된다.
- 2벌식: 자음·모음을 서로 다른 키에 배치. 초성+중성+종성 순서로 조합. 쌍자음(ㄲ, ㄸ 등)은 Shift+키 또는 같은 키 두 번.
- 3벌식: 초성·중성·종성을 각각 다른 벌에 배치. 2벌식과 키 매핑과 조합 순서가 다르다.
- 모바일: 천지인(3×4+모드), 10키 쿼티, 풀 쿼티 등 레이아웃이 다르고, 연타·스와이프로 자모 선택. (상세는 “한글” 섹션의 “모바일 한글 키보드” 참고.)
같은 키 시퀀스라도 2벌식 IME와 3벌식 IME의 조합 결과는 다르다. commit 시점(스페이스로 확정, 다음 자모 입력 시 자동 확정 등)도 입력기마다 다를 수 있다.
로마자 입력(예: “k”“a”)을 히라가나·가타카나(예: “か”)로 변환한다. 조합 중에는 “変換中”처럼 표시되고, 스페이스 등으로 한 문절 단위로 commit된다. 조합 중 문자열과 확정 문자열의 구분이 한글과 비슷한 방식으로 이벤트로 전달된다.
병음 등 로마자 입력을 한자 후보로 변환한다. 사용자가 후보를 고르면 그때 commit된다. 조합 중에는 병음 문자열 또는 변환 후보가 preedit으로 표시된다.
에디터 구현에 주는 함의
Section titled “에디터 구현에 주는 함의”- IME에 따라 compositionupdate 호출 횟수, data 길이, commit 타이밍이 다르다.
- 에디터는 IME 중립적으로, “compositionstart → compositionupdate 반복 → compositionend” 흐름과 그때 넘어오는
data만 신뢰하면 된다. - “지금 조합 중인 구간”을 하나의 블록으로 두고,
compositionend시점에 그 구간을 commit 문자열로 교체하고 undo 스택에 한 번만 넣는 방식이 안전하다.