Ticket #3493: tracwikitopdfplugin.img-patch

File tracwikitopdfplugin.img-patch, 4.2 kB (added by andreasgebhardt@web.de, 4 months ago)

support for TracMathPlugin and Graphviz Plugin, base_dir substituion

Line 
1 diff -r --unified tracwikitopdfplugin.orig/0.11/wikitopdf/formats.py tracwikitopdfplugin/0.11/wikitopdf/formats.py
2 --- tracwikitopdfplugin.orig/0.11/wikitopdf/formats.py  2008-09-16 18:25:07.000000000 +0200
3 +++ tracwikitopdfplugin/0.11/wikitopdf/formats.py       2008-09-19 19:50:13.000000000 +0200
4 @@ -82,8 +82,10 @@
5          # htmldoc doesn't support utf-8, we need to use some other input encoding
6          codepage = self.env.config.get('trac', 'default_charset', 'iso-8859-1')
7          base_dir = self.env.config.get('wikitopdf', 'base_dir')
8 -       
9 -        page = wiki_to_pdf(WikiPage(self.env, pagename).text, self.env, req, base_dir, codepage)
10 +        graphviz_dir = self.env.config.get('wikitopdf', 'graphviz_dir')
11 +        tracmath_dir = self.env.config.get('wikitopdf', 'tracmath_dir')
12 +
13 +        page = wiki_to_pdf(WikiPage(self.env, pagename).text, self.env, req, base_dir, graphviz_dir, tracmath_dir, codepage)
14          
15          hfile, hfilename = mkstemp('wikitopdf')
16          self.log.debug('WikiToPdf => Writting %s to %s using encoding %s', pagename, hfilename, codepage)
17 diff -r --unified tracwikitopdfplugin.orig/0.11/wikitopdf/wikitopdf.py tracwikitopdfplugin/0.11/wikitopdf/wikitopdf.py
18 --- tracwikitopdfplugin.orig/0.11/wikitopdf/wikitopdf.py        2008-09-16 18:25:07.000000000 +0200
19 +++ tracwikitopdfplugin/0.11/wikitopdf/wikitopdf.py     2008-09-19 19:58:14.000000000 +0200
20 @@ -18,17 +18,19 @@
21  ]
22  
23  
24 -def wiki_to_pdf(text, env, req, base_dir, codepage):
25 +def wiki_to_pdf(text, env, req, base_dir, graphviz_dir, tracmath_dir, codepage):
26      
27      env.log.debug('WikiToPdf => Start function wiki_to_pdf')
28  
29      #Remove exclude expressions
30      for r in EXCLUDE_RES:
31          text = r.sub('', text)
32 -   
33 +   
34      env.log.debug('WikiToPdf => Wiki intput for WikiToPdf: %r' % text)
35      
36      page = wiki_to_html(text, env, req)
37 +    env.log.debug('WikiToPdf => original HTML output: %r' % page)
38 +
39      page = page.replace('raw-attachment', 'attachments')
40      page = page.replace('<img', '<img border="0"')
41      page = page.replace('?format=raw', '')
42 @@ -42,12 +44,37 @@
43      page = page.replace('</pre>', '</pre></td></tr></table>')
44      page = page.replace('<table class="wiki">', '<table class="wiki" border="1" width="100%">')
45  
46 +    # update image source
47 +    abs_ref = (req or env).abs_href.base
48 +    href = (req or env).href.base
49 +
50      imgpos = page.find('<img')
51  
52      while imgpos != -1:
53 -        addrpos = page.find('src=',imgpos)
54 -        page = page[:addrpos+5] + base_dir + page[addrpos+5:]
55 -        imgpos = page.find('<img', addrpos)
56 +        addrpos_s = page.find('src="', imgpos)
57 +        addrpos_e = page.find('"', addrpos_s+5)
58 +        src = page[addrpos_s+5:addrpos_e]
59 +        # image source
60 +        if src.find(abs_ref) == 0:
61 +          # graphviz-plugin ?
62 +          if src.startswith('/graphviz', len(abs_ref)):
63 +            src = src.replace(abs_ref+'/graphviz', graphviz_dir)
64 +          # tracmath-plugin ?
65 +          elif src.startswith('/tracmath', len(abs_ref)):
66 +            src = src.replace(abs_ref+'/tracmath', tracmath_dir)
67 +          else:
68 +             src = src.replace(abs_ref, base_dir)
69 +        elif src.find(href) == 0:
70 +          # graphviz-plugin ?
71 +          if src.startswith('/graphviz', len(href)):
72 +            src = src.replace(href+'/graphviz', graphviz_dir)
73 +          # tracmath-plugin ?
74 +          elif src.startswith('/tracmath', len(href)):
75 +            src = src.replace(href+'/tracmath', tracmath_dir)
76 +          else:
77 +            src = src.replace(href, base_dir)
78 +        page = page[:addrpos_s+5] + src + page[addrpos_e:]
79 +        imgpos = page.find('<img', addrpos_e)
80      
81      meta = ('<meta http-equiv="Content-Type" content="text/html; charset=%s"/>' % codepage)
82  
83 @@ -98,8 +125,10 @@
84  
85          codepage = self.env.config.get('trac', 'default_charset', 'iso-8859-1')
86          base_dir = self.env.config.get('wikitopdf', 'base_dir')
87 +        graphviz_dir = self.env.config.get('wikitopdf', 'graphviz_dir')
88 +        tracmath_dir = self.env.config.get('wikitopdf', 'tracmath_dir')
89  
90 -        page = wiki_to_pdf(text, self.env, req, base_dir, codepage)
91 +        page = wiki_to_pdf(text, self.env, req, base_dir, graphviz_dir, tracmath_dir, codepage)
92  
93          hfile, hfilename = mkstemp('wikitopdf')
94          os.write(hfile, page)