文本属性和标记

文本属性

Pango 中多个位置都使用了带属性文本。项目化过程中用作输入,同时在创建 PangoLayout 时也会使用。

属性可以影响渲染管道的各个阶段。例如,字体或大小属性将影响项目化时进行的字体选择,字体特征和字距属性将影响造型,而颜色或下划线属性将用于渲染。

Pango 对各个属性(如 PangoAttrColorPangoAttrFontDesc)使用简单的结构。每个属性都有一个类型以及一个 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>!

Markup example

使用标记在阿拉伯语文本中对组合标记着色的更详细示例

<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>

Markup example

Pango 使用 GMarkup 解析此语言,这意味着 XML 功能(例如 &#169; 表示 © 的数字字符实体)也可以使用。

标记文档的根标记是 <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>
下划线