Changeset 1654

Show
Ignore:
Timestamp:
12/06/06 02:26:44 (2 years ago)
Author:
coderanger
Message:

CombineWikiPlugin:

Inline remote images into the TiddlyWiki?.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • combinewikiplugin/0.10/combinewiki/formats.py

    r1648 r1654  
    11from trac.core import * 
     2from trac.config import BoolOption 
    23from trac.web.api import RequestDone 
    34from trac.wiki.api import WikiSystem 
     
    1314import re 
    1415import time 
     16import urllib2 
     17import base64 
    1518 
    1619from api import ICombineWikiFormat 
     
    115118    implements(ICombineWikiFormat) 
    116119     
     120    inline_images = BoolOption('tiddlywiki', 'inline_images', default=True, doc='Try to inline images directly into the TiddlyWiki output') 
     121     
    117122    STANDALONE_LINK_RE = re.compile(r'<a class="(?:missing )?wiki"[^>]*>([^>]+?)(?:\?)?</a>') 
    118123    HR_RE = re.compile(r'<hr />') 
    119124    LINK_RE = re.compile(r'<a[^>]* href="([^"]*)"[^>]*>([^>]*)</a>') 
     125    IMAGE_RE = re.compile(r'(<img[^>]* src=")([^"]*)("[^>]*/>)') 
    120126     
    121127    def combinewiki_formats(self, req): 
     
    136142                href = req.abs_href(href) 
    137143            return '[[%s|%s]]'%(label, href) 
     144             
     145        def inline_image(md): 
     146            pre, href, post = md.groups() 
     147            if href.startswith('/'): 
     148                href = '%s://%s:%s%s'%(req.scheme, req.server_name, req.server_port, href) 
     149            try: 
     150                f = urllib2.urlopen(href) 
     151            except urllib2.URLError, e: 
     152                # Fallback to doing nothing 
     153                self.log.debug('TiddlyWikiOutputFormat: Error while loading URL %s: %s', href, e) 
     154                return md.group(0)  
     155                 
     156            encoded = base64.b64encode(f.read()) 
     157            mime_type = f.info()['content-type'] 
     158            new_href = 'data:%s;base64,%s'%(mime_type, encoded) 
     159            return ''.join([pre,new_href,post]) 
    138160 
    139161        for name in pages: 
     
    156178            formatted = self.HR_RE.sub('----', formatted) 
    157179            formatted = self.LINK_RE.sub(make_link, formatted) 
     180            if self.inline_images: 
     181                formatted = self.IMAGE_RE.sub(inline_image, formatted) 
    158182            tiddler['content'] = formatted 
    159183