From d8649c6fed4e9e5f3a509203737bbbb4b2360bd7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 2 Apr 2021 13:38:19 +0530 Subject: [PATCH] When exporting highlights as text or markdown also output top level chapter titles --- src/calibre/gui2/library/annotations.py | 31 +++++++++++++++++-------- src/calibre/gui2/viewer/highlights.py | 13 +++++++++-- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/library/annotations.py b/src/calibre/gui2/library/annotations.py index 71b4854e2f..05cdd61f8b 100644 --- a/src/calibre/gui2/library/annotations.py +++ b/src/calibre/gui2/library/annotations.py @@ -187,18 +187,29 @@ class Export(Dialog): # {{{ for a in self.annotations: bid_groups.setdefault(a['book_id'], []).append(a) for book_id, group in bid_groups.items(): + chapter_groups = {} + def_chap = (_('Unknown chapter'),) + for a in group: + toc_titles = a.get('toc_family_titles', def_chap) + chapter_groups.setdefault(toc_titles[0], []).append(a) + lines.append('## ' + db.field_for('title', book_id)) lines.append('') - for a in group: - atype = a['type'] - if library_id: - link_prefix = f'calibre://view-book/{library_id}/{book_id}/{a["format"]}?open_at=' - else: - link_prefix = None - if atype == 'highlight': - render_highlight_as_text(a, lines, as_markdown=as_markdown, link_prefix=link_prefix) - elif atype == 'bookmark': - render_bookmark_as_text(a, lines, as_markdown=as_markdown, link_prefix=link_prefix) + + for chapter, group in chapter_groups.items(): + if len(chapter_groups) > 1: + lines.append('### ' + chapter) + lines.append('') + for a in group: + atype = a['type'] + if library_id: + link_prefix = f'calibre://view-book/{library_id}/{book_id}/{a["format"]}?open_at=' + else: + link_prefix = None + if atype == 'highlight': + render_highlight_as_text(a, lines, as_markdown=as_markdown, link_prefix=link_prefix) + elif atype == 'bookmark': + render_bookmark_as_text(a, lines, as_markdown=as_markdown, link_prefix=link_prefix) lines.append('') return '\n'.join(lines).strip() # }}} diff --git a/src/calibre/gui2/viewer/highlights.py b/src/calibre/gui2/viewer/highlights.py index 89e9739a6f..1c5b824451 100644 --- a/src/calibre/gui2/viewer/highlights.py +++ b/src/calibre/gui2/viewer/highlights.py @@ -141,8 +141,17 @@ class Export(ExportBase): lines = [] as_markdown = fmt == 'md' link_prefix = link_prefix_for_location_links() - for hl in self.annotations: - render_highlight_as_text(hl, lines, as_markdown=as_markdown, link_prefix=link_prefix) + chapter_groups = {} + def_chap = (_('Unknown chapter'),) + for a in self.annotations: + toc_titles = a.get('toc_family_titles', def_chap) + chapter_groups.setdefault(toc_titles[0], []).append(a) + for chapter, group in chapter_groups.items(): + if len(chapter_groups) > 1: + lines.append('### ' + chapter) + lines.append('') + for hl in group: + render_highlight_as_text(hl, lines, as_markdown=as_markdown, link_prefix=link_prefix) return '\n'.join(lines).strip()