- sub.node(ch)
- if reind:
- self.reindent()
- self.endtag(el)
-
- def element(self, el, **extra):
- super(indenter, self).element(el, **extra)
- if self.out.col > 80 and self.simple(el):
- self.reindent()
-
- def reindent(self):
- self.out.indent(self.curind.encode(self.charset))
-
- def start(self):
- super(indenter, self).start()
- self.write('\n')
+ if isinstance(ch, cons.text):
+ return True
+ return False
+
+ def push(self, el):
+ self.stack.append((el, self.curind, self.inline))
+
+ def pop(self):
+ el, self.curind, self.inline = self.stack.pop()
+ return el
+
+ def starttag(self, el):
+ if not self.inline:
+ if self.last[0] == "<" and self.last[1].name == el.name and self.lastendbr:
+ pass
+ else:
+ self.br()
+ self.push(el)
+ self.inline = self.inline or self.inlinep(el)
+ self.curind += self.indent
+ super(indenter, self).starttag(el)
+
+ def shorttag(self, el):
+ if not self.inline:
+ self.br()
+ super(indenter, self).shorttag(el)
+
+ def endtag(self, el):
+ il = self.inline
+ self.pop()
+ if il or (self.last[0] == ">" and self.last[1] == el):
+ self.lastendbr = False
+ else:
+ self.br()
+ self.lastendbr = True
+ super(indenter, self).endtag(el)
+
+ def start(self, el):
+ super(indenter, self).start(el)
+ self.atbreak = True
+
+ def end(self, el):
+ self.br()
+
+ def handle(self, ev, el):
+ super(indenter, self).handle(ev, el)
+ self.last = ev, el
+
+class textindenter(indenter):
+ maxcol = 70
+
+ def text(self, el):
+ left = unicode(el)
+ while True:
+ if len(left) + self.col > self.maxcol:
+ bp = max(self.maxcol - self.col, 0)
+ for i in xrange(bp, -1, -1):
+ if left[i].isspace():
+ while i > 0 and left[i - 1].isspace(): i -= 1
+ break
+ else:
+ for i in xrange(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