emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] New exporter and dates in tables


From: Nicolas Goaziou
Subject: Re: [O] New exporter and dates in tables
Date: Sun, 14 Apr 2013 22:36:41 +0200

Bastien <address@hidden> writes:

> Nicolas Goaziou <address@hidden> writes:
>
>> We can widen the definition of `standalone': a standalone timestamp is
>> a timestamp belonging to a paragraph that contains only timestamps
>> objects.
>
> Great.  If that's possible, then I think that's the best solution.

The following patch should do that. It comes with tests, but it should
be tested extensively, if only to know if this feature is as useful as
it seems.

Note that another option is to allow all timestamps, put timestamps you
don't want to export in a specific drawer (e.g. "TIME"), and ignore this
drawer during export.


Regards,

-- 
Nicolas Goaziou
>From 8faa562ce1d2a80988736e7a045b7c16aba7ebc9 Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <address@hidden>
Date: Sun, 14 Apr 2013 22:20:16 +0200
Subject: [PATCH] ox: Add more options to skip timestamps

* lisp/ox.el (org-export-with-timestamps): Allow `not-standalone',
  `active-not-standalone' and `inactive-not-standalone' values. Update
  docstring.
(org-export--skip-p): Skip timestamps according to new values.
* testing/lisp/test-ox.el: Add tests.
---
 lisp/ox.el              | 59 ++++++++++++++++++++++++++----------
 testing/lisp/test-ox.el | 79 +++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 107 insertions(+), 31 deletions(-)

diff --git a/lisp/ox.el b/lisp/ox.el
index fffb7ce..75ea25a 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -721,9 +721,19 @@ also be set with the OPTIONS keyword, e.g. 
\"timestamp:nil\"."
 (defcustom org-export-with-timestamps t
   "Non nil means allow timestamps in export.
 
-It can be set to `active', `inactive', t or nil, in order to
-export, respectively, only active timestamps, only inactive ones,
-all of them or none.
+It can be set to any of the following values:
+                        t export all timestamps.
+                 `active' export active timestamps only.
+  `active-not-standalone' export active timestamps which are not
+                          isolated in a paragraph containing only
+                          timestamps.
+               `inactive' export inactive timestamps only.
+`inactive-not-standalone' export inactive timestamps which are not
+                          isolated in a paragraph containing only
+                          timestamps.
+         `not-standalone' export timestamps which are not isolated
+                          in a paragraph containing only timestamps.
+                      nil do not export timestamps
 
 This option can also be set with the OPTIONS keyword, e.g.
 \"<:nil\"."
@@ -2017,19 +2027,36 @@ a tree with a select tag."
          (not (org-export-get-previous-element blob options))))
     (table-row (org-export-table-row-is-special-p blob options))
     (timestamp
-     (case (plist-get options :with-timestamps)
-       ;; No timestamp allowed.
-       ('nil t)
-       ;; Only active timestamps allowed and the current one isn't
-       ;; active.
-       (active
-       (not (memq (org-element-property :type blob)
-                  '(active active-range))))
-       ;; Only inactive timestamps allowed and the current one isn't
-       ;; inactive.
-       (inactive
-       (not (memq (org-element-property :type blob)
-                  '(inactive inactive-range))))))))
+     (let ((standalonep
+           (lambda (ts)
+             ;; Return a non-nil value when TS is a timestamp object
+             ;; in a paragraph with only timestamps and whitespaces.
+             (let ((parent (org-export-get-parent-element ts)))
+               (when (memq (org-element-type parent) '(paragraph verse-block))
+                 (not
+                  (org-element-map parent
+                      (cons 'plain-text
+                            (remq 'timestamp org-element-all-objects))
+                    (lambda (obj)
+                      (or (not (stringp obj)) (org-string-nw-p obj)))
+                    options t)))))))
+       (case (plist-get options :with-timestamps)
+        ('nil t)
+        (active
+         (not (memq (org-element-property :type blob) '(active active-range))))
+        (active-not-standalone
+         (not (and (memq (org-element-property :type blob)
+                         '(active active-range))
+                   (not (funcall standalonep blob)))))
+        (inactive-not-standalone
+         (not
+          (and (memq (org-element-property :type blob)
+                     '(inactive inactive-range))
+               (not (funcall standalonep blob)))))
+        (inactive
+         (not (memq (org-element-property :type blob)
+                    '(inactive inactive-range))))
+        (not-standalone (funcall standalonep blob)))))))
 
 
 ;;; The Transcoder
diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el
index 46531a1..90b4eb5 100644
--- a/testing/lisp/test-ox.el
+++ b/testing/lisp/test-ox.el
@@ -394,21 +394,70 @@ Paragraph"
          (org-test-with-temp-text "[0/0]"
            (org-test-with-backend test
              (org-export-as
-              'test nil nil nil '(:with-statistics-cookies nil))))))
-  ;; Timestamps.
-  (org-test-with-temp-text "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>"
-    (org-test-with-backend test
-      (should
-       (equal (org-export-as 'test nil nil nil '(:with-timestamps t))
-             "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>\n"))
-      (should
-       (equal (org-export-as 'test nil nil nil '(:with-timestamps nil)) ""))
-      (should
-       (equal (org-export-as 'test nil nil nil '(:with-timestamps active))
-             "<2012-04-29 sun. 10:45>\n"))
-      (should
-       (equal (org-export-as 'test nil nil nil '(:with-timestamps inactive))
-             "[2012-04-29 sun. 10:45]\n")))))
+              'test nil nil nil '(:with-statistics-cookies nil)))))))
+
+(ert-deftest test-org-export/with-timestamps ()
+  "Test `org-export-with-timestamps' specifications."
+  ;; t value.
+  (should
+   (equal
+    "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>\n"
+    (org-test-with-temp-text "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>"
+      (org-test-with-backend test
+       (org-export-as 'test nil nil nil '(:with-timestamps t))))))
+  ;; nil value.
+  (should
+   (equal
+    ""
+    (org-test-with-temp-text "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>"
+      (org-test-with-backend test
+       (org-export-as 'test nil nil nil '(:with-timestamps nil))))))
+  ;; `active' value.
+  (should
+   (equal
+    "<2012-04-29 sun. 10:45>\n"
+    (org-test-with-temp-text "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>"
+      (org-test-with-backend test
+       (org-export-as 'test nil nil nil '(:with-timestamps active))))))
+  ;; `active-not-standalone' value.
+  (should
+   (equal
+    "Paragraph <2012-03-29 Thu>"
+    (org-test-with-temp-text
+       "<2012-04-29 Thu>\n\nParagraph <2012-03-29 Thu> [2012-03-29 Thu]"
+      (org-test-with-backend test
+       (org-trim
+        (org-export-as 'test nil nil nil
+                       '(:with-timestamps active-not-standalone)))))))
+  ;; `inactive' value.
+  (should
+   (equal
+    "[2012-04-29 sun. 10:45]\n"
+    (org-test-with-temp-text "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>"
+      (org-test-with-backend test
+       (org-export-as 'test nil nil nil '(:with-timestamps inactive))))))
+  ;; `inactive-not-standalone' value.
+  (should
+   (equal
+    "Paragraph [2012-03-29 Thu]"
+    (org-test-with-temp-text
+       "[2012-04-29 Thu]\n\nParagraph <2012-03-29 Thu> [2012-03-29 Thu]"
+      (org-test-with-backend test
+       (org-trim
+        (org-export-as 'test nil nil nil
+                       '(:with-timestamps inactive-not-standalone)))))))
+  ;; `not-standalone' value.
+  (should
+   (equal
+    "Paragraph <2012-03-29 Thu> [2012-03-29 Thu]\n| [2012-03-29 Thu] |"
+    (org-test-with-temp-text "<2012-03-29 Thu> [2012-04-29 Thu]
+
+Paragraph <2012-03-29 Thu> [2012-03-29 Thu]
+| [2012-03-29 Thu] |"
+      (org-test-with-backend test
+       (org-trim
+        (org-export-as 'test nil nil nil
+                       '(:with-timestamps not-standalone))))))))
 
 (ert-deftest test-org-export/comment-tree ()
   "Test if export process ignores commented trees."
-- 
1.8.2.1


reply via email to

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