|
@@ -3150,96 +3150,93 @@ item, and depth of the current sub-list, starting at 0.
|
|
|
Obviously, `counter' is only available for parameters applying to
|
|
|
items."
|
|
|
(interactive)
|
|
|
- (let* ((p params)
|
|
|
- (splicep (plist-get p :splice))
|
|
|
- (ostart (plist-get p :ostart))
|
|
|
- (oend (plist-get p :oend))
|
|
|
- (ustart (plist-get p :ustart))
|
|
|
- (uend (plist-get p :uend))
|
|
|
- (dstart (plist-get p :dstart))
|
|
|
- (dend (plist-get p :dend))
|
|
|
- (dtstart (plist-get p :dtstart))
|
|
|
- (dtend (plist-get p :dtend))
|
|
|
- (ddstart (plist-get p :ddstart))
|
|
|
- (ddend (plist-get p :ddend))
|
|
|
- (istart (plist-get p :istart))
|
|
|
- (icount (plist-get p :icount))
|
|
|
- (iend (plist-get p :iend))
|
|
|
- (isep (plist-get p :isep))
|
|
|
- (lsep (plist-get p :lsep))
|
|
|
- (csep (plist-get p :csep))
|
|
|
- (cbon (plist-get p :cbon))
|
|
|
- (cboff (plist-get p :cboff))
|
|
|
- (cbtrans (plist-get p :cbtrans))
|
|
|
- (nobr (plist-get p :nobr))
|
|
|
- export-sublist ; for byte-compiler
|
|
|
- (export-item
|
|
|
- (function
|
|
|
- ;; Export an item ITEM of type TYPE, at DEPTH. First
|
|
|
- ;; string in item is treated in a special way as it can
|
|
|
- ;; bring extra information that needs to be processed.
|
|
|
- (lambda (item type depth)
|
|
|
- (let* ((counter (pop item))
|
|
|
- (fmt (concat
|
|
|
- (cond
|
|
|
- ((eq type 'descriptive)
|
|
|
- ;; Stick DTSTART to ISTART by
|
|
|
- ;; left-trimming the latter.
|
|
|
- (concat (let ((s (eval istart)))
|
|
|
- (or (and (string-match "[ \t\n\r]+\\'" s)
|
|
|
- (replace-match "" t t s))
|
|
|
- istart))
|
|
|
- "%s" (eval ddend)))
|
|
|
- ((and counter (eq type 'ordered))
|
|
|
- (concat (eval icount) "%s"))
|
|
|
- (t (concat (eval istart) "%s")))
|
|
|
- (eval iend)))
|
|
|
- (first (car item)))
|
|
|
- ;; Replace checkbox if any is found.
|
|
|
- (cond
|
|
|
- ((string-match "\\[CBON\\]" first)
|
|
|
- (setq first (replace-match cbon t t first)))
|
|
|
- ((string-match "\\[CBOFF\\]" first)
|
|
|
- (setq first (replace-match cboff t t first)))
|
|
|
- ((string-match "\\[CBTRANS\\]" first)
|
|
|
- (setq first (replace-match cbtrans t t first))))
|
|
|
- ;; Replace line breaks if required
|
|
|
- (when nobr (setq first (org-list-item-trim-br first)))
|
|
|
- ;; Insert descriptive term if TYPE is `descriptive'.
|
|
|
- (when (eq type 'descriptive)
|
|
|
- (let* ((complete
|
|
|
- (string-match "^\\(.*\\)[ \t]+::[ \t]*" first))
|
|
|
- (term (if complete
|
|
|
- (save-match-data
|
|
|
- (org-trim (match-string 1 first)))
|
|
|
- "???"))
|
|
|
- (desc (if complete (substring first (match-end 0))
|
|
|
- first)))
|
|
|
- (setq first (concat (eval dtstart) term (eval dtend)
|
|
|
- (eval ddstart) desc))))
|
|
|
- (setcar item first)
|
|
|
- (format fmt
|
|
|
- (mapconcat (lambda (e)
|
|
|
- (if (stringp e) e
|
|
|
- (funcall export-sublist e (1+ depth))))
|
|
|
- item (or (eval csep) "")))))))
|
|
|
- (export-sublist
|
|
|
- (function
|
|
|
- ;; Export sublist SUB at DEPTH.
|
|
|
- (lambda (sub depth)
|
|
|
- (let* ((type (car sub))
|
|
|
- (items (cdr sub))
|
|
|
- (fmt (concat (cond
|
|
|
- (splicep "%s")
|
|
|
- ((eq type 'ordered)
|
|
|
- (concat (eval ostart) "%s" (eval oend)))
|
|
|
- ((eq type 'descriptive)
|
|
|
- (concat (eval dstart) "%s" (eval dend)))
|
|
|
- (t (concat (eval ustart) "%s" (eval uend))))
|
|
|
- (eval lsep))))
|
|
|
- (format fmt (mapconcat (lambda (e)
|
|
|
- (funcall export-item e type depth))
|
|
|
- items (or (eval isep) ""))))))))
|
|
|
+ (letrec ((p params)
|
|
|
+ (splicep (plist-get p :splice))
|
|
|
+ (ostart (plist-get p :ostart))
|
|
|
+ (oend (plist-get p :oend))
|
|
|
+ (ustart (plist-get p :ustart))
|
|
|
+ (uend (plist-get p :uend))
|
|
|
+ (dstart (plist-get p :dstart))
|
|
|
+ (dend (plist-get p :dend))
|
|
|
+ (dtstart (plist-get p :dtstart))
|
|
|
+ (dtend (plist-get p :dtend))
|
|
|
+ (ddstart (plist-get p :ddstart))
|
|
|
+ (ddend (plist-get p :ddend))
|
|
|
+ (istart (plist-get p :istart))
|
|
|
+ (icount (plist-get p :icount))
|
|
|
+ (iend (plist-get p :iend))
|
|
|
+ (isep (plist-get p :isep))
|
|
|
+ (lsep (plist-get p :lsep))
|
|
|
+ (csep (plist-get p :csep))
|
|
|
+ (cbon (plist-get p :cbon))
|
|
|
+ (cboff (plist-get p :cboff))
|
|
|
+ (cbtrans (plist-get p :cbtrans))
|
|
|
+ (nobr (plist-get p :nobr))
|
|
|
+ (export-item
|
|
|
+ ;; Export an item ITEM of type TYPE, at DEPTH. First
|
|
|
+ ;; string in item is treated in a special way as it can
|
|
|
+ ;; bring extra information that needs to be processed.
|
|
|
+ (lambda (item type depth)
|
|
|
+ (let* ((counter (pop item))
|
|
|
+ (fmt (concat
|
|
|
+ (cond
|
|
|
+ ((eq type 'descriptive)
|
|
|
+ ;; Stick DTSTART to ISTART by
|
|
|
+ ;; left-trimming the latter.
|
|
|
+ (concat (let ((s (eval istart)))
|
|
|
+ (or (and (string-match "[ \t\n\r]+\\'" s)
|
|
|
+ (replace-match "" t t s))
|
|
|
+ istart))
|
|
|
+ "%s" (eval ddend)))
|
|
|
+ ((and counter (eq type 'ordered))
|
|
|
+ (concat (eval icount) "%s"))
|
|
|
+ (t (concat (eval istart) "%s")))
|
|
|
+ (eval iend)))
|
|
|
+ (first (car item)))
|
|
|
+ ;; Replace checkbox if any is found.
|
|
|
+ (cond
|
|
|
+ ((string-match "\\[CBON\\]" first)
|
|
|
+ (setq first (replace-match cbon t t first)))
|
|
|
+ ((string-match "\\[CBOFF\\]" first)
|
|
|
+ (setq first (replace-match cboff t t first)))
|
|
|
+ ((string-match "\\[CBTRANS\\]" first)
|
|
|
+ (setq first (replace-match cbtrans t t first))))
|
|
|
+ ;; Replace line breaks if required
|
|
|
+ (when nobr (setq first (org-list-item-trim-br first)))
|
|
|
+ ;; Insert descriptive term if TYPE is `descriptive'.
|
|
|
+ (when (eq type 'descriptive)
|
|
|
+ (let* ((complete
|
|
|
+ (string-match "^\\(.*\\)[ \t]+::[ \t]*" first))
|
|
|
+ (term (if complete
|
|
|
+ (save-match-data
|
|
|
+ (org-trim (match-string 1 first)))
|
|
|
+ "???"))
|
|
|
+ (desc (if complete (substring first (match-end 0))
|
|
|
+ first)))
|
|
|
+ (setq first (concat (eval dtstart) term (eval dtend)
|
|
|
+ (eval ddstart) desc))))
|
|
|
+ (setcar item first)
|
|
|
+ (format fmt
|
|
|
+ (mapconcat (lambda (e)
|
|
|
+ (if (stringp e) e
|
|
|
+ (funcall export-sublist e (1+ depth))))
|
|
|
+ item (or (eval csep) ""))))))
|
|
|
+ (export-sublist
|
|
|
+ (lambda (sub depth)
|
|
|
+ ;; Export sublist SUB at DEPTH.
|
|
|
+ (let* ((type (car sub))
|
|
|
+ (items (cdr sub))
|
|
|
+ (fmt (concat (cond
|
|
|
+ (splicep "%s")
|
|
|
+ ((eq type 'ordered)
|
|
|
+ (concat (eval ostart) "%s" (eval oend)))
|
|
|
+ ((eq type 'descriptive)
|
|
|
+ (concat (eval dstart) "%s" (eval dend)))
|
|
|
+ (t (concat (eval ustart) "%s" (eval uend))))
|
|
|
+ (eval lsep))))
|
|
|
+ (format fmt (mapconcat (lambda (e)
|
|
|
+ (funcall export-item e type depth))
|
|
|
+ items (or (eval isep) "")))))))
|
|
|
(concat (funcall export-sublist list 0) "\n")))
|
|
|
|
|
|
(defun org-list-to-latex (list &optional _params)
|