文本属性和标记
文本属性
Pango 中多个位置都使用了带属性文本。项目化过程中用作输入,同时在创建 PangoLayout
时也会使用。
属性可以影响渲染管道的各个阶段。例如,字体或大小属性将影响项目化时进行的字体选择,字体特征和字距属性将影响造型,而颜色或下划线属性将用于渲染。
Pango 对各个属性(如 PangoAttrColor
或 PangoAttrFontDesc
)使用简单的结构。每个属性都有一个类型以及一个 start 和 end 索引来确定属性应用到的字符范围。请参阅 PangoAttrType
枚举了解所有可能的属性类型。
属性很少单独出现。Pango 使用 PangoAttrList
结构来保存应用于文本片段的所有属性。
Pango 标记
通常,你想向用户显示一段文本并对其中的部分文本应用属性(例如,加粗或斜体)。有了 Pango 基本界面,你可以创建一个 PangoAttrList
并将其应用于文本;问题是你需要将属性应用于一定范围内的字符,例如“字符 12 到 17”。从国际化的角度看,这是行不通的;翻译文本后,想要斜体的单词可能会出现在不同的位置。
解决方法是将文本属性包含在要翻译的字符串中。Pango 提供了一个小型标记语言来提供此功能。你可以使用 pango_parse_markup()
或 pango_markup_parser_new()
将标记字符串解析为字符串文本加上 PangoAttrList
。
标记字符串的一个简单示例可能如下所示
<span foreground="blue" size="x-large">Blue text</span> is <i>cool</i>!
使用标记在阿拉伯语文本中对组合标记着色的更详细示例
<span foreground="purple">ا</span><span foreground="red">َ</span>ل<span foreground="blue">ْ</span>ع<span foreground="red">َ</span>ر<span foreground="red">َ</span>ب<span foreground="red">ِ</span>ي<span foreground="green">ّ</span><span foreground="red">َ</span>ة<span foreground="blue">ُ</span>
Pango 使用 GMarkup 解析此语言,这意味着 XML 功能(例如 ©
表示 © 的数字字符实体)也可以使用。
标记文档的根标记是 <markup>
,但 pango_parse_markup()
允许你省略此标记,因此你可能永远不需要使用它。最常见的标记是 <span>
,然后再有一些方便的标记。
<span>
属性
- font
- font_desc
- 字体描述字符串,如“Sans Italic 12”。有关字符串表示格式的说明,请参阅
pango_font_description_from_string()
。请注意,任何其他 span 属性都将覆盖此描述。因此,如果你有“Sans Italic”和 style=”normal”属性,你将得到 Sans Normal,而不是斜体。 - font_family
- face
- 一个字体系列名称。
- font_size
- size
- 字号,以 1/1024 点为单位,或以磅为单位(例如“12.5pt”),或绝对大小之一“xx-small”、“x-small”、“small”、“medium”、“large”、“x-large”、“xx-large”,或百分比之一(例如“200%”),或相对大小之一“smaller”或“larger”。如果你想指定绝对大小,通常更简单的做法是借助使用“font”指定部分字体描述的功能;你可以使用 font=‘12.5’ 而不是 size=‘12800’ 或 size=‘12.5pt’。Pango 1.50 新增对指定磅或百分比字号的支持。
- font_style
- style
- 介于“normal”、“oblique”、“italic”之一。
- font_weight
- 权重
- 介于“ultralight”、“light”、“normal”、“bold”、“ultrabold”、“heavy”或一个数字权重之一。
- font_variant
- 变体
- 介于“normal”、“small-caps”、“all-small-caps”、“petite-caps”、“all-petite-caps”、“unicase”、“title-caps”之一。自1.50版本开始,除了“normal”和“small-caps”之外的值均可用。
- font_stretch
- 拉伸
- 介于“ultracondensed”、“extracondensed”、“condensed”、“semicondensed”、“normal”、“semiexpanded”、“expanded”、“extraexpanded”、“ultraexpanded”之一。
- font_features
- 按与CSS接受的语法相同的语法,以逗号分隔的OpenType字体功能设置列表。例如:
font_features='dlig=1, -kern, afrc on'
。 - foreground
- fgcolor
- 颜色
- RGB颜色规范,例如“#00FF00”或“red”等颜色名称。自1.38版本开始,“#00FF007F”等RGBA颜色规范将被解释为同时指定前景色和前景alpha。
- background
- bgcolor
- RGB颜色规范,例如“#00FF00”或“red”等颜色名称。自1.38版本开始,“#00FF007F”等RGBA颜色规范将被解释为同时指定背景色和背景alpha。
- alpha
- fgalpha
- 前景色的alpha 值,介于1和65536之间的普通整数或“50%”等百分比值。
- background_alpha
- bgalpha
- 背景色的alpha 值,介于1和65536之间的普通整数或“50%”等百分比值。
- underline
- 介于“none”、“single”、“double”、“low”、“error”之一。
- underline_color
- 下划线的颜色;RGB颜色规范,例如“#00FF00”或“red”等颜色名称。
- overline
- 介于“none”或“single”之一。Pango 1.46中新增了overline支持。
- overline_color
- 上划线的颜色;RGB颜色规范,例如“#00FF00”或“red”等颜色名称。Pango 1.46中新增了overline支持。
- rise
- 垂直位移,以Pango单位或点数(例如“5pt”)为单位。下标可以为负值,上标可以为正值。Pango 1.50中新增了以点数指定rise的支持。
- baseline_shift
- 垂直位移。与rise不同,baseline_shift属性是累加的。值可以是Pango单位或点数(例如“5pt”)中的长度,也可以是“superscript”或“subscript”。自1.50版本开始提供。
- font_scale
- 字体大小更改。可能的值为“superscript”、“subscript”或“small-caps”。这类似于font_size的值“smaller”或“larger”,但使用字体度量来查找新的大小。自1.50版本开始提供。
- strikethrough
- 是否在文本上划线,值为“true”或“false”。
- strikethrough_color
- 删除线颜色;RGB颜色规范,例如“#00FF00”或“red”等颜色名称。
- fallback
- 是否启用回退,值为“true”或“false”。如果禁用,则仅从系统上最匹配的字体中使用字符。不会回退到系统中可能包含文本中字符的其他字体。默认情况下启用回退。大多数应用程序不应该禁用回退。
- lang
- 语言代码,表示文本语言。
- letter_spacing
- 字母间距,以点的1024分之一为单位。
- gravity
- 介于“south”、“east”、“north”、“west”、“auto”之一。
- gravity_hint
- 介于“natural”、“strong”、“line”之一。
- show
- 指定以可见形式显示哪些特殊字符。值可以是“none”或“spaces”、“line-breaks”和“ignorables”的组合,并与“|”组合。Pango 1.44中新增了显示特殊字符的支持。
- insert_hyphens
- ‘true’ 或 ‘false’ 表示在单词中间断行的时候是否插入连字符。自 Pango 1.44 起可用。
- allow_breaks
- ‘true’ 或 ‘false’ 表示是否允许断行。自 Pango 1.44 起可用。
- line_height
- 覆盖行距。值可以是用于调整运行逻辑范围的因子(< 1024),也可以是绝对值(以点的 1024 分之一为单位)。自 Pango 1.50 起可用。
- text_transform
- 指定字形塑造期间如何转化字符。值可以是 ‘none’、‘lowercase’、‘uppercase’ 或 ‘capitalize’。自 Pango 1.50 起添加了对文本转化的支持。
- segment
- 覆盖单词或句子边界。该值可以是 ‘word’ 或 ‘sentence’,以表示应该将跨度视为单个单词或句子。为允许此功能,将会拆分重叠的部分,并且会相应调整断行。自 Pango 1.50 起可用。
方便标签
<b>
- 粗体
<big>
- 使字体相对较大,等同于
<span size="larger">
<i>
- 斜体
<s>
- 删除线
<sub>
- 下标
<sup>
- 上标
<small>
- 使字体相对较小,等同于
<span size="smaller">
<tt>
- 等宽字体
<u>
- 下划线