Gtk TextBuffer get_iter_at_offset
Я пишу плагин для 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)
1 ответ
Решение
Я понял это в конце, это должно было быть очевидно действительно. Текст в документе содержал некоторые символы, отличные от ascii, поэтому регулярное выражение не могло правильно определить позиции, расшифровка строки документа в unicode устранила проблему.
так:
get_text(doc).decode('utf-8')