From 8faa562ce1d2a80988736e7a045b7c16aba7ebc9 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou 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