mercurial/templatefilters.py
changeset 11297 d320e70442a5
parent 10787 5974123d0339
child 11765 aff419e260f9
equal deleted inserted replaced
11296:0054a328b98f 11297:d320e70442a5
     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: