+ def starttag(self, el):
+ if not self.inline:
+ if self.last[0] == "<" and self.last[1].name == el.name:
+ pass
+ else:
+ self.br()
+ self.push(el)
+ self.inline = self.inline or self.inlinep(el)
+ self.curind += self.indent
+ super().starttag(el)
+
+ def shorttag(self, el):
+ if not self.inline:
+ self.br()
+ super().shorttag(el)
+
+ def endtag(self, el):
+ il = self.inline
+ self.pop()
+ if not il:
+ self.br()
+ super().endtag(el)
+
+ def start(self, el):
+ super().start(el)
+ self.atbreak = True
+
+ def end(self, el):
+ self.br()
+
+ def handle(self, ev, el):
+ super().handle(ev, el)
+ self.last = ev, el
+
+class textindenter(indenter):
+ maxcol = 70
+
+ def text(self, el):
+ left = str(el)
+ while True:
+ if len(left) + self.col > self.maxcol:
+ bp = max(self.maxcol - self.col, 0)
+ for i in range(bp, -1, -1):
+ if left[i].isspace():
+ while i > 0 and left[i - 1].isspace(): i -= 1
+ break
+ else:
+ for i in range(bp + 1, len(left)):
+ if left[i].isspace():
+ break
+ else:
+ i = None
+ if i is None:
+ self.quotewrite(left)
+ break
+ else:
+ self.quotewrite(left[:i])
+ self.br()
+ left = left[i + 1:].lstrip()
+ else:
+ self.quotewrite(left)
+ break