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