diff --git a/setup.py b/setup.py
index f76abbbff1..3140e66f27 100644
--- a/setup.py
+++ b/setup.py
@@ -70,6 +70,15 @@ if __name__ == '__main__':
def initialize_options(self): pass
def finalize_options(self): pass
+ class sdist(Command):
+
+ description = "create a source distribution using bzr"
+
+ def run(self):
+ name = 'dist/calibre-%s.tar.gz'%VERSION
+ subprocess.check_call(('bzr export '+name).split())
+ self.distribution.dist_files.append(('sdist', '', name))
+
class pot(Command):
description = '''Create the .pot template for all translatable strings'''
@@ -414,6 +423,7 @@ if __name__ == '__main__':
'translations' : translations,
'gui' : gui,
'clean' : clean,
+ 'sdist' : sdist,
},
)
diff --git a/src/calibre/ebooks/epub/from_comic.py b/src/calibre/ebooks/epub/from_comic.py
new file mode 100644
index 0000000000..c6dff349da
--- /dev/null
+++ b/src/calibre/ebooks/epub/from_comic.py
@@ -0,0 +1,21 @@
+from __future__ import with_statement
+__license__ = 'GPL v3'
+__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
+__docformat__ = 'restructuredtext en'
+
+'Convert a comic in CBR/CBZ format to epub'
+
+import sys
+from functools import partial
+from calibre.ebooks.lrf.comic.convert_from import do_convert, option_parser, config, main as _main
+
+convert = partial(do_convert, output_format='epub')
+main = partial(_main, output_format='epub')
+
+if __name__ == '__main__':
+ sys.exit(main())
+
+if False:
+ option_parser
+ config
+
\ No newline at end of file
diff --git a/src/calibre/ebooks/epub/from_html.py b/src/calibre/ebooks/epub/from_html.py
index 1824c83f41..d821bcb201 100644
--- a/src/calibre/ebooks/epub/from_html.py
+++ b/src/calibre/ebooks/epub/from_html.py
@@ -3,7 +3,7 @@ from calibre.ebooks.metadata.opf import OPFReader
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
-import os, sys, re, shutil, cStringIO
+import os, sys, re, cStringIO
from lxml.etree import XPath
try:
@@ -121,8 +121,8 @@ def convert(htmlfile, opts, notification=None):
cpath = '/'.join(('resources', os.path.basename(mi.cover)))
cover = '''\
-
Cover Page
-
+ Cover Page
+
diff --git a/src/calibre/ebooks/lrf/comic/convert_from.py b/src/calibre/ebooks/lrf/comic/convert_from.py
index 37d04f9515..6f473ac504 100755
--- a/src/calibre/ebooks/lrf/comic/convert_from.py
+++ b/src/calibre/ebooks/lrf/comic/convert_from.py
@@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en'
Based on ideas from comiclrf created by FangornUK.
'''
-import os, sys, shutil, traceback
+import os, sys, shutil, traceback, textwrap
from uuid import uuid4
from calibre import extract, terminal_controller, __appname__, __version__
@@ -16,6 +16,9 @@ from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.parallel import Server, ParallelJob
from calibre.utils.terminfo import ProgressBar
from calibre.ebooks.lrf.pylrs.pylrs import Book, BookSetting, ImageStream, ImageBlock
+from calibre.ebooks.metadata import MetaInformation
+from calibre.ebooks.metadata.opf import OPFCreator
+from calibre.ebooks.epub.from_html import config as html2epub_config, convert as html2epub
try:
from calibre.utils.PythonMagickWand import \
NewMagickWand, NewPixelWand, \
@@ -315,9 +318,37 @@ def option_parser():
return c.option_parser(usage=_('''\
%prog [options] comic.cb[z|r]
-Convert a comic in a CBZ or CBR file to an LRF ebook.
+Convert a comic in a CBZ or CBR file to an ebook.
'''))
+def create_epub(pages, profile, opts, thumbnail=None):
+ wrappers = []
+ WRAPPER = textwrap.dedent('''\
+
+
+
+
+

+
+
+
+ ''')
+ dir = os.path.dirname(pages[0])
+ for i, page in enumerate(pages):
+ wrapper = WRAPPER%(os.path.basename(page), i+1)
+ page = os.path.join(dir, 'page_%d.html'%(i+1))
+ open(page, 'wb').write(wrapper)
+ wrappers.append(page)
+
+ mi = MetaInformation(opts.title, [opts.author])
+ opf = OPFCreator(dir, mi)
+ opf.create_manifest([(w, None) for w in wrappers])
+ opf.create_spine(wrappers)
+ metadata = os.path.join(dir, 'metadata.opf')
+ opf.render(open(metadata, 'wb'))
+ opts = html2epub_config('margin_left=0\nmargin_right=0\nmargin_top=0\nmargin_bottom=0').parse()
+ html2epub(metadata, opts)
+
def create_lrf(pages, profile, opts, thumbnail=None):
width, height = PROFILES[profile]
ps = {}
@@ -341,12 +372,13 @@ def create_lrf(pages, profile, opts, thumbnail=None):
book.renderLrf(open(opts.output, 'wb'))
-def do_convert(path_to_file, opts, notification=lambda m, p: p):
+
+def do_convert(path_to_file, opts, notification=lambda m, p: p, output_format='lrf'):
source = path_to_file
if not opts.title:
opts.title = os.path.splitext(os.path.basename(source))[0]
if not opts.output:
- opts.output = os.path.abspath(os.path.splitext(os.path.basename(source))[0]+'.lrf')
+ opts.output = os.path.abspath(os.path.splitext(os.path.basename(source))[0]+'.'+output_format)
tdir = extract_comic(source)
pages = find_pages(tdir, sort_on_mtime=opts.no_sort, verbose=opts.verbose)
@@ -362,12 +394,15 @@ def do_convert(path_to_file, opts, notification=lambda m, p: p):
thumbnail = os.path.join(tdir2, 'thumbnail.png')
if not os.access(thumbnail, os.R_OK):
thumbnail = None
- create_lrf(pages, opts.profile, opts, thumbnail=thumbnail)
+ if output_format == 'lrf':
+ create_lrf(pages, opts.profile, opts, thumbnail=thumbnail)
+ else:
+ create_epub(pages, opts.profile, opts, thumbnail=thumbnail)
shutil.rmtree(tdir)
shutil.rmtree(tdir2)
-def main(args=sys.argv, notification=None):
+def main(args=sys.argv, notification=None, output_format='lrf'):
parser = option_parser()
opts, args = parser.parse_args(args)
if len(args) < 2:
@@ -381,7 +416,7 @@ def main(args=sys.argv, notification=None):
notification = pb.update
source = os.path.abspath(args[1])
- do_convert(source, opts, notification)
+ do_convert(source, opts, notification, output_format=output_format)
print _('Output written to'), opts.output
return 0
diff --git a/src/calibre/ebooks/lrf/pdf/convert_from.py b/src/calibre/ebooks/lrf/pdf/convert_from.py
index 5bec2265b7..b365f68d17 100644
--- a/src/calibre/ebooks/lrf/pdf/convert_from.py
+++ b/src/calibre/ebooks/lrf/pdf/convert_from.py
@@ -35,7 +35,7 @@ def generate_html(pathtopdf, tdir):
index = os.path.join(tdir, 'index.html')
# This is neccessary as pdftohtml doesn't always (linux) respect absolute paths
pathtopdf = os.path.abspath(pathtopdf)
- cmd = (PDFTOHTML, '-enc', 'UTF-8', '-noframes', '-p', '-nomerge', '-nodrm', pathtopdf, os.path.basename(index))
+ cmd = (PDFTOHTML, '-enc', 'UTF-8', '-noframes', '-p', '-nomerge', pathtopdf, os.path.basename(index))
cwd = os.getcwd()
try:
diff --git a/upload.py b/upload.py
index 9c5d17c4d4..5709e42023 100644
--- a/upload.py
+++ b/upload.py
@@ -235,10 +235,9 @@ def stage_three():
print 'Uploading to PyPI...'
check_call('rm -f dist/*')
check_call('python setup.py register')
- check_call('python setup.py bdist_egg --exclude-source-files')
- build_src_tarball()
+ check_call('python setup.py bdist_egg --exclude-source-files upload')
+ check_call('python setup.py sdist upload')
upload_src_tarball()
- check_call('python setup.py upload')
check_call('''rm -rf dist/* build/*''')
check_call('''ssh divok bzr update /var/www/calibre.kovidgoyal.net/calibre/''')