我正在为Gedit编写一个插件,根据正则表达式对某些单词进行更改。在某些情况下,这会将标签应用于预期单词之外的几个字符。
因此match.start()和match.end()返回的值无效,无法在get_iter_at_offset中使用。
def on_save(self, doc, location, *args, **kwargs):
"""called when document is saved"""
for match in WORD_RE.finditer(get_text(doc)):
if not self._checker.check(match.group().strip()):
self.apply_tag(doc, match.start(), match.end())
def apply_tag(self, doc, start, end):
"""apply the tag to the text between start and end"""
istart = doc.get_iter_at_offset(start)
iend = doc.get_iter_at_offset(end)
doc.apply_tag(self._spell_error_tag, istart, iend)
答案 0 :(得分:0)
我最终弄明白了,它应该是显而易见的。 文档中的文本包含一些非ascii字符,因此正则表达式无法正确确定位置,将文档字符串解码为unicode修复了问题。
这样:
get_text(doc).decode('utf-8')