From: Guido van Rossum Date: Mon, 7 Dec 1998 21:59:56 +0000 (+0000) Subject: Sjoerd writes: X-Git-Tag: v1.5.2b1~109 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f484a3366b2e0e40b0577d652407f9b84a0ec208;p=python Sjoerd writes: 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. --- diff --git a/Doc/lib/libxmllib.tex b/Doc/lib/libxmllib.tex index d8aa3ed94e..7a7c85d7be 100644 --- a/Doc/lib/libxmllib.tex +++ b/Doc/lib/libxmllib.tex @@ -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} diff --git a/Lib/xmllib.py b/Lib/xmllib.py index 06dc373c8e..4e62ae5486 100644 --- a/Lib/xmllib.py +++ b/Lib/xmllib.py @@ -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')