字体和字形
字体
Pango 支持一种灵活的架构,特定渲染架构可以在其中提供字体的实现。PangoFont
结构表示独立于抽象渲染系统的字体。Pango 提供了例程以列出可用的字体,并加载与给定描述匹配的字体。
从概念上来说,Pango 将字体分组为面孔和系列,由名称来识别。字体面孔提供单个字体样式的不同大小。字体系列提供可用字体样式。
举例来说,“Helvetica”是系列,“Helvetica Bold”是该系列的面孔,“Helvetica Bold 12pt”是该面孔的具体字体。
字体枚举
用于处理系统上可用字体并缓存已加载字体的核心对象是 PangoFontMap
。应用程序通常使用单个字体映射。
由于字体映射取决于正在使用的渲染架构,因此需要使用后端函数 pango_cairo_font_map_get_default()
来获取默认字体映射。根据平台的不同,它将返回 PangoCairoFcFontMap
、PangoCairoWin32FontMap
或 PangoCairoCoreTextFontMap
。
获取字体映射后,可以使用 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
,其中包含与文本中的字符相对应的字形,以及字形位置和大小等相关信息,还有群集信息(即哪些字形对应于哪些字符)。
字形由 PangoGlyph
标识,这是一个数值 ID。请注意,字形 ID 具有字体特定性:同一个字符可以在不同的字体中用不同的字形 ID 表示。
字符和字形之间的映射通常既不是 1 对 1 的,也不是映射:单个字形可能表示多个字符(如连字的情况),单个字符可能由多个字形表示(例如,当组合重音和基础字符时),而在复杂脚本中,多个字符可以形成重新排列并由多个字形表示的群集。