complete prettyprinter (not much tested)