Package MeatEngine :: Package Widgets :: Module wordWrap
[hide private]
[frames] | no frames]

Source Code for Module MeatEngine.Widgets.wordWrap

  1  """Meat Engine Word Wrap code 
  2   
  3  Modular word wrapping routine""" 
  4   
  5   
  6   
7 -def fixedWidthFontWidthFunc(string):
8 """ to lay out text using a fixed width font, measure the text 9 width in characters. 10 """ 11 return len(string)
12
13 -def wrap(string, paragraphWidth, strLenFunc=fixedWidthFontWidthFunc, insertParagraphBreak=True):
14 lines=[] 15 paragraphs=string.split("\n") 16 17 for p in paragraphs: 18 # split on any whitespace, and treat it all identically - I 19 # could be smarter about tabs, perhaps. 20 words=p.split() 21 workingString="" 22 while words: 23 newStr=workingString 24 if newStr: 25 newStr+=" " 26 oneWord=False 27 else: 28 oneWord=True 29 newStr+=words[0] 30 31 if strLenFunc(newStr)>paragraphWidth and not oneWord: 32 #too big - emit the previous working string 33 lines.append(workingString) 34 workingString="" 35 else: 36 workingString=newStr 37 words=words[1:] 38 if workingString: 39 lines.append(workingString) 40 if insertParagraphBreak: 41 lines.append("") 42 return lines
43 44
45 -def unwrap(string):
46 """reverses the wrap function - handy for reformatting text that's 47 wrapped in an editor""" 48 paragraphs=[] 49 50 lines=[x.strip() for x in string.split("\n")] 51 52 workingParagraph="" 53 for s in lines: 54 if (not s) and workingParagraph: 55 paragraphs.append(workingParagraph) 56 workingParagraph="" 57 if workingParagraph: 58 workingParagraph+=" " 59 workingParagraph+=s 60 61 return '\n'.join(paragraphs)
62 63 64 65 66 if __name__=="__main__": 67 68 text=""" 69 Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque 70 vitae lectus. Cras mattis enim. Mauris ac nisl eu lorem condimentum 71 convallis. Nunc vestibulum est. Curabitur hendrerit egestas 72 massa. Praesent varius, risus ac interdum condimentum, felis mi 73 tincidunt elit, nec hendrerit lectus nisi sit amet est. In 74 diam. Suspendisse aliquet hendrerit lacus. Integer quis magna ut arcu 75 pulvinar dignissim. Suspendisse potenti. Mauris congue augue id 76 elit. Class aptent taciti sociosqu ad litora torquent per conubia 77 nostra, per inceptos hymenaeos. Ut interdum mollis felis. Suspendisse 78 pharetra lorem nec mi. Nulla blandit. Duis congue. 79 80 Donec vel orci a nisi malesuada porta. Fusce nonummy interdum 81 nunc. Sed venenatis cursus ligula. Proin rhoncus velit sed 82 ligula. Cras sollicitudin diam id mi. In ligula. Morbi turpis pede, 83 euismod id, dictum et, aliquet sed, felis. Praesent metus. Nunc 84 dapibus condimentum libero. Nulla ac sapien vel neque tincidunt 85 lacinia. Phasellus ipsum. Nunc eu ipsum. Mauris erat felis, vulputate 86 ut, tempus nec, pulvinar et, purus. Nunc non mi. Vivamus dignissim 87 neque quis dui. 88 89 Pellentesque id neque. Vivamus malesuada neque sit amet velit. Fusce 90 ut odio. Etiam cursus, turpis at aliquam viverra, elit lectus faucibus 91 sapien, sit amet lobortis justo urna sed ligula. Nunc pharetra gravida 92 dolor. Class aptent taciti sociosqu ad litora torquent per conubia 93 nostra, per inceptos hymenaeos. Aliquam erat volutpat. Ut malesuada 94 mauris. Praesent mattis metus tempor lectus. Suspendisse venenatis 95 placerat justo. Nam tristique, risus ac lacinia ultricies, nisl odio 96 facilisis orci, eu commodo velit magna ut sem. Sed sollicitudin 97 malesuada nunc. Cras non massa. Fusce a enim sed odio tincidunt 98 tempus. Sed blandit est ac sapien. 99 100 Vestibulum ante ipsum primis in faucibus orci luctus et ultrices 101 posuere cubilia Curae; Vestibulum molestie, eros at placerat mattis, 102 diam ipsum scelerisque massa, vitae molestie ipsum magna id 103 magna. Pellentesque habitant morbi tristique senectus et netus et 104 malesuada fames ac turpis egestas. Phasellus metus mi, commodo auctor, 105 sollicitudin eget, placerat nec, urna. Cras enim lorem, congue eget, 106 ornare quis, bibendum vitae, magna. Integer varius. Pellentesque 107 auctor, metus a dictum viverra, purus magna placerat purus, nec 108 volutpat est lorem a tellus. Pellentesque habitant morbi tristique 109 senectus et netus et malesuada fames ac turpis egestas. Sed vehicula 110 posuere neque. Nam commodo rhoncus diam. Vestibulum ornare. Nunc metus 111 erat, egestas sed, semper at, vestibulum vitae, tellus. Integer augue 112 felis, consequat vel, tincidunt quis, accumsan sit amet, odio. Sed 113 mollis, leo sit amet sagittis imperdiet, justo risus dictum orci, a 114 dapibus lorem pede laoreet sem. Vivamus pretium. Mauris vel dolor a 115 ligula congue convallis. Proin mauris metus, luctus sed, venenatis at, 116 hendrerit nec, augue. Nullam massa magna, feugiat ut, ornare in, 117 aliquet non, mauris. 118 119 Nulla facilisi. Cras at libero. Cras mi. Maecenas purus. Donec at 120 augue. Nulla aliquam. Mauris id risus luctus diam ornare 121 ornare. Praesent commodo porttitor leo. In porttitor sollicitudin 122 dolor. Proin eleifend nulla at risus. Nulla commodo nisi. Integer ut 123 enim. 124 """ 125 126 unwrappedText=unwrap(text) 127 print unwrappedText 128 129 for width in range(5,65,5): 130 print "WORD WRAP TEST (%d)"%width 131 print "="*40 132 133 wrappedText=wrap(unwrappedText, width) 134 print '\n'.join(wrappedText) 135 136 print 137