Skip to content

기존 프로젝트 소개

한글/IME 관련 오픈소스, OS·에디터의 IME 처리 원리

한글 입력 엔진·입력기·에디터에서 IME를 어떻게 다루는지 참고할 수 있는 프로젝트와 링크를 정리했다.

프로젝트설명저장소·링크
libhangul한글 조합 알고리즘(2벌/3벌)을 제공하는 C 라이브러리. HangulInputContext API로 키 입력 → 자모 시퀀스 → 완성형 변환. LGPL-2.1.github.com/libhangul/libhangul
ibus-hangulIBus용 한글 엔진. libhangul을 사용. Linux에서 한글 입력 시 자주 쓰인다. GPL-2.0.github.com/libhangul/ibus-hangul
fcitx-hangulFcitx용 한글 엔진. libhangul 기반.Fcitx 프로젝트 내 한글 모듈
nabiXIM 기반 한글 입력기. libhangul 사용. “The Easy Hangul XIM”.github.com/libhangul/nabi
나랏글오픈소스 한글 입력기. 레이아웃·조합 방식이 나랏글만의 특성이 있음.나랏글 공식 사이트·저장소 검색
구름(Gureum)macOS용 한글 입력기. libhangul 또는 자체 조합 로직 사용.github.com/gureum/gureum

각 프로젝트의 “조합 원리”는 libhangul을 쓰는 경우 유니코드 한글 완성형 공식(0xAC00 + 초성×588 + 중성×28 + 종성)과 2벌/3벌 키 매핑 테이블을 따른다. 나랏글·구름 등은 자체 레이아웃·규칙이 있을 수 있으므로 해당 프로젝트 문서를 참고하면 된다.

플랫폼연동 방식참고
WindowsTSF(Text Services Framework), 구형 IMM32MSDN Text Services Framework
macOSInput Method Kit, Cocoa NSTextInputClientApple Developer Input Method Kit
Chromium브라우저가 OS IME와 연동해 composition 이벤트 생성Chromium IME 브릿지 코드(IME 관련 디렉터리)

앱은 보통 “키 코드”가 아니라 “조합 중 문자열(preedit)”과 “확정 문자열(commit)”만 받는다. OS IME가 조합을 수행하고, 그 결과를 플랫폼 API로 앱에 전달한다.

프로젝트IME 관련 동작참고
ProseMirrorprosemirror-view에서 DOM 입력·composition 이벤트 처리. 조합 중 구간을 별도로 유지하고, compositionend 시점에 문서에 반영.prosemirror.net, prosemirror-view 소스
SlateReact 기반 에디터. composition 이벤트를 구독해 조합 중 노드/선택 영역 처리.Slate 문서·소스 내 composition 관련 코드
LexicalMeta의 에디터 프레임워크. IME/composition 처리 모듈이 있음.Lexical 문서·소스
CodeMirror 6입력 처리가 에디터 코어에 포함. composition 이벤트로 조합 중 입력과 commit 구분.CodeMirror 6 문서·소스
MonacoVS Code 에디터 엔진. OS IME와 연동해 composition 처리.Monaco/VS Code 소스

공통 원리는 “compositionstart → compositionupdate 반복 → compositionend” 흐름을 구독하고, 조합 중인 구간을 임시로만 표시하다가 compositionend 시점에 commit 문자열을 문서에 반영하는 것이다. undo는 보통 “조합 중에는 스택에 넣지 않고, commit 시 한 번에 넣는” 방식으로 한다.