HPDFShapeHeadlessTextSpan
function HPDFShapeHeadlessTextSpan(const Context: UnicodeString;
FirstUnit, UnitCount: Integer; const FontBytes: SysUtils.TBytes;
MaximumGlyphs: Integer; CancellationToken: THPDFCancellationToken;
CharacterAdvance: Double = 0; WordAdvance: Double = 0;
ParagraphDirection: THPDFHeadlessTextDirection = htdAuto): THPDFHeadlessShapedGlyphs;
只用调用方实际的 OpenType 字体对选定的 UTF-16 区间做 shaping,同时把完整的周围段落保留为 HarfBuzz 前文与后文上下文
FirstUnit 是零起算的 UTF-16 偏移,UnitCount 是 UTF-16 长度;两个边界都不得切开代理对,零长度区间不返回任何 glyph
FriBidi 依据完整段落解析嵌入层级;HarfBuzz 接收解析后的 script,并在每个视觉 run 内对选定条目做 shaping,保留阿拉伯连写形态和镜像标点
返回的 SourceOffset 相对于选定区间,UnicodeText 保留每个实际选中的簇,glyph 步进与偏移使用 1000 单位的字体坐标
CharacterAdvance 对每个 shaped 簇应用一次,仅含 Unicode 方向控制符的簇除外;WordAdvance 应用于 U+0020 簇,两者都必须是有限值并使用与 Advance 相同的坐标
当被 shaping 的物理换行行首强字符与原始段落不一致时,ParagraphDirection 可以保留既有的从左到右或从右到左段落方向
既有的输入与 glyph 预算、字体覆盖检查、取消 token 以及原生运行时依赖要求同样适用于该函数
部分区间会保留连写上下文,但不会针对来自另一字体的基础 glyph 独立定位不同样式的组合记号;当一个字体能覆盖整个簇时,应使用完整簇 shaping
参见 HPDFShapeHeadlessText、HPDFResolveHeadlessTextOrder 与 上下文相关富文本外观