From: Fred L. D. <fd...@us...> - 2003-07-30 21:08:09
|
Update of /cvsroot/ht2html/ht2html In directory sc8-pr-cvs1:/tmp/cvs-serv31621 Modified Files: htwf.py Log Message: Add more elaborate checks here so error messages can make more sense, and be issued closer to markup where things start to go wrong. Index: htwf.py =================================================================== RCS file: /cvsroot/ht2html/ht2html/htwf.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** htwf.py 29 Jul 2003 22:47:07 -0000 1.3 --- htwf.py 30 Jul 2003 21:05:14 -0000 1.4 *************** *** 50,53 **** --- 50,58 ---- + BLOCK_TAGS = ('blockquote', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', + 'pre', 'table', 'td', 'th', 'tr') + EMPTY_TAGS = ('br', 'hr') + + class HTWF(ht2html.Command): *************** *** 65,82 **** p = expat.ParserCreate() p.StartElementHandler = self.startElement try: ! p.Parse(newtext, 1) except expat.ExpatError, e: print e except RuntimeError, e: print e def startElement(self, name, attrs): if not name.islower(): ! raise RuntimeError("found non-lowercase tag name: " + `name`) for attrname in attrs.keys(): if not attrname.islower(): ! raise RuntimeError("found non-lowercase attribute name: " ! + `attrname`) --- 70,127 ---- p = expat.ParserCreate() p.StartElementHandler = self.startElement + p.EndElementHandler = self.endElement + self.parser = p + self.stack = [] try: ! try: ! p.Parse(newtext, 1) ! except: ! if self.quiet: ! print 'Checking %s...' % file ! raise except expat.ExpatError, e: print e + print "open elements:", " ".join(self.stack) + print except RuntimeError, e: print e + print "discovered on line:", e.lineno + print "open elements:", " ".join(self.stack) + print def startElement(self, name, attrs): if not name.islower(): ! err = RuntimeError("found non-lowercase tag name: " ! + tagrepr(name)) ! err.lineno = self.parser.ErrorLineNumber ! raise err for attrname in attrs.keys(): if not attrname.islower(): ! err = RuntimeError("found non-lowercase attribute name: " ! + tagrepr(attrname)) ! err.lineno = self.parser.ErrorLineNumber ! raise err ! if self.stack and self.stack[-1] in EMPTY_TAGS: ! err = RuntimeError("empty tag not XHTML-adjusted: %s before %s" ! % (tagrepr(self.stack[-1]), tagrepr(name))) ! err.lineno = self.parser.ErrorLineNumber ! raise err ! if name in BLOCK_TAGS and 'p' in self.stack: ! err = RuntimeError("block element opened while 'p' is still open: " ! + tagrepr(name)) ! err.lineno = self.parser.ErrorLineNumber ! raise err ! self.stack.append(name) ! ! def endElement(self, name): ! del self.stack[-1] ! ! ! def tagrepr(name): ! r = `name` ! if r[0] == "u": ! return r[1:] ! else: ! return r |