<p>我终于想出了自己解决这个问题的办法。我创建了一个解析标记字符串的函数(使用<code>pango.parse_markup</code>)。通过阅读文档和python自省,我能够找到如何使用<code>pango.Attribute</code>并将其转换为<code>GtkTextTag</code>可以使用的属性。在</p>
<p>函数如下:</p>
<pre><code>def parse_markup_string(string):
'''
Parses the string and returns a MarkupProps instance
'''
#The 'value' of an attribute...for some reason the same attribute is called several different things...
attr_values = ('value', 'ink_rect', 'logical_rect', 'desc', 'color')
#Get the AttributeList and text
attr_list, text, accel = pango.parse_markup( string )
attr_iter = attr_list.get_iterator()
#Create the converter
props = MarkupProps()
props.text = text
val = True
while val:
attrs = attr_iter.get_attrs()
for attr in attrs:
name = attr.type
start = attr.start_index
end = attr.end_index
name = pango.AttrType(name).value_nick
value = None
#Figure out which 'value' attribute to use...there's only one per pango.Attribute
for attr_value in attr_values:
if hasattr( attr, attr_value ):
value = getattr( attr, attr_value )
break
#There are some irregularities...'font_desc' of the pango.Attribute
#should be mapped to the 'font' property of a GtkTextTag
if name == 'font_desc':
name = 'font'
props.add( name, value, start, end )
val = attr_iter.next()
return props
</code></pre>
<p>此函数创建一个<code>MarkupProps()</code>对象,该对象能够生成<code>GtkTextTag</code>以及文本中要应用它们的索引。在</p>
<p>目标是:</p>
^{pr2}$
<p>因此,通过这个函数和<code>MarkupProps</code>对象,我能够在给定一个pango标记字符串的情况下,将该字符串分解为它的属性和文本形式,然后将其转换为<code>GtkTextTag</code>s</p>