def write_content(self, oeb_book, out_stream, metadata=None): pmlmlizer = PMLMLizer(self.log) pml = unicode_type(pmlmlizer.extract_content(oeb_book, self.opts)).encode( 'cp1252', 'replace') text, text_sizes = self._text(pml) chapter_index = self._index_item( br'(?s)\\C(?P<val>[0-4])="(?P<text>.+?)"', pml) chapter_index += self._index_item( br'(?s)\\X(?P<val>[0-4])(?P<text>.+?)\\X[0-4]', pml) chapter_index += self._index_item(br'(?s)\\x(?P<text>.+?)\\x', pml) link_index = self._index_item(br'(?s)\\Q="(?P<text>.+?)"', pml) images = self._images(oeb_book.manifest, pmlmlizer.image_hrefs) metadata = [self._metadata(metadata)] hr = [ self._header_record(len(text), len(chapter_index), len(link_index), len(images)) ] ''' Record order as generated by Dropbook. 1. eReader Header 2. Compressed text 3. Small font page index 4. Large font page index 5. Chapter index 6. Links index 7. Images 8. (Extrapolation: there should be one more record type here though yet uncovered what it might be). 9. Metadata 10. Sidebar records 11. Footnote records 12. Text block size record 13. "MeTaInFo\x00" word record ''' sections = hr + text + chapter_index + link_index + images + metadata + [ text_sizes ] + [b'MeTaInFo\x00'] lengths = [ len(i) if i not in images else len(i[0]) + len(i[1]) for i in sections ] pdbHeaderBuilder = PdbHeaderBuilder(IDENTITY, metadata[0].partition('\x00')[0]) pdbHeaderBuilder.build_header(lengths, out_stream) for item in sections: if item in images: out_stream.write(item[0]) out_stream.write(item[1]) else: out_stream.write(item)
def convert(self, oeb_book, output_path, input_plugin, opts, log): from calibre.ebooks.pml.pmlml import PMLMLizer from calibre.utils.zipfile import ZipFile with TemporaryDirectory('_pmlz_output') as tdir: pmlmlizer = PMLMLizer(log) pml = unicode_type(pmlmlizer.extract_content(oeb_book, opts)) with open(os.path.join(tdir, 'index.pml'), 'wb') as out: out.write(pml.encode(opts.pml_output_encoding, 'replace')) img_path = os.path.join(tdir, 'index_img') if not os.path.exists(img_path): os.makedirs(img_path) self.write_images(oeb_book.manifest, pmlmlizer.image_hrefs, img_path, opts) log.debug('Compressing output...') pmlz = ZipFile(output_path, 'w') pmlz.add_dir(tdir)
def convert(self, oeb_book, output_path, input_plugin, opts, log): from calibre.ebooks.pml.pmlml import PMLMLizer from calibre.utils.zipfile import ZipFile with TemporaryDirectory('_pmlz_output') as tdir: pmlmlizer = PMLMLizer(log) pml = unicode(pmlmlizer.extract_content(oeb_book, opts)) with open(os.path.join(tdir, 'index.pml'), 'wb') as out: out.write(pml.encode(opts.pml_output_encoding, 'replace')) img_path = os.path.join(tdir, 'index_img') if not os.path.exists(img_path): os.makedirs(img_path) self.write_images(oeb_book.manifest, pmlmlizer.image_hrefs, img_path, opts) log.debug('Compressing output...') pmlz = ZipFile(output_path, 'w') pmlz.add_dir(tdir)
def write_content(self, oeb_book, out_stream, metadata=None): pmlmlizer = PMLMLizer(self.log) pml = unicode(pmlmlizer.extract_content(oeb_book, self.opts)).encode('cp1252', 'replace') text, text_sizes = self._text(pml) chapter_index = self._index_item(r'(?s)\\C(?P<val>[0-4])="(?P<text>.+?)"', pml) chapter_index += self._index_item(r'(?s)\\X(?P<val>[0-4])(?P<text>.+?)\\X[0-4]', pml) chapter_index += self._index_item(r'(?s)\\x(?P<text>.+?)\\x', pml) link_index = self._index_item(r'(?s)\\Q="(?P<text>.+?)"', pml) images = self._images(oeb_book.manifest, pmlmlizer.image_hrefs) metadata = [self._metadata(metadata)] hr = [self._header_record(len(text), len(chapter_index), len(link_index), len(images))] ''' Record order as generated by Dropbook. 1. eReader Header 2. Compressed text 3. Small font page index 4. Large font page index 5. Chapter index 6. Links index 7. Images 8. (Extrapolation: there should be one more record type here though yet uncovered what it might be). 9. Metadata 10. Sidebar records 11. Footnote records 12. Text block size record 13. "MeTaInFo\x00" word record ''' sections = hr+text+chapter_index+link_index+images+metadata+[text_sizes]+['MeTaInFo\x00'] lengths = [len(i) if i not in images else len(i[0]) + len(i[1]) for i in sections] pdbHeaderBuilder = PdbHeaderBuilder(IDENTITY, metadata[0].partition('\x00')[0]) pdbHeaderBuilder.build_header(lengths, out_stream) for item in sections: if item in images: out_stream.write(item[0]) out_stream.write(item[1]) else: out_stream.write(item)