def create_text_records(self): self.flows = [ x.encode('utf-8') if isinstance(x, unicode) else x for x in self.flows ] text = b''.join(self.flows) self.text_length = len(text) text = BytesIO(text) nrecords = 0 records_size = 0 self.uncompressed_record_lengths = [] if self.compress: self.oeb.logger.info('\tCompressing markup...') while text.tell() < self.text_length: data, overlap = create_text_record(text) self.uncompressed_record_lengths.append(len(data)) if self.compress: data = compress_doc(data) data += overlap data += pack(b'>B', len(overlap)) self.records.append(data) records_size += len(data) nrecords += 1 self.last_text_record_idx = nrecords self.first_non_text_record_idx = nrecords + 1 # Pad so that the next records starts at a 4 byte boundary if records_size % 4 != 0: self.records.append(b'\x00' * (records_size % 4)) self.first_non_text_record_idx += 1
def generate_text(self): # {{{ self.oeb.logger.info('Serializing markup content...') self.serializer = Serializer(self.oeb, self.image_map, self.is_periodical, write_page_breaks_after_item=self.write_page_breaks_after_item) text = self.serializer() self.text_length = len(text) text = io.BytesIO(text) nrecords = 0 records_size = 0 if self.compression != UNCOMPRESSED: self.oeb.logger.info(' Compressing markup content...') while text.tell() < self.text_length: data, overlap = create_text_record(text) if self.compression == PALMDOC: data = compress_doc(data) data += overlap data += pack(b'>B', len(overlap)) self.records.append(data) records_size += len(data) nrecords += 1 self.last_text_record_idx = nrecords self.first_non_text_record_idx = nrecords + 1 # Pad so that the next records starts at a 4 byte boundary if records_size % 4 != 0: self.records.append(b'\x00'*(records_size % 4)) self.first_non_text_record_idx += 1
def create_text_records(self): self.flows = [x.encode('utf-8') if isinstance(x, unicode) else x for x in self.flows] text = b''.join(self.flows) self.text_length = len(text) text = BytesIO(text) nrecords = 0 records_size = 0 self.uncompressed_record_lengths = [] if self.compress: self.oeb.logger.info('\tCompressing markup...') while text.tell() < self.text_length: data, overlap = create_text_record(text) self.uncompressed_record_lengths.append(len(data)) if self.compress: data = compress_doc(data) data += overlap data += pack(b'>B', len(overlap)) self.records.append(data) records_size += len(data) nrecords += 1 self.last_text_record_idx = nrecords self.first_non_text_record_idx = nrecords + 1 # Pad so that the next records starts at a 4 byte boundary if records_size % 4 != 0: self.records.append(b'\x00'*(records_size % 4)) self.first_non_text_record_idx += 1
def generate_text(self): # {{{ self.oeb.logger.info('Serializing markup content...') self.serializer = Serializer(self.oeb, self.image_map, self.is_periodical, write_page_breaks_after_item=self.write_page_breaks_after_item) text = self.serializer() self.text_length = len(text) text = StringIO(text) nrecords = 0 records_size = 0 if self.compression != UNCOMPRESSED: self.oeb.logger.info(' Compressing markup content...') while text.tell() < self.text_length: data, overlap = create_text_record(text) if self.compression == PALMDOC: data = compress_doc(data) data += overlap data += pack(b'>B', len(overlap)) self.records.append(data) records_size += len(data) nrecords += 1 self.last_text_record_idx = nrecords self.first_non_text_record_idx = nrecords + 1 # Pad so that the next records starts at a 4 byte boundary if records_size % 4 != 0: self.records.append(b'\x00'*(records_size % 4)) self.first_non_text_record_idx += 1
def write_content(self, oeb_book, out_stream, metadata=None): from calibre.ebooks.compression.palmdoc import compress_doc title = self.opts.title if self.opts.title else oeb_book.metadata.title[0].value if oeb_book.metadata.title != [] else _('Unknown') txt_records, txt_length = self._generate_text(oeb_book) header_record = self._header_record(txt_length, len(txt_records)) section_lengths = [len(header_record)] self.log.info('Compessing data...') for i in range(0, len(txt_records)): self.log.debug('\tCompressing record %i' % i) txt_records[i] = compress_doc(txt_records[i]) section_lengths.append(len(txt_records[i])) out_stream.seek(0) hb = PdbHeaderBuilder('TEXtREAd', title) hb.build_header(section_lengths, out_stream) for record in [header_record] + txt_records: out_stream.write(record)