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')
Другие вопросы по тегам