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

What's hot

Hello c++ world
Hello c++ worldHello c++ world
Hello c++ world
. Ruvendix
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
MinChul Lee
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
상욱 송
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
Sehyeon Nam
 
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shovelingProject anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Project anarchy로 3d 게임 만들기 part_5_waste of time shoveling
Dong Chan Shin
 
알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기
Han Lee
 
Kth개발자 세미나 1회
Kth개발자 세미나 1회Kth개발자 세미나 1회
Kth개발자 세미나 1회
Byeongsu Kang
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
JinTaek Seo
 

What's hot (8)

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

Similar to 20180519 hangul processing

C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Dong Chan Shin
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
Tae Young Lee
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
Sungkyun Kim
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
Tae Young Lee
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
Jae-yeol Lee
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
SeungHyun Lee
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
Chris Ohk
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
NDOORS
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
Young Soo Kim
 
리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요
Changwoo Ryu
 
대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다
RangHo Lee
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
OnGameServer
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
준혁 이
 
Korean input overview in the linux desktop
Korean input overview in the linux desktopKorean input overview in the linux desktop
Korean input overview in the linux desktop
gnomekr
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
PgDay.Seoul
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
Tae Young Lee
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요
KTH
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
KTH, 케이티하이텔
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
Yongho Ha
 

Similar to 20180519 hangul processing (20)

C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요
 
대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
Korean input overview in the linux desktop
Korean input overview in the linux desktopKorean input overview in the linux desktop
Korean input overview in the linux desktop
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
 

More from gnomekr

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

More from gnomekr (9)

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