字体和字形

字体

Pango 支持一种灵活的架构,特定渲染架构可以在其中提供字体的实现。PangoFont 结构表示独立于抽象渲染系统的字体。Pango 提供了例程以列出可用的字体,并加载与给定描述匹配的字体。

从概念上来说,Pango 将字体分组为面孔和系列,由名称来识别。字体面孔提供单个字体样式的不同大小。字体系列提供可用字体样式。

举例来说,“Helvetica”是系列,“Helvetica Bold”是该系列的面孔,“Helvetica Bold 12pt”是该面孔的具体字体。

字体枚举

用于处理系统上可用字体并缓存已加载字体的核心对象是 PangoFontMap。应用程序通常使用单个字体映射。

由于字体映射取决于正在使用的渲染架构,因此需要使用后端函数 pango_cairo_font_map_get_default() 来获取默认字体映射。根据平台的不同,它将返回 PangoCairoFcFontMapPangoCairoWin32FontMapPangoCairoCoreTextFontMap

获取字体映射后,可以使用 pango_font_map_list_families() 枚举可用的字体系列。要枚举字体系列的面孔,请使用 pango_font_family_list_faces()

字体描述

由于加载字体会使用系统资源,因此 Pango 提供了一种描述字体而不加载它们的方法。 PangoFontDescription 是一个结构,其中包含足够的信息,可以使用 pango_font_map_load_font()pango_context_load_font() 加载具体字体。可以使用 pango_font_face_describe() 从字体面孔获取字体描述,或者通过解析字符串获取,例如

Helvetica Bold 12pt

使用 pango_font_description_from_string()

字形

字体提供有关字形如何定位和渲染的信息。Pango 渲染管道使用这些信息创建 PangoGlyphString,其中包含与文本中的字符相对应的字形,以及字形位置和大小等相关信息,还有群集信息(即哪些字形对应于哪些字符)。

A glyph string

字形由 PangoGlyph 标识,这是一个数值 ID。请注意,字形 ID 具有字体特定性:同一个字符可以在不同的字体中用不同的字形 ID 表示。

字符和字形之间的映射通常既不是 1 对 1 的,也不是映射:单个字形可能表示多个字符(如连字的情况),单个字符可能由多个字形表示(例如,当组合重音和基础字符时),而在复杂脚本中,多个字符可以形成重新排列并由多个字形表示的群集。