home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __license__ = 'GPL v3'
- __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
- __docformat__ = 'restructuredtext en'
- import textwrap
- import cStringIO
- from urllib import unquote
- from lxml import etree
-
- try:
- from PIL import Image as PILImage
- PILImage
- except ImportError:
- import Image as PILImage
-
- from calibre import guess_type
-
- class CoverManager(object):
- SVG_TEMPLATE = textwrap.dedent(' <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\n <head>\n <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n <meta name="calibre:cover" content="true" />\n <title>Cover</title>\n <style type="text/css" title="override_css">\n @page {padding: 0pt; margin:0pt}\n body { text-align: center; padding:0pt; margin: 0pt; }\n </style>\n </head>\n <body>\n <svg version="1.1" xmlns="http://www.w3.org/2000/svg"\n xmlns:xlink="http://www.w3.org/1999/xlink"\n width="100%%" height="100%%" viewBox="__viewbox__"\n preserveAspectRatio="__ar__">\n <image width="__width__" height="__height__" xlink:href="%s"/>\n </svg>\n </body>\n </html>\n ')
- NONSVG_TEMPLATE = textwrap.dedent(' <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\n <head>\n <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n <meta name="calibre:cover" content="true" />\n <title>Cover</title>\n <style type="text/css" title="override_css">\n @page {padding: 0pt; margin:0pt}\n body { text-align: center; padding:0pt; margin: 0pt }\n div { padding:0pt; margin: 0pt }\n img { padding:0pt; margin: 0pt }\n </style>\n </head>\n <body>\n <div>\n <img src="%s" alt="cover" __style__ />\n </div>\n </body>\n </html>\n ')
-
- def __init__(self, no_default_cover = False, no_svg_cover = False, preserve_aspect_ratio = False, fixed_size = None):
- self.no_default_cover = no_default_cover
- self.no_svg_cover = no_svg_cover
- self.preserve_aspect_ratio = preserve_aspect_ratio
- ar = None if preserve_aspect_ratio else 'none'
- self.svg_template = self.SVG_TEMPLATE.replace('__ar__', ar)
- if fixed_size is None:
- style = 'style="height: 100%%"'
- else:
- (width, height) = fixed_size
- style = 'style="height: %s; width: %s"' % (width, height)
- self.non_svg_template = self.NONSVG_TEMPLATE.replace('__style__', style)
-
-
- def __call__(self, oeb, opts, log):
- self.oeb = oeb
- self.log = log
- self.insert_cover()
-
-
- def default_cover(self):
- authors_to_string = authors_to_string
- import calibre.ebooks.metadata
- if self.no_default_cover:
- return None
- self.log('Generating default cover')
- m = self.oeb.metadata
- title = unicode(m.title[0])
- authors = _[1]
-
- try:
- create_cover_page = create_cover_page
- TextLine = TextLine
- import calibre.utils.magick.draw
- lines = [
- TextLine(title, 44),
- TextLine(authors_to_string(authors), 32)]
- img_data = create_cover_page(lines, I('library.png'))
- (id, href) = self.oeb.manifest.generate('cover_image', 'cover_image.jpg')
- item = self.oeb.manifest.add(id, href, guess_type('t.jpg')[0], data = img_data)
- m.clear('cover')
- m.add('cover', item.id)
- return item.href
- except:
- []
- []
- self.no_default_cover
- self.log.exception('Failed to generate default cover')
-
-
-
- def inspect_cover(self, href):
- urlnormalize = urlnormalize
- import calibre.ebooks.oeb.base
- for x in self.oeb.manifest:
- if x.href == urlnormalize(href):
-
- try:
- raw = x.data
- f = cStringIO.StringIO(raw)
- im = PILImage.open(f)
- return im.size
- self.log.exception('Failed to read image dimensions')
-
- continue
-
- return (None, None)
-
-
- def insert_cover(self):
- urldefrag = urldefrag
- import calibre.ebooks.oeb.base
- g = self.oeb.guide
- m = self.oeb.manifest
- item = None
- if 'titlepage' not in g:
- if 'cover' in g:
- href = g['cover'].href
- else:
- href = self.default_cover()
- if href is None:
- return None
- (width, height) = self.inspect_cover(href)
- if width is None or height is None:
- self.log.warning('Failed to read cover dimensions')
- (width, height) = (600, 800)
-
- if self.preserve_aspect_ratio:
- (width, height) = (600, 800)
-
- self.svg_template = self.svg_template.replace('__viewbox__', '0 0 %d %d' % (width, height))
- self.svg_template = self.svg_template.replace('__width__', str(width))
- self.svg_template = self.svg_template.replace('__height__', str(height))
- if href is not None:
- templ = None if self.no_svg_cover else self.svg_template
- tp = templ % unquote(href)
- (id, href) = m.generate('titlepage', 'titlepage.xhtml')
- item = m.add(id, href, guess_type('t.xhtml')[0], data = etree.fromstring(tp))
-
- else:
- item = self.oeb.manifest.hrefs[urldefrag(self.oeb.guide['titlepage'].href)[0]]
- if item is not None:
- self.oeb.spine.insert(0, item, True)
- if 'cover' not in self.oeb.guide.refs:
- self.oeb.guide.add('cover', 'Title Page', 'a')
-
- self.oeb.guide.refs['cover'].href = item.href
- if 'titlepage' in self.oeb.guide.refs:
- self.oeb.guide.refs['titlepage'].href = item.href
-
-
-
-
-