您的位置:  首页 » Python » formatter- 通用输出格式 – 其他服务(Python教程)(参考资料)

formatter– 通用输出格式化

自版本3.4以后不推荐使用:由于缺少使用,格式化程序模块已被弃用.


该模块支持两个接口定义,每个定义都有多个实现:formatter接口,以及格式化器接口所需的writer接口.

Formatter对象将格式化事件的抽象流转换为writer对象上的specificoutput事件。Formatters管理多个堆栈结构,以允许更改和恢复writer对象的各种属性;作家不能处理相对变化,也不能进行任何“改变”操作。可以通过formatterobjects控制的特定编写器属性是​​水平对齐,字体和左边距缩进。提供了Amechanism,它还支持向作者提供任意的,非独有的样式设置。附加界面有助于格式化不可逆的事件,例如段落分离.

Writer对象封装了设备接口。支持抽象设备,例如文件格式,以及物理设备。所提供的实现都与抽象设备一起使用。该界面提供了机制,用于设置格式化对象管理和将数据插入输出的属性.

 

格式化程序界面

创建格式化程序的接口取决于实例化的特定格式化程序类。下面描述的接口是所有格式化程序初始化后必须支持的必需接口.

一个数据元素在模块级别定义:

formatter.AS_IS
可以在传递给下面描述的push_font()方法的字体规范中使用的值,或者作为任何其他的新值push_property()方法。按AS_IS值可以调用相应的pop_property()方法,而无需跟踪属性是否被更改.

为formatter实例对象定义了以下属性:

formatter.writer
格式化程序与之交互的作者实例
formatter.end_paragraph// (blanklines)
关闭任何空白段落并在下一段之前插入至少blanklines.
formatter.add_line_break
添加一个硬换行符(如果尚不存在)。这不会打破逻辑段落.
formatter.add_hor_rule (*args, **kw)
在输出中插入一个水平规则。如果当前段落中有数据,则插入硬分解,但逻辑段落不会被破坏。这些参数和关键字被传递给作者的send_line_break()method.
formatter.add_flowing_data(data)
提供应该用折叠的空格格式化的数据。当执行空白崩溃时,认为来自前面和后续调用add_flowing_data()的空格也是如此。通过该方法传递的数据预期由输出设备进行自动换行。请注意,由于需要依靠设备和字体信息,任何包装仍然必须由编写者对象执行.
formatter.add_literal_data (data )
提供应该传递给writer的数据不变。空格,包括换行符和制表符,在data.
formatter.add_label_dataformat, counter
插入一个标签,该标签应放在当前左边距的左侧。这应该用于构建项目符号列表或编号列表。如果formatvalue是一个字符串,它被解释为counter的格式规范,它应该是一个整数。这种格式化的结果成为标签的价值;如果format不是一个字符串,它直接用作标签。标签值作为唯一参数传递给作者的send_label_data()方法。非字符串标签值的解释取决于相关的编者.

格式规范是字符串,它与计数器值一起用于计算标签值。格式字符串中的每个字符都被复制到标签值,并识别一些字符以指示计数器值的变换。具体来说,人物"1"将对位格式化程序表示为阿拉伯数字,字符"A""a"分别表示大写和小写的计数器值的字母表示,并且"I""i"表示Romannumerals中的计数器值,大写和小写。请注意,字母和romant变换要求计数器值大于零.

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_marginmargin
将左边距缩进的数量增加1,将逻辑标签margin与新缩进相关联。初始保证金水平为0。逻辑标签的变更值必须为真值;除了AS_IS之外的错误值不足以改变边距.
formatter.pop_margin ()
恢复上一个边距.
formatter.push_style*styles
推送任意数量的任意样式规格。所有样式都按顺序推到样式堆栈上。代表整个堆栈的元组,包括AS_IS值,传递给作者的new_styles()方法
formatter.pop_style (n=1
Pop最后n样式规范传递给push_style()。代表修改后的堆栈的元组,包括AS_IS值,传递给作者new_styles()方法
formatter.set_spacing (spacing
设置作者的间距样式.
formatter.assert_line_data (flag=1 )
通知格式化程序已将数据添加到当前段落外。当作者被直接操作时应该使用它。可选flag如果编写器操作在输出结束时产生硬换行,则参数可以设置为false

 

Formatter实现

该模块提供了格式化程序对象的两种实现。Mostapplications可以使用这些类中的一个而不进行修改或子类化.

class formatter.NullFormatter (writer=None )
一个什么都不做的格式化程序。如果省略writer,则创建NullWriter实例。没有作者的方法被NullFormatter实例。如果实现编写器接口但不需要继承任何实现,则实现应继承自此类.
class formatter.AbstractFormatter (writer )
标准格式化程序。这种实现已经证明对许多作者有广泛的适用性,并且可以在大多数情况下直接使用。它已被用于实现功能齐全的万维网浏览器.

 

编写器接口

创建编写器的接口依赖于实例化的特定编写器类。下面描述的接口是编写者初始化后必须支持的必需接口。请注意,虽然大多数应用程序可以使用AbstractFormatter类作为格式化程序,但编写器必须通常由应用程序提供.

writer.flush ()
Flush any buffered输出或设备控制事件.
writer.new_alignment (align)
设置对齐方式。align值可以是任何对象,但按照惯例是字符串或None,其中None表示应该使用编写者的“首选”对齐方式。常规的align值是"left","center", "right""justify".
writer.new_fontfont
设置字体样式。font的值是None,表示应该使用设备的默认字体,或者形式为(size,italic, bold, teletype)。大小将是一个字符串,表示应该使用的大小offont;特定字符串及其解释必须由应用程序定义。italic, boldteletypevalues是布尔值,指定应该使用哪些字体属性.
writer.new_margin(margin, level)
将边距级别设置为整数level和逻辑标签至 margin解释逻辑标签是由作者自行决定的;唯一对逻辑标记值的限制是它不是// level.
writer.new_spacingspacing
将间距样式设置为spacing.
writer.new_stylesstyles
设置其他样式。styles值是任意值的元组;值AS_IS应该被忽略。styles根据应用程序和编写器实现的要求,元组可以解释为一组或一堆栈.
writer.send_line_break ()
打破当前行.
writer.send_paragraphblankline
产生至少blankline空白行或相等的段落分隔。blankline值将是一个整数。请注意,在此callif之前,如果需要换行,则实现将接收对send_line_break()的调用;此方法不应包括结束段落的最后一行。它只负责段之间的垂直间距.
writer.send_hor_rule (*args, **kw
在输出设备上显示水平规则。这种方法的论据完全是应用程序和作者特定的,应该用care来解释。方法实现可以假设已经通过send_line_break().
writer.send_flowing_datadata
输出了换行符,输出字符数据可以根据需要进行自动换行和重新流动。在这种方法的调用序列中,作者可以假设多个空白字符的跨度已经折叠为单个空格字符.
writer.send_literal_data (data
输出已格式化显示的字符数据。通常,这应该被解释为应该保留换行符指示的换行符,并且不应该引入新的换行符。数据可能包含嵌入的换行符和制表符,不像提供的数据send_formatted_data() interface
writer.send_label_data (data
 data如果可能的话,当前左边距的左边。data的价值不受限制;处理非字符串值完全取决于应用程序和编写器。此方法仅在行开始时调用.

 

Writer实现

本模块提供了编写器对象接口的三个实现作为示例。大多数应用程序需要从NullWriter class

class formatter.NullWriter
一个只提供接口定义的编写器派生新的编写器类;不对任何方法采取任何行动。这应该是所有编写者的基类,不需要任何实现方法.
class formatter.AbstractWriter
一个可以用于调试格式化程序的编写器,但不是很多。每种方法都只是通过在standardoutput上打印它的名称和参数来宣告自己.
class formatter.DumbWriter (file=None, maxcol=72)
简单的写入类在文件对象上写入输出传递为file或者,如果file被省略,则在标准输出上传递。输出完全自动换行为maxcol指定的列数。此类适用于回复一系列段落.

发表评论

电子邮件地址不会被公开。 必填项已用*标注