Escape all strings put into the Qt help XML files.

This commit is contained in:
Georg Brandl 2010-05-23 16:22:15 +02:00
parent c3c6bba214
commit 50058db273

View File

@ -11,10 +11,10 @@
import os
import re
import cgi
import codecs
import posixpath
from os import path
from cgi import escape
from docutils import nodes
@ -34,7 +34,7 @@ collection_template = u'''\
<?xml version="1.0" encoding="utf-8" ?>
<QHelpCollectionProject version="1.0">
<assistant>
<title>%(project)s %(version)s</title>
<title>%(title)s</title>
<homePage>%(homepage)s</homePage>
<startPage>%(startpage)s</startPage>
</assistant>
@ -154,8 +154,8 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
if (resourcedir and not fn.endswith('.js')) or \
fn.endswith('.html'):
filename = path.join(root, fn)[olen:]
#filename = filename.replace(os.sep, '\\') # XXX
projectfiles.append(file_template % {'filename': filename})
projectfiles.append(file_template %
{'filename': escape(filename)})
projectfiles = '\n'.join(projectfiles)
# it seems that the "namespace" may not contain non-alphanumeric
@ -168,15 +168,16 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
# write the project file
f = codecs.open(path.join(outdir, outname+'.qhp'), 'w', 'utf-8')
try:
f.write(project_template % {'outname': outname,
'title': self.config.html_title,
'version': self.config.version,
'project': self.config.project,
'namespace': nspace,
'masterdoc': self.config.master_doc,
'sections': sections,
'keywords': keywords,
'files': projectfiles})
f.write(project_template % {
'outname': escape(outname),
'title': escape(self.config.html_title),
'version': escape(self.config.version),
'project': escape(self.config.project),
'namespace': escape(nspace),
'masterdoc': escape(self.config.master_doc),
'sections': sections,
'keywords': keywords,
'files': projectfiles})
finally:
f.close()
@ -187,11 +188,11 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
self.info('writing collection project file...')
f = codecs.open(path.join(outdir, outname+'.qhcp'), 'w', 'utf-8')
try:
f.write(collection_template % {'outname': outname,
'project': self.config.project,
'version': self.config.version,
'homepage': homepage,
'startpage': startpage})
f.write(collection_template % {
'outname': escape(outname),
'title': escape(self.config.html_short_title),
'homepage': escape(homepage),
'startpage': escape(startpage)})
finally:
f.close()
@ -213,7 +214,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
if self.isdocnode(node):
refnode = node.children[0][0]
link = refnode['refuri']
title = cgi.escape(refnode.astext()).replace('"','&quot;')
title = escape(refnode.astext()).replace('"','&quot;')
item = '<section title="%(title)s" ref="%(ref)s">' % {
'title': title,
'ref': link}
@ -226,7 +227,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
parts.extend(self.write_toc(subnode, indentlevel))
elif isinstance(node, nodes.reference):
link = node['refuri']
title = cgi.escape(node.astext()).replace('"','&quot;')
title = escape(node.astext()).replace('"','&quot;')
item = section_template % {'title': title, 'ref': link}
item = ' '*4*indentlevel + item.encode('ascii', 'xmlcharrefreplace')
parts.append(item.encode('ascii', 'xmlcharrefreplace'))
@ -263,7 +264,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
def build_keywords(self, title, refs, subitems):
keywords = []
title = cgi.escape(title)
title = escape(title)
# if len(refs) == 0: # XXX
# write_param('See Also', title)
if len(refs) == 1: