mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: The --open-at command line argument now allows matching on ToC hrefs as well as titles
This commit is contained in:
parent
c1d6b7b85c
commit
ab57033fcb
@ -166,7 +166,9 @@ View an e-book.
|
|||||||
'a location or position you can get by using the Go to->Location action in the viewer controls. '
|
'a location or position you can get by using the Go to->Location action in the viewer controls. '
|
||||||
'Alternately, you can use the form toc:something and it will open '
|
'Alternately, you can use the form toc:something and it will open '
|
||||||
'at the location of the first Table of Contents entry that contains '
|
'at the location of the first Table of Contents entry that contains '
|
||||||
'the string "something".'))
|
'the string "something". The form toc-href:something will match the '
|
||||||
|
'href (internal link destination) of toc nodes. The matching is exact, '
|
||||||
|
'If you want to match a substring, use the form toc-href-contains:something. '))
|
||||||
a('--continue', default=False, action='store_true', dest='continue_reading',
|
a('--continue', default=False, action='store_true', dest='continue_reading',
|
||||||
help=_('Continue reading at the previously opened book'))
|
help=_('Continue reading at the previously opened book'))
|
||||||
|
|
||||||
@ -187,8 +189,10 @@ def main(args=sys.argv):
|
|||||||
|
|
||||||
parser = option_parser()
|
parser = option_parser()
|
||||||
opts, args = parser.parse_args(args)
|
opts, args = parser.parse_args(args)
|
||||||
|
oat = opts.open_at
|
||||||
if opts.open_at and not (opts.open_at.startswith('toc:') or opts.open_at.startswith('epubcfi(/') or is_float(opts.open_at)):
|
if oat and not (
|
||||||
|
oat.startswith('toc:') or oat.startswith('toc-href:') or oat.startswith('toc-href-contains:') or
|
||||||
|
oat.startswith('epubcfi(/') or is_float(oat)):
|
||||||
raise SystemExit('Not a valid --open-at value: {}'.format(opts.open_at))
|
raise SystemExit('Not a valid --open-at value: {}'.format(opts.open_at))
|
||||||
|
|
||||||
listener = None
|
listener = None
|
||||||
|
@ -144,6 +144,9 @@ class TOCItem(QStandardItem):
|
|||||||
|
|
||||||
def __init__(self, toc, depth, all_items, normal_font, emphasis_font, parent=None):
|
def __init__(self, toc, depth, all_items, normal_font, emphasis_font, parent=None):
|
||||||
text = toc.get('title') or ''
|
text = toc.get('title') or ''
|
||||||
|
self.href = (toc.get('dest') or '')
|
||||||
|
if toc.get('frag'):
|
||||||
|
self.href += '#' + toc['frag']
|
||||||
if text:
|
if text:
|
||||||
text = re.sub(r'\s', ' ', text)
|
text = re.sub(r'\s', ' ', text)
|
||||||
self.title = text
|
self.title = text
|
||||||
@ -214,6 +217,12 @@ class TOC(QStandardItemModel):
|
|||||||
for item in self.find_items(query):
|
for item in self.find_items(query):
|
||||||
return item.node_id
|
return item.node_id
|
||||||
|
|
||||||
|
def node_id_for_href(self, query, exact=False):
|
||||||
|
for item in self.all_items:
|
||||||
|
href = item.href
|
||||||
|
if (exact and query == href) or (not exact and query in href):
|
||||||
|
return item.node_id
|
||||||
|
|
||||||
def search(self, query):
|
def search(self, query):
|
||||||
cq = self.current_query
|
cq = self.current_query
|
||||||
if cq['items'] and -1 < cq['index'] < len(cq['items']):
|
if cq['items'] and -1 < cq['index'] < len(cq['items']):
|
||||||
|
@ -407,6 +407,10 @@ class EbookViewer(MainWindow):
|
|||||||
if open_at:
|
if open_at:
|
||||||
if open_at.startswith('toc:'):
|
if open_at.startswith('toc:'):
|
||||||
initial_toc_node = self.toc_model.node_id_for_text(open_at[len('toc:'):])
|
initial_toc_node = self.toc_model.node_id_for_text(open_at[len('toc:'):])
|
||||||
|
elif open_at.startswith('toc-href:'):
|
||||||
|
initial_toc_node = self.toc_model.node_id_for_href(open_at[len('toc-href:'):], exact=True)
|
||||||
|
elif open_at.startswith('toc-href-contains:'):
|
||||||
|
initial_toc_node = self.toc_model.node_id_for_href(open_at[len('toc-href-contains:'):], exact=False)
|
||||||
elif open_at.startswith('epubcfi(/'):
|
elif open_at.startswith('epubcfi(/'):
|
||||||
initial_cfi = open_at
|
initial_cfi = open_at
|
||||||
elif is_float(open_at):
|
elif is_float(open_at):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user