def setLandmarks(self, landmarks): landmarks_xhtml = self.buildLandmarks(landmarks) # replace the landmarks from the navsrc with a placeholer navsrc = self.content qp = QuickXHTMLParser() qp.setContent(navsrc) nav_type = None res = [] skip_output = False for txt, tp, tname, ttype, tattr in qp.parse_iter(): if txt is not None: if not skip_output: res.append(txt) else: if tname == "nav" and ttype == "begin": nav_type = tattr.get("epub:type", None) if nav_type is not None and nav_type == "landmarks": res.append(SIGIL_REPLACE_LANDMARKS_HERE) skip_output = True continue if tname == "nav" and ttype == "end" and nav_type == "landmarks": nav_type = None skip_output = False continue if not skip_output: res.append(qp.tag_info_to_xml(tname, ttype, tattr)) navsrc = "".join(res) m = re.search(NAV_LANDMARKS_PATTERN, navsrc) if m is None: return False navsrc = navsrc[0:m.start()] + landmarks_xhtml + navsrc[m.end():] self.content = navsrc return True
def setTOC(self, toclist): toc_xhtml = self.buildTOC(toclist) # replace the TOC in the current navsrc with a placeholder navsrc = self.content qp = QuickXHTMLParser() qp.setContent(navsrc) nav_type = None res = [] skip_output = False for txt, tp, tname, ttype, tattr in qp.parse_iter(): if txt is not None: if not skip_output: res.append(txt) else: if tname == "nav" and ttype == "begin": nav_type = tattr.get("epub:type", None) if nav_type is not None and nav_type == "toc": res.append(SIGIL_REPLACE_TOC_HERE) skip_output = True continue if tname == "nav" and ttype == "end" and nav_type == "toc": nav_type = None skip_output = False continue if not skip_output: res.append(qp.tag_info_to_xml(tname, ttype, tattr)) navsrc = "".join(res) m = re.search(NAV_TOC_PATTERN, navsrc) if m is None: return False navsrc = navsrc[0:m.start()] + toc_xhtml + navsrc[m.end():] self.content = navsrc return True
def setPageList(self, pagelist): pagelist_xhtml = self.buildPageList(pagelist) # replace the pagelist from the navsrc with a placeholer navsrc = self.content qp = QuickXHTMLParser() qp.setContent(navsrc) nav_type = None res = [] skip_output = False found_page_list = False for txt, tp, tname, ttype, tattr in qp.parse_iter(): if txt is not None: if not skip_output: res.append(txt) else: if tname == "nav" and ttype == "begin": nav_type = tattr.get("epub:type", None) if nav_type is not None and nav_type == "page-list": res.append(SIGIL_REPLACE_PAGELIST_HERE) found_page_list = True skip_output = True continue if tname == "nav" and ttype == "end" and nav_type == "page-list": nav_type = None skip_output = False continue if tname == "body" and ttype == "end": if not found_page_list and len(pagelist) > 0: padding = res[-1] res.append(SIGIL_REPLACE_PAGELIST_HERE) res.append(padding) found_page_list = True if not skip_output: res.append(qp.tag_info_to_xml(tname, ttype, tattr)) navsrc = "".join(res) m = re.search(NAV_PAGELIST_PATTERN, navsrc) if m is None: return False navsrc = navsrc[0:m.start()] + pagelist_xhtml + navsrc[m.end():] self.content = navsrc return True