# -*- coding: utf-8 -*- class Flags: oneline: bool = False nospaces: bool = False class Printer: flags = Flags() def __init__(self, full_key='', printer=None): if printer is None: self.output = print else: self.output = printer.pprint self.parent = printer self.empty = self.__class__.flags.oneline self.full_key = full_key self.has_output = False self.label = '' def set_label(self, label='', maxlength=0): self.label = self._get_label(label, maxlength) def _get_label(self, label: str, maxlength: int): if label == '': return label label = "%s: " % label if self.parent is None or self.parent.full_key == '': if self.__class__.flags.nospaces: return label.rjust(maxlength+4) else: return (label + " ").rjust(maxlength+6) else: return label.ljust(maxlength+2) def pprint(self, data: str): self.output("%s%s" % (self.label, data)) self.has_output = True if not self.empty: self.label = ' ' * len(self.label) self.empty = True def space(self, force=False): if not self.__class__.flags.nospaces: if self.has_output or force: self.output('')