mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	MOBI Output: Ignore the Table of Contents pointed to by the guide, if it contains no links
This commit is contained in:
		
							parent
							
								
									bc74856b2d
								
							
						
					
					
						commit
						0fb6d7bd59
					
				@ -1463,9 +1463,17 @@ class TOC(object):
 | 
				
			|||||||
        except ValueError:
 | 
					        except ValueError:
 | 
				
			||||||
            return 1
 | 
					            return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def get_lines(self, lvl=0):
 | 
				
			||||||
        return 'TOC: %s --> %s'%(self.title, self.href)
 | 
					        ans = [(u'\t'*lvl) + u'TOC: %s --> %s'%(self.title, self.href)]
 | 
				
			||||||
 | 
					        for child in self:
 | 
				
			||||||
 | 
					            ans.extend(child.get_lines(lvl+1))
 | 
				
			||||||
 | 
					        return ans
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __str__(self):
 | 
				
			||||||
 | 
					        return b'\n'.join([x.encode('utf-8') for x in self.get_lines()])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __unicode__(self):
 | 
				
			||||||
 | 
					        return u'\n'.join(self.get_lines())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def to_opf1(self, tour):
 | 
					    def to_opf1(self, tour):
 | 
				
			||||||
        for node in self.nodes:
 | 
					        for node in self.nodes:
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ __copyright__ = '2008, Marshall T. Vandegrift <llasram@gmail.com>'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from calibre.ebooks.oeb.base import XML, XHTML, XHTML_NS
 | 
					from calibre.ebooks.oeb.base import XML, XHTML, XHTML_NS
 | 
				
			||||||
from calibre.ebooks.oeb.base import XHTML_MIME, CSS_MIME
 | 
					from calibre.ebooks.oeb.base import XHTML_MIME, CSS_MIME
 | 
				
			||||||
from calibre.ebooks.oeb.base import element
 | 
					from calibre.ebooks.oeb.base import element, XPath
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__all__ = ['HTMLTOCAdder']
 | 
					__all__ = ['HTMLTOCAdder']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,18 +62,24 @@ class HTMLTOCAdder(object):
 | 
				
			|||||||
        return cls(title=opts.toc_title)
 | 
					        return cls(title=opts.toc_title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __call__(self, oeb, context):
 | 
					    def __call__(self, oeb, context):
 | 
				
			||||||
 | 
					        has_toc = getattr(getattr(oeb, 'toc', False), 'nodes', False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if 'toc' in oeb.guide:
 | 
					        if 'toc' in oeb.guide:
 | 
				
			||||||
            # Ensure toc pointed to in <guide> is in spine
 | 
					            # Ensure toc pointed to in <guide> is in spine
 | 
				
			||||||
            from calibre.ebooks.oeb.base import urlnormalize
 | 
					            from calibre.ebooks.oeb.base import urlnormalize
 | 
				
			||||||
            href = urlnormalize(oeb.guide['toc'].href)
 | 
					            href = urlnormalize(oeb.guide['toc'].href)
 | 
				
			||||||
            if href in oeb.manifest.hrefs:
 | 
					            if href in oeb.manifest.hrefs:
 | 
				
			||||||
                item = oeb.manifest.hrefs[href]
 | 
					                item = oeb.manifest.hrefs[href]
 | 
				
			||||||
                if oeb.spine.index(item) < 0:
 | 
					                if (hasattr(item.data, 'xpath') and
 | 
				
			||||||
                    oeb.spine.add(item, linear=False)
 | 
					                    XPath('//h:a[@href]')(item.data)):
 | 
				
			||||||
                return
 | 
					                    if oeb.spine.index(item) < 0:
 | 
				
			||||||
 | 
					                        oeb.spine.add(item, linear=False)
 | 
				
			||||||
 | 
					                    return
 | 
				
			||||||
 | 
					                elif has_toc:
 | 
				
			||||||
 | 
					                    oeb.guide.remove('toc')
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                oeb.guide.remove('toc')
 | 
					                oeb.guide.remove('toc')
 | 
				
			||||||
        if not getattr(getattr(oeb, 'toc', False), 'nodes', False):
 | 
					        if not has_toc:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        oeb.logger.info('Generating in-line TOC...')
 | 
					        oeb.logger.info('Generating in-line TOC...')
 | 
				
			||||||
        title = self.title or oeb.translate(DEFAULT_TITLE)
 | 
					        title = self.title or oeb.translate(DEFAULT_TITLE)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user