X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fsp%2Futil.py;h=931cbdb6d0269810d887d22d52749799f2ff1ac6;hb=537064f6656c313c601126692d31628a85de663d;hp=e7d9c291f1ce29f636e7604209a654a72fe29adc;hpb=919b8a4ff35da1fce73f238754ef376705c52e18;p=wrw.git diff --git a/wrw/sp/util.py b/wrw/sp/util.py index e7d9c29..931cbdb 100644 --- a/wrw/sp/util.py +++ b/wrw/sp/util.py @@ -134,14 +134,7 @@ class formatter(object): def end(self, el): pass - def __next__(self): - if self.src is None: - raise StopIteration() - try: - ev, el = next(self.src) - except StopIteration: - self.src = None - ev, el = "$", None + def handle(self, ev, el): if ev == ">": self.starttag(el) elif ev == "/": @@ -156,6 +149,16 @@ class formatter(object): self.start(el) elif ev == "$": self.end(el) + + def __next__(self): + if self.src is None: + raise StopIteration() + try: + ev, el = next(self.src) + except StopIteration: + self.src = None + ev, el = "$", None + self.handle(ev, el) ret = bytes(self.buf) self.buf[:] = b"" return ret @@ -225,6 +228,8 @@ class indenter(formatter): self.atbreak = True self.inline = False self.stack = [] + self.last = None, None + self.lastendbr = True def write(self, text): lines = text.split("\n") @@ -258,7 +263,10 @@ class indenter(formatter): def starttag(self, el): if not self.inline: - self.br() + 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 @@ -272,8 +280,11 @@ class indenter(formatter): def endtag(self, el): il = self.inline self.pop() - if not il: + if il or (self.last[0] == ">" and self.last[1] == el): + self.lastendbr = False + else: self.br() + self.lastendbr = True super().endtag(el) def start(self, el): @@ -283,6 +294,10 @@ class indenter(formatter): def end(self, el): self.br() + def handle(self, ev, el): + super().handle(ev, el) + self.last = ev, el + class textindenter(indenter): maxcol = 70