Exemplo n.º 1
0
def create_ncx(toc, to_href, btitle, lang, uid):
    lang = lang.replace('_', '-')
    ncx = etree.Element(NCX('ncx'),
        attrib={'version': '2005-1', XML('lang'): lang},
        nsmap={None: NCX_NS})
    head = etree.SubElement(ncx, NCX('head'))
    etree.SubElement(head, NCX('meta'),
        name='dtb:uid', content=unicode(uid))
    etree.SubElement(head, NCX('meta'),
        name='dtb:depth', content=str(toc.depth))
    generator = ''.join(['calibre (', __version__, ')'])
    etree.SubElement(head, NCX('meta'),
        name='dtb:generator', content=generator)
    etree.SubElement(head, NCX('meta'), name='dtb:totalPageCount', content='0')
    etree.SubElement(head, NCX('meta'), name='dtb:maxPageNumber', content='0')
    title = etree.SubElement(ncx, NCX('docTitle'))
    text = etree.SubElement(title, NCX('text'))
    text.text = btitle
    navmap = etree.SubElement(ncx, NCX('navMap'))
    spat = re.compile(r'\s+')

    play_order = Counter()

    def process_node(xml_parent, toc_parent):
        for child in toc_parent:
            play_order['c'] += 1
            point = etree.SubElement(xml_parent, NCX('navPoint'), id='num_%d' % play_order['c'],
                            playOrder=str(play_order['c']))
            label = etree.SubElement(point, NCX('navLabel'))
            title = child.title
            if title:
                title = spat.sub(' ', title)
            etree.SubElement(label, NCX('text')).text = title
            if child.dest:
                href = to_href(child.dest)
                if child.frag:
                    href += '#'+child.frag
                etree.SubElement(point, NCX('content'), src=href)
            process_node(point, child)

    process_node(navmap, toc)
    return ncx
Exemplo n.º 2
0
 def add_from_li(li, parent):
     href = text = None
     for x in li.iterchildren(XHTML('a'), XHTML('span')):
         text = etree.tostring(
             x, method='text', encoding=unicode,
             with_tail=False).strip() or ' '.join(
                 x.xpath('descendant-or-self::*/@title')).strip()
         href = x.get('href')
         if href:
             if href.startswith('#'):
                 href = bn + href
         break
     np = parent.makeelement(NCX('navPoint'))
     parent.append(np)
     np.append(np.makeelement(NCX('navLabel')))
     np[0].append(np.makeelement(NCX('text')))
     np[0][0].text = text
     if href:
         np.append(np.makeelement(NCX('content'), attrib={'src': href}))
     return np