diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2012-04-10 23:15:32 +0200 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2012-04-10 23:53:11 +0200 |
commit | 97d2db486737d7c539018f2d60c5e5e551d4b7b7 (patch) | |
tree | 770857453851824f4778de1f8e0fa9027e748e01 | |
parent | f42e40d978997368ea1107419ce938096c9a0ca1 (diff) | |
download | org-mode-97d2db486737d7c539018f2d60c5e5e551d4b7b7.tar.gz |
org-element: Fix interpretation of affiliated keywords
* contrib/lisp/org-element.el (org-element-interpret--affiliated-keywords):
Fix interpretation of affiliated keywords.
(org-element-interpret-data): If no `:post-blank' property is
specified, assumed there is no blank line or whitespace after the
element or object.
* testing/lisp/test-org-element.el: Add a test.
-rw-r--r-- | contrib/lisp/org-element.el | 31 | ||||
-rw-r--r-- | testing/lisp/test-org-element.el | 35 |
2 files changed, 51 insertions, 15 deletions
diff --git a/contrib/lisp/org-element.el b/contrib/lisp/org-element.el index c9d1f7c..84cd42c 100644 --- a/contrib/lisp/org-element.el +++ b/contrib/lisp/org-element.el @@ -3415,17 +3415,17 @@ Return Org syntax as a string." (results (funcall interpreter blob contents))) ;; Update PREVIOUS. (setq previous type) - ;; Build white spaces. - (cond - ((eq type 'org-data) results) - ((memq type org-element-all-elements) - (concat - (org-element-interpret--affiliated-keywords blob) - (org-element-normalize-string results) - (make-string (org-element-property :post-blank blob) 10))) - (t (concat - results - (make-string (org-element-property :post-blank blob) 32)))))))) + ;; Build white spaces. If no `:post-blank' property is + ;; specified, assume its value is 0. + (let ((post-blank (or (org-element-property :post-blank blob) 0))) + (cond + ((eq type 'org-data) results) + ((memq type org-element-all-elements) + (concat + (org-element-interpret--affiliated-keywords blob) + (org-element-normalize-string results) + (make-string post-blank 10))) + (t (concat results (make-string post-blank 32))))))))) (org-element-contents data) "")) (defun org-element-interpret-secondary (secondary) @@ -3450,14 +3450,19 @@ If there is no affiliated keyword, return the empty string." (let (dual) (when (member key org-element-dual-keywords) (setq dual (cdr value) value (car value))) - (concat "#+" key (and dual (format "[%s]" dual)) ": " + (concat "#+" key + (and dual + (format "[%s]" + (org-element-interpret-secondary dual))) + ": " (if (member key org-element-parsed-keywords) (org-element-interpret-secondary value) value) "\n")))))) (mapconcat (lambda (key) - (let ((value (org-element-property (intern (concat ":" key)) element))) + (let ((value (org-element-property (intern (concat ":" (downcase key))) + element))) (when value (if (member key org-element-multiple-keywords) (mapconcat (lambda (line) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 040f35d..8084326 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -261,7 +261,7 @@ -;;; Granularity +;;;; Granularity (ert-deftest test-org-element/granularity () "Test granularity impact on buffer parsing." @@ -346,7 +346,38 @@ Paragraph \\alpha." -;;; Navigation tools. +;;;; Interpretation. + +(ert-deftest test-org-element/interpret-affiliated-keywords () + "Test if affiliated keywords are correctly interpreted." + ;; Interpret simple keywords. + (should + (equal + (org-element-interpret-data + '(org-data nil (paragraph (:name "para") "Paragraph"))) + "#+NAME: para\nParagraph\n")) + ;; Interpret multiple keywords. + (should + (equal + (org-element-interpret-data + '(org-data nil (paragraph (:attr_ascii ("line1" "line2")) "Paragraph"))) + "#+ATTR_ASCII: line1\n#+ATTR_ASCII: line2\nParagraph\n")) + ;; Interpret parsed keywords. + (should + (equal + (org-element-interpret-data + '(org-data nil (paragraph (:caption ("caption")) "Paragraph"))) + "#+CAPTION: caption\nParagraph\n")) + ;; Interpret dual keywords. + (should + (equal + (org-element-interpret-data + '(org-data nil (paragraph (:caption (("long") "short")) "Paragraph"))) + "#+CAPTION[short]: long\nParagraph\n"))) + + + +;;;; Navigation tools. (ert-deftest test-org-element/forward-element () "Test `org-element-forward' specifications." |