org-list: Tweak `org-list-to-generic'
* lisp/org-list.el (org-list-to-generic): :istart, :icount, :iend and :isep are now called with an additional argument, the type of the list. Also add a new property :ifmt. (org-list--to-generic-item): Use new property. (org-list-to-subtree): Adapt to new requirements for :istart and :iend. * testing/lisp/test-org-list.el (test-org-list/to-generic): Update tests.
This commit is contained in:
parent
9ea8e46df0
commit
835b8e05e5
12
etc/ORG-NEWS
12
etc/ORG-NEWS
|
@ -12,6 +12,11 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
|
|||
|
||||
** Incompatible changes
|
||||
|
||||
*** Change signature for some properties in ~org-list-to-generic~
|
||||
|
||||
~:istart~, ~:icount~, ~:iend~ and ~:isep~ now expect the type of the
|
||||
list as their first argument.
|
||||
|
||||
*** ~org-capture-templates~ no longer accepts S-expressions as file names
|
||||
|
||||
Since functions are allowed there, a straightforward way to migrate
|
||||
|
@ -27,7 +32,9 @@ into
|
|||
*** Agenda
|
||||
**** New variable : ~org-agenda-show-future-repeats~
|
||||
**** New variable : ~org-agenda-prefer-last-repeat~
|
||||
|
||||
*** Babel
|
||||
|
||||
**** Clojure: new setting ~org-babel-clojure-sync-nrepl-timeout~
|
||||
|
||||
Creation of a new setting to specify the Cider timeout. By setting
|
||||
|
@ -93,6 +100,11 @@ as descriptions of links, a.k.a. image links. See its docstring for
|
|||
details.
|
||||
**** Horizontal rules are no longer ignored in LaTeX table math mode
|
||||
|
||||
*** ~org-list-to-generic~ includes a new property: ~:ifmt~
|
||||
|
||||
~:ifmt~ is a function to be called on the body of each item. See
|
||||
~org-list-to-generic~ documentation for details.
|
||||
|
||||
*** New variable : ~org-bibtex-headline-format-function~
|
||||
This allow to use a different title than entry title.
|
||||
|
||||
|
|
|
@ -3314,23 +3314,28 @@ Valid parameters are:
|
|||
|
||||
Strings to start or end a list item, and to start a list item
|
||||
with a counter. They can also be set to a function returning
|
||||
a string or nil, which will be called with the depth of the
|
||||
item, counting from 1.
|
||||
a string or nil, which will be called with two arguments: the
|
||||
type of list and the depth of the item, counting from 1.
|
||||
|
||||
:icount
|
||||
|
||||
Strings to start a list item with a counter. It can also be
|
||||
set to a function returning a string or nil, which will be
|
||||
called with two arguments: the depth of the item, counting from
|
||||
1, and the counter. Its value, when non-nil, has precedence
|
||||
over `:istart'.
|
||||
called with three arguments: the type of list, the depth of the
|
||||
item, counting from 1, and the counter. Its value, when
|
||||
non-nil, has precedence over `:istart'.
|
||||
|
||||
:isep
|
||||
|
||||
String used to separate items. It can also be set to
|
||||
a function returning a string or nil, which will be called with
|
||||
the depth of the items, counting from 1. It always start on
|
||||
a new line.
|
||||
two arguments: the type of list and the depth of the item,
|
||||
counting from 1. It always start on a new line.
|
||||
|
||||
:ifmt
|
||||
|
||||
Function to be applied to the contents of every item. It is
|
||||
called with two arguments: the type of list and the contents.
|
||||
|
||||
:cbon, :cboff, :cbtrans
|
||||
|
||||
|
@ -3461,6 +3466,7 @@ PARAMS is a plist used to tweak the behavior of the transcoder."
|
|||
(iend (plist-get params :iend))
|
||||
(isep (plist-get params :isep))
|
||||
(icount (plist-get params :icount))
|
||||
(ifmt (plist-get params :ifmt))
|
||||
(cboff (plist-get params :cboff))
|
||||
(cbon (plist-get params :cbon))
|
||||
(cbtrans (plist-get params :cbtrans))
|
||||
|
@ -3474,9 +3480,9 @@ PARAMS is a plist used to tweak the behavior of the transcoder."
|
|||
(tag (org-element-property :tag item))
|
||||
(depth (org-list--depth item))
|
||||
(separator (and (org-export-get-next-element item info)
|
||||
(org-list--generic-eval isep depth)))
|
||||
(closing (pcase (org-list--generic-eval iend depth)
|
||||
((or `nil `"") "\n")
|
||||
(org-list--generic-eval isep type depth)))
|
||||
(closing (pcase (org-list--generic-eval iend type depth)
|
||||
((or `nil "") "\n")
|
||||
((and (guard separator) s)
|
||||
(if (equal (substring s -1) "\n") s (concat s "\n")))
|
||||
(s s))))
|
||||
|
@ -3493,10 +3499,10 @@ PARAMS is a plist used to tweak the behavior of the transcoder."
|
|||
;; Build output.
|
||||
(concat
|
||||
(let ((c (org-element-property :counter item)))
|
||||
(if c (org-list--generic-eval icount depth c)
|
||||
(org-list--generic-eval istart depth)))
|
||||
(if (and c icount) (org-list--generic-eval icount type depth c)
|
||||
(org-list--generic-eval istart type depth)))
|
||||
(let ((body
|
||||
(if (or istart iend icount cbon cboff cbtrans (not backend)
|
||||
(if (or istart iend icount ifmt cbon cboff cbtrans (not backend)
|
||||
(and (eq type 'descriptive)
|
||||
(or dtstart dtend ddstart ddend)))
|
||||
(concat
|
||||
|
@ -3512,7 +3518,11 @@ PARAMS is a plist used to tweak the behavior of the transcoder."
|
|||
(org-element-interpret-data tag))
|
||||
dtend))
|
||||
(and tag ddstart)
|
||||
(if (= (length contents) 0) "" (substring contents 0 -1))
|
||||
(let ((contents
|
||||
(if (= (length contents) 0) ""
|
||||
(substring contents 0 -1))))
|
||||
(if ifmt (org-list--generic-eval ifmt type contents)
|
||||
contents))
|
||||
(and tag ddend))
|
||||
(org-export-with-backend backend item contents info))))
|
||||
;; Remove final newline.
|
||||
|
@ -3556,7 +3566,7 @@ list with overruling parameters for `org-list-to-generic'."
|
|||
(org-previous-line-empty-p)))))
|
||||
(level (org-reduced-level (or (org-current-level) 0)))
|
||||
(make-stars
|
||||
(lambda (depth)
|
||||
(lambda (_type depth &optional _count)
|
||||
;; Return the string for the heading, depending on DEPTH
|
||||
;; of current sub-list.
|
||||
(let ((oddeven-level (+ level depth)))
|
||||
|
|
|
@ -1157,13 +1157,13 @@
|
|||
"level1 a\nlevel2 b"
|
||||
(org-test-with-temp-text "- a\n - b"
|
||||
(org-list-to-generic (org-list-to-lisp)
|
||||
'(:istart (lambda (l) (format "level%d "l)))))))
|
||||
'(:istart (lambda (type l) (format "level%d "l)))))))
|
||||
(should
|
||||
(equal
|
||||
"a\nblevel2level1"
|
||||
(org-test-with-temp-text "- a\n - b"
|
||||
(org-list-to-generic (org-list-to-lisp)
|
||||
'(:iend (lambda (l) (format "level%d" l)))))))
|
||||
'(:iend (lambda (type l) (format "level%d" l)))))))
|
||||
;; Test `:icount' parameter.
|
||||
(should
|
||||
(equal
|
||||
|
@ -1187,7 +1187,7 @@
|
|||
(org-test-with-temp-text "1. [@3] a"
|
||||
(org-list-to-generic
|
||||
(org-list-to-lisp)
|
||||
'(:icount (lambda (l c) (format "level:%d, counter:%d " l c)))))))
|
||||
'(:icount (lambda (type l c) (format "level:%d, counter:%d " l c)))))))
|
||||
;; Test `:isep' parameter.
|
||||
(should
|
||||
(equal
|
||||
|
@ -1203,8 +1203,17 @@
|
|||
(equal
|
||||
"a\n- 1 -\nb"
|
||||
(org-test-with-temp-text "- a\n- b"
|
||||
(org-list-to-generic (org-list-to-lisp)
|
||||
'(:isep (lambda (l) (format "- %d -" l)))))))
|
||||
(org-list-to-generic
|
||||
(org-list-to-lisp)
|
||||
'(:isep (lambda (type depth) (format "- %d -" depth)))))))
|
||||
;; Test `:ifmt' parameter.
|
||||
(should
|
||||
(equal
|
||||
">> a <<"
|
||||
(org-test-with-temp-text "1. [@3] a"
|
||||
(org-list-to-generic
|
||||
(org-list-to-lisp)
|
||||
'(:ifmt (lambda (type c) (format ">> %s <<" c)))))))
|
||||
;; Test `:cbon', `:cboff', `:cbtrans'
|
||||
(should
|
||||
(equal
|
||||
|
|
Loading…
Reference in New Issue