Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20180519 hangul processing

79 views

Published on

This slide describes what each library works for and how input manager works, in order.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

20180519 hangul processing

  1. 1. 한글 입력 처리 과정 요약 2018. 05. 19 Seong-ho Cho <shcho@gnome.org> GNOME Korea
  2. 2. libhangul (1/3) • 키보드 입력을 받아 키 입력 값에 매핑한 유니코드 값(UCS4)을 가져와서 UTF-8로 인코딩한 한글 문자(열)을 반환한다. • 자체 컨텍스트를 통해 스택 버퍼를 활용하여 preedit을 처리한다. • 사용방법은 소스 코드(hangulinputcontext.c)에 잘 나와있다. • 그러나 libhangul이 모든 문제를 다 해결해주지는 않는다 (…) 오로지 한글 입력 처리를 간편하게 해줄 뿐!
  3. 3. libhangul (2/3) • 참고: 모든 소스 파일은 hangul/, hanja/ 에 있음 • hangul-gettext.h: gettext pre-definition • hangul.h • 전체 함수: 내/외부용, 키보드 배치 설정, 입력상태 확인, 한자 입력(사전) • 상수: 자모, 자소, 음절글자, 초성 중성 채움 • 구조체: 키보드, 자모조합, 버퍼(스택버퍼 :P), 입력 컨텍스트, 한자, 한자 테이블, 한자 목록 • hangulinternals.h • 종성 비교 함수 • 글자 입력 횟수(한글자 입력에 필요한 타수) 확인 • hangulkeyboard.h • 키보드 배치별 아스키 코드 대응 초/중/종성 테이블
  4. 4. libhangul (3/3) • hangulctype.c : 키 입력 검사, 한글 입력 상태 검사, 자모 조합, 초성  종성 변환, UTF-8 값 반환 • hangulinputcontext.c: 한글 입력 처리 함수 구현체 집합 (preedit, commit, append) • hanja.c: 한자 입력 처리 함수 구현체 집합
  5. 5. ibus • 지능형 입력(기) “프레임워크!” 서버 • 인풋 메서드, 메쏘드 라고도 하지만 그냥 입력”기”(automata machine)라고 하자 • 뒤로는 x.org, wayland랑 붙는다. 기본은 gtk. • 입력기 전체 동작을 “진행”하는 코어
  6. 6. ibus-hangul • 인터페이스: PyGtk로 작성(설명은 생략) • 대부분의 모든 동작 코드가 src/engine.c에 다 들어있다 • Note • ibus_hangul_init() : 환경 초기화 • ibus_hangul_engine_class_init() : 콜백 바인딩 • ibus_hangul_engine_init() : 입력기 초기화 • ibus_hangul_engine_constructor() : GObject 생성자 . . . (지지고볶고) . . . Note: 인터페이스 이벤트와 관련된 처리 부분도 있다. 실제론 여기가 제일 중요한 부분. • ibus_hangul_engine_destroy() : GObject 참조 해제 (객체 소멸 함수) • ibus_hangul_exit() : 환경 초기화 해제(destructor)
  7. 7. 한글 처리 진행 자음 쌍 자음 자음 모음 겹 모음 모음 자음 쌍자음 커밋 자음 커밋 모음 모음 바,자,다,가,사 빠,짜,따,까,싸 모음 봐,좌,돠,과,솨 뽜,쫘,똬,꽈,쏴모음 커밋 자음 겹모음 커밋 뽞 백, 봭 닭, 돩 쀍 (쌍)자음+(겹)모음 (쌍)자음+(겹)모음+(겹)받침 commit + 자모입력 음절 미완성 주: 최근 입력기는 자모 입력 순서 대로만 음절 완성 처리를 하지 않음!! 예) ㅜ -> ㅈㅇ = 중, but ㅜ->ㅈㅈㅇ = 줒ㅇ … (bug?)
  8. 8. 참고 • 입력 상태 문제는 입력기와 libhangul 외적인 부분에서 나타날 수도 있다(최근 들어 자주 있다) • 좀 더 드러운(!?) 의식의 흐름 버전: https://github.com/darkcircle/ManalithBot/blob/master/ManalithBot /src/main/java/org/manalith/ircbot/plugin/keyseqconv/DubeolAuto mataEngine.java#L141

×