parameters: (text, length=None, indent='', firstline_indent=None, tabs='    ')
return_statement: return '\n'.join(result)
docstring: Wraps a given text to a maximum line length and returns it.
  
    We turn lines that only contain whitespace into empty lines.  We keep
    new lines and tabs (e.g., we do not treat tabs as spaces).
  
    Args:
      text:             text to wrap
      length:           maximum length of a line, includes indentation
                        if this is None then use GetHelpWidth()
      indent:           indent for all but first line
      firstline_indent: indent for first line; if None, fall back to indent
      tabs:             replacement for tabs
  
    Returns:
      wrapped text
  
    Raises:
      FlagsError: if indent not shorter than length
      FlagsError: if firstline_indent not shorter than length
docstring_summary: Wraps a given text to a maximum line length and returns it.
docstring_tokens: Wraps a given text to a maximum line length and returns it .
function: def TextWrap(text, length=None, indent='', firstline_indent=None, tabs='    '):
    """Wraps a given text to a maximum line length and returns it.
  
    We turn lines that only contain whitespace into empty lines.  We keep
    new lines and tabs (e.g., we do not treat tabs as spaces).
  
    Args:
      text:             text to wrap
      length:           maximum length of a line, includes indentation
                        if this is None then use GetHelpWidth()
      indent:           indent for all but first line
      firstline_indent: indent for first line; if None, fall back to indent
      tabs:             replacement for tabs
  
    Returns:
      wrapped text
  
    Raises:
      FlagsError: if indent not shorter than length
      FlagsError: if firstline_indent not shorter than length
    """
    # Get defaults where callee used None
    if length is None:
      length = GetHelpWidth()
    if indent is None:
      indent = ''
    if len(indent) >= length:
      raise FlagsError('Indent must be shorter than length')
    # In line we will be holding the current line which is to be started
    # with indent (or firstline_indent if available) and then appended
    # with words.
    if firstline_indent is None:
      firstline_indent = ''
      line = indent
    else:
      line = firstline_indent
      if len(firstline_indent) >= length:
        raise FlagsError('First line indent must be shorter than length')
  
    # If the callee does not care about tabs we simply convert them to
    # spaces If callee wanted tabs to be single space then we do that
    # already here.
    if not tabs or tabs == ' ':
      text = text.replace('\t', ' ')
    else:
      tabs_are_whitespace = not tabs.strip()
  
    line_regex = re.compile('([ ]*)(\t*)([^ \t]+)', re.MULTILINE)
  
    # Split the text into lines and the lines with the regex above. The
    # resulting lines are collected in result[]. For each split we get the
    # spaces, the tabs and the next non white space (e.g. next word).
    result = []
    for text_line in text.splitlines():
      # Store result length so we can find out whether processing the next
      # line gave any new content
      old_result_len = len(result)
      # Process next line with line_regex. For optimization we do an rstrip().
      # - process tabs (changes either line or word, see below)
      # - process word (first try to squeeze on line, then wrap or force wrap)
      # Spaces found on the line are ignored, they get added while wrapping as
      # needed.
      for spaces, current_tabs, word in line_regex.findall(text_line.rstrip()):
        # If tabs weren't converted to spaces, handle them now
        if current_tabs:
          # If the last thing we added was a space anyway then drop
          # it. But let's not get rid of the indentation.
          if (((result and line != indent) or
               (not result and line != firstline_indent)) and line[-1] == ' '):
            line = line[:-1]
          # Add the tabs, if that means adding whitespace, just add it at
          # the line, the rstrip() code while shorten the line down if
          # necessary
          if tabs_are_whitespace:
            line += tabs * len(current_tabs)
          else:
            # if not all tab replacement is whitespace we prepend it to the word
            word = tabs * len(current_tabs) + word
        # Handle the case where word cannot be squeezed onto current last line
        if len(line) + len(word) > length and len(indent) + len(word) <= length:
          result.append(line.rstrip())
          line = indent + word
          word = ''
          # No space left on line or can we append a space?
          if len(line) + 1 >= length:
            result.append(line.rstrip())
            line = indent
          else:
            line += ' '
        # Add word and shorten it up to allowed line length. Restart next
        # line with indent and repeat, or add a space if we're done (word
        # finished) This deals with words that cannot fit on one line
        # (e.g. indent + word longer than allowed line length).
        while len(line) + len(word) >= length:
          line += word
          result.append(line[:length])
          word = line[length:]
          line = indent
        # Default case, simply append the word and a space
        if word:
          line += word + ' '
      # End of input line. If we have content we finish the line. If the
      # current line is just the indent but we had content in during this
      # original line then we need to add an empty line.
      if (result and line != indent) or (not result and line != firstline_indent):
        result.append(line.rstrip())
      elif len(result) == old_result_len:
        result.append('')
      line = indent
  
    return '\n'.join(result)
function_tokens: def TextWrap ( text , length = None , indent = '' , firstline_indent = None , tabs = '    ' ) : # Get defaults where callee used None if length is None : length = GetHelpWidth ( ) if indent is None : indent = '' if len ( indent ) >= length : raise FlagsError ( 'Indent must be shorter than length' ) # In line we will be holding the current line which is to be started # with indent (or firstline_indent if available) and then appended # with words. if firstline_indent is None : firstline_indent = '' line = indent else : line = firstline_indent if len ( firstline_indent ) >= length : raise FlagsError ( 'First line indent must be shorter than length' ) # If the callee does not care about tabs we simply convert them to # spaces If callee wanted tabs to be single space then we do that # already here. if not tabs or tabs == ' ' : text = text . replace ( '\t' , ' ' ) else : tabs_are_whitespace = not tabs . strip ( ) line_regex = re . compile ( '([ ]*)(\t*)([^ \t]+)' , re . MULTILINE ) # Split the text into lines and the lines with the regex above. The # resulting lines are collected in result[]. For each split we get the # spaces, the tabs and the next non white space (e.g. next word). result = [ ] for text_line in text . splitlines ( ) : # Store result length so we can find out whether processing the next # line gave any new content old_result_len = len ( result ) # Process next line with line_regex. For optimization we do an rstrip(). # - process tabs (changes either line or word, see below) # - process word (first try to squeeze on line, then wrap or force wrap) # Spaces found on the line are ignored, they get added while wrapping as # needed. for spaces , current_tabs , word in line_regex . findall ( text_line . rstrip ( ) ) : # If tabs weren't converted to spaces, handle them now if current_tabs : # If the last thing we added was a space anyway then drop # it. But let's not get rid of the indentation. if ( ( ( result and line != indent ) or ( not result and line != firstline_indent ) ) and line [ - 1 ] == ' ' ) : line = line [ : - 1 ] # Add the tabs, if that means adding whitespace, just add it at # the line, the rstrip() code while shorten the line down if # necessary if tabs_are_whitespace : line += tabs * len ( current_tabs ) else : # if not all tab replacement is whitespace we prepend it to the word word = tabs * len ( current_tabs ) + word # Handle the case where word cannot be squeezed onto current last line if len ( line ) + len ( word ) > length and len ( indent ) + len ( word ) <= length : result . append ( line . rstrip ( ) ) line = indent + word word = '' # No space left on line or can we append a space? if len ( line ) + 1 >= length : result . append ( line . rstrip ( ) ) line = indent else : line += ' ' # Add word and shorten it up to allowed line length. Restart next # line with indent and repeat, or add a space if we're done (word # finished) This deals with words that cannot fit on one line # (e.g. indent + word longer than allowed line length). while len ( line ) + len ( word ) >= length : line += word result . append ( line [ : length ] ) word = line [ length : ] line = indent # Default case, simply append the word and a space if word : line += word + ' ' # End of input line. If we have content we finish the line. If the # current line is just the indent but we had content in during this # original line then we need to add an empty line. if ( result and line != indent ) or ( not result and line != firstline_indent ) : result . append ( line . rstrip ( ) ) elif len ( result ) == old_result_len : result . append ( '' ) line = indent return '\n' . join ( result )