From 007f0a2edbb1611d083e0b90454a3986c5a57170 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 16 Oct 2008 17:57:27 -0700 Subject: [PATCH] Fix #1170 (Image inclusion failure in text files parsed with Markdown.) --- src/calibre/ebooks/lrf/txt/convert_from.py | 14 +++++++++++++- src/calibre/ebooks/lrf/txt/demo/demo.txt | 2 +- src/calibre/ebooks/lrf/txt/demo/small.jpg | Bin 0 -> 2055 bytes 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/calibre/ebooks/lrf/txt/demo/small.jpg diff --git a/src/calibre/ebooks/lrf/txt/convert_from.py b/src/calibre/ebooks/lrf/txt/convert_from.py index 32bb329603..ff2378b8cc 100644 --- a/src/calibre/ebooks/lrf/txt/convert_from.py +++ b/src/calibre/ebooks/lrf/txt/convert_from.py @@ -3,7 +3,7 @@ __copyright__ = '2008, Kovid Goyal ' """ Convert .txt files to .lrf """ -import os, sys, codecs, logging +import os, sys, codecs, logging, re, shutil from calibre.ptempfile import PersistentTemporaryDirectory 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.')) 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): ''' Convert txtfile to html and return a PersistentTemporaryFile object pointing to the file with the HTML. ''' + txtfile = os.path.abspath(txtfile) enc = encoding if not encoding: 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, ) html = ''+md.convert(txt)+'' + for match in re.finditer(r']*src="([^"]+)"', html): + fix_image_includes(tdir, match) p = os.path.join(tdir, 'index.html') open(p, 'wb').write(html.encode('utf-8')) mi = MetaInformation(os.path.splitext(os.path.basename(txtfile))[0], [_('Unknown')]) diff --git a/src/calibre/ebooks/lrf/txt/demo/demo.txt b/src/calibre/ebooks/lrf/txt/demo/demo.txt index a8c6579412..af4139241b 100644 --- a/src/calibre/ebooks/lrf/txt/demo/demo.txt +++ b/src/calibre/ebooks/lrf/txt/demo/demo.txt @@ -72,7 +72,7 @@ Images ------ `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) diff --git a/src/calibre/ebooks/lrf/txt/demo/small.jpg b/src/calibre/ebooks/lrf/txt/demo/small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dae5fde42430e0b1638c20dccc7c31d0911051c GIT binary patch literal 2055 zcmb79dpy$%8~^Rj5;l{p*~EmEipohzZOFFFWy>v7){PN|xkROe6eTm)mXXWYh{`>V zh%!zQZG;k0Vx``W_asry&UruY`~UlWKF{}`@8$D6E5j=jfHr+UZ9f14fdHy%fR#7E z8pjy!NdRCl01^NIYN}OXtvmv7004%lz5xB_TouC+00gE61%XxSFWLYI0)c=ba3~bf! zac_P`fqFm?4KH=aH^VEVZc03$cWMt^b#XG@T67Dw5OKfwNsiyD%En$J7%vx{i5$3K#!T!8yeQIl5PpI-%1L@!gg%_nLy^B9s1!DV$pse&{y1l?@yAZwjH^*?TPp` z?(?dg2iv|BL#p)dk8P+pEk1nrkCNV&%BXOIq zM5edr3AKnOuu_oN9xnL{`du!c!l$jaw-gIMVn&{%blM;4x9hF_TyyT_*r6&pmQuaD zY($#0%%G&sUv-l$^{DT^Q102c?Cdt#cTFeM^}JA=JT810FRmv*%dhGB>(pgsUI*E7 z8Nu>R4V6qzcQUhSQ_(_zAM>o3N{sjQ*B*x+v!Ow+Yqsq<(tL|u7igVU-8qQZQ-2vL zc=l^7{i1z{AwXl^1+`Q4Z3d2R!8Jb@Om(TllJE=lv6^~;?OBgzoEfPT;g???NZS-+ zPCQPKdwsyl%DPK@B6ry~qTgQGK5e|KF8`9nYB4e0IqlSJJ)gff<-1tFdpg&ypdvC) z$$2(ar2a|9r4zsQsXsI~vuTGe&LD4iKL|XS6TmutQ;@pEY2ON&rRgv9lj&F9n?e^g zVrJT^vhVA8JkuNty@Hlxo}lnAGxg?-Yt|%t3(H$v($H!=4XQ)ZZ&MYX6L&98Cg@Wq2-gCrjh6Fl$2w)b_>u;yZ-iW?1g`+F zAU{k=#1Z*%#YQtRiyQ9{uHcZuxsayPDj#D$0=HD2(HDFTU>G$ z<2vkuPrd(hzyklc)`vA1JXm`0T~9S4ZzSn;^povraGEhlQ_pQ1=-mkFS$vixg+`v8xw$FX62jp($RwWJd}a z6)iBvAvDEL(+mIWD4Rp;wt#0g6_8<_-SP$Yje*esHoM#*bciNqu3NvU)jLZtd_2Z_ zE$s2XcJ>U%MGcuDhehLSY=%k?V;2vfxuBc+2mO4L8#~P{F^2WEM(L@D4bA8bqR;Ek z&*Wm}U4XwgUE%1A|ic6tU9X*#$WBI>~^g{^ibp1Gu( zd$L;But+DS2PaC+{L}kC6eR2U^s9^b&`40rM{TjSnI9ZhGfb_{a^uujG0z>l8rgFn}9AzeZi zEZq~lmGs!h<&;XKjG9SG3&&m-BnWfOzy(V~S{~|F_zTB2pMg&%)>rj(FA^;KvVLgI zuKOr&ZJ6L%PCb~3LapoWprDfsW9QVV?-N{H_2pl;M;~(vNygeUtVI$E9PHG+T7B>& z|Ft7%%zL}~xqlZt{B0wpKFoKZ?BH%1*L9-}lO?*94!KqkE@CivZXIO^r(F>M@livG zRm^gY`;U87(cjMoHg<502}bjU-xZ3%euvG*36jc4h*pa1{> literal 0 HcmV?d00001