mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add support for auto generating the TOC based on detected chapters
This commit is contained in:
commit
82c02981e2
@ -163,6 +163,9 @@ def option_parser(usage, gui_mode=False):
|
|||||||
link.add_option('--link-exclude', dest='link_exclude', default='@',
|
link.add_option('--link-exclude', dest='link_exclude', default='@',
|
||||||
help=_('''A regular expression. <a> tags whoose href '''
|
help=_('''A regular expression. <a> tags whoose href '''
|
||||||
'''matches will be ignored. Defaults to %default'''))
|
'''matches will be ignored. Defaults to %default'''))
|
||||||
|
link.add_option('--no-links-in-toc', action='store_true', default=False,
|
||||||
|
dest='no_links_in_toc',
|
||||||
|
help=_('''Don't add links to the table of contents.'''))
|
||||||
chapter = parser.add_option_group('CHAPTER OPTIONS')
|
chapter = parser.add_option_group('CHAPTER OPTIONS')
|
||||||
chapter.add_option('--disable-chapter-detection', action='store_true',
|
chapter.add_option('--disable-chapter-detection', action='store_true',
|
||||||
default=False, dest='disable_chapter_detection',
|
default=False, dest='disable_chapter_detection',
|
||||||
@ -186,6 +189,9 @@ def option_parser(usage, gui_mode=False):
|
|||||||
default='$', help=_('Force a page break before tags whoose names match this regular expression.'))
|
default='$', help=_('Force a page break before tags whoose names match this regular expression.'))
|
||||||
chapter.add_option('--force-page-break-before-attr', dest='force_page_break_attr',
|
chapter.add_option('--force-page-break-before-attr', dest='force_page_break_attr',
|
||||||
default='$,,$', help=_('Force a page break before an element having the specified attribute. The format for this option is tagname regexp,attribute name,attribute value regexp. For example to match all heading tags that have the attribute class="chapter" you would use "h\d,class,chapter". Default is %default'''))
|
default='$,,$', help=_('Force a page break before an element having the specified attribute. The format for this option is tagname regexp,attribute name,attribute value regexp. For example to match all heading tags that have the attribute class="chapter" you would use "h\d,class,chapter". Default is %default'''))
|
||||||
|
chapter.add_option('--add-chapters-to-toc', action='store_true',
|
||||||
|
default=False, dest='add_chapters_to_toc',
|
||||||
|
help=_('''Add detected chapters to the table of contents.'''))
|
||||||
prepro = parser.add_option_group('PREPROCESSING OPTIONS')
|
prepro = parser.add_option_group('PREPROCESSING OPTIONS')
|
||||||
prepro.add_option('--baen', action='store_true', default=False, dest='baen',
|
prepro.add_option('--baen', action='store_true', default=False, dest='baen',
|
||||||
help=_('''Preprocess Baen HTML files to improve generated LRF.'''))
|
help=_('''Preprocess Baen HTML files to improve generated LRF.'''))
|
||||||
|
@ -547,7 +547,8 @@ class HTMLConverter(object, LoggingInterface):
|
|||||||
|
|
||||||
path, fragment = munge_paths(self.target_prefix, tag['href'])
|
path, fragment = munge_paths(self.target_prefix, tag['href'])
|
||||||
return {'para':para, 'text':text, 'path':os.path.abspath(path),
|
return {'para':para, 'text':text, 'path':os.path.abspath(path),
|
||||||
'fragment':fragment, 'in toc': (self.link_level == 0 and not self.use_spine)}
|
'fragment':fragment, 'in toc': (self.link_level == 0 and
|
||||||
|
not self.use_spine and not self.options.no_links_in_toc)}
|
||||||
|
|
||||||
|
|
||||||
def get_text(self, tag, limit=None):
|
def get_text(self, tag, limit=None):
|
||||||
@ -1621,6 +1622,10 @@ class HTMLConverter(object, LoggingInterface):
|
|||||||
self.end_page()
|
self.end_page()
|
||||||
self.page_break_found = True
|
self.page_break_found = True
|
||||||
|
|
||||||
|
if self.options.add_chapters_to_toc:
|
||||||
|
self.extra_toc_entries.append((self.get_text(tag,
|
||||||
|
limit=1000), self.current_block))
|
||||||
|
|
||||||
if self.current_para.has_text():
|
if self.current_para.has_text():
|
||||||
self.current_para.append_to(self.current_block)
|
self.current_para.append_to(self.current_block)
|
||||||
self.current_para = Paragraph()
|
self.current_para = Paragraph()
|
||||||
|
@ -132,6 +132,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
<zorder>categoryList</zorder>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -473,8 +474,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>622</width>
|
||||||
<height>30</height>
|
<height>454</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" >
|
<layout class="QGridLayout" >
|
||||||
@ -739,8 +740,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>622</width>
|
||||||
<height>30</height>
|
<height>454</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" >
|
<layout class="QGridLayout" >
|
||||||
@ -863,8 +864,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>622</width>
|
||||||
<height>30</height>
|
<height>454</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" >
|
<layout class="QVBoxLayout" >
|
||||||
@ -873,8 +874,8 @@
|
|||||||
<property name="title" >
|
<property name="title" >
|
||||||
<string>Title based detection</string>
|
<string>Title based detection</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" >
|
<layout class="QGridLayout" name="gridLayout" >
|
||||||
<item row="0" column="0" >
|
<item row="0" column="0" colspan="2" >
|
||||||
<widget class="QCheckBox" name="gui_disable_chapter_detection" >
|
<widget class="QCheckBox" name="gui_disable_chapter_detection" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>&Disable chapter detection</string>
|
<string>&Disable chapter detection</string>
|
||||||
@ -894,6 +895,20 @@
|
|||||||
<item row="1" column="1" >
|
<item row="1" column="1" >
|
||||||
<widget class="QLineEdit" name="gui_chapter_regex" />
|
<widget class="QLineEdit" name="gui_chapter_regex" />
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2" >
|
||||||
|
<widget class="QCheckBox" name="gui_add_chapters_to_toc" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Add &chapters to table of contents</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2" >
|
||||||
|
<widget class="QCheckBox" name="gui_no_links_in_toc" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Don't add &links to the table of contents</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -1066,8 +1081,8 @@ p, li { white-space: pre-wrap; }
|
|||||||
<slot>reject()</slot>
|
<slot>reject()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel" >
|
<hint type="sourcelabel" >
|
||||||
<x>584</x>
|
<x>794</x>
|
||||||
<y>661</y>
|
<y>660</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel" >
|
<hint type="destinationlabel" >
|
||||||
<x>286</x>
|
<x>286</x>
|
||||||
@ -1082,8 +1097,8 @@ p, li { white-space: pre-wrap; }
|
|||||||
<slot>setCurrentIndex(int)</slot>
|
<slot>setCurrentIndex(int)</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel" >
|
<hint type="sourcelabel" >
|
||||||
<x>245</x>
|
<x>191</x>
|
||||||
<y>199</y>
|
<y>236</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel" >
|
<hint type="destinationlabel" >
|
||||||
<x>368</x>
|
<x>368</x>
|
||||||
@ -1098,12 +1113,12 @@ p, li { white-space: pre-wrap; }
|
|||||||
<slot>setDisabled(bool)</slot>
|
<slot>setDisabled(bool)</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel" >
|
<hint type="sourcelabel" >
|
||||||
<x>439</x>
|
<x>428</x>
|
||||||
<y>97</y>
|
<y>89</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel" >
|
<hint type="destinationlabel" >
|
||||||
<x>539</x>
|
<x>788</x>
|
||||||
<y>149</y>
|
<y>140</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -1114,12 +1129,28 @@ p, li { white-space: pre-wrap; }
|
|||||||
<slot>setEnabled(bool)</slot>
|
<slot>setEnabled(bool)</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel" >
|
<hint type="sourcelabel" >
|
||||||
<x>398</x>
|
<x>348</x>
|
||||||
<y>177</y>
|
<y>340</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel" >
|
<hint type="destinationlabel" >
|
||||||
<x>476</x>
|
<x>823</x>
|
||||||
<y>211</y>
|
<y>372</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>gui_disable_chapter_detection</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>gui_add_chapters_to_toc</receiver>
|
||||||
|
<slot>setDisabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel" >
|
||||||
|
<x>321</x>
|
||||||
|
<y>78</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel" >
|
||||||
|
<x>322</x>
|
||||||
|
<y>172</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user