(text, width)
return lines
wrap_text(text : string, width : int) -> [string]

    Split 'text' into multiple lines of no more than 'width' characters
    each, and return the list of strings that results.
wrap_text(text : string, width : int) -> [string]
wrap_text ( text : string width : int ) - > [ string ]
def wrap_text(text, width):
    """wrap_text(text : string, width : int) -> [string]

    Split 'text' into multiple lines of no more than 'width' characters
    each, and return the list of strings that results.
    """
    if text is None:
        return []
    if len(text) <= width:
        return [text]

    text = text.expandtabs()
    text = text.translate(WS_TRANS)
    chunks = re.split(r'( +|-+)', text)
    chunks = [ch for ch in chunks if ch] # ' - ' results in empty strings
    lines = []

    while chunks:
        cur_line = []                   # list of chunks (to-be-joined)
        cur_len = 0                     # length of current line

        while chunks:
            l = len(chunks[0])
            if cur_len + l <= width:    # can squeeze (at least) this chunk in
                cur_line.append(chunks[0])
                del chunks[0]
                cur_len = cur_len + l
            else:                       # this line is full
                # drop last chunk if all space
                if cur_line and cur_line[-1][0] == ' ':
                    del cur_line[-1]
                break

        if chunks:                      # any chunks left to process?
            # if the current line is still empty, then we had a single
            # chunk that's too big too fit on a line -- so we break
            # down and break it up at the line width
            if cur_len == 0:
                cur_line.append(chunks[0][0:width])
                chunks[0] = chunks[0][width:]

            # all-whitespace chunks at the end of a line can be discarded
            # (and we know from the re.split above that if a chunk has
            # *any* whitespace, it is *all* whitespace)
            if chunks[0][0] == ' ':
                del chunks[0]

        # and store this line in the list-of-all-lines -- as a single
        # string, of course!
        lines.append(''.join(cur_line))

    return lines
def wrap_text ( text , width ) : if text is None : return [ ] if len ( text ) <= width : return [ text ] text = text . expandtabs ( ) text = text . translate ( WS_TRANS ) chunks = re . split ( r'( +|-+)' , text ) chunks = [ ch for ch in chunks if ch ] # ' - ' results in empty strings lines = [ ] while chunks : cur_line = [ ] # list of chunks (to-be-joined) cur_len = 0 # length of current line while chunks : l = len ( chunks [ 0 ] ) if cur_len + l <= width : # can squeeze (at least) this chunk in cur_line . append ( chunks [ 0 ] ) del chunks [ 0 ] cur_len = cur_len + l else : # this line is full # drop last chunk if all space if cur_line and cur_line [ - 1 ] [ 0 ] == ' ' : del cur_line [ - 1 ] break if chunks : # any chunks left to process? # if the current line is still empty, then we had a single # chunk that's too big too fit on a line -- so we break # down and break it up at the line width if cur_len == 0 : cur_line . append ( chunks [ 0 ] [ 0 : width ] ) chunks [ 0 ] = chunks [ 0 ] [ width : ] # all-whitespace chunks at the end of a line can be discarded # (and we know from the re.split above that if a chunk has # *any* whitespace, it is *all* whitespace) if chunks [ 0 ] [ 0 ] == ' ' : del chunks [ 0 ] # and store this line in the list-of-all-lines -- as a single # string, of course! lines . append ( '' . join ( cur_line ) ) return lines