]> granicus.if.org Git - python/commitdiff
Sjoerd writes:
authorGuido van Rossum <guido@python.org>
Mon, 7 Dec 1998 21:59:56 +0000 (21:59 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 7 Dec 1998 21:59:56 +0000 (21:59 +0000)
When literal mode is entered it should exit automatically when the
matching close tag of the last unclosed open tag is encountered.  This
patch fixes this.

Doc/lib/libxmllib.tex
Lib/xmllib.py

index d8aa3ed94ecf1dfd4ed0379f5b0059405ae49b05..7a7c85d7bee58bc4d0133ea04ea5e70383ba0a1f 100644 (file)
@@ -27,7 +27,8 @@ Stop processing tags.  Treat all following input as literal input
 \end{methoddesc}
 
 \begin{methoddesc}{setliteral}{}
-Enter literal mode (CDATA mode).
+Enter literal mode (CDATA mode).  This mode is automatically exited
+when the close tag matching the last unclosed open tag is encountered.
 \end{methoddesc}
 
 \begin{methoddesc}{feed}{data}
index 06dc373c8e65f9f4919f4f2eb49919de4668e076..4e62ae5486ebf0a77f1bd7a0e3b9543d9f3f2124 100644 (file)
@@ -205,7 +205,6 @@ class XMLParser:
                     if k < 0: break
                     self.lineno = self.lineno + string.count(rawdata[i:k], '\n')
                     i =  k
-                    self.literal = 0
                     continue
                 if commentopen.match(rawdata, i):
                     if self.literal:
@@ -503,11 +502,19 @@ class XMLParser:
             return -1
         res = tagfind.match(rawdata, i+2)
         if res is None:
+            if self.literal:
+                self.handle_data(rawdata[i])
+                return i+1
             self.syntax_error('no name specified in end tag')
             tag = ''
             k = i+2
         else:
             tag = res.group(0)
+            if self.literal:
+                if not self.stack or tag != self.stack[-1]:
+                    self.handle_data(rawdata[i])
+                    return i+1
+                self.literal = 0
             k = res.end(0)
         if endbracket.match(rawdata, k) is None:
             self.syntax_error('garbage in end tag')