X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fsp%2Futil.py;h=2599206ddcc94ba0ca20f74e31291ce39446a74f;hb=0d4c1b8b8da9e20c4bc9fb41ff1136283821b98e;hp=deec92d3410349b9ffbd42bdf6f0f5eff03ce242;hpb=fb5f9f27dcabe7fac75e3a69f820c42779539239;p=wrw.git diff --git a/wrw/sp/util.py b/wrw/sp/util.py index deec92d..2599206 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 = str(self.buf) self.buf[:] = "" 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(u"\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(indenter, self).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(indenter, self).handle(ev, el) + self.last = ev, el + class textindenter(indenter): maxcol = 70