home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __license__ = 'GPL v3'
- __copyright__ = '2009, John Schember <john@nachtimwald.com>'
- __docformat__ = 'restructuredtext en'
- import os
- import struct
- from calibre import CurrentDir
- from calibre.ebooks.metadata.opf2 import OPFCreator
- from calibre.ebooks.pdb.formatreader import FormatReader
- from calibre.ebooks.pdb.ereader import EreaderError
-
- class HeaderRecord(object):
-
- def __init__(self, raw):
- (self.version,) = struct.unpack('>H', raw[0:2])
- (self.non_text_offset,) = struct.unpack('>H', raw[8:10])
- self.num_text_pages = self.non_text_offset - 1
-
-
-
- class Reader202(FormatReader):
-
- def __init__(self, header, stream, log, options):
- self.log = log
- self.encoding = options.input_encoding
- self.log.debug('202 byte header version found.')
- self.sections = []
- for i in range(header.num_sections):
- self.sections.append(header.section_data(i))
-
- self.header_record = HeaderRecord(self.section_data(0))
- if self.header_record.version not in (2, 4):
- raise EreaderError('Unknown book version %i.' % self.header_record.version)
- self.header_record.version not in (2, 4)
- get_metadata = get_metadata
- import calibre.ebooks.metadata.pdb
- self.mi = get_metadata(stream, False)
-
-
- def section_data(self, number):
- return self.sections[number]
-
-
- def decompress_text(self, number):
- decompress_doc = decompress_doc
- import calibre.ebooks.compression.palmdoc
- return ''.join([]([]([ chr(ord(x) ^ 165) for x in self.section_data(number) ])).decode if self.encoding is None else self.encoding, 'replace')
-
-
- def get_image(self, number):
- name = None
- img = None
- data = self.section_data(number)
- if data.startswith('PNG'):
- name = data[4:36].strip('\x00')
- img = data[62:]
-
- return (name, img)
-
-
- def get_text_page(self, number):
- if number not in range(1, self.header_record.num_text_pages + 1):
- return ''
- return self.decompress_text(number)
-
-
- def extract_content(self, output_dir):
- pml_to_html = pml_to_html
- import calibre.ebooks.pml.pmlconverter
- output_dir = os.path.abspath(output_dir)
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
-
- pml = u''
- for i in range(1, self.header_record.num_text_pages + 1):
- self.log.debug('Extracting text page %i' % i)
- pml += self.get_text_page(i)
-
- title = self.mi.title
- if not isinstance(title, unicode):
- title = title.decode('utf-8', 'replace')
-
- html = u'<html><head><title>%s</title></head><body>%s</body></html>' % (title, pml_to_html(pml))
- CurrentDir(output_dir).__enter__()
-
- try:
-
- try:
- index = _[1]
- self.log.debug('Writing text to index.html')
- index.write(html.encode('utf-8'))
- finally:
- pass
-
- finally:
- pass
-
- images = []
- CurrentDir(os.path.join(output_dir, 'images/')).__enter__()
-
- try:
- for i in range(self.header_record.non_text_offset, len(self.sections)):
- (name, img) = self.get_image(i)
- if name:
- images.append(name)
-
- try:
- imgf = _[2]
- self.log.debug('Writing image %s to images/' % name)
- imgf.write(img)
- finally:
- pass
-
- continue
- open(name, 'wb').__exit__
- finally:
- pass
-
- opf_path = self.create_opf(output_dir, images)
- return opf_path
-
-
- def create_opf(self, output_dir, images):
- CurrentDir(output_dir).__enter__()
-
- try:
- opf = OPFCreator(output_dir, self.mi)
- manifest = [
- ('index.html', None)]
- for i in images:
- manifest.append((os.path.join('images/', i), None))
-
- opf.create_manifest(manifest)
- opf.create_spine([
- 'index.html'])
-
- try:
- opffile = _[1]
- opf.render(opffile)
- finally:
- pass
-
- finally:
- pass
-
- return os.path.join(output_dir, 'metadata.opf')
-
-
- def dump_pml(self):
- pml = ''
- for i in range(1, self.header_record.num_text_pages + 1):
- pml += self.get_text_page(i)
-
- return pml
-
-
- def dump_images(self, output_dir):
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
-
- CurrentDir(output_dir).__enter__()
-
- try:
- for i in range(0, self.header_record.num_image_pages):
- (name, img) = self.get_image(self.header_record.image_data_offset + i)
-
- try:
- imgf = _[1]
- imgf.write(img)
- finally:
- pass
-
- finally:
- pass
-
-
-
-