한글을 로마자로 옮겼다 다시 한글로 되돌리면, 같은 자리에 앉지 못한 글자들이 나타난다. 그 어긋남이 번역의 본질.
구현
1. 자모 분해
완성형 한 음절을 유니코드 산술로 초/중/종으로 나눈다:
const idx = code - 0xAC00 // 가~힣: 0xAC00~0xD7A3
const cho = Math.floor(idx / 588)
const jung = Math.floor((idx % 588) / 28)
const jong = idx % 282. 로마자 전사
자모별 Revised Romanization 매핑. 초성 19개, 중성 21개, 종성 28개(없음 포함). 예: 한글 → hangeul.
3. 역전사
로마자를 다시 자모로 읽되:
- 다중자(
ch,kk,ng)를 긴 매칭 우선으로 처리 - 초성과 종성이 같은 자음(ㄱ/k)은 문맥으로 구분: 다음 글자가 자음+모음이면 종성, 아니면 다음 음절의 초성
- 모음으로 시작하면 초성을
ㅇ으로 보정
4. 손실 지점
왕복 결과를 원문과 글자 단위 비교. 예: 의 → ui → 이 (이중모음 ㅢ가 기본 ㅣ로 환원). 갔 → gat → 갇 (종성 ㅆ이 t로 축약되어 ㄷ으로 복원).
손실 글자는 점선 밑줄 + accent 톤, title 속성으로 원본 → 변환 (로마자) 표시.