aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/design/004-text.md27
1 files changed, 22 insertions, 5 deletions
diff --git a/docs/design/004-text.md b/docs/design/004-text.md
index c62ff65..13f9d96 100644
--- a/docs/design/004-text.md
+++ b/docs/design/004-text.md
@@ -159,9 +159,9 @@ Malayalam은 psts와 rlig가 한 조회를 나눠 쓰는데, 안정 정렬로는
결과(Pi 5):
-- 설치된 글꼴 213벌, 계획 1,804개에 각 1천 실행: 다른 실행 0(글자 모양이 비트맵뿐인 Noto Color Emoji는 심볼 단계에서
- 빠진다). 인터넷에서 받은 Noto 21벌(인도계 아홉, 싱할라, 크메르, 미얀마, 티베트, 자바, 발리, 몽골, 태국, 라오 등), 계획
- 84개에 각 2천 실행: 다른 실행 0. 인도계가 있는 글꼴은 따로 계획마다 2만 실행: FreeSerif(여덟 문자), FreeSans, 굵은 꼴들, FreeMono, Unifont(아홉
+- 설치된 글꼴 213벌, 계획 1,822개에 각 1천 실행: 다른 실행 0(글자 모양이 비트맵뿐인 Noto Color Emoji는 심볼 단계에서
+ 빠진다). 설치된 글꼴이 거부되는 일은 이제 없다. 인터넷에서 받은 Noto 21벌(인도계 아홉, 싱할라, 크메르, 미얀마, 티베트,
+ 자바, 발리, 몽골, 태국, 라오, 시리아, 아랍 등)과 태국 문자 체계를 지운 Loma, 계획 92개에 각 2천 실행: 다른 실행 0. 인도계가 있는 글꼴은 따로 계획마다 2만 실행: FreeSerif(여덟 문자), FreeSans, 굵은 꼴들, FreeMono, Unifont(아홉
문자, GSUB 없음) 130개 계획 260만 실행, 다른 실행 0.
- 새 규격 글꼴(dev2 등): 인터넷에서 받은 Noto Sans 아홉 벌(데바나가리부터 말라얄람까지), 계획마다 5천 실행, 다른 실행 0.
- 속도: HarfBuzz의 1.25–1.3배 시간(Noto Sans Devanagari 문자당 1,614 대 1,235 ns, Tamil 674 대 526 ns).
@@ -208,11 +208,28 @@ U+180B–180E만 넣고 네 번째 자유 이체 선택자(U+180F)를 빠뜨렸�
실행 0. 사용자 영역 경로는 설치된 글꼴에 쓸 일이 없어서, Loma에서 GSUB의 thai 문자 체계만 지운 글꼴을 만들어 5천 실행으로
확인했다(다른 실행 0).
+### 아랍 셰이퍼의 나머지: 시리아 문자, 늘이기, 대체 셰이핑
+
+- 연결 종류는 HarfBuzz의 표(`hb-ot-shaper-arabic-table.hh`, 유니코드 16)에서 읽는다. 시리아 문자의 Alaph와 Dalath-Rish
+ 무리가 거기 있고, 상태 기계의 두 열이 그것을 쓴다(fin2, fin3, med2). 표에 없는 글자는 일반 범주로 가른다(Mn, Me, Cf는
+ T). 이 표를 읽다가 생성기의 결함을 찾았다. HarfBuzz의 생성 표는 범위가 행 중간에서 시작하면 앞 칸을 공백으로 비우는데,
+ 행 주석만 믿고 칸을 세던 파서가 그런 행에서 어긋났다(아랍 보충 블록 등). 이제 표를 조회 함수의 범위와 오프셋으로 읽는다.
+ 인도계 표를 같은 방식으로 다시 읽어 보니 한 칸도 바뀌지 않았다.
+- 늘이기(stch): 시리아 약어 표시(U+070F)와 아랍 숫자 기호(U+0600–0605) 같은 글자를 글꼴의 stch가 여러 조각으로 나누면,
+ 위치를 다 잡은 뒤 조각들이 앞 낱말의 폭을 덮도록 반복 조각을 복사해 늘어놓는다(재고, 넘치면 조금씩 겹친다).
+- 대체 셰이핑: 아랍 형태 기능이 없는 글꼴(Unifont)이면 HarfBuzz는 글꼴의 문자 지도에 있는 표시형(U+FB50–FEFF)으로 조회를
+ 만들어 적용한다. 빌드 도구가 같은 조회를 OpenType으로 직접 써서(init·medi·fina·isol의 단일 치환, rlig의 세 합자 조회)
+ 구역에 싣고, 런타임은 멈춤에서 그것을 여느 GSUB 조회처럼 적용한다. 두 글자가 한 글리프를 나누는 글꼴은 HarfBuzz의 정렬
+ 순서가 결과를 가르므로 거부한다.
+
+결과: Noto Sans Syriac, FreeSans의 시리아 문자(늘이기 포함), Unifont의 아랍(대체 셰이핑), Noto Sans Arabic, 계획마다 3천
+실행, 다른 실행 0. 약어 표시 하나가 낱말 아래로 아홉 조각까지 늘어나는 것도 HarfBuzz와 글리프·위치가 같다.
+
받지 않는 것(빌드 도구가 이유를 말하고 거부한다):
- `kern` 표의 상태 기계(Apple 형식 1), 등급 형식(2, 3), 교차 방향 커닝. 설치된 글꼴의 `kern` 표는 모두 짝 형식(0)이다.
-- AAT 표(morx, kerx, trak), 늘이기(stch), 아랍 형태가 없어 HarfBuzz가 표시형으로 대체 셰이핑을 하는 글꼴(Unifont의 아랍).
-- 시리아 문자(아랍 셰이퍼의 Alaph·Dalath-Rish 연결과 fin2·fin3·med2), 미얀마 Zawgyi.
+- AAT 표(morx, kerx, trak).
+- 미얀마 Zawgyi(표준이 아닌 인코딩, 문자 체계 태그 Qaag로만 오는 것).
- 이체 선택자(cmap 형식 14)는 싣지 않는다. 선택자는 숨기고 앞 글자는 기본 글리프로 둔다.
## 비례폭 글줄