(Copied from an anonymous submission in the Optik bug tracker.) There have been some recent discussions on comp.lang.python about the optparse/optik module, and Steve Bethard suggested you might be interested in some of the work done there. I don't know if you'd find any of this helpful for inclusion in Optik/optparse, but Steve says it's come up on your mailing list too. The problem at hand involves formatting help-strings so that they respect newlines. Simply passing formatted help-strings off to the textwrap.* methods mungs the newlines and loses them. The original thread: http://groups.google.com/group/comp.lang.python/browse_thread/thread/6df6e6b541a15bc2/acf1d05cad60fc45?#acf1d05cad60fc45 My solution: http://groups.google.com/group/comp.lang.python/msg/09f28e26af0699b1 Dan then asked about it, and took my solution and ran with it: http://groups.google.com/group/comp.lang.python/browse_thread/thread/e72deee779d9989b/4ec68cd2a35d52e1?hl=en#4ec68cd2a35d52e1 Feel free to do with it as you like.
FWIW, I would like to see an option on textwrap to preserve newlines for purposes other than optparse formatting. optparse would then just be able to pass that as a flag when building the text wrapper object. Should I open a separate issue targeted at textwrap?
I'd like textwrap option to preserve new lines. Actual case: I have a code that produces cryptograms meant to be printed and solved with paper and pencil. Standard format for cryptogram inserts space character between each character of the original text, doubling the line length. textwrap is handy to fit the cryptogram back to paper width. Problem: When text to "cryptogramize" is a limerick original line breaks should be preserved. P A Y C Y H J K J K Q L Z B J U R G C V F P C Y I P , H A V K V O N A P I Y H H J R K P V U Y U Y I P . A Y C P R E ' Y C L A V L Z G O B B V G E V V G C V F J N O B B . K A Y U Q Y U B J K P I Q N A P ; K A Y H J K K E Y I P . J I V I R F V O K import string import random import textwrap def Shuffle(L): random.shuffle(L) return L def create_cryptogram(quote): """ (disregards cryptogram rule that a letter can't stand for itself) doctest omitted """ # wish: wrap line-by-line to preserve original line breaks wrapped_quote = textwrap.fill(text=quote,width=38).upper() d = {c:c for c in string.printable} d['\n'] = '\n'*2 UC = string.ascii_uppercase d.update(zip(UC,Shuffle(list(UC)))) return ' '.join(d[c] for c in wrapped_quote)