Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

20180519 hangul processing

157 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

×