summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2012-04-10 23:15:32 +0200
committerNicolas Goaziou <n.goaziou@gmail.com>2012-04-10 23:53:11 +0200
commit97d2db486737d7c539018f2d60c5e5e551d4b7b7 (patch)
tree770857453851824f4778de1f8e0fa9027e748e01
parentf42e40d978997368ea1107419ce938096c9a0ca1 (diff)
downloadorg-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.el31
-rw-r--r--testing/lisp/test-org-element.el35
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."