Patch by Chris Herborth (posted to comp.lang.python)to make it behave
with tags that have - or . in their names.
diff --git a/Lib/sgmllib.py b/Lib/sgmllib.py
index d042049..ffb2ccc 100644
--- a/Lib/sgmllib.py
+++ b/Lib/sgmllib.py
@@ -24,8 +24,8 @@
charref = re.compile('&#([0-9]+)[^0-9]')
starttagopen = re.compile('<[>a-zA-Z]')
-shorttagopen = re.compile('<[a-zA-Z][a-zA-Z0-9]*/')
-shorttag = re.compile('<([a-zA-Z][a-zA-Z0-9]*)/([^/]*)/')
+shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')
+shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')
piopen = re.compile('<\?')
piclose = re.compile('>')
endtagopen = re.compile('</[<>a-zA-Z]')
@@ -33,7 +33,7 @@
special = re.compile('<![^<>]*>')
commentopen = re.compile('<!--')
commentclose = re.compile('--[%s]*>' % string.whitespace)
-tagfind = re.compile('[a-zA-Z][a-zA-Z0-9]*')
+tagfind = re.compile('[a-zA-Z][-.a-zA-Z0-9]*')
attrfind = re.compile(
'[%s]+([a-zA-Z_][-.a-zA-Z_0-9]*)' % string.whitespace
+ ('([%s]*=[%s]*' % (string.whitespace, string.whitespace))