Source code for prettyprinter.render

from io import StringIO

from .sdoctypes import SLine
from .utils import rfind_idx


def as_lines(sdocs):
    it = iter(sdocs)
    currline = []
    for sdoc in it:
        if not isinstance(sdoc, SLine):
            currline.append(sdoc)
        else:
            yield currline
            currline = [sdoc]

    if currline:
        yield currline


[docs]def default_render_to_stream(stream, sdocs, newline='\n', separator=' '): evald = list(sdocs) if not evald: return for sdoc_line in as_lines(evald): last_text_sdoc_idx = rfind_idx( lambda sdoc: isinstance(sdoc, str), sdoc_line ) # Edge case: trailing whitespace on a line. # Currently happens on multiline str value in a dict: # there's a trailing whitespace after the colon that's # hard to eliminate at the doc level. if last_text_sdoc_idx != -1: last_text_sdoc = sdoc_line[last_text_sdoc_idx] sdoc_line[last_text_sdoc_idx] = last_text_sdoc.rstrip() for sdoc in sdoc_line: if isinstance(sdoc, str): stream.write(sdoc) elif isinstance(sdoc, SLine): stream.write(newline + separator * sdoc.indent)
def default_render_to_str(sdocs, newline='\n', separator=' '): stream = StringIO() default_render_to_stream(stream, sdocs, newline, separator) return stream.getvalue()