CVS: ht2html htwf.py,1.3,1.4

"Fred L. Drake" <[email protected]> Wed, 30 Jul 2003 14:05:17 -0700
Newsgroups gmane.comp.web.ht2html.devel
Message-ID <[email protected]>
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
  
  



-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01