;ò )äHEc@s]dZdkZdZdZZdZdfd„ƒYZd„Zedjo eƒndS( sç Here is TextFormatter, a simple module for formatting text into columns of specified widths. It does multiline wrapping and supports left, center and right alignment. SKWM made filling & padding optional, tweaked some edge cases Niiis TextFormattercBs3tZdZdfd„ƒYZd„Zd„ZRS(s÷ Formats text into columns. Constructor takes a list of dictionaries that each specify the properties for a column. Dictionary entries can be: width the width within which the text will be wrapped alignment left|center|right margin amount of space to prefix in front of column The compose() method takes a list of strings and returns a formatted string consisting of each string wrapped within its respective column. Example: formatter = TextFormatter( ( {'width': 10}, {'width': 12, 'margin': 4}, {'width': 20, 'margin': 8, 'alignment': right}, ) ) print formatter.compose( ( "A rather short paragraph", "Here is a paragraph containing a veryveryverylongwordindeed.", "And now for something on the right-hand side.", ) ) gives: A rather Here is a And now for short paragraph something on the paragraph containing a right-hand side. veryveryvery longwordinde ed. sColumncBsDtZdedddd„Zd„Zd„Zd„Zd„ZRS( NiKiicCs:||_||_||_||_||_g|_dS(N(swidthsselfs alignmentsmarginsfillspadslines(sselfswidths alignmentsmarginsfillspad((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pys__init__Bs      cCsw|itjoti||iƒSnM|itjoti||iƒSn&|ioti ||iƒSn|SdS(N( sselfs alignmentscentersstringslineswidthsrightsrjustspadsljust(sselfsline((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pysalignJs cCs,g|_g}|io€x!ti|ƒD]h}||ijo|i |ƒq)x>t dt |ƒ|iƒD]!}|i ||||i!ƒqlWq)Wn¥x‚ti|dƒD]n}xXti|ƒD]G}x>t dt |ƒ|iƒD]!}|i ||||i!ƒqäWqÂW|i dƒq¬W|ddjo|iƒn|oä|idƒ}xª|D]¢}dt |ƒ}|djo#|ii |i|ƒƒd}qZt |ƒ||ijo#|ii |i|ƒƒ|}qZ|o|d|}qZ|}qZW|o|ii |i|ƒƒq(ndS(Nis iÿÿÿÿiss (sselfslinesswordssfillsstringssplitstextswordswidthsappendsrangeslensislinespopscurrents incrementsalign(sselfstextswordsis incrementscurrentswordssline((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pyswrapUsH  '#    cCsX|t|iƒjod|i|i|Sn%|iod|i|iSndSdS(Ns s(sindexslensselfslinessmarginspadswidth(sselfsindex((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pysgetlinexs  cCst|iƒSdS(N(slensselfslines(sself((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pysnumliness(s__name__s __module__slefts__init__salignswrapsgetlinesnumlines(((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pysColumn@s  # cCs=g|_x-|D]%}|iittif|ƒƒqWdS(N(sselfscolumnss colspeclistscolspecsappendsapplys TextFormattersColumn(sselfs colspeclistscolspec((s=/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/TextFormatter.pys__init__„s cCsêd}t|ƒ}t|ƒt|iƒjo td‚nxEtt||iƒD].\}}|i |ƒt ||iƒƒ}qQWdg|}xCt|ƒD]5}x,|iD]!}|||i|ƒ||