formatter — Общее форматирование вывода

Не рекомендуется, начиная с версии 3.4: Из-за отсутствия использования модуль formatter устарел.


Модуль поддерживает два определения интерфейса, каждое из которых имеет несколько реализаций: интерфейс formatter и интерфейс writer, необходимый для интерфейса formatter.

Объекты Formatter преобразуют абстрактный поток форматирования событий в конкретные выходные события на объектах записи. Форматеры управляют несколькими структурами стека, что позволяет изменять и восстанавливать различные свойства объекта модуля записи; составители не должны иметь возможности обрабатывать относительные изменения или какие-либо операции обратного изменения. Конкретные свойства устройства записи, которыми можно управлять с помощью объектов formatter, - выравнивание по горизонтали, шрифт и отступы левого поля. Предусмотрен механизм, который поддерживает обеспечение произвольных, неисключительных настроек стиля также для устройства записи. Дополнительные интерфейсы облегчают форматирование событий, которые не являются обратимыми, например разделение абзацев.

Объекты Writer инкапсулируют интерфейсы устройств. Поддерживаются абстрактные устройства, например форматы файлов, а также физические устройства. Все предоставленные реализации работают с абстрактными устройствами. Интерфейс предоставляет механизмы настройки свойств, которыми управляют объекты форматирования, и вставки данных в выходные данные.

Интерфейс Formatter

Интерфейсы для создания форматеров зависят от конкретного класса форматера. Интерфейсы, описанные ниже, являются необходимыми интерфейсами, которые все форматеры должны поддерживать после инициализации.

Один элемент данных определен на уровне модуля:

formatter.AS_IS

Стоимость, которая может быть используемый в спецификации шрифта, прошла к методу push_font(), описанному ниже, или как новый значение к любому другому методу push_property(). Нажатие кнопки AS_IS значение позволяет вызвать соответствующий метод pop_property() без необходимости отслеживать, было ли изменено свойство.

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

formatter.writer

Сущность писателя, с которым взаимодействует форматером.

formatter.end_paragraph(blanklines)

Закройте все открытые абзацы и вставьте не менее blanklines перед следующим абзацем.

formatter.add_line_break()

Добавьте разрыв жесткой строки, если такой разрыв еще не существует. При этом логический абзац не разрывается.

formatter.add_hor_rule(*args, **kw)

Вставьте горизонтальное правило в вывод. Жесткий разрыв вставляется при наличии данных в текущем абзаце, но логический абзац не разрывается. Аргументы и ключевые слова передаются в метод писателя send_line_break().

formatter.add_flowing_data(data)

Укажите данные, которые должны быть отформатированы со свернутым пробелом. Пробел от предыдущих и последовательных вызовов add_flowing_data() также учитывается при выполнении свертывания пробела. Ожидается, что данные, передаваемые этому методу, будут упакованы устройством вывода. Следует отметить, что любая обработка слов должна выполняться объектом записи из-за необходимости полагаться на информацию об устройстве и шрифте.

formatter.add_literal_data(data)

Предоставьте данные, которые должны быть переданы устройству записи без изменений. Пробелы, включая символы новой строки и табуляции, считаются законными в значение data.

formatter.add_label_data(format, counter)

Вставьте метку, которая должна быть размещена слева от текущего левого поля. Это должно быть используемый для построения маркированных или нумерованных списков. Если format значение является строка, он интерпретируется как спецификация формата для counter, которая должна быть целым числом. Результат этого форматирования становится значение метки; если format не является строка, он используемый как метка значение непосредственно. Этикетка значение передана как единственный аргумент методу писателя send_label_data(). Интерпретация non-строка этикетки значения зависит от связанного писателя.

Спецификации формата являются строки, которые в сочетании со счетчиком значение являются используемый для вычисления метки значения. Каждый символ в формате строка скопирован к этикетке значение с некоторыми знаками, которые, как признают, указали на преобразование на встречном значение. А именно, символ '1' представляет встречное средство форматирования значение как арабскую цифру, знаки, 'A' и 'a' представляют алфавитные представления встречного значение в верхнем и нижнем регистре, соответственно, и 'I' и 'i' представляют встречный значение в римских цифрах в верхнем и нижнем регистре. Обратите внимание, что алфавитное и римлянин преобразовывают, требуют, чтобы встречные значение были больше, чем ноль.

formatter.flush_softspace()

Пошлите любой надвигающийся пробел, буферизованный от предыдущего требования до add_flowing_data() к связанному объекту писателя. Это должно вызываться перед любыми прямыми манипуляциями с объектом-автором.

formatter.push_alignment(align)

Поместите новую настройку выравнивания в стек выравнивания. Это может быть AS_IS, если изменения не требуются. Если выравнивание, значение изменен от предыдущей настройки, метод писателя new_alignment(), называют с align значение.

formatter.pop_alignment()

Восстановите предыдущую трассу.

formatter.push_font((size, italic, bold, teletype))

Измените некоторые или все свойства шрифта объекта writer. Свойствам, для которых не задано значение AS_IS, присваивается значение значения, переданное в, в то время как другие свойства поддерживаются в текущих настройках. Метод писателя new_font() называют с полностью решенной спецификацией шрифта.

formatter.pop_font()

Восстановите предыдущий шрифт.

formatter.push_margin(margin)

Увеличьте число отступов левого поля на единицу, связывая логический тег margin с новым отступом. Начальный уровень маржи равен 0. Измененный значения логического тега должен быть true значения; ложных значения, кроме AS_IS, недостаточно для изменения поля.

formatter.pop_margin()

Восстановите предыдущее поле.

formatter.push_style(*styles)

Нажмите любое количество произвольных спецификаций стиля. Все стили помещаются в стек стилей по порядку. Кортеж, представляющий весь стек, включая AS_IS значения, передан к методу писателя new_styles().

formatter.pop_style(n=1)

Укажите последние спецификации стиля n, переданные push_style(). Кортеж, представляющий пересмотренный стек, включая AS_IS значения, передан к методу писателя new_styles().

formatter.set_spacing(spacing)

Задайте стиль интервалов для модуля записи.

formatter.assert_line_data(flag=1)

Сообщите формататору, что данные добавлены в текущий абзац вне полосы. Это должно быть используемый, когда писателем манипулировали непосредственно. Необязательный аргумент flag может быть установлен в значение false, если операции записи привели к жесткому разрыву строки в конце вывода.

Реализация Formatter

Модуль предоставляет две реализации объектов formatter. Большинство приложений могут использовать один из этих классов без изменения или подкласса.

class formatter.NullFormatter(writer=None)

Форматер, который ничего не делает. Если writer опущен, создается NullWriter сущность. Никакие методы писателя не вызываются NullFormatter сущности. Реализации должны наследовать от этого класса при реализации интерфейса записи, но не должны наследовать какую-либо реализацию.

class formatter.AbstractFormatter(writer)

Стандартный форматер. Эта реализация продемонстрировала широкую применимость ко многим писателям и может быть используемый непосредственно в большинстве случаев. Это был используемый, чтобы осуществить полнофункциональный браузер всемирной паутины.

Интерфейс Writer

Интерфейсы для создания модулей записи зависят от конкретного класса модуля записи. Интерфейсы, описанные ниже, являются необходимыми интерфейсами, которые должны поддерживаться всеми записывающими устройствами после инициализации. Следует отметить, что в то время как большинство приложений могут использовать класс AbstractFormatter в качестве форматера, устройство записи обычно должно быть предоставлено приложением.

writer.flush()

Очистите все буферизированные выходные данные или события управления устройством.

writer.new_alignment(align)

Задайте стиль трассы. align значение может быть любым объектом, но по соглашению является строка или None, где None указывает, что «предпочтительное» выравнивание записи должно быть используемый. Обычный align значения - 'left', 'center', 'right' и 'justify'.

writer.new_font(font)

Задайте стиль шрифта. значение font будет None, указывая, что шрифт устройства по умолчанию должен быть используемый или кортежем формы (size, italic, bold, teletype). Размер будет строка, указывающим размер шрифта, который должен быть используемый; конкретные строки и их толкование должны определяться приложением. italic, bold и teletype значения являются логическими значения, указывающими, какой из этих шрифтов атрибуты должен быть используемый.

writer.new_margin(margin, level)

Установите уровень маржи в целочисленный level и логический тэг к margin. Интерпретация логического тега осуществляется по усмотрению составителя; единственным ограничением на значение логического тега является то, что он не является ложным значение для ненулевого значения level.

writer.new_spacing(spacing)

Задайте для стиля интервала значение spacing.

writer.new_styles(styles)

Задайте дополнительные стили. styles значение - кортеж произвольных значения; значение AS_IS следует игнорировать. Кортеж styles может интерпретироваться или как набор или как стек в зависимости от требований внедрения писателя и применения.

writer.send_line_break()

Разрыв текущей строки.

writer.send_paragraph(blankline)

Произведите разделение абзаца по крайней мере blankline пустыми строками или эквивалентом. Значение blankline значение будет целым числом. Следует отметить, что реализация получит вызов send_line_break() перед этим вызовом, если необходим разрыв линии; этот метод не должен включать окончание последней строки абзаца. Он отвечает только за вертикальные интервалы между абзацами.

writer.send_hor_rule(*args, **kw)

Отображение горизонтального правила на устройстве вывода. Аргументы к этому методу полностью специфичны для применения и записи и должны интерпретироваться с осторожностью. Реализация метода может предполагать, что разрыв линии уже был выдан через send_line_break().

writer.send_flowing_data(data)

Выходные данные символ, которые могут быть упакованы по словам и перетекать по мере необходимости. В любой последовательности вызовов этого метода модуль записи может предположить, что диапазоны из нескольких пробелов были свернуты в один пробел.

writer.send_literal_data(data)

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

writer.send_label_data(data)

Установите data слева от текущего левого поля, если это возможно. значение data не ограничивается; лечение non-строка значения полностью зависит от применения и записи. Этот метод будет вызван только в начале строки.

Реализация Writer

Три реализации объектного интерфейса записи представлены в качестве примеров этим модулем. Большинству приложений потребуется получить новые классы записи из класса NullWriter.

class formatter.NullWriter

Модуль записи, который предоставляет только определение интерфейса; никакие действия не выполняются в отношении каких-либо методов. Это должен быть базовый класс для всех модулей записи, которым не нужно наследовать какие-либо методы реализации.

class formatter.AbstractWriter

Писатель, который очень еще может быть используемый в отладке средств форматирования, но не. Каждый метод просто объявляет о себе, печатая свое имя и аргументы на стандартном выходе.

class formatter.DumbWriter(file=None, maxcol=72)

Простой класс записи, который записывает выходные данные на файловый объект, переданные как file, или, если file опущен, на стандартном выводе. Выходные данные просто упаковываются в число столбцов, указанных параметром maxcol. Этот класс подходит для переформатирования последовательности абзацев.