From 434e8a9930d954494a462690739ea4ead21ff4e8 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Mon, 28 Sep 2026 16:35:18 +0100 Subject: Freeze the text subsystem at HarfBuzz 10.2 and Unicode 16 Bringing in HarfBuzz 14.5 and Unicode 18 broke both generators and showed over ten changes to shaping output since 10.2. Following them is cloning someone else's implementation, bugs and all, release after release: a cost without end, and no compression of abstractions. So the text subsystem stops here: no more chasing HarfBuzz's bugs and habits (AAT, Zawgyi, Arabic fallback over shared glyphs stay refused), and upgrades only when needed (a new script, a security problem), with text/upstream.py. Left as a design task for later: compiling a font's whole behaviour into Vega's own format at build time, so that shaping at run time no longer tracks HarfBuzz. --- docs/design/004-text.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'docs/design/004-text.md') diff --git a/docs/design/004-text.md b/docs/design/004-text.md index 502eeb2..8b0758c 100644 --- a/docs/design/004-text.md +++ b/docs/design/004-text.md @@ -295,6 +295,23 @@ Vega의 셰이핑은 HarfBuzz와 경우마다 같아야 하고, 유니코드 성 옮겨야 한다. 도구가 줄여 주는 것은 무엇을 옮길지 찾는 일이다. AAT와 사용자 기능, 가변 글꼴은 아직 받지 않는다(시험 모음에서 빼고 센다). +## 동결: HarfBuzz 10.2와 유니코드 16 + +2026-09-28 결정. 글자 하위 시스템은 HarfBuzz 10.2.0과 유니코드 16.0.0을 기준으로 멈춘다. + +- 도구로 HarfBuzz 14.5와 유니코드 18을 받아 보았다. 생성기 둘이 깨졌다. 줄 바꿈에 새 클래스(HH)가 생겼고, HarfBuzz의 표가 + packtab 형식으로 바뀌었다. 10.2 이후 셰이핑 출력을 바꾼 변경도 열 가지가 넘었다. 음절 단위 조회의 문맥을 음절 안으로 막은 + 것, 옛 `kern` 표를 몇 셰이퍼로 좁힌 것, 교차 방향 부호 배치의 순서, 유니코드 17·18 따위다. +- 따라가는 비용에는 끝이 없다. 판마다 남의 구현을 그 버릇까지 복제하는 일이고, 추상화를 압축하는 일이 아니다. Pure가 나아갈 + 곳(코어와 외부 피드백)에 쓸 시간을 먹는다. +- 그래서 HarfBuzz의 버그와 버릇을 맞추는 일은 그만둔다. AAT, Zawgyi, 글리프를 나눠 쓰는 아랍 대체 셰이핑은 받지 않는 채로 + 둔다(시험 모음의 known에 남는다). +- 올리는 것은 꼭 필요할 때뿐이다. 새 문자 체계가 필요하거나 보안 문제가 있을 때 [text/upstream.py](../../text/upstream.py)로 + 한다. +- 나중 설계 과제: 글꼴의 행동을 빌드할 때 Vega 자신의 형식으로 끝까지 컴파일하는 것. 지금은 계획만 컴파일하고, 실행 중에는 + HarfBuzz의 절차를 옮긴 엔진이 OpenType 표를 읽는다. 행동 전체를 자체 형식으로 내리면 HarfBuzz는 빌드 때 대 보는 참조로만 + 남는다. 실행 중의 셰이핑이 HarfBuzz를 따라갈 까닭도 사라진다. + ## 비례폭 글줄 [text/layout.c](../../text/layout.c)는 검증한 부품을 UAX #9 3.4절과 UAX #14가 말하는 순서로 잇는다. -- cgit v1.2.3