org-export: Add `active' and `inactive' alternatives to `org-export-with-timestamps'

* contrib/lisp/org-export.el (org-export-with-timestamps): Allow to
  keep only active timestamps or inactive ones with respectively
  `active' and `inactive' values.
(org-export--skip-p): Update tests to determine if a timestamp should
be ignored.
* testing/lisp/test-org-export.el: Add tests.
* contrib/lisp/org-element.el: Fix some comments.
This commit is contained in:
Nicolas Goaziou 2012-04-29 22:55:37 +02:00
parent 491ce5491d
commit bea597be96
3 changed files with 62 additions and 33 deletions

View File

@ -3032,8 +3032,8 @@ element or object type."
;;
;; `org-element-current-element' makes use of special modes. They are
;; activated for fixed element chaining (i.e. `plain-list' > `item')
;; or fixed conditional element chaining (i.e. `section' >
;; `planning'). Special modes are: `section', `quote-section', `item'
;; or fixed conditional element chaining (i.e. `headline' >
;; `section'). Special modes are: `section', `quote-section', `item'
;; and `table-row'.
(defconst org-element--element-block-re

View File

@ -600,9 +600,20 @@ e.g. \"timestamp:nil\"."
:type 'boolean)
(defcustom org-export-with-timestamps t
"If nil, do not export time stamps and associated keywords."
"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.
This option can also be set with the #+OPTIONS line, e.g.
\"<:nil\"."
:group 'org-export-general
:type 'boolean)
:type '(choice
(const :tag "All timestamps" t)
(const :tag "Only active timestamps" active)
(const :tag "Only inactive timestamps" inactive)
(const :tag "No timestamp" nil)))
(defcustom org-export-with-todo-keywords t
"Non-nil means include TODO keywords in export.
@ -778,7 +789,7 @@ standard mode."
;; - type :: string
;;
;; + `:parse-tree' :: Whole parse tree, available at any time during
;; transcoding.
;; transcoding.
;; - category :: global
;; - type :: list (as returned by `org-element-parse-buffer')
;;
@ -793,15 +804,15 @@ standard mode."
;; - type :: symbol (nil, t)
;;
;; + `:select-tags' :: List of tags enforcing inclusion of sub-trees
;; in transcoding. When such a tag is present,
;; subtrees without it are de facto excluded from
;; the process. See `use-select-tags'.
;; in transcoding. When such a tag is present, subtrees without
;; it are de facto excluded from the process. See
;; `use-select-tags'.
;; - category :: option
;; - type :: list of strings
;;
;; + `:target-list' :: List of targets encountered in the parse tree.
;; This is used to partly resolve "fuzzy" links
;; (cf. `org-export-resolve-fuzzy-link').
;; This is used to partly resolve "fuzzy" links
;; (cf. `org-export-resolve-fuzzy-link').
;; - category :: tree
;; - type :: list of strings
;;
@ -817,7 +828,7 @@ standard mode."
;; - type :: symbol (nil, t, `headline')
;;
;; + `:with-author' :: Non-nil means author's name should be included
;; in the output.
;; in the output.
;; - category :: option
;; - type :: symbol (nil, t)
;;
@ -879,35 +890,33 @@ standard mode."
;; - type :: symbol (nil, {}, t)
;;
;; + `:with-tables' :: Non-nil means transcoding should interpret
;; tables.
;; tables.
;; - category :: option
;; - type :: symbol (nil, t)
;;
;; + `:with-tags' :: Non-nil means transcoding should keep tags in
;; headlines. A `not-in-toc' value will remove them
;; from the table of contents, if any, nonetheless.
;; headlines. A `not-in-toc' value will remove them from the
;; table of contents, if any, nonetheless.
;; - category :: option
;; - type :: symbol (nil, t, `not-in-toc')
;;
;; + `:with-tasks' :: Non-nil means transcoding should include
;; headlines with a TODO keyword. A `todo' value
;; will only include headlines with a todo type
;; keyword while a `done' value will do the
;; contrary. If a list of strings is provided, only
;; tasks with keywords belonging to that list will
;; be kept.
;; headlines with a TODO keyword. A `todo' value will only
;; include headlines with a todo type keyword while a `done'
;; value will do the contrary. If a list of strings is provided,
;; only tasks with keywords belonging to that list will be kept.
;; - category :: option
;; - type :: symbol (t, todo, done, nil) or list of strings
;;
;; + `:with-timestamps' :: Non-nil means transcoding should include
;; time stamps and associated keywords. Otherwise, completely
;; remove them.
;; time stamps. Special value `active' (resp. `inactive') ask to
;; export only active (resp. inactive) timestamps. Otherwise,
;; completely remove them.
;; - category :: option
;; - type :: symbol: (t, nil)
;; - type :: symbol: (`active', `inactive', t, nil)
;;
;; + `:with-toc' :: Non-nil means that a table of contents has to be
;; added to the output. An integer value limits its
;; depth.
;; added to the output. An integer value limits its depth.
;; - category :: option
;; - type :: symbol (nil, t or integer)
;;
@ -1459,7 +1468,8 @@ INFO is a plist holding export options."
(defun org-export--skip-p (blob options select-tags)
"Non-nil when element or object BLOB should be skipped during export.
OPTIONS is the plist holding export options."
OPTIONS is the plist holding export options. SELECT-TAGS, when
non-nil, is a list of tags marking a subtree as exportable."
(case (org-element-type blob)
;; Check headline.
(headline
@ -1487,7 +1497,20 @@ OPTIONS is the plist holding export options."
(not (eq todo-type with-tasks)))
(and (consp with-tasks) (not (member todo with-tasks))))))))
;; Check timestamp.
(timestamp (not (plist-get options :with-timestamps)))
(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))))))
;; Check drawer.
(drawer
(or (not (plist-get options :with-drawers))
@ -1510,7 +1533,7 @@ OPTIONS is the plist holding export options."
;;; The Transcoder
;;
;; This function reads Org data (obtained with, i.e.
;; `org-export-data' reads a parse tree (obtained with, i.e.
;; `org-element-parse-buffer') and transcodes it into a specified
;; back-end output. It takes care of updating local properties,
;; filtering out elements or objects according to export options and

View File

@ -74,12 +74,12 @@ already filled in `info'."
(equal
(org-export-parse-option-keyword
"arch:headline creator:comment d:(\"TEST\")
^:{} toc:1 tags:not-in-toc tasks:todo num:2")
^:{} toc:1 tags:not-in-toc tasks:todo num:2 <:active")
'( :section-numbers
2
:with-archived-trees headline :with-creator comment
:with-drawers ("TEST") :with-sub-superscript {} :with-toc 1
:with-tags not-in-toc :with-tasks todo))))
:with-tags not-in-toc :with-tasks todo :with-timestamps active))))
(ert-deftest test-org-export/get-inbuffer-options ()
"Test reading all standard export keywords."
@ -217,13 +217,19 @@ already filled in `info'."
(equal (org-export-as 'test nil nil nil '(:with-drawers ("FOO")))
":FOO:\nkeep\n:END:\n")))))
;; Timestamps.
(org-test-with-temp-text "[2012-04-29 sun. 10:45]"
(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]\n"))
"[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)) ""))))
(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"))))
;; Clocks.
(let ((org-clock-string "CLOCK:"))
(org-test-with-temp-text "CLOCK: [2012-04-29 sun. 10:45]"