THotPDF GPOS 字距调整和定位方法

THotPDF API 参考

 

THotPDF 方法  自动整形  GSUB

本页说明 HotPDF 的 GPOS 成对字距、上下文字距、纵向字距、连写锚点、标记定位和标记到连字查询,以及在文本输出期间应用这些查询的 ShapingFeatures 标志

 

Delphi 语法

function HasGPOSKerning: Boolean;

function GetGPOSPairAdjustment(FirstGID, SecondGID: Word): Integer;

function GetGPOSPairAdjustment(FirstGID, SecondGID: Word; out AXPlacement, AYPlacement, AYAdvance: Integer): Integer;

function GetGPOSSingleAdjustment(GID: Word; const FeatureTag: AnsiString; out XPlacement, YPlacement: Integer; out XAdvance, YAdvance: Integer): Boolean;

function GetGPOSContextualKernRun(const GIDs: array of Word): TArray<Integer>;

function HasGPOSVerticalKern: Boolean;

function GetGPOSVerticalKern(FirstGID, SecondGID: Word): Integer;

function GetGPOSMarkOffset(BaseGID, MarkGID: Word; out DX, DY: Integer): Boolean;

function GetGPOSMarkMarkOffset(BaseMarkGID, AttachMarkGID: Word; out DX, DY: Integer): Boolean;

function HasGPOSCursive: Boolean;

function GetGPOSCursiveAnchors(GID: Word; out EntryX, EntryY, ExitX, ExitY: Integer; out HasEntry, HasExit: Boolean): Boolean;

function GetGPOSMarkToLigatureOffset(LigGID: Word; ComponentIndex: Integer; MarkGID: Word; out DX, DY: Integer): Boolean;

function GetGPOSLigatureComponentCount(LigGID: Word): Integer;

function ApplyMarkToLigatureShaping(const Wide: UnicodeString): UnicodeString;

 

涵盖的 API

API使用说明
HasGPOSKerning报告已注册 Unicode 字体是否公开 GPOS 字距查找
GetGPOSPairAdjustment返回有序字形对的有符号前进量调整,并可通过重载返回带定位信息的 X/Y 偏移
GetGPOSSingleAdjustment查询指定 feature 对单个字形应用的 GPOS LookupType 1 单字形定位/步进调整,加总所有匹配查找后输出 XPlacement/YPlacement/XAdvance/YAdvance
GetGPOSContextualKernRun在字形序列上解析 GPOS Type 7 和 Type 8 定位规则,返回每个字形的上下文字距调整
HasGPOSVerticalKern报告已注册 Unicode 字体是否公开纵向字距或纵向比例调整查找
GetGPOSVerticalKern从 vkrn 或 vpal 查找返回有序字形对的有符号纵向 YAdvance 调整
GetGPOSMarkOffset返回 Mark-to-Base 定位偏移,用于把标记字形附加到基字形
GetGPOSMarkMarkOffset返回 Mark-to-Mark 定位偏移,用于把一个标记字形叠放到另一个标记字形上
HasGPOSCursive报告已注册 Unicode 字体是否公开 GPOS 连写连接查找
GetGPOSCursiveAnchors当字体提供连写连接规则时,返回字形的入口和出口连写锚点
GetGPOSMarkToLigatureOffset返回 Mark-to-Ligature 定位偏移,用于把标记附加到指定连字组件
GetGPOSLigatureComponentCount返回连字字形记录的标记附加组件数量,让调用方可在调用 GetGPOSMarkToLigatureOffset 前选择有效的 ComponentIndex
ApplyMarkToLigatureShaping记录连字组件归属,使文本输出期间可应用 mark-to-ligature 偏移
sfKerning在从左到右的 Unicode 文本输出期间启用 GPOS 成对字距调整
sfMarkPositioning为组合标记启用 GPOS Mark-to-Base 和 Mark-to-Mark 偏移
sfMarkToLigature为附加到单个连字组件的标记启用 GPOS Mark-to-Ligature 偏移
sfCursiveAttachment在 Unicode 文本输出期间启用 GPOS 连写入口/出口锚点对齐,包括由 sfArabicGSUB 整形的从右到左阿拉伯文序列
sfVerticalKerning在纵向文本输出路径中启用 GPOS vkrn 和 vpal 纵向前进量调整

 

使用说明

成对字距以 1000 单位 em 返回有符号前进量和定位调整。上下文字距会在字形序列上解析 Type 7 和 Type 8 查找。标记定位覆盖 Mark-to-Base、Mark-to-Mark 和 Mark-to-Ligature 锚点。ApplyMarkToLigatureShaping 准备 sfMarkToLigature 使用的序列级连字组件数据。连写连接会把一个字形的出口锚点与下一个字形的入口锚点对齐,这在原生 Arabic GSUB 整形已经生成带有这些锚点的字体专用上下文字形 ID 后最有用。输出路径只会在启用匹配的整形标志时应用这些调整

 

另请参阅: ShapingFeatures OpenType GSUB Engine Automatic Shaping Pipeline