emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v5 2/4] ox-texinfo: Optionally use @itemx for certain description


From: Jonas Bernoulli
Subject: [PATCH v5 2/4] ox-texinfo: Optionally use @itemx for certain description list items
Date: Tue, 1 Feb 2022 00:45:38 +0100

* doc/org-manual.org (Plain lists in Texinfo export): Reorder and
document new functionality.
* lisp/ox-texinfo.el (org-texinfo-item): In a description list when
its :compact attribute is non-nil, then transcode consecutive items
using one @item and one or more @itemx commands, if all of them
except for the last one lack content.
---
 doc/org-manual.org | 36 ++++++++++++++++++++++---------
 lisp/ox-texinfo.el | 54 ++++++++++++++++++++++++++++++----------------
 2 files changed, 61 insertions(+), 29 deletions(-)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index bd11e05f6..4a4a048aa 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -15236,6 +15236,23 @@ This paragraph is preceded by...
 :DESCRIPTION: List attributes.
 :END:
 
+#+cindex: lettered lists, in Texinfo export
+#+cindex: enum, Texinfo attribute
+The Texinfo export back-end converts unordered and ordered lists in
+the Org file using the default command =@itemize=.
+
+Ordered lists are numbered when exported to Texinfo format.  Such
+numbering obeys any counter (see [[*Plain Lists]]) in the first item of
+the list.  The =:enum= attribute also let you start the list at a
+specific number, or switch to a lettered list, as illustrated here:
+
+#+begin_example
+#+ATTR_TEXINFO: :enum A
+1. Alpha
+2. Bravo
+3. Charlie
+#+end_example
+
 #+cindex: @samp{ATTR_TEXINFO}, keyword
 #+cindex: two-column tables, in Texinfo export
 #+cindex: table-type, Texinfo attribute
@@ -15277,18 +15294,17 @@ This is the common text for variables foo and bar.
 @end table
 #+end_example
 
-#+cindex: lettered lists, in Texinfo export
-#+cindex: enum, Texinfo attribute
-Ordered lists are numbered when exported to Texinfo format.  Such
-numbering obeys any counter (see [[*Plain Lists]]) in the first item of
-the list.  The =:enum= attribute also let you start the list at
-a specific number, or switch to a lettered list, as illustrated here
+The =:compact= attribute is an alternative to the =:sep= attribute,
+which allows writing each entry on its own line.  If this attribute is
+non-nil and an item in a description list has no body but is followed
+by another item, then the second item is transcoded to =@itemx=.  This
+example is transcoded to the same output as above.
 
 #+begin_example
-#+ATTR_TEXINFO: :enum A
-1. Alpha
-2. Bravo
-3. Charlie
+,#+ATTR_TEXINFO: :table-type vtable :indic asis :compact t
+- foo ::
+- bar ::
+  This is the common text for variables foo and bar.
 #+end_example
 
 *** Tables in Texinfo export
diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el
index ddd405d05..83868a69e 100644
--- a/lisp/ox-texinfo.el
+++ b/lisp/ox-texinfo.el
@@ -997,25 +997,41 @@ (defun org-texinfo-item (item contents info)
 CONTENTS holds the contents of the item.  INFO is a plist holding
 contextual information."
   (let* ((tag (org-element-property :tag item))
-        (split (org-string-nw-p
-                (org-export-read-attribute :attr_texinfo
-                                           (org-element-property :parent item)
-                                           :sep)))
-        (items (and tag
-                    (let ((tag (org-export-data tag info)))
-                      (if split
-                          (split-string tag (regexp-quote split) t "[ \t\n]+")
-                        (list tag))))))
-    (format "%s\n%s"
-           (pcase items
-             (`nil "@item")
-             (`(,item) (concat "@item " item))
-             (`(,item . ,items)
-              (concat "@item " item "\n"
-                      (mapconcat (lambda (i) (concat "@itemx " i))
-                                 items
-                                 "\n"))))
-           (or contents ""))))
+         (plain-list (org-element-property :parent item))
+         (compact (and (eq (org-element-property :type plain-list) 
'descriptive)
+                       (org-not-nil (org-export-read-attribute
+                                     :attr_texinfo plain-list :compact))))
+         (previous-item nil))
+    (when (and compact
+               (org-export-get-next-element item info)
+               (not (org-element-contents item))
+               (eq 1 (org-element-property :post-blank item)))
+      (org-element-put-property item :post-blank 0))
+    (if (and compact
+             (setq previous-item (org-export-get-previous-element item info))
+             (not (org-element-contents previous-item))
+            (eq 0 (org-element-property :post-blank previous-item)))
+        (format "@itemx%s\n%s"
+                (if tag (concat " " (org-export-data tag info)) "")
+                (or contents ""))
+      (let* ((split (org-string-nw-p (org-export-read-attribute
+                                      :attr_texinfo plain-list :sep)))
+            (items (and tag
+                        (let ((tag (org-export-data tag info)))
+                          (if split
+                              (split-string tag (regexp-quote split)
+                                             t "[ \t\n]+")
+                            (list tag))))))
+        (format "%s\n%s"
+               (pcase items
+                 (`nil "@item")
+                 (`(,item) (concat "@item " item))
+                 (`(,item . ,items)
+                  (concat "@item " item "\n"
+                          (mapconcat (lambda (i) (concat "@itemx " i))
+                                     items
+                                     "\n"))))
+               (or contents ""))))))
 
 ;;;; Keyword
 
-- 
2.35.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]