def word_wrap(text, columns=80, indent=4, padding=2):
    """Given a block of text, break it into a list of lines wrapped to length.

    :param str text: The text to wrap
    :param int columns: The number of columns to wrap the text to
    :param int indent: The number of spaces to indent additionally lines to
    :param int padding: The number of columns to pad each side with
    :returns list: A list of wrapped strings

    """
    paragraphs = PARA_BREAK.split(text)
    lines = []
    columns -= padding
    for para in paragraphs:
        if para.isspace():
            continue
        line = ' ' * indent
        for word in para.split():
            if (len(line) + 1 + len(word)) > columns:
                lines.append(line)
                line = ' ' * padding
                line += word
            else:
                line += ' ' + word
        if not line.isspace():
            lines.append(line)
    return lines