|
시리아어 / 몽골어 / 데바나가리 shaping 지원 다중 script 능력 표면(v2.119.53 - v2.119.55)
|
아랍어 shaping 자동 shaping 파이프라인 GSUB 엔진 |
|
HotPDF는 아랍어를 제외한 세 complex script, 즉 시리아어(U+0700-U+074F), 몽골어(U+1800-U+18AF), 데바나가리(U+0900-U+097F)에 joining 클래스/위치 분석/Indic 음절 범주 능력 표면을 노출합니다. 각 능력은 호출자가 기존 OpenType GSUB 엔진으로 올바른 shaping을 수행하게 하면서, 무거운 작업(클러스터 경계 탐지, BiDi 해석, GPOS positioning)은 HotPDF 범위 밖에 둡니다
시리아어 shaping 능력(v2.119.53) 두 새 메서드가 시리아어 joining 동작을 노출합니다:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
시리아어는 아랍어와 같은 Right-Joining/Dual-Joining/Transparent/Non-Joining 4클래스 체계를 따릅니다.
아랍어와 달리 시리아어 블록에는 Unicode에 미리 인코딩된 Presentation Forms가 없습니다. U+FB50-FDFF/U+FE70-FEFC Arabic Presentation Forms 블록에 해당하는 시리아어 영역이 없습니다. 따라서 소비자는 codepoint 재작성이 아니라 폰트가 정의한 GSUB lookup(보통
몽골어 shaping 능력(v2.119.54) 몽골어용으로 짝을 이루는 두 메서드입니다:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
커버리지는 기본 몽골어(U+1820-U+1842), Todo(U+1843-U+1877), Sibe(U+1880-U+18A8), 만주어, Ali Gali 확장을 포함합니다. Variation Selector FVS1/FVS2/FVS3(U+180B-U+180D), 소프트 하이픈 NIRUGU(U+180A), Ali Gali 모음 기호는 모두 Transparent(T클래스)로 분류되어 순회를 끊지 않고 joining에 참여합니다
시리아어처럼 몽골어에도 Unicode에 미리 인코딩된 Presentation Forms가 없습니다. 몽골어의 전통 세로 조판, 복잡한 글자 형태 변형 규칙, FVS 기반 형태 선택은 모두 폰트가 정의한 GSUB lookup(보통
데바나가리 Indic shaping 능력(v2.119.55) 데바나가리는 아랍어/시리아어/몽골어와 근본적으로 다릅니다. 의미 단위가 단일 글자가 아니라 음절 클러스터(아크샤라)이고 클러스터 안 glyph의 렌더링 순서가 논리적 Unicode 순서와 다른 경우가 잦은 Indic 아부기다 문자입니다. 두 메서드가 데바나가리의 Indic 능력 계층을 노출합니다:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
자동 통합(v2.119.67):
전형적인 워크플로(시리아어)
PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf'); PDF.SetGSUBScript('syrc'); // GSUB 엔진 문서 참조 for i := 0 to Length(Run) - 1 do begin Pos := PDF.GetSyriacPosition(Run, i); // init / medi / fina / isol // 위치에 맞는 치환 glyph을 GSUB로 조회 // 출력 + MarkUnicodeGlyphUsed end;
전형적인 워크플로(자동 재정렬이 있는 데바나가리)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; // Repha + I-matra 자동 재정렬 PDF.CurrentPage.SetFont('NotoDeva', [], 14); PDF.CurrentPage.UnicodeTextOut(50, 700, 0, UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"
Unicode subset과 추출 헬퍼
범위와 한계 현재 생산자 측 통합 시리아어, 몽골어, 티베트어, Indic shaping은 이제 명시적인 API 참조 페이지를 갖습니다. 시리아어는 현재 범위에는 RTL cursive script인 N'Ko와 Adlam, 태국어/라오어 SARA AM·성조 기호 정렬, 히브리어 niqqud 정렬, 자바어 pre-base 기호도 포함됩니다. 이 경로는 script shaping 사전 처리 메서드에 문서화돼 있습니다
See also: 아랍어 / 페르시아어 / 우르두어 shaping 지원, 자동 shaping 파이프라인(Phase 8), OpenType GSUB 치환 엔진, THotPDF.AssignSyntheticCodepointForGID |