def write_opf(self, guide, toc, spine, resource_map): mi = self.header.exth.mi if (self.cover_offset is not None and self.cover_offset < len(resource_map)): mi.cover = resource_map[self.cover_offset] if len(list(toc)) < 2: self.log.warn('KF8 has no metadata Table of Contents') for ref in guide: if ref.type == 'toc': href = ref.href() href, frag = urldefrag(href) if os.path.exists(href.replace('/', os.sep)): try: toc = self.read_inline_toc(href, frag) except: self.log.exception('Failed to read inline ToC') opf = OPFCreator(os.getcwdu(), mi) opf.guide = guide def exclude(path): return os.path.basename(path) == 'debug-raw.html' opf.create_manifest_from_files_in([os.getcwdu()], exclude=exclude) opf.create_spine(spine) opf.set_toc(toc) with open('metadata.opf', 'wb') as of, open('toc.ncx', 'wb') as ncx: opf.render(of, ncx, 'toc.ncx') return 'metadata.opf'
def write(self, doc): toc = create_toc(doc, self.body, self.resolved_link_map, self.styles, self.object_map, self.log, self.namespace) raw = html.tostring(self.html, encoding='utf-8', doctype='<!DOCTYPE html>') with lopen(os.path.join(self.dest_dir, 'index.html'), 'wb') as f: f.write(raw) css = self.styles.generate_css(self.dest_dir, self.docx, self.notes_nopb, self.nosupsub) if css: with lopen(os.path.join(self.dest_dir, 'docx.css'), 'wb') as f: f.write(css.encode('utf-8')) opf = OPFCreator(self.dest_dir, self.mi) opf.toc = toc opf.create_manifest_from_files_in([self.dest_dir]) for item in opf.manifest: if item.media_type == 'text/html': item.media_type = guess_type('a.xhtml')[0] opf.create_spine(['index.html']) if self.cover_image is not None: opf.guide.set_cover(self.cover_image) def process_guide(E, guide): if self.toc_anchor is not None: guide.append(E.reference( href='index.html#' + self.toc_anchor, title=_('Table of Contents'), type='toc')) toc_file = os.path.join(self.dest_dir, 'toc.ncx') with lopen(os.path.join(self.dest_dir, 'metadata.opf'), 'wb') as of, open(toc_file, 'wb') as ncx: opf.render(of, ncx, 'toc.ncx', process_guide=process_guide) if os.path.getsize(toc_file) == 0: os.remove(toc_file) return os.path.join(self.dest_dir, 'metadata.opf')
def write(self, doc): toc = create_toc(doc, self.body, self.resolved_link_map, self.styles, self.object_map, self.log) raw = html.tostring(self.html, encoding='utf-8', doctype='<!DOCTYPE html>') with open(os.path.join(self.dest_dir, 'index.html'), 'wb') as f: f.write(raw) css = self.styles.generate_css(self.dest_dir, self.docx) if css: with open(os.path.join(self.dest_dir, 'docx.css'), 'wb') as f: f.write(css.encode('utf-8')) opf = OPFCreator(self.dest_dir, self.mi) opf.toc = toc opf.create_manifest_from_files_in([self.dest_dir]) for item in opf.manifest: if item.media_type == 'text/html': item.media_type = guess_type('a.xhtml')[0] opf.create_spine(['index.html']) if self.cover_image is not None: opf.guide.set_cover(self.cover_image) toc_file = os.path.join(self.dest_dir, 'toc.ncx') with open(os.path.join(self.dest_dir, 'metadata.opf'), 'wb') as of, open(toc_file, 'wb') as ncx: opf.render(of, ncx, 'toc.ncx') if os.path.getsize(toc_file) == 0: os.remove(toc_file) return os.path.join(self.dest_dir, 'metadata.opf')
def write_opf(self, guide, toc, spine, resource_map): mi = self.header.exth.mi if (self.cover_offset is not None and self.cover_offset < len(resource_map)): mi.cover = resource_map[self.cover_offset] if len(list(toc)) < 2: self.log.warn('KF8 has no metadata Table of Contents') for ref in guide: if ref.type == 'toc': href = ref.href() href, frag = urldefrag(href) if os.path.exists(href.replace('/', os.sep)): try: toc = self.read_inline_toc(href, frag) except: self.log.exception('Failed to read inline ToC') opf = OPFCreator(os.getcwd(), mi) opf.guide = guide def exclude(path): return os.path.basename(path) == 'debug-raw.html' # If there are no images then the azw3 input plugin dumps all # binary records as .unknown images, remove them if self.for_tweak and os.path.exists('images') and os.path.isdir( 'images'): files = os.listdir('images') unknown = [x for x in files if x.endswith('.unknown')] if len(files) == len(unknown): [os.remove('images/' + f) for f in files] if self.for_tweak: try: os.remove('debug-raw.html') except: pass opf.create_manifest_from_files_in([os.getcwd()], exclude=exclude) for entry in opf.manifest: if entry.mime_type == 'text/html': entry.mime_type = 'application/xhtml+xml' opf.create_spine(spine) opf.set_toc(toc) ppd = getattr(self.header.exth, 'page_progression_direction', None) if ppd in {'ltr', 'rtl', 'default'}: opf.page_progression_direction = ppd pwm = getattr(self.header.exth, 'primary_writing_mode', None) if pwm is not None: opf.primary_writing_mode = pwm with open('metadata.opf', 'wb') as of, open('toc.ncx', 'wb') as ncx: opf.render(of, ncx, 'toc.ncx') return 'metadata.opf'
def convert(self, stream, options, file_ext, log, accelerators): log.debug('Enter convert() ...') dest_dir = os.getcwdu() # note: temp dir from calibre process log.debug('dest_dir: ' + dest_dir) mi = None # call latex2mobi with markup output only from subprocess import check_output, STDOUT, CalledProcessError args = [ self.java_exec, '-jar', os.path.join(self.plugin_dir, JAR_FILENAME), '-i', stream.name, '-n', '-o', dest_dir ] from calibre_plugins.latexformulas_input.config import prefs if prefs['pandoc_exec'] != None and prefs['pandoc_exec'] != '': args.append('-p') args.append(prefs['pandoc_exec']) try: log.debug(check_output(args, stderr=STDOUT)) except CalledProcessError as e: log.debug(e.returncode) log.debug(e.cmd) log.debug(e.output) opf = OPFCreator(dest_dir, mi) markup_dir = dest_dir + os.path.sep + os.path.basename( stream.name) + '-markup' log.debug('Markup-dir: ' + markup_dir) log.debug('CreateManifestFromFilesIn()') opf.create_manifest_from_files_in([markup_dir]) for item in opf.manifest: if item.media_type == 'text/html': log.debug('Item ' + str(item) + ' is of type text/html') item.media_type = guess_type('a.html')[0] log.debug('Guess type result: ' + item.media_type) if item.media_type == 'text/css': log.debug('Item ' + str(item) + ' is of type text/css') item.media_type = guess_type('a.css')[0] log.debug('Guess type result: ' + item.media_type) log.debug('Create_spine()') opf.create_spine( [os.path.basename(markup_dir) + os.path.sep + 'latex2mobi.html']) output_path = os.path.join(dest_dir, 'metadata.opf') with open(output_path, 'wb') as of: opf.render(of) log('Exit convert() ...') return output_path
def write_opf(self, guide, toc, spine, resource_map): mi = self.header.exth.mi if (self.cover_offset is not None and self.cover_offset < len(resource_map)): mi.cover = resource_map[self.cover_offset] if len(list(toc)) < 2: self.log.warn('KF8 has no metadata Table of Contents') for ref in guide: if ref.type == 'toc': href = ref.href() href, frag = urldefrag(href) if os.path.exists(href.replace('/', os.sep)): try: toc = self.read_inline_toc(href, frag) except: self.log.exception('Failed to read inline ToC') opf = OPFCreator(os.getcwdu(), mi) opf.guide = guide def exclude(path): return os.path.basename(path) == 'debug-raw.html' # If there are no images then the azw3 input plugin dumps all # binary records as .unknown images, remove them if self.for_tweak and os.path.exists('images') and os.path.isdir('images'): files = os.listdir('images') unknown = [x for x in files if x.endswith('.unknown')] if len(files) == len(unknown): [os.remove('images/'+f) for f in files] if self.for_tweak: try: os.remove('debug-raw.html') except: pass opf.create_manifest_from_files_in([os.getcwdu()], exclude=exclude) for entry in opf.manifest: if entry.mime_type == 'text/html': entry.mime_type = 'application/xhtml+xml' opf.create_spine(spine) opf.set_toc(toc) ppd = getattr(self.header.exth, 'page_progression_direction', None) if ppd in {'ltr', 'rtl', 'default'}: opf.page_progression_direction = ppd pwm = getattr(self.header.exth, 'primary_writing_mode', None) if pwm is not None: opf.primary_writing_mode = pwm with open('metadata.opf', 'wb') as of, open('toc.ncx', 'wb') as ncx: opf.render(of, ncx, 'toc.ncx') return 'metadata.opf'
def convert(self, stream, options, file_ext, log, accelerators): log.debug('Enter convert() ...') dest_dir = os.getcwdu() # note: temp dir from calibre process log.debug('dest_dir: ' + dest_dir) mi = None # call latex2mobi with markup output only from subprocess import check_output, STDOUT, CalledProcessError args = [self.java_exec, '-jar', os.path.join(self.plugin_dir, JAR_FILENAME), '-i', stream.name, '-n', '-o', dest_dir] from calibre_plugins.latexformulas_input.config import prefs if prefs['pandoc_exec'] != None and prefs['pandoc_exec'] != '': args.append('-p') args.append(prefs['pandoc_exec']) try: log.debug(check_output(args, stderr=STDOUT)) except CalledProcessError as e: log.debug(e.returncode) log.debug(e.cmd) log.debug(e.output) opf = OPFCreator(dest_dir, mi) markup_dir = dest_dir + os.path.sep + os.path.basename(stream.name) + '-markup' log.debug('Markup-dir: ' + markup_dir) log.debug('CreateManifestFromFilesIn()') opf.create_manifest_from_files_in([markup_dir]) for item in opf.manifest: if item.media_type == 'text/html': log.debug('Item ' + str(item) + ' is of type text/html') item.media_type = guess_type('a.html')[0] log.debug('Guess type result: ' + item.media_type) if item.media_type == 'text/css': log.debug('Item ' + str(item) + ' is of type text/css') item.media_type = guess_type('a.css')[0] log.debug('Guess type result: ' + item.media_type) log.debug('Create_spine()') opf.create_spine([os.path.basename(markup_dir) + os.path.sep + 'latex2mobi.html']) output_path = os.path.join(dest_dir, 'metadata.opf') with open(output_path, 'wb') as of: opf.render(of) log('Exit convert() ...') return output_path
def write_opf(self, guide, toc, spine, resource_map): mi = self.header.exth.mi if self.cover_offset is not None and self.cover_offset < len(resource_map): mi.cover = resource_map[self.cover_offset] if len(list(toc)) < 2: self.log.warn("KF8 has no metadata Table of Contents") for ref in guide: if ref.type == "toc": href = ref.href() href, frag = urldefrag(href) if os.path.exists(href.replace("/", os.sep)): try: toc = self.read_inline_toc(href, frag) except: self.log.exception("Failed to read inline ToC") opf = OPFCreator(os.getcwdu(), mi) opf.guide = guide def exclude(path): return os.path.basename(path) == "debug-raw.html" # If there are no images then the azw3 input plugin dumps all # binary records as .unknown images, remove them if self.for_tweak and os.path.exists("images") and os.path.isdir("images"): files = os.listdir("images") unknown = [x for x in files if x.endswith(".unknown")] if len(files) == len(unknown): [os.remove("images/" + f) for f in files] if self.for_tweak: try: os.remove("debug-raw.html") except: pass opf.create_manifest_from_files_in([os.getcwdu()], exclude=exclude) for entry in opf.manifest: if entry.mime_type == "text/html": entry.mime_type = "application/xhtml+xml" opf.create_spine(spine) opf.set_toc(toc) ppd = getattr(self.header.exth, "page_progression_direction", None) if ppd in {"ltr", "rtl", "default"}: opf.page_progression_direction = ppd with open("metadata.opf", "wb") as of, open("toc.ncx", "wb") as ncx: opf.render(of, ncx, "toc.ncx") return "metadata.opf"
def write(self): toc = self.create_toc() raw = html.tostring(self.html, encoding='utf-8', doctype='<!DOCTYPE html>') with open(os.path.join(self.dest_dir, 'index.html'), 'wb') as f: f.write(raw) css = self.styles.generate_css(self.dest_dir, self.docx) if css: with open(os.path.join(self.dest_dir, 'docx.css'), 'wb') as f: f.write(css.encode('utf-8')) opf = OPFCreator(self.dest_dir, self.mi) opf.toc = toc opf.create_manifest_from_files_in([self.dest_dir]) opf.create_spine(['index.html']) with open(os.path.join(self.dest_dir, 'metadata.opf'), 'wb') as of, open(os.path.join(self.dest_dir, 'toc.ncx'), 'wb') as ncx: opf.render(of, ncx, 'toc.ncx') return os.path.join(self.dest_dir, 'metadata.opf')
def write(self): toc = self.create_toc() raw = html.tostring(self.html, encoding="utf-8", doctype="<!DOCTYPE html>") with open(os.path.join(self.dest_dir, "index.html"), "wb") as f: f.write(raw) css = self.styles.generate_css(self.dest_dir, self.docx) if css: with open(os.path.join(self.dest_dir, "docx.css"), "wb") as f: f.write(css.encode("utf-8")) opf = OPFCreator(self.dest_dir, self.mi) opf.toc = toc opf.create_manifest_from_files_in([self.dest_dir]) opf.create_spine(["index.html"]) with open(os.path.join(self.dest_dir, "metadata.opf"), "wb") as of, open( os.path.join(self.dest_dir, "toc.ncx"), "wb" ) as ncx: opf.render(of, ncx, "toc.ncx") return os.path.join(self.dest_dir, "metadata.opf")
def write(self, doc): toc = create_toc(doc, self.body, self.resolved_link_map, self.styles, self.object_map) raw = html.tostring(self.html, encoding='utf-8', doctype='<!DOCTYPE html>') with open(os.path.join(self.dest_dir, 'index.html'), 'wb') as f: f.write(raw) css = self.styles.generate_css(self.dest_dir, self.docx) if css: with open(os.path.join(self.dest_dir, 'docx.css'), 'wb') as f: f.write(css.encode('utf-8')) opf = OPFCreator(self.dest_dir, self.mi) opf.toc = toc opf.create_manifest_from_files_in([self.dest_dir]) opf.create_spine(['index.html']) if self.cover_image is not None: opf.guide.set_cover(self.cover_image) with open(os.path.join(self.dest_dir, 'metadata.opf'), 'wb') as of, open(os.path.join(self.dest_dir, 'toc.ncx'), 'wb') as ncx: opf.render(of, ncx, 'toc.ncx') return os.path.join(self.dest_dir, 'metadata.opf')
def write_opf(self, guide, toc, spine, resource_map): mi = self.header.exth.mi if self.cover_offset is not None and self.cover_offset < len(resource_map): mi.cover = resource_map[self.cover_offset] if len(list(toc)) < 2: self.log.warn("KF8 has no metadata Table of Contents") for ref in guide: if ref.type == "toc": href = ref.href() href, frag = urldefrag(href) if os.path.exists(href.replace("/", os.sep)): try: toc = self.read_inline_toc(href, frag) except: self.log.exception("Failed to read inline ToC") opf = OPFCreator(os.getcwdu(), mi) opf.guide = guide def exclude(path): return os.path.basename(path) == "debug-raw.html" opf.create_manifest_from_files_in([os.getcwdu()], exclude=exclude) for entry in opf.manifest: if entry.mime_type == "text/html": entry.mime_type = "application/xhtml+xml" opf.create_spine(spine) opf.set_toc(toc) ppd = self.resc_data.get("page-progression-direction", None) if ppd: opf.page_progression_direction = ppd with open("metadata.opf", "wb") as of, open("toc.ncx", "wb") as ncx: opf.render(of, ncx, "toc.ncx") return "metadata.opf"