한글 모아쓰기 구조
한글 음절은 자모(낱자)를 정사각 블록 안에 조합해 만든다. 이 문서가 자모 목록·블록 유형·슬롯 기본값의 단일 기준이다.
자모 목록 (유니코드 인덱스 순 — 조합 공식에 사용)
초성 19자 (인덱스 0~18): ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
중성 21자 (인덱스 0~20): ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
종성 27종 (인덱스 1~27, 0은 받침 없음): ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
중성 계열 분류 (블록 유형 판별에 사용):
- 세로모음 (기둥형): ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅣ
- 가로모음 (보형): ㅗ ㅛ ㅜ ㅠ ㅡ
- 복합모음 (기둥+보): ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ ㅢ
유니코드 조합 공식
음절 코드 = 0xAC00 + (초성인덱스 × 21 + 중성인덱스) × 28 + 종성인덱스
예: 한 = ㅎ(18)·ㅏ(0)·ㄴ(4) → 0xAC00 + (18×21+0)×28 + 4 = U+D55C 음절 범위: U+AC00(가) ~ U+D7A3(힣), 총 11,172자.
음절 블록 유형 6종
| 유형 | 구성 | 예 | 분할 |
|---|---|---|---|
| 1 | 초성 + 세로모음 | 가 바 리 | 좌우 |
| 2 | 초성 + 가로모음 | 소 무 그 | 상하 |
| 3 | 초성 + 복합모음 | 화 귀 의 | ㄱ자 |
| 4 | 유형1 + 종성 | 한 람 밀 | 좌우 + 하단 |
| 5 | 유형2 + 종성 | 글 물 승 | 3단 |
| 6 | 유형3 + 종성 | 관 궝 흰 | ㄱ자 + 하단 |
같은 자모라도 유형마다 다른 변형 글리프가 필요하다. 예: ㄱ은 최소 초성용(유형1/2/3, 받침 유무별)과 종성용이 필요하다. 변형을 스케일로 대체하면 획 굵기가 뭉개진다 — 반드시 유형별로 다시 그린다.
슬롯 박스 기본값 (시작점)
좌표계: SVG viewBox 0 0 1000 1000, y-down, 베이스라인 y=880. 아래 값은 기본 네모꼴 기준 시작값이다. 콘셉트(특히 탈네모꼴)는 의도적으로 깨뜨릴 수 있으며, 확정값은 _workspace/glyphs/{콘셉트}/slots.json이 기준이다.
| 유형 | 초성 | 중성 | 종성 |
|---|---|---|---|
| 1 | x 60–460, y 100–840 | x 480–940, y 60–880 (기둥 중심 x≈790) | — |
| 2 | x 160–840, y 60–460 | x 60–940, y 480–880 (보 중심 y≈600) | — |
| 3 | x 60–420, y 60–440 | 보부 x 60–720 y 460–720 + 기둥부 x 740–940 y 60–880 | — |
| 4 | x 60–440, y 80–500 | x 460–940, y 40–560 | x 100–900, y 580–880 |
| 5 | x 180–820, y 60–360 | x 60–940, y 380–540 | x 100–900, y 580–880 |
| 6 | x 60–400, y 60–360 | 보부+기둥부 (유형3 압축) | x 100–860, y 580–880 |
커버리지 단계 전략
| 단계 | 범위 | 목적 |
|---|---|---|
| 샘플 | 대표 음절 6~30자 | 콘셉트 검증, 피드백 수집 |
| 유형 완전 세트 | 바 소 화 한 글 관 (유형 1~6 각 1자) | 블록 구조 결함 조기 발견 |
| 시안 확장 | 자주 쓰는 음절 ~512자 + 라틴·숫자·부호 | 실사용 문장 조판 |
| 표준 | KS X 1001 2,350자 | 배포 가능 수준 |
| 전체 | 11,172자 (조합 자동 생성) | 완전 커버리지 |
빈도만으로 선정하지 말 것 — 유형 3·6(복합모음)은 빈도가 낮아 뒤로 밀리기 쉽지만 슬롯 구조가 가장 복잡해서 늦게 검증하면 구조 재작업이 커진다. 매 단계에 6개 유형이 모두 포함되어야 한다.
자모 조합 시스템 (시스템이 구축된 콘셉트)
콘셉트가 규칙 기반이면 음절별 수작업 대신 자모 정의 × 조합 엔진으로 전체를 생성한다. 천지인의 구현: _workspace/glyphs/천지인/system/
jamo_cho.json— 초성 19자: 문맥 박스 내 비율 스켈레톤 (모음 4계열 × 받침 유무 = 8문맥 자동 인스턴스화, 굵기 80은 스케일되지 않음)jamo_jung.json— 중성 21자 × {J0, J1} 절대 좌표 (필요 시 choBox로 초성 박스 오버라이드)jamo_jong.json— 종성 27종 절대 좌표 /contexts.json— 문맥 박스·상수
python3 _workspace/glyphs/천지인/system/compose.py --text "한글" --out-dir out/ # 지정 음절
python3 _workspace/glyphs/천지인/system/compose.py --ks2350 --out-dir out/ # 전체 11,172자
수정 원칙: 특정 글자가 어색하면 그 글자의 SVG를 고치지 말고 원인 자모의 정의를 고쳐 재생성하라 — 그 자모를 쓰는 모든 글자에 일괄 적용되고, 개별 SVG 수정은 다음 재생성 때 소실된다. 재생성 후에는 반드시 표본(수정 자모 포함 음절 + 극단 조합)을 렌더링해 시각 검증한다.
표준 샘플 텍스트
- 라운드 1 대표 세트: 한 글 바 람 소 리 (유형 1·2·4·5 — 3·6 미포함이므로 라운드 2에서 화·관 추가)
- 판그램: "다람쥐 헌 쳇바퀴에 타고파"
- 혼용 문장: "한글 폰트 Hangul 2026"