How do I wrap text?
Brad Howes
bradh at mediaone.net
Sun Feb 6 02:05:43 EST 2000
Doug Sauder <dwsauder at mailexcite.com> writes:
> It seems like there should be some very easy way to wrap long lines of
> text.
Below is something I've used to format auto-generated email messages. The Sink
class referred to is simply a class wrapper around the 'array' module.
#
# TextFill -- reformats a text block so that each line is no longer than the
# indicated margin value. Understands some indentation.
#
def TextFill( text, margin = 72 ):
#
# Intialize accumulator for a paragraph of text.
#
sink = Sink.New()
count = 0
indent = ''
#
# Visit each line of text. Append as much as we can to the current
# line until we reach a margin limit, where a new line is formed. If
# there is an empty line, a new paragraph is started.
#
for eachLine in splitfields( text, '\n' ):
#
# Do we have a paragraph separator?
#
if len( strip( eachLine ) ) == 0:
#
# Finish off any active paragraph
#
if count > 0:
sink << '\n\n'
count = 0
indent = ''
#
# Normal processing.
#
else:
#
# If the line starts with a space, assume we have indentation.
# Don't wrap it.
#
if eachLine[ 0 ] == ' ':
tmp = 0
while eachLine[ tmp ] == ' ':
tmp = tmp + 1
indent = eachLine[ : tmp ]
if count == 0:
sink << indent
elif eachLine[ 0 ] == '*':
indent = ''
#
# Copy over words from the line
#
for eachWord in split( eachLine ):
#
# Finish line if we have reached the margin.
#
wordLen = len( eachWord )
if count > 0 and count + wordLen > margin:
sink << '\n' << indent
count = len( indent )
#
# Add word to current paragraph
#
count = count + wordLen + 1
sink << eachWord << ' '
#
# Close any remaining paragraph.
#
if count > 0:
sink << '\n'
return sink.Value()
def Test():
tmp = '''Four score and seven years ago our fathers brought forth on
this continent a new nation, conceived in liberty and dedicated to the
proposition that all men are created equal. Now we are engaged in
a great civil war, testing whether that nation or any nation so
conceived and so dedicated can long endure. We are met on a great
battlefield of that war. We have come to dedicate a portion of
that field as a final resting-place for those who here gave their
lives that that nation might live. It is altogether fitting and
proper that we should do this. But in a larger sense, we cannot
dedicate, we cannot consecrate, we cannot hallow this ground.
The brave men, living and dead who struggled here have consecrated
it far above our poor power to add or detract. The world will
little note nor long remember what we say here, but it can never
forget what they did here. It is for us the living rather to be
dedicated here to the unfinished work which they who fought here
have thus far so nobly advanced. It is rather for us to be here
dedicated to the great task remaining before us--that from these
honored dead we take increased devotion to that cause for which
they gave the last full measure of devotion--that we here highly
resolve that these dead shall not have died in vain, that this
nation under God shall have a new birth of freedom, and that
government of the people, by the people, for the people shall
not perish from the earth.'''
print Fill( tmp, 20 )
print Fill( tmp, 40 )
print Fill( tmp, 72 )
--
"Were people this stupid before TV?" -- _White Noise_ by Don DeLillo
More information about the Python-list
mailing list