mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
EPUB Output: Add --level3-toc option
This commit is contained in:
parent
c7a16c161c
commit
f4d95a3d6b
@ -142,6 +142,8 @@ to auto-generate a Table of Contents.
|
|||||||
help=_('XPath expression that specifies all tags that should be added to the Table of Contents at level one. If this is specified, it takes precedence over other forms of auto-detection.'))
|
help=_('XPath expression that specifies all tags that should be added to the Table of Contents at level one. If this is specified, it takes precedence over other forms of auto-detection.'))
|
||||||
toc('level2_toc', ['--level2-toc'], default=None,
|
toc('level2_toc', ['--level2-toc'], default=None,
|
||||||
help=_('XPath expression that specifies all tags that should be added to the Table of Contents at level two. Each entry is added under the previous level one entry.'))
|
help=_('XPath expression that specifies all tags that should be added to the Table of Contents at level two. Each entry is added under the previous level one entry.'))
|
||||||
|
toc('level3_toc', ['--level3-toc'], default=None,
|
||||||
|
help=_('XPath expression that specifies all tags that should be added to the Table of Contents at level three. Each entry is added under the previous level two entry.'))
|
||||||
toc('from_ncx', ['--from-ncx'], default=None,
|
toc('from_ncx', ['--from-ncx'], default=None,
|
||||||
help=_('Path to a .ncx file that contains the table of contents to use for this ebook. The NCX file should contain links relative to the directory it is placed in. See http://www.niso.org/workrooms/daisy/Z39-86-2005.html#NCX for an overview of the NCX format.'))
|
help=_('Path to a .ncx file that contains the table of contents to use for this ebook. The NCX file should contain links relative to the directory it is placed in. See http://www.niso.org/workrooms/daisy/Z39-86-2005.html#NCX for an overview of the NCX format.'))
|
||||||
toc('use_auto_toc', ['--use-auto-toc'], default=False,
|
toc('use_auto_toc', ['--use-auto-toc'], default=False,
|
||||||
|
@ -377,16 +377,13 @@ def convert(htmlfile, opts, notification=None, create_epub=True,
|
|||||||
mi = merge_metadata(htmlfile, opf, opts)
|
mi = merge_metadata(htmlfile, opf, opts)
|
||||||
opts.chapter = XPath(opts.chapter,
|
opts.chapter = XPath(opts.chapter,
|
||||||
namespaces={'re':'http://exslt.org/regular-expressions'})
|
namespaces={'re':'http://exslt.org/regular-expressions'})
|
||||||
if opts.level1_toc:
|
for x in (1, 2, 3):
|
||||||
opts.level1_toc = XPath(opts.level1_toc,
|
attr = 'level%d_toc'%x
|
||||||
namespaces={'re':'http://exslt.org/regular-expressions'})
|
if getattr(opts, attr):
|
||||||
else:
|
setattr(opts, attr, XPath(getattr(opts, attr),
|
||||||
opts.level1_toc = None
|
namespaces={'re':'http://exslt.org/regular-expressions'}))
|
||||||
if opts.level2_toc:
|
else:
|
||||||
opts.level2_toc = XPath(opts.level2_toc,
|
setattr(opts, attr, None)
|
||||||
namespaces={'re':'http://exslt.org/regular-expressions'})
|
|
||||||
else:
|
|
||||||
opts.level2_toc = None
|
|
||||||
|
|
||||||
with TemporaryDirectory(suffix='_html2epub', keep=opts.keep_intermediate) as tdir:
|
with TemporaryDirectory(suffix='_html2epub', keep=opts.keep_intermediate) as tdir:
|
||||||
if opts.keep_intermediate:
|
if opts.keep_intermediate:
|
||||||
|
@ -647,6 +647,7 @@ class Processor(Parser):
|
|||||||
added[elem] = add_item(_href, frag, text, toc, type='chapter')
|
added[elem] = add_item(_href, frag, text, toc, type='chapter')
|
||||||
add_item(_href, frag, 'Top', added[elem], type='chapter')
|
add_item(_href, frag, 'Top', added[elem], type='chapter')
|
||||||
if self.opts.level2_toc is not None:
|
if self.opts.level2_toc is not None:
|
||||||
|
added2 = {}
|
||||||
level2 = list(self.opts.level2_toc(self.root))
|
level2 = list(self.opts.level2_toc(self.root))
|
||||||
for elem in level2:
|
for elem in level2:
|
||||||
level1 = None
|
level1 = None
|
||||||
@ -657,7 +658,21 @@ class Processor(Parser):
|
|||||||
text, _href, frag = elem_to_link(elem, href, counter)
|
text, _href, frag = elem_to_link(elem, href, counter)
|
||||||
counter += 1
|
counter += 1
|
||||||
if text:
|
if text:
|
||||||
|
added2[elem] = \
|
||||||
add_item(_href, frag, text, level1, type='chapter')
|
add_item(_href, frag, text, level1, type='chapter')
|
||||||
|
if self.opts.level3_toc is not None:
|
||||||
|
level3 = list(self.opts.level3_toc(self.root))
|
||||||
|
for elem in level3:
|
||||||
|
level2 = None
|
||||||
|
for item in self.root.iterdescendants():
|
||||||
|
if item in added2.keys():
|
||||||
|
level2 = added2[item]
|
||||||
|
elif item == elem and level2 is not None:
|
||||||
|
text, _href, frag = elem_to_link(elem, href, counter)
|
||||||
|
counter += 1
|
||||||
|
if text:
|
||||||
|
add_item(_href, frag, text, level2, type='chapter')
|
||||||
|
|
||||||
|
|
||||||
if len(toc) > 0:
|
if len(toc) > 0:
|
||||||
return
|
return
|
||||||
|
@ -252,7 +252,7 @@ class Config(ResizableDialog, Ui_Dialog):
|
|||||||
self.source_format = d.format()
|
self.source_format = d.format()
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
for opt in ('chapter', 'level1_toc', 'level2_toc'):
|
for opt in ('chapter', 'level1_toc', 'level2_toc', 'level3_toc'):
|
||||||
text = unicode(getattr(self, 'opt_'+opt).text())
|
text = unicode(getattr(self, 'opt_'+opt).text())
|
||||||
if text:
|
if text:
|
||||||
try:
|
try:
|
||||||
|
@ -93,7 +93,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QStackedWidget" name="stack" >
|
<widget class="QStackedWidget" name="stack" >
|
||||||
<property name="currentIndex" >
|
<property name="currentIndex" >
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="metadata_page" >
|
<widget class="QWidget" name="metadata_page" >
|
||||||
<layout class="QGridLayout" name="gridLayout_4" >
|
<layout class="QGridLayout" name="gridLayout_4" >
|
||||||
@ -105,36 +105,6 @@
|
|||||||
<string>Book Cover</string>
|
<string>Book Cover</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="_2" >
|
<layout class="QGridLayout" name="_2" >
|
||||||
<item row="0" column="0" >
|
|
||||||
<layout class="QHBoxLayout" name="_3" >
|
|
||||||
<item>
|
|
||||||
<widget class="ImageView" name="cover" >
|
|
||||||
<property name="text" >
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap" >
|
|
||||||
<pixmap resource="../images.qrc" >:/images/book.svg</pixmap>
|
|
||||||
</property>
|
|
||||||
<property name="scaledContents" >
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="alignment" >
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" >
|
|
||||||
<widget class="QCheckBox" name="opt_prefer_metadata_cover" >
|
|
||||||
<property name="text" >
|
|
||||||
<string>Use cover from &source file</string>
|
|
||||||
</property>
|
|
||||||
<property name="checked" >
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" >
|
<item row="1" column="0" >
|
||||||
<layout class="QVBoxLayout" name="_4" >
|
<layout class="QVBoxLayout" name="_4" >
|
||||||
<property name="spacing" >
|
<property name="spacing" >
|
||||||
@ -186,6 +156,36 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0" >
|
||||||
|
<widget class="QCheckBox" name="opt_prefer_metadata_cover" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Use cover from &source file</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<layout class="QHBoxLayout" name="_3" >
|
||||||
|
<item>
|
||||||
|
<widget class="ImageView" name="cover" >
|
||||||
|
<property name="text" >
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap" >
|
||||||
|
<pixmap resource="../images.qrc" >:/images/book.svg</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment" >
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
<zorder>opt_prefer_metadata_cover</zorder>
|
<zorder>opt_prefer_metadata_cover</zorder>
|
||||||
<zorder></zorder>
|
<zorder></zorder>
|
||||||
@ -777,10 +777,10 @@ p, li { white-space: pre-wrap; }
|
|||||||
<item row="5" column="1" >
|
<item row="5" column="1" >
|
||||||
<widget class="QLineEdit" name="opt_level2_toc" />
|
<widget class="QLineEdit" name="opt_level2_toc" />
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="1" >
|
<item row="7" column="1" >
|
||||||
<widget class="QLineEdit" name="opt_toc_title" />
|
<widget class="QLineEdit" name="opt_toc_title" />
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0" >
|
<item row="7" column="0" >
|
||||||
<widget class="QLabel" name="toc_title_label" >
|
<widget class="QLabel" name="toc_title_label" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>&Title for generated TOC</string>
|
<string>&Title for generated TOC</string>
|
||||||
@ -790,6 +790,19 @@ p, li { white-space: pre-wrap; }
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="6" column="1" >
|
||||||
|
<widget class="QLineEdit" name="opt_level3_toc" />
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0" >
|
||||||
|
<widget class="QLabel" name="label_11" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Level &3 TOC</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy" >
|
||||||
|
<cstring>opt_level3_toc</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user