[XML-SIG] SAX, escape problem
Martin v. Loewis
martin@v.loewis.de
03 Apr 2002 08:45:58 +0200
Gregor Mosheh <stigmata@blackangel.net> writes:
> It appears that something in SAX is failing to convert quote marks
> and some other characters into their entities. How do I correct this?
It's a bug. Please apply this patch.
Regards,
Martin
Index: writer.py
===================================================================
RCS file: /cvsroot/pyxml/xml/xml/sax/writer.py,v
retrieving revision 1.7
diff -u -r1.7 writer.py
--- writer.py 30 Dec 2001 22:46:44 -0000 1.7
+++ writer.py 3 Apr 2002 06:44:55 -0000
@@ -61,6 +61,7 @@
dsc = "]" # declaration subset close
ero = "&" # entity reference open
lit = '"' # literal start or end
+ lit_quoted = '"' # quoted literal
lita = "'" # literal start or end (alternative)
mdo = "<!" # markup declaration open
mdc = ">" # markup declaration close
@@ -268,6 +269,7 @@
stag = "%s%s%s" % (prefix, self.__syntax.stago, tag)
prefix = "%s %s" % (prefix, (len(tag) * " "))
lit = self.__syntax.lit
+ lita = self.__syntax.lita
vi = self.__syntax.vi
a = ''
if self._flowing != self.__stack[-1][0]:
@@ -285,7 +287,15 @@
for k, v in attrs.items():
if v is None:
continue
- a = ' %s%s%s%s%s' % (k, vi, lit, escape(str(v)), lit)
+ v = str(v)
+ if string.find(v, lit) == -1:
+ a = ' %s%s%s%s%s' % (k, vi, lit, escape(str(v)), lit)
+ elif string.find(v, lita) == -1:
+ a = ' %s%s%s%s%s' % (k, vi, lita, escape(str(v)), lita)
+ else:
+ a = ' %s%s%s%s%s' % (k, vi, lita,
+ escape(str(v), {lit:self.__syntax.lit_quoted}),
+ lita)
if (self._offset + len(a)) > self.lineLength:
self._write(line + "\n")
line = prefix + a