org-export: Allow to retrieve all previous/next exportable objects
authorNicolas Goaziou <n.goaziou@gmail.com>
Mon, 10 Dec 2012 07:53:00 +0000 (08:53 +0100)
committerNicolas Goaziou <n.goaziou@gmail.com>
Mon, 10 Dec 2012 07:54:52 +0000 (08:54 +0100)
* contrib/lisp/org-export.el (org-export-get-previous-element,
  org-export-get-next-element): Allow to retrieve all previous/next
  exportable objects by specifying a non-nil, non positive integer
  argument.
* testing/lisp/test-org-export.el: Add tests.

contrib/lisp/org-export.el
testing/lisp/test-org-export.el

index 0a44e4d..db0acb0 100644 (file)
@@ -4636,8 +4636,8 @@ object, a string, or nil.
 
 When optional argument N is a positive integer, return a list
 containing up to N siblings before BLOB, from closest to
-farthest."
-  (when (and n (not (wholenump n))) (setq n nil))
+farthest.  With any other non-nil value, return a list containing
+all of them."
   (let ((siblings
         ;; An object can belong to the contents of its parent or
         ;; to a secondary string.  We check the latter option
@@ -4657,6 +4657,7 @@ farthest."
       (mapc (lambda (obj)
              (cond ((memq obj (plist-get info :ignore-list)))
                    ((null n) (throw 'exit obj))
+                   ((not (wholenump n)) (push obj prev))
                    ((zerop n) (throw 'exit (nreverse prev)))
                    (t (decf n) (push obj prev))))
            (cdr (memq blob (reverse siblings))))
@@ -4670,9 +4671,9 @@ a communication channel.  Return next exportable element or
 object, a string, or nil.
 
 When optional argument N is a positive integer, return a list
-containing up to N siblings after BLOB, from closest to
-farthest."
-  (when (and n (not (wholenump n))) (setq n nil))
+containing up to N siblings after BLOB, from closest to farthest.
+With any other non-nil value, return a list containing all of
+them."
   (let ((siblings
         ;; An object can belong to the contents of its parent or to
         ;; a secondary string.  We check the latter option first.
@@ -4691,6 +4692,7 @@ farthest."
       (mapc (lambda (obj)
              (cond ((memq obj (plist-get info :ignore-list)))
                    ((null n) (throw 'exit obj))
+                   ((not (wholenump n)) (push obj next))
                    ((zerop n) (throw 'exit (nreverse next)))
                    (t (decf n) (push obj next))))
            siblings)
index 3693978..0ff8440 100644 (file)
@@ -2212,12 +2212,21 @@ Another text. (ref:text)
         (org-element-type
          (org-export-get-next-element
           (org-element-map tree 'plain-text 'identity info t nil t) info)))))
-  ;; With optional argument N, return a list containing up to
+  ;; With optional argument N, return a list containing all the
+  ;; following elements.
+  (should
+   (equal
+    '(bold code underline)
+    (org-test-with-parsed-data "_a_ /b/ *c* ~d~ _e_"
+      (mapcar 'car
+             (org-export-get-next-element
+              (org-element-map tree 'italic 'identity info t) info t)))))
+  ;; When N is a positive integer, return a list containing up to
   ;; N following elements.
   (should
    (equal
     '(bold code)
-    (org-test-with-parsed-data "_a_ /b/ *c* ~d~"
+    (org-test-with-parsed-data "_a_ /b/ *c* ~d~ _e_"
       (mapcar 'car
              (org-export-get-next-element
               (org-element-map tree 'italic 'identity info t) info 2))))))
@@ -2266,6 +2275,14 @@ Another text. (ref:text)
   ;; With optional argument N, return a list containing up to
   ;; N previous elements.
   (should
+   (equal '(bold italic underline)
+         (org-test-with-parsed-data "_a_ /b/ *c* ~d~"
+           (mapcar 'car
+                   (org-export-get-previous-element
+                    (org-element-map tree 'code 'identity info t) info t)))))
+  ;; When N is a positive integer, return a list containing up to
+  ;; N previous elements.
+  (should
    (equal '(bold italic)
          (org-test-with-parsed-data "_a_ /b/ *c* ~d~"
            (mapcar 'car