Index: 0.11/wikitopdf/formats.py =================================================================== --- 0.11/wikitopdf/formats.py (revision 6156) +++ 0.11/wikitopdf/formats.py (working copy) @@ -65,7 +65,7 @@ # Clean up if titlefile: os.unlink(titlefile) for f in files: os.unlink(f) - + # Send the output req.send_response(200) req.send_header('Content-Type', {'pdf':'application/pdf', 'ps':'application/postscript', 'html':'text/html'}[format]) Index: 0.11/wikitopdf/wikitopdf.py =================================================================== --- 0.11/wikitopdf/wikitopdf.py (revision 6156) +++ 0.11/wikitopdf/wikitopdf.py (working copy) @@ -7,6 +7,8 @@ from trac.util import escape from trac.mimeview.api import IContentConverter from trac.wiki.formatter import wiki_to_html +from trac.web.href import Href +from api import IWikiToPdfFormat import tempfile from tempfile import mkstemp import os @@ -16,6 +18,7 @@ import xml.sax.saxutils EXCLUDE_RES = [ re.compile(r'\[\[PageOutline([^]]*)\]\]'), + re.compile(r'\[\[TracNav([^]]*)\]\]'), re.compile(r'\[\[TracGuideToc([^]]*)\]\]'), re.compile(r'\[\[TOC([^]]*)\]\]'), re.compile(r'----(\r)?$\n^Back up: \[\[ParentWiki\]\]', re.M|re.I) @@ -47,8 +50,6 @@ for r in EXCLUDE_RES: text = r.sub('', text) - env.log.debug('WikiToPdf => Wiki intput for WikiToPdf: %r' % text) - page = wiki_to_html(text, env, req) page = page.replace('', '' + page = page.replace('
', '
' + '
')
-    page = page.replace('
', '
') + page = page.replace('', '') page = page.replace('', '
') tracuri = env.config.get('wikitopdf', 'trac_uri') tmp_dir = env.config.get('wikitopdf', 'tmp_dir') @@ -91,7 +92,10 @@ #download theimg = xml.sax.saxutils.unescape(theimg) theimg = theimg.replace(" ","%20") - urlretrieve(theimg, newimg) + try: + urlretrieve(theimg, newimg) + except: + env.log.error("Failed to retrieve image: %s" % (theimg)) IMG_CACHE[theimg] = newimg env.log.debug("ISLAM the image is %s new image is %s" % ( theimg, newimg)) imgcounter += 1 @@ -211,10 +215,12 @@ """Convert Wiki pages to PDF using HTMLDOC (http://www.htmldoc.org/).""" implements(IContentConverter) + formats = ExtensionPoint(IWikiToPdfFormat) + # IContentConverter methods def get_supported_conversions(self): - yield ('pdf', 'WikiToPdf', 'pdf', 'text/x-trac-wiki', 'application/pdf', 7) + yield ('pdf', 'Pdf', 'pdf', 'text/x-trac-wiki', 'application/pdf', 7) def convert_content(self, req, input_type, text, output_type): @@ -224,9 +230,48 @@ page = wiki_to_pdf(text, self.env, req, base_dir, codepage) hfile, hfilename = mkstemp('wikitopdf') - os.write(hfile, page) + os.write(hfile, page) os.close(hfile) + mo = None + if text.startswith('----'): + mo = re.match(r'\-+\r\n([^\-].*?)\r\n\-\-\-\-+\r\n([^\-].*?)\r\n\-\-\-\-+\r\n(.*)', text, re.DOTALL | re.MULTILINE) + + if mo: + bookname = 'WikiToPdf' + title = 'WikiToPdf' + subject = 'WikiToPdf' + title = mo.group(2) + bn = re.match(r'.*?bookname\=(.*?)\r\n', mo.group(1), re.DOTALL | re.MULTILINE) + if bn: + bookname = bn.group(1) + bn = re.match(r'.*?title\=(.*?)\r\n', mo.group(1), re.DOTALL | re.MULTILINE) + if bn: + title = bn.group(1) + bn = re.match(r'.*?subject\=(.*?)\r\n', mo.group(1), re.DOTALL | re.MULTILINE) + if bn: + subject = bn.group(1) + pages = [p for p in re.findall(r'\[wiki:([^\] ]+)', mo.group(3))] + title_page = mo.group(1) + + formats = {} + for provider in self.formats: + for format, name in provider.wikitopdf_formats(req): + formats[format] = { + 'name': name, + 'provider': provider, + } + self.env.log.error('TEST => Name: %s' % (name)) + + date = '2008-01-01' + version = '1.0' + format = 'pdf' + + if not format or format not in formats: + raise TracError('Bad format given for WikiToPdf output.') + + return formats[format]['provider'].process_wikitopdf(req, format, title, subject, pages, date, version, bookname) + htmldoc_args = { 'webpage': '', 'format': 'pdf14', 'charset': codepage } htmldoc_args.update(dict(self.env.config.options('wikitopdf-page')))