← 목록
기타 2026-06-28 3KB 읽기 3분

한글 IME 조합기 — 자모 입력 → 음절 조합 (작업C)

개요

크라우니앱뷰어(WebKit 0 네이티브 메모앱)에 진짜 한글 IME 조합을 결선했다. 이전 keyDown은 완성음절을 직접 주입(AUTOKEY)했으나, 이제 자모(ㅋㅡㄹㅏㅇㅜㄴㅣ)를 받아 두벌식 오토마타로 음절(크라우니)로 조합한다.

무엇을 했는지

  • 한글조합기.한선 (신규, src/): 자모 시퀀스 → 음절 조합 드라이버.
  • 코어 오토마타는 기존 검증 자산 libs/한글조합.한선(두벌식 상태기계, 15케이스) 재사용.
  • 호환자모 코드포인트(12593~12643)를 두벌식 ASCII로 환산해 한글_키처리에 위임.
  • SEQ 모드: 배치 조합("ㅋㅡㄹㅏㅇㅜㄴㅣ"→"크라우니"), 단위테스트.
  • STEP 모드: 자모 한 글자씩 → 입력상태.psv 라이브 갱신(조합중 음절 미리보기).
  • 입력칸값 = 확정누적 + 조합중표시. 백스페이스 = 역분해(니→ㄴ→…) 또는 끝글자 삭제.
  • NFC 안전 파일 전달(JAMOCMD_FILE), 상태 영속(/tmp/조합상태.psv, /tmp/조합확정.txt).
  • 크라우니앱뷰어.m: keyDown에 자모 라우팅 추가.
  • IsHangulJamo(U+3131~U+3163) → injectJamo → 조합기 STEP.
  • 조합 중 BS → 조합기 역분해. 포커스 전환 시 COMMIT(조합 초기화).
  • main()에 AUTOJAMO env: 클릭(포커스)→자모 차례 주입→매 자모 재렌더(헤드리스 실증).
  • 한글IME실증.sh (신규, src/): 단위테스트 + STEP 헤드리스 + 뷰어 AUTOJAMO 일괄 검증.
  • 검증 결과

    • 코어 오토마타 15/15, SEQ 조합 7/7 (크라우니/안녕/값/와/한글/크라우니벡터/영문혼합).
    • STEP 헤드리스: ㅋ→크→클→크라→크랑→크라우→크라운→크라우니 (도깨비불·종성 정확).
    • 뷰어 AUTOJAMO: 진짜 NSWindow 클릭→포커스→자모주입, 입력칸='크라우니'.
    뷰 비트맵 PNG(/tmp/한글IME_view.png) + 창 스크린샷(/tmp/한글IME.png) 모두 생성. 코랄 포커스 테두리 입력칸에 "크 라 우 니" 픽셀 렌더 확인.

    관련 파일

    • /Users/ef/CrownyBrowser/src/한글조합기.한선 (신규 드라이버)
    • /Users/ef/CrownyOS/crownyc/libs/한글조합.한선 (기존 코어 오토마타, 재사용)
    • /Users/ef/CrownyBrowser/native/크라우니앱뷰어.m (keyDown IME 결선 + AUTOJAMO)
    • /Users/ef/CrownyBrowser/src/한글IME실증.sh (실증 드라이버)
    • 산출: /tmp/한글IME_view.png, /tmp/한글IME.png

    잔여 이슈

    • 라이브 키보드(US 자판) 두벌식 입력은 한국어 입력소스가 활성일 때 호환자모로 들어옴(IsHangulJamo).
    US 자판 q→ㅂ 직접 매핑은 한글조합.한선의 한글_키를자모에 이미 있으나 뷰어 라틴 라우팅은 미연결(헤드리스 한계 인정, AUTOJAMO로 실증).
    • 복합자모를 단일 입력으로 주입하는 경우는 비자모 처리(정상 키보드는 단자모만 송출).