处理复杂脚本

若要提供文本理由,应用程序可以使用两种方法之一。 为了简单实现多语言理由,应用程序应调用 ScriptJustify。 它通过考虑 kashida、词间间距和字符间间距来生成增量 dx 数组。 为了获得更复杂的理由,应用程序可以使用其自己的语言知识和 ScriptShapeSCRIPT_VISATTR 数组中检索的信息来生成更新的增量 dx 数组。

应在由 SCRIPT_VISATTR的 uJustification 成员标识的位置插入对齐空格或 kashida。 执行字符间对齐时,应用程序应仅在标记有SCRIPT_JUSTIFY_CHARACTER的字形之后插入额外的空间。

应用程序使用 ScriptXtoCPScriptCPtoX 执行插入放置和命中测试。 有关详细信息,请参阅 管理插入点放置和命中测试

若要以与字体无关的方式获取宽度,应用程序会调用 ScriptGetLogicalWidths。 通过将逻辑宽度传递给 ScriptApplyLogicalWidth,可以在相同的边界中重新显示文本块,即使原始字体不可用,也会造成可接受的质量损失。 它生成一个字形宽度数组, (适合传递到 ScriptTextOut) 高级宽度。 这种以与字体无关的方式记录和重新应用预先宽度信息在应用程序定义的格式等情况下非常有用。

注意

图元文件不支持字形索引。 若要写入增强型图元文件,应用程序应使用 ExtTextOut 并直接写入逻辑字符。 使用此机制时,在播放文本之前,不会生成字形和放置。

 

若要检索用于当前字体的默认、空白、kashida 等特定字形,应用程序应调用 ScriptGetFontProperties。 为了确定所选字体支持运行中的哪些字符,应用程序调用 ScriptGetCMap。 不可用的字符在字形缓冲区中具有默认字形。 请注意,如果字体使用字形组合(而不是单个字形)呈现字符,此方法将失败。 例如,00C9;拉丁文大写字母 E WITH ACUTE 可以使用大写 E 字形和锐字形呈现。 若要确定对包含这些类型代码点的字符串的字体支持,应用程序可以调用 ScriptShape。 有关详细信息,请参阅 使用整形引擎

ScriptCacheGetHeight 函数从字体缓存中返回字体的高度。 ScriptGetProperties 提供有关所有脚本(按脚本编制索引)所需的特殊处理的信息。 例如,它包括与脚本关联的主要语言、指示脚本是否为数值的数据,以及指示脚本是否为复杂脚本的数据。

ScriptGetGlyphABCWidth 返回给定字形的 ABC 宽度 ,这对于绘制字形图表可能很有用。 但是,不应将其用于常规复杂脚本文本格式设置。

使用 Uniscribe