HPDFShapeHeadlessTextStyledSpan
function HPDFShapeHeadlessTextStyledSpan(const Context: UnicodeString;
FirstUnit, UnitCount: Integer; const Order: THPDFHeadlessTextOrder;
const FontBytes: SysUtils.TBytes; MaximumGlyphs: Integer;
CancellationToken: THPDFCancellationToken;
CharacterAdvance, WordAdvance: Double;
CSSLetterSpacing, CSSWordSpacing: Boolean): THPDFHeadlessShapedGlyphs;
Declarada em HPDFHeadlessShaping, esta função faz o shaping de um span UTF-16 usando seu contexto ao redor completo e a ordem visual previamente resolvida, com o runtime HarfBuzz e FriBidi fornecido e os bytes da fonte
FirstUnit é um offset UTF-16 com base zero e UnitCount seleciona o span solicitado; os chamadores precisam fornecer dados de order compatíveis e um orçamento positivo de MaximumGlyphs
CharacterAdvance e WordAdvance usam advances normalizados de 1000 font units, e não pontos PDF; converta o spacing em pontos com pontos * 1000 / fontSize antes de chamar
Advances raw precisam ser finitos e ter valores absolutos de no máximo 1000000000000000, permitindo o orçamento nativo de pontos no menor tamanho positivo de fonte suportado; os appearance builders aplicam seus limites separados de pontos autorados e computados
CSSLetterSpacing habilita tracking em unidades tipográficas e tratamento de ligaduras opcionais; CSSWordSpacing habilita meio spacing ao redor de clusters SPACE e NBSP, incluindo separator marks, seguindo o perfil de spacing delimitado
Os advances e offsets dos glyphs retornados incluem o spacing solicitado; SpacingAdvance registra sua contribuição, enquanto TypographicUnit, CursiveUnit e WordSeparator fornecem metadados de fronteira para o compositor rich de linhas físicas
O cancelamento é checado durante a classificação e o shaping, e falhas de orçamento de glyphs ou de entrada malformada usam o contrato existente de exceções de shaping; esta função não publica PDF nem é dona dos bytes da fonte ou do token do chamador
Os entry points existentes de shaping preservam sua semântica anterior; rebuild de consumers Pascal e C++Builder exige os records públicos de glyphs e headers gerados correspondentes