Fix #1170 (Image inclusion failure in text files parsed with Markdown.)

This commit is contained in:
Kovid Goyal 2008-10-16 17:57:27 -07:00
parent d0b4cce3cd
commit 007f0a2edb
3 changed files with 14 additions and 2 deletions

View File

@ -3,7 +3,7 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
""" """
Convert .txt files to .lrf Convert .txt files to .lrf
""" """
import os, sys, codecs, logging import os, sys, codecs, logging, re, shutil
from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.ebooks.lrf import option_parser as lrf_option_parser from calibre.ebooks.lrf import option_parser as lrf_option_parser
@ -24,12 +24,22 @@ _('''%prog [options] mybook.txt
dest='debug_html_generation', help=_('Print generated HTML to stdout and quit.')) dest='debug_html_generation', help=_('Print generated HTML to stdout and quit.'))
return parser return parser
def fix_image_includes(tdir, match):
path = match.group(1).split('/')
src = os.path.join(os.getcwd(), *path)
dest = os.path.join(tdir, *path)
p = os.path.dirname(dest)
if not os.path.exists(p):
os.makedirs(p)
shutil.copyfile(src, dest)
def generate_html(txtfile, encoding, tdir): def generate_html(txtfile, encoding, tdir):
''' '''
Convert txtfile to html and return a PersistentTemporaryFile object pointing Convert txtfile to html and return a PersistentTemporaryFile object pointing
to the file with the HTML. to the file with the HTML.
''' '''
txtfile = os.path.abspath(txtfile)
enc = encoding enc = encoding
if not encoding: if not encoding:
encodings = ['cp1252', 'latin-1', 'utf8', 'iso-8859-1', 'koi8_r', 'koi8_u'] encodings = ['cp1252', 'latin-1', 'utf8', 'iso-8859-1', 'koi8_r', 'koi8_u']
@ -52,6 +62,8 @@ def generate_html(txtfile, encoding, tdir):
safe_mode=False, safe_mode=False,
) )
html = '<html><body>'+md.convert(txt)+'</body></html>' html = '<html><body>'+md.convert(txt)+'</body></html>'
for match in re.finditer(r'<img\s+[^>]*src="([^"]+)"', html):
fix_image_includes(tdir, match)
p = os.path.join(tdir, 'index.html') p = os.path.join(tdir, 'index.html')
open(p, 'wb').write(html.encode('utf-8')) open(p, 'wb').write(html.encode('utf-8'))
mi = MetaInformation(os.path.splitext(os.path.basename(txtfile))[0], [_('Unknown')]) mi = MetaInformation(os.path.splitext(os.path.basename(txtfile))[0], [_('Unknown')])

View File

@ -72,7 +72,7 @@ Images
------ ------
`txt2lrf` also has support for inline images like `txt2lrf` also has support for inline images like
![this one](../../html/demo/small.jpg) this one. ![this one](small.jpg) this one.
___ ___
[Table of Contents](#toc) [Table of Contents](#toc)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB