Subject: bug#73719: [PATCH] Add imenu support for OpenOffice documents in doc-view

From: Visuwesh <[email-masked]>
Date: Thu, 10 Oct 2024 14:12:46 +0530

[வியாழன் அக்டோபர் 10, 2024] Tassilo Horn wrote:

> Visuwesh <[email-masked]> writes:
>
> Hi Visuwesh,
>
>> The attached patch adds imenu index support for docx files.
>
> docx is M$ Office, isn't it?  But as far as reading your patch tells me,
> we do that for all ODF files which are indeed Libre/OpenOffice and
> friends.  And, yes, M$ Office files are also handled by the ODF
> transformation chain.

Yes, in the end, they are all marked as odf.  I tested it with a docx
file so I wrote it as it was still in my mind.

> Anyway, I think it would be appropriate to speak of "Open Document
> Format files as used by LibreOffice and OpenOffice" in the commit
> message, NEWS, and the docs simply because the format is used by more
> office suits and OpenOffice is mostly dead nowadays, superseded by
> LibreOffice.
>
> Otherwise, the patch is fine. :-)

Now done in the attached.

>From c77b2e0e161673da35be669cace5d7a214743de9 Mon Sep 17 00:00:00 2001
From: Visuwesh <[email-masked]>
Date: Wed, 9 Oct 2024 19:36:18 +0530
Subject: [PATCH] Add imenu support for ODF files in doc-view

* lisp/doc-view.el (doc-view--outline): Pass the right file to
doc-view--pdf-outline.
* doc/emacs/misc.texi (DocView Navigation): Mention support for
Open Format Document (ODF) files too.
* etc/NEWS: Announce the change.  (bug#73719)
---
 doc/emacs/misc.texi | 15 +++++++++------
 etc/NEWS            |  8 +++++---
 lisp/doc-view.el    |  2 ++
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 83b83ea7ae9..f618dadc0d6 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -586,12 +586,15 @@ DocView Navigation
 @vindex doc-view-djvused-program
   DocView can generate an outline menu for PDF and DjVu documents using
 the @command{mutool} and the @command{djvused} programs, respectively,
-when they are available.  This uses the @code{imenu} facility
-(@pxref{Imenu}).  You can customize how the @code{imenu} items for this
-outline are formatted and displayed using the variables
-@code{doc-view-imenu-format} and @code{doc-view-imenu-flatten}.  The
-filename of the @command{djvused} program can be customized by changing
-the @code{doc-view-djvused-program} user option.
+when they are available.  The outline for Open Document Format files as
+used by OpenOffice and LibreOffice are also generated using the
+@command{mutool} after they are converted to PDF.  This uses the
+@code{imenu} facility (@pxref{Imenu}).  You can customize how the
+@code{imenu} items for this outline are formatted and displayed using
+the variables @code{doc-view-imenu-format} and
+@code{doc-view-imenu-flatten}.  The filename of the @command{djvused}
+program can be customized by changing the
+@code{doc-view-djvused-program} user option.
 
 @cindex registers, in DocView mode
 @findex doc-view-page-to-register
diff --git a/etc/NEWS b/etc/NEWS
index 67d768f0584..94c27f77765 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -390,10 +390,12 @@ command 'doc-view-page-to-register' (bound to 'm'), and later the stored
 page can be restored with 'doc-view-jump-to-register' (bound to ''').
 
 +++
-*** Docview can generate imenu index for DjVu files.
+*** Docview can generate imenu index for DjVu and ODF documents.
 When the 'djvused' program is available, Docview can now generate imenu
-index for DjVu files from its outline.
-The name of the 'djvused' program can be customized by changing the user
+index for DjVu files from its outline.  Index for Open Document Format
+(ODF) files as used by OpenOffice and LibreOffice are generated using
+the 'mutool' program after their initial conversion to PDF format.  The
+name of the 'djvused' program can be customized by changing the user
 option 'doc-view-djvused-program'.
 
 ** Tramp
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 57a24418616..bbfbbdec925 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -2103,6 +2103,8 @@ doc-view--outline
            ('djvu
             (when doc-view-djvused-program
               (doc-view--djvu-outline file-name)))
+           ('odf
+            (doc-view--pdf-outline (doc-view-current-cache-doc-pdf)))
            (_
             (doc-view--pdf-outline file-name)))))
     (when outline (imenu-add-to-menubar "Outline"))
-- 
2.45.2