Текстовые каналы (gtk.TextIter)

TextIter отражают позицию между двумя символами в текстовом буфере. TextIter обычно создаются с помощью метода текстового буфера. При изменении количества симолов в текстовом буфере TextIter перестают действовать (за исключением использования TextIter для вставки или удаления). Вставка или удаление картинок или якорей также является отключающим изменением.

Существует большое число методов связанных с объектом TextIter. Они группируются по своему функционалу.

13.4.1. Атрибуты канала

TextBuffer содержащий TextIter может быть получен с помощью метода:

  buffer = iter.get_buffer()

Следующие методы могут быть использованы для получения места в буфере, на которое указывает TextIter:

  offset = iter.get_offset()			# Возвращает сдвиг канала в буфере

  line_number = iter.get_line()			# Возвращает номер строки содержащей канал

  line_offset = iter.get_line_offset()		# Возвращает сдвиг канала в строке

  numchars = iter.get_chars_in_line()		# Возвращает число символов в строке

13.4.2. Атрибуты текста в канале

PangoLanguage используется в точке текстового буфера, указанной каналом, и получается вызовом метода:

  language = iter.get_language()

Более распространённый метод получения атрибутов текста в TextIter:

  result = iter.get_attributes(values)

где result показывает какие из заданных values (объект TextAttributes) были изменены. Заданные values получаются с помощью использования метода TextView:

  values = textview.get_default_attributes()

Следующие атрибуты доступны для объекта TextAttributes. (не доступно в PyGTK <= 1.99.15, но его вы скорее уже не встретите):

bg_color Цвет фона
fg_color Цвет переднего плана (шрифта)
bg_stipple Штрих заднего плана
fg_stipple Штрих переднего плана
rise Сдвиг текста относительно базовой линии
underline Стиль подчёркивания
strikethrough Перечёркивание текста
draw_bg TRUE если некоторые TextTag влияют на фон
justification Стиль выравнивания
direction Направление текста
font Используется PangoFontDescription
font_scale Используется масштабирование шрифта
left_margin Местоположение левой границы
right_margin Местоположение правой границы
pixels_above_lines Отступ в пикселях до строки
pixels_below_lines Отступ в пикселях после строки
pixels_inside_wrap Отступ между разделёнными строками
tabs Используется PangoTabArray
wrap_mode Используется режим переноса
language Используется PangoLanguage
invisible Невидимость текста (Не доступно в GTK+ 2.0)
bg_full_height Задний план растягивается по всей высоте
editable Текст редактируем
realized Текст реализован
pad1
pad2
pad3
pad4

13.4.3. Копирование канала

TextIter может быть скопирован с помощью метода:

  iter_copy = iter.copy()

13.4.4. Изменение текста и объектов

Различное количество текста и объектов может быть получено из TextBuffer с помощью следующих методов:

  char = iter.get_char()		# возвращает символ или 0 в конце буфера

  text = start.get_slice(end)		# Возвращает текст между каналами start и end

  text = start.get_text(end)		# Возвращает текст между каналами start и end

  pixbuf = iter.get_pixbuf()		# Возвращает картинку из этой позиции (или None)

  anchor = iter.get_child_anchor()	# Возвращает якорь (или None)

  mark_list = iter.get_marks()		# Возвращает список меток

  tag_list = iter.get_toggled_tags()	# Возвращает список TextTag - переключателей.

  tag_list = iter.get_tags()		# Возвращает список TextTag по приоритетам

13.4.5. Проверка условий в канале

Условия TextTag в местоположении TextIter могут быть проверены с помощью следующих методов:

  result = iter.begins_tag(tag=None)	# TRUE если tag включается на iter

  result = iter.ends_tag(tag=None)	# TRUE если tag выключается на iter

  result = iter.toggles_tag(tag=None)	# TRUE если tag включается или выключается на iter

  result = iter.has_tag(tag)		# TRUE если tag активен на iter

Эти методы возвращают TRUE, если  заданный tag выполняет условие в iter. Если tag равен None для трёх первых методов, то возвращается тоже TRUE.

Следующие методы показывают, является ли текст в местоположении TextIter редактируемым или позволяет вставку текста:

  result = iter.editable()

  result = iter.can_insert(default_editability)

Метод editable() показывает, находится ли iter в редактируемом отрывке текста. Метод can_insert() показывает, может ли текст быть вставлен на iter учитывая редактируемость TextViewTextBuffer и TextTag. default_editability обычно получают с помощью метода:

  default_editability = textview.get_editable()

Равенство двух TextIter может быть проверено с помощью метода:

  are_equal = lhs.equal(rhs)

Два TextIter можно сравнить с помощью метода:

  result = lhs.compare(rhs)

result будет:  -1 если lhs меньше, чем rhs; 0 если lhs равен rhs; и 1 если lhs больше, чем rhs.

Для определения, находится ли TextIter между двумя TextIter, используется метод:

  result = iter.in_range(start, end)

result будет TRUE если iter между start и end. Примечание: start и end должны быть в порядке возрастания. Это может быть гарантировано с помощью метода:

  first.order(second)

который переназначит сдвиги TextIter так, чтобы first был до second.

13.4.6. Проверка расположения в тексте

Положение TextIter, относительно текста в TextBuffer, может быть выяснено с помощью нескольких методов:

  result = iter.starts_word()

  result = iter.ends_word()

  result = iter.inside_word()

  result = iter.starts_sentence()

  result = iter.ends_sentence()

  result = iter.inside_sentence()

  result = starts_line()

  result = iter.ends_line()

result возвращает TRUE, если TextIter находится в заданной позиции. Эти методы говорят сами за себя. Границы текстовых элементов определяются языком, используемым в TextIter. Заметим, что строка, содержащая предложения, считается абзацем.

Следующие методы используются для определения, находится ли TextIter в начале или конце текстового буфера:

  result = iter.is_start()

  result = iter.is_end()

result будет TRUE, если  TextIter находится в начале или в конце буфера.

Возможно, TextIter будет находится не на позиции курсора. Следующий метод показывает находится ли TextIter на том же месте, где и курсор.

  result = iter.is_cursor_position()

13.4.7. Перемещение по тексту

TextIter могут быть перемещены по TextBuffer. Языковые единицы определяются с помощью PangoLanguage, используемого в TextIter. Основные методы:

  result = iter.forward_char()			# Вперёд на один символ

  result = iter.backward_char()			# Назад на один символ

  result = iter.forward_word_end()		# Вперёд до конца слова

  result = iter.backward_word_start()		# Назад до конца слова

  result = iter.forward_sentence_end()		# Вперёд до конца предложения

  result = iter.backward_sentence_start()	# Назад до начала предложения

  result = iter.forward_line()			# Вперёд до начала следующей строки

  result = iter.backward_line()			# Назад до начала предыдущей сроки

  result = iter.forward_to_line_end()		# Вперёд до конца строки

  result = iter.forward_cursor_position()	# Вперёд на одну позицию курсора 

  result = iter.backward_cursor_position()	# Назад на одну позицию курсора

result будет TRUE, если TextIter был перемещён, и FALSE если TextIter находится в начале или конце TextBuffer.

Все вышесказанные методы (за исключением forward_to_line_end()) имеют аналогичные методы для задания числа шагов (которые могут быть положительными или отрицательными) для перемещения TextIter на определённое число конструкций:

  result = iter.forward_chars(count)

  result = iter.backward_chars(count)

  result = iter.forward_word_ends(count)

  result = iter.backward_word_starts(count)

  result = iter.forward_sentence_ends(count)

  result = iter.backward_sentence_starts(count)

  result = iter.forward_lines(count)

  result = iter.backward_lines(count)

  result = iter.forward_cursor_positions(count)

  result = iter.backward_cursor_positions(count)

13.4.8. Перемещение в определённое место

TextIter может быть перемещён в определённое место буфера с помощью следующих методов:

  iter.set_offset(char_offset)			# Переместить на определённый символьный сдвиг

  iter.set_line(line_number)			# Переместить к началу заданной строки

  iter.set_line_offset(char_on_line)		# Переместить к заданному символьному сдвигу, относительно начала текущей строки

  iter.forward_to_end()				# Перемещение к концу буфера

В дополнение к этому, TextIter может быть перемещён на место, где включён или выключен TextTag, с помощью методов:

  result = iter.forward_to_tag_toggle(tag)

  result = iter.backward_to_tag_taoggle(tag)

result будет TRUE, если TextIter был перемещён на новое место, где переключён tag. Если tag равен None, тогда TextIter будет перемещён туда, где переключен любой TextTag.

13.4.9. Поиск по тексту

Поиск строки в TextBuffer происходит с помощью методов:

  match_start, match_end = iter.forward_search(str, flags, limit=None)

  match_start, match_end = iter.backward_search(str, flags, limit=None)

return является кортежем, включающем TextIter‘ы, которые указывают на первый символ совпадения и первый символ после совпадения. str это искомая строка. flags изменяют условия поиска.

flag может принимать значения:

  gtk.TEXT_SEARCH_VISIBLE_ONLY		# невидимые символы игнорируются

  gtk.TEXT_SEARCH_TEXT_ONLY		# картинки и якори игнорируются

limit это дополнительный TextIter, который указывает на границы поиска.


Предыдущая страница На уровень выше  Следующая страница
13.3. Текстовый буфер (gtk.TextBuffer) Оглавление  13.5. Маркировка текста (gtk.TextMark)

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>