annotate Lib/formatter.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 70cc238d563e
children 52695efdf22c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 import regex
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 import regsub
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import string
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import sys
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
5 from types import StringType
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 AS_IS = None
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
3150
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
11 class NullFormatter:
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
12
4360
dbf2737d2c81 Add provisions to set the (to be documented!) instance variable
Guido van Rossum <guido@python.org>
parents: 4147
diff changeset
13 def __init__(self, writer=None):
dbf2737d2c81 Add provisions to set the (to be documented!) instance variable
Guido van Rossum <guido@python.org>
parents: 4147
diff changeset
14 if not writer:
dbf2737d2c81 Add provisions to set the (to be documented!) instance variable
Guido van Rossum <guido@python.org>
parents: 4147
diff changeset
15 writer = NullWriter()
dbf2737d2c81 Add provisions to set the (to be documented!) instance variable
Guido van Rossum <guido@python.org>
parents: 4147
diff changeset
16 self.writer = writer
3150
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
17 def end_paragraph(self, blankline): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
18 def add_line_break(self): pass
4385
70cc238d563e (formatter.py): Simplify NullFormatter definition of add_hor_rule() to match
Fred Drake <fdrake@acm.org>
parents: 4360
diff changeset
19 def add_hor_rule(self, *args, **kw): pass
70cc238d563e (formatter.py): Simplify NullFormatter definition of add_hor_rule() to match
Fred Drake <fdrake@acm.org>
parents: 4360
diff changeset
20 def add_label_data(self, format, counter, blankline=None): pass
3150
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
21 def add_flowing_data(self, data): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
22 def add_literal_data(self, data): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
23 def flush_softspace(self): pass
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
24 def push_alignment(self, align): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
25 def pop_alignment(self): pass
3150
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
26 def push_font(self, x): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
27 def pop_font(self): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
28 def push_margin(self, margin): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
29 def pop_margin(self): pass
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
30 def set_spacing(self, spacing): pass
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
31 def push_style(self, *styles): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
32 def pop_style(self, n=1): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
33 def assert_line_data(self, flag=1): pass
3150
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
34
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
35
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 class AbstractFormatter:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
38 # Space handling policy: blank spaces at the boundary between elements
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
39 # are handled by the outermost context. "Literal" data is not checked
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
40 # to determine context, so spaces in literal data are handled directly
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
41 # in all circumstances.
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
42
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 def __init__(self, writer):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 self.writer = writer # Output device
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
45 self.align = None # Current alignment
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
46 self.align_stack = [] # Alignment stack
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 self.font_stack = [] # Font state
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 self.margin_stack = [] # Margin state
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 self.spacing = None # Vertical spacing state
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 self.style_stack = [] # Other state, e.g. color
3150
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
51 self.nospace = 1 # Should leading space be suppressed
490be865aa0d added NullFormatter
Guido van Rossum <guido@python.org>
parents: 3130
diff changeset
52 self.softspace = 0 # Should a space be inserted
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
53 self.para_end = 1 # Just ended a paragraph
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
54 self.parskip = 0 # Skipped space between paragraphs?
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
55 self.hard_break = 1 # Have a hard break
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
56 self.have_label = 0
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 def end_paragraph(self, blankline):
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
59 if not self.hard_break:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
60 self.writer.send_line_break()
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
61 self.have_label = 0
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
62 if self.parskip < blankline and not self.have_label:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
63 self.writer.send_paragraph(blankline - self.parskip)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
64 self.parskip = blankline
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
65 self.have_label = 0
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
66 self.hard_break = self.nospace = self.para_end = 1
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 self.softspace = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 def add_line_break(self):
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
70 if not (self.hard_break or self.para_end):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
71 self.writer.send_line_break()
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
72 self.have_label = self.parskip = 0
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
73 self.hard_break = self.nospace = 1
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 self.softspace = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
76 def add_hor_rule(self, *args, **kw):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
77 if not self.hard_break:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
78 self.writer.send_line_break()
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
79 apply(self.writer.send_hor_rule, args, kw)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
80 self.hard_break = self.nospace = 1
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
81 self.have_label = self.para_end = self.softspace = self.parskip = 0
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
83 def add_label_data(self, format, counter, blankline = None):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
84 if self.have_label or not self.hard_break:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
85 self.writer.send_line_break()
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
86 if not self.para_end:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
87 self.writer.send_paragraph((blankline and 1) or 0)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
88 if type(format) is StringType:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
89 self.writer.send_label_data(self.format_counter(format, counter))
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
90 else:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
91 self.writer.send_label_data(format)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
92 self.nospace = self.have_label = self.hard_break = self.para_end = 1
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
93 self.softspace = self.parskip = 0
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 def format_counter(self, format, counter):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 label = ''
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 for c in format:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 try:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 if c == '1':
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
100 label = label + ('%d' % counter)
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 elif c in 'aA':
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
102 if counter > 0:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
103 label = label + self.format_letter(c, counter)
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 elif c in 'iI':
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
105 if counter > 0:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
106 label = label + self.format_roman(c, counter)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
107 else:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
108 label = label + c
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 except:
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
110 label = label + c
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 return label
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 def format_letter(self, case, counter):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 label = ''
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 while counter > 0:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 counter, x = divmod(counter-1, 26)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 s = chr(ord(case) + x)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 label = s + label
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 return label
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 def format_roman(self, case, counter):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 ones = ['i', 'x', 'c', 'm']
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 fives = ['v', 'l', 'd']
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
124 label, index = '', 0
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 # This will die of IndexError when counter is too big
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 while counter > 0:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 counter, x = divmod(counter, 10)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 if x == 9:
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
129 label = ones[index] + ones[index+1] + label
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 elif x == 4:
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
131 label = ones[index] + fives[index] + label
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 if x >= 5:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 s = fives[index]
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 x = x-5
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 s = ''
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 s = s + ones[index]*x
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
139 label = s + label
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 index = index + 1
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
141 if case == 'I':
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
142 return string.upper(label)
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 return label
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
145 def add_flowing_data(self, data,
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
146 # These are only here to load them into locals:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
147 whitespace = string.whitespace,
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
148 join = string.join, split = string.split):
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 if not data: return
3382
a44235e994f3 better way to normalize spaces in add_flowing_data
Guido van Rossum <guido@python.org>
parents: 3150
diff changeset
150 # The following looks a bit convoluted but is a great improvement over
a44235e994f3 better way to normalize spaces in add_flowing_data
Guido van Rossum <guido@python.org>
parents: 3150
diff changeset
151 # data = regsub.gsub('[' + string.whitespace + ']+', ' ', data)
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
152 prespace = data[:1] in whitespace
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
153 postspace = data[-1:] in whitespace
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
154 data = join(split(data))
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
155 if self.nospace and not data:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
156 return
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
157 elif prespace or self.softspace:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
158 if not data:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
159 if not self.nospace:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
160 self.softspace = 1
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
161 self.parskip = 0
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
162 return
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
163 if not self.nospace:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
164 data = ' ' + data
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
165 self.hard_break = self.nospace = self.para_end = \
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
166 self.parskip = self.have_label = 0
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
167 self.softspace = postspace
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 self.writer.send_flowing_data(data)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
169
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 def add_literal_data(self, data):
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
171 if not data: return
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
172 if self.softspace:
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
173 self.writer.send_flowing_data(" ")
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
174 self.hard_break = data[-1:] == '\n'
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
175 self.nospace = self.para_end = self.softspace = \
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
176 self.parskip = self.have_label = 0
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 self.writer.send_literal_data(data)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178
3130
dcf2a37e73d9 add flush_softspace() interface
Guido van Rossum <guido@python.org>
parents: 2916
diff changeset
179 def flush_softspace(self):
dcf2a37e73d9 add flush_softspace() interface
Guido van Rossum <guido@python.org>
parents: 2916
diff changeset
180 if self.softspace:
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
181 self.hard_break = self.para_end = self.parskip = \
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
182 self.have_label = self.softspace = 0
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
183 self.nospace = 1
3130
dcf2a37e73d9 add flush_softspace() interface
Guido van Rossum <guido@python.org>
parents: 2916
diff changeset
184 self.writer.send_flowing_data(' ')
dcf2a37e73d9 add flush_softspace() interface
Guido van Rossum <guido@python.org>
parents: 2916
diff changeset
185
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
186 def push_alignment(self, align):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
187 if align and align != self.align:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
188 self.writer.new_alignment(align)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
189 self.align = align
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
190 self.align_stack.append(align)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
191 else:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
192 self.align_stack.append(self.align)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
193
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
194 def pop_alignment(self):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
195 if self.align_stack:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
196 del self.align_stack[-1]
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
197 if self.align_stack:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
198 self.align = align = self.align_stack[-1]
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
199 self.writer.new_alignment(align)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
200 else:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
201 self.align = None
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
202 self.writer.new_alignment(None)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
203
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 def push_font(self, (size, i, b, tt)):
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
205 if self.softspace:
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
206 self.hard_break = self.para_end = self.softspace = 0
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
207 self.nospace = 1
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
208 self.writer.send_flowing_data(' ')
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 if self.font_stack:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 csize, ci, cb, ctt = self.font_stack[-1]
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 if size is AS_IS: size = csize
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 if i is AS_IS: i = ci
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 if b is AS_IS: b = cb
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 if tt is AS_IS: tt = ctt
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 font = (size, i, b, tt)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 self.font_stack.append(font)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 self.writer.new_font(font)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 def pop_font(self):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 if self.font_stack:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 del self.font_stack[-1]
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 if self.font_stack:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 font = self.font_stack[-1]
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 font = None
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 self.writer.new_font(font)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
227
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 def push_margin(self, margin):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 self.margin_stack.append(margin)
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
230 fstack = filter(None, self.margin_stack)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
231 if not margin and fstack:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
232 margin = fstack[-1]
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
233 self.writer.new_margin(margin, len(fstack))
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
234
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 def pop_margin(self):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 if self.margin_stack:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 del self.margin_stack[-1]
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
238 fstack = filter(None, self.margin_stack)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
239 if fstack:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
240 margin = fstack[-1]
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 margin = None
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
243 self.writer.new_margin(margin, len(fstack))
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
244
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 def set_spacing(self, spacing):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 self.spacing = spacing
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 self.writer.new_spacing(spacing)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
248
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
249 def push_style(self, *styles):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
250 if self.softspace:
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
251 self.hard_break = self.para_end = self.softspace = 0
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
252 self.nospace = 1
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
253 self.writer.send_flowing_data(' ')
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
254 for style in styles:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
255 self.style_stack.append(style)
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
256 self.writer.new_styles(tuple(self.style_stack))
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
257
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
258 def pop_style(self, n=1):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
259 del self.style_stack[-n:]
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 self.writer.new_styles(tuple(self.style_stack))
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
262 def assert_line_data(self, flag=1):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
263 self.nospace = self.hard_break = not flag
4147
30f1c01f3865 Three sets of changes from Grail:
Guido van Rossum <guido@python.org>
parents: 3653
diff changeset
264 self.para_end = self.parskip = self.have_label = 0
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
265
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
266
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
267 class NullWriter:
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
268 """Minimal writer interface to use in testing.
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
269 """
3653
5309cef8c169 change DumbWriter to derive from NullWriter
Guido van Rossum <guido@python.org>
parents: 3650
diff changeset
270 def __init__(self): pass
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
271 def new_alignment(self, align): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
272 def new_font(self, font): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
273 def new_margin(self, margin, level): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
274 def new_spacing(self, spacing): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
275 def new_styles(self, styles): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
276 def send_paragraph(self, blankline): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
277 def send_line_break(self): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
278 def send_hor_rule(self, *args, **kw): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
279 def send_label_data(self, data): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
280 def send_flowing_data(self, data): pass
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
281 def send_literal_data(self, data): pass
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
283
3653
5309cef8c169 change DumbWriter to derive from NullWriter
Guido van Rossum <guido@python.org>
parents: 3650
diff changeset
284 class AbstractWriter(NullWriter):
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
285
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 def __init__(self):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 pass
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
289 def new_alignment(self, align):
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
290 print "new_alignment(%s)" % `align`
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
291
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 def new_font(self, font):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 print "new_font(%s)" % `font`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
294
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 def new_margin(self, margin, level):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 print "new_margin(%s, %d)" % (`margin`, level)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
297
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 def new_spacing(self, spacing):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 print "new_spacing(%s)" % `spacing`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
300
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 def new_styles(self, styles):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 print "new_styles(%s)" % `styles`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
303
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 def send_paragraph(self, blankline):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 print "send_paragraph(%s)" % `blankline`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
306
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 def send_line_break(self):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 print "send_line_break()"
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
309
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
310 def send_hor_rule(self, *args, **kw):
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 print "send_hor_rule()"
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
312
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 def send_label_data(self, data):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 print "send_label_data(%s)" % `data`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
315
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 def send_flowing_data(self, data):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 print "send_flowing_data(%s)" % `data`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
318
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 def send_literal_data(self, data):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 print "send_literal_data(%s)" % `data`
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
321
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
322
3653
5309cef8c169 change DumbWriter to derive from NullWriter
Guido van Rossum <guido@python.org>
parents: 3650
diff changeset
323 class DumbWriter(NullWriter):
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
324
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 def __init__(self, file=None, maxcol=72):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 self.file = file or sys.stdout
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
327 self.maxcol = maxcol
3653
5309cef8c169 change DumbWriter to derive from NullWriter
Guido van Rossum <guido@python.org>
parents: 3650
diff changeset
328 NullWriter.__init__(self)
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
329 self.reset()
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
330
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 def reset(self):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 self.col = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 self.atbreak = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
334
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 def send_paragraph(self, blankline):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
336 self.file.write('\n' + '\n'*blankline)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
337 self.col = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
338 self.atbreak = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
339
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 def send_line_break(self):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 self.file.write('\n')
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 self.col = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
343 self.atbreak = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
344
3650
5d6fe145f773 Many improvements dure to Fred Drake
Guido van Rossum <guido@python.org>
parents: 3383
diff changeset
345 def send_hor_rule(self, *args, **kw):
2916
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
346 self.file.write('\n')
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 self.file.write('-'*self.maxcol)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
348 self.file.write('\n')
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 self.col = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 self.atbreak = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
351
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
352 def send_literal_data(self, data):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 self.file.write(data)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 i = string.rfind(data, '\n')
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 if i >= 0:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 self.col = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
357 data = data[i+1:]
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 data = string.expandtabs(data)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 self.col = self.col + len(data)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
360 self.atbreak = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
361
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
362 def send_flowing_data(self, data):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
363 if not data: return
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
364 atbreak = self.atbreak or data[0] in string.whitespace
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 col = self.col
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
366 maxcol = self.maxcol
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 write = self.file.write
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
368 for word in string.split(data):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
369 if atbreak:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 if col + len(word) >= maxcol:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 write('\n')
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
372 col = 0
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
373 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 write(' ')
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
375 col = col + 1
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 write(word)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
377 col = col + len(word)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
378 atbreak = 1
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 self.col = col
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 self.atbreak = data[-1] in string.whitespace
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
381
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
382
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 def test(file = None):
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
384 w = DumbWriter()
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 f = AbstractFormatter(w)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 if file:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 fp = open(file)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
388 elif sys.argv[1:]:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 fp = open(sys.argv[1])
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 fp = sys.stdin
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
392 while 1:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 line = fp.readline()
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 if not line:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 break
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 if line == '\n':
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 f.end_paragraph(1)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 else:
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 f.add_flowing_data(line)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 f.end_paragraph(0)
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
401
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
402
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 if __name__ == '__main__':
764b0fc867a4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 test()