Browse Source

ox: Change scope for `org-export-with-timestamps'

* lisp/ox.el (org-export-with-timestamps): Only applies to isolated
  timestamps, i.e. timestamps in a paragraph containing only
  timestamps and empty strings.
(org-export--skip-p): Skip timestamps according to new behaviour.
* testing/lisp/test-ox.el: Update tests.
Nicolas Goaziou 12 years ago
parent
commit
60aa1682ce
2 changed files with 67 additions and 31 deletions
  1. 27 16
      lisp/ox.el
  2. 40 15
      testing/lisp/test-ox.el

+ 27 - 16
lisp/ox.el

@@ -726,9 +726,15 @@ 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.
+  `inactive' export inactive timestamps only.
+  nil        do not export timestamps
+
+This only applies to timestamps isolated in a paragraph
+containing only timestamps.  Other timestamps are always
+exported.
 
 This option can also be set with the OPTIONS keyword, e.g.
 \"<:nil\"."
@@ -2022,19 +2028,24 @@ 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))))))))
+     ;; `:with-timestamps' only applies to isolated timestamps
+     ;; objects, i.e. timestamp objects in a paragraph containing only
+     ;; timestamps and whitespaces.
+     (when (let ((parent (org-export-get-parent-element blob)))
+	     (and (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))))
+	 (inactive
+	  (not (memq (org-element-property :type blob)
+		     '(inactive inactive-range)))))))))
 
 
 ;;; The Transcoder

+ 40 - 15
testing/lisp/test-ox.el

@@ -394,21 +394,46 @@ 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-03-29 Thu>\n\nParagraph <2012-03-29 Thu>[2012-03-29 Thu]"
+    (org-test-with-temp-text
+	"<2012-03-29 Thu>[2012-03-29 Thu]
+
+Paragraph <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)))))))
+  ;; `inactive' value.
+  (should
+   (equal
+    "[2012-03-29 Thu]\n\nParagraph <2012-03-29 Thu>[2012-03-29 Thu]"
+    (org-test-with-temp-text
+	"<2012-03-29 Thu>[2012-03-29 Thu]
+
+Paragraph <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))))))))
 
 (ert-deftest test-org-export/comment-tree ()
   "Test if export process ignores commented trees."