equal
deleted
inserted
replaced
3 # Copyright 2005-2008 Matt Mackall <mpm@selenic.com> |
3 # Copyright 2005-2008 Matt Mackall <mpm@selenic.com> |
4 # |
4 # |
5 # This software may be used and distributed according to the terms of the |
5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. |
6 # GNU General Public License version 2 or any later version. |
7 |
7 |
8 import cgi, re, os, time, urllib, textwrap |
8 import cgi, re, os, time, urllib |
9 import util, encoding |
9 import util, encoding |
10 |
10 |
11 def stringify(thing): |
11 def stringify(thing): |
12 '''turn nested template iterator into string.''' |
12 '''turn nested template iterator into string.''' |
13 if hasattr(thing, '__iter__') and not isinstance(thing, str): |
13 if hasattr(thing, '__iter__') and not isinstance(thing, str): |
59 def findparas(): |
59 def findparas(): |
60 start = 0 |
60 start = 0 |
61 while True: |
61 while True: |
62 m = para_re.search(text, start) |
62 m = para_re.search(text, start) |
63 if not m: |
63 if not m: |
64 w = len(text) |
64 uctext = unicode(text[start:], encoding.encoding) |
65 while w > start and text[w - 1].isspace(): |
65 w = len(uctext) |
|
66 while 0 < w and uctext[w - 1].isspace(): |
66 w -= 1 |
67 w -= 1 |
67 yield text[start:w], text[w:] |
68 yield (uctext[:w].encode(encoding.encoding), |
|
69 uctext[w:].encode(encoding.encoding)) |
68 break |
70 break |
69 yield text[start:m.start(0)], m.group(1) |
71 yield text[start:m.start(0)], m.group(1) |
70 start = m.end(1) |
72 start = m.end(1) |
71 |
73 |
72 return "".join([space_re.sub(' ', textwrap.fill(para, width)) + rest |
74 return "".join([space_re.sub(' ', util.wrap(para, width=width)) + rest |
73 for para, rest in findparas()]) |
75 for para, rest in findparas()]) |
74 |
76 |
75 def firstline(text): |
77 def firstline(text): |
76 '''return the first line of text''' |
78 '''return the first line of text''' |
77 try: |
79 try: |