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

More Related Content

PDF
14 3 리스트함수
PDF
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PDF
PPTX
Bash-as-a-Interpreter
PDF
[OpenStack 하반기 스터디] Auto Install Kilo
PPTX
파이선 실전공략-1
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PDF
Asynchronous 101 (2)
14 3 리스트함수
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
Bash-as-a-Interpreter
[OpenStack 하반기 스터디] Auto Install Kilo
파이선 실전공략-1
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
Asynchronous 101 (2)

What's hot (8)

PDF
Hello c++ world
PDF
Asynchronous 101 - (1)
PPTX
Let's Go (golang)
PPTX
Ec++ 3,4 summary
PDF
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
PDF
알고리즘 시각화 라이브러리 ipytracer 개발기
PPTX
Kth개발자 세미나 1회
PPT
Boost라이브러리의내부구조 20151111 서진택
Hello c++ world
Asynchronous 101 - (1)
Let's Go (golang)
Ec++ 3,4 summary
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
알고리즘 시각화 라이브러리 ipytracer 개발기
Kth개발자 세미나 1회
Boost라이브러리의내부구조 20151111 서진택
Ad

Similar to 20180519 hangul processing (9)

PPTX
리눅스 데스크톱의 한국어 입력 개요
PPTX
Korean input overview in the linux desktop
PDF
동아시아 문자 처리
PPTX
전영규 유니코드 세미나_공개용
PPTX
유니코드 세미나
PDF
문자열이란 무엇인가
PPTX
HanJP IM Project 개요
PDF
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
PPTX
Unicode
리눅스 데스크톱의 한국어 입력 개요
Korean input overview in the linux desktop
동아시아 문자 처리
전영규 유니코드 세미나_공개용
유니코드 세미나
문자열이란 무엇인가
HanJP IM Project 개요
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
Unicode
Ad

More from gnomekr (9)

PDF
The way of approaching to foss for nursing care business
PDF
Chromium ui framework(shared)
PPT
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
PPT
Gnome on wayland at a glance
PDF
My ubuntu life-dklee
PPT
Vision and dream for youth startup company
PDF
Hw accelerated webkitgtk+ on raspberry pi
PPT
Gnome.asia.summit2013 report-pdf
PPT
System hacking basics
The way of approaching to foss for nursing care business
Chromium ui framework(shared)
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
Gnome on wayland at a glance
My ubuntu life-dklee
Vision and dream for youth startup company
Hw accelerated webkitgtk+ on raspberry pi
Gnome.asia.summit2013 report-pdf
System hacking basics

20180519 hangul processing

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