summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/org-element.el22
-rw-r--r--testing/lisp/test-org-element.el90
2 files changed, 57 insertions, 55 deletions
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 352482e..64d0877 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -344,11 +344,6 @@ still has an entry since one of its properties (`:title') does.")
(item . :tag))
"Alist between element types and location of secondary value.")
-(defconst org-element-object-variables '(org-link-abbrev-alist-local)
- "List of buffer-local variables used when parsing objects.
-These variables are copied to the temporary buffer created by
-`org-export-secondary-string'.")
-
;;; Accessors and Setters
@@ -3917,21 +3912,18 @@ looked after.
Optional argument PARENT, when non-nil, is the element or object
containing the secondary string. It is used to set correctly
`:parent' property within the string."
- ;; Copy buffer-local variables listed in
- ;; `org-element-object-variables' into temporary buffer. This is
- ;; required since object parsing is dependent on these variables.
- (let ((pairs (delq nil (mapcar (lambda (var)
- (when (boundp var)
- (cons var (symbol-value var))))
- org-element-object-variables))))
+ (let ((local-variables (buffer-local-variables)))
(with-temp-buffer
- (mapc (lambda (pair) (org-set-local (car pair) (cdr pair))) pairs)
+ (dolist (v local-variables)
+ (ignore-errors
+ (if (symbolp v) (makunbound v)
+ (org-set-local (car v) (cdr v)))))
(insert string)
+ (restore-buffer-modified-p nil)
(let ((secondary (org-element--parse-objects
(point-min) (point-max) nil restriction)))
(when parent
- (mapc (lambda (obj) (org-element-put-property obj :parent parent))
- secondary))
+ (dolist (o secondary) (org-element-put-property o :parent parent)))
secondary))))
(defun org-element-map
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 0ca0f8a..d21f9da 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -2845,47 +2845,57 @@ Paragraph \\alpha."
(ert-deftest test-org-element/secondary-string-parsing ()
"Test if granularity correctly toggles secondary strings parsing."
- ;; 1. With a granularity bigger than `object', no secondary string
- ;; should be parsed.
- ;;
- ;; 1.1. Test with `headline' type.
- (org-test-with-temp-text "* Headline"
- (let ((headline
- (org-element-map (org-element-parse-buffer 'headline) 'headline
- 'identity
- nil
- 'first-match)))
- (should (stringp (org-element-property :title headline)))))
- ;; 1.2. Test with `item' type.
- (org-test-with-temp-text "* Headline\n- tag :: item"
- (let ((item (org-element-map (org-element-parse-buffer 'element)
- 'item
- 'identity
- nil
- 'first-match)))
- (should (stringp (org-element-property :tag item)))))
- ;; 1.3. Test with `inlinetask' type, if avalaible.
+ ;; With a granularity bigger than `object', no secondary string
+ ;; should be parsed.
+ (should
+ (stringp
+ (org-test-with-temp-text "* Headline"
+ (let ((headline
+ (org-element-map (org-element-parse-buffer 'headline) 'headline
+ #'identity nil 'first-match)))
+ (org-element-property :title headline)))))
+ (should
+ (stringp
+ (org-test-with-temp-text "* Headline\n- tag :: item"
+ (let ((item (org-element-map (org-element-parse-buffer 'element) 'item
+ #'identity nil 'first-match)))
+ (org-element-property :tag item)))))
(when (featurep 'org-inlinetask)
- (let ((org-inlinetask-min-level 15))
- (org-test-with-temp-text "*************** Inlinetask"
- (let ((inlinetask (org-element-map (org-element-parse-buffer 'element)
- 'inlinetask
- 'identity
- nil
- 'first-match)))
- (should (stringp (org-element-property :title inlinetask)))))))
- ;; 2. With a default granularity, secondary strings should be
- ;; parsed.
- (org-test-with-temp-text "* Headline"
- (let ((headline
- (org-element-map (org-element-parse-buffer) 'headline
- 'identity
- nil
- 'first-match)))
- (should (listp (org-element-property :title headline)))))
- ;; 3. `org-element-at-point' should never parse a secondary string.
- (org-test-with-temp-text "* Headline"
- (should (stringp (org-element-property :title (org-element-at-point))))))
+ (should
+ (stringp
+ (let ((org-inlinetask-min-level 15))
+ (org-test-with-temp-text "*************** Inlinetask"
+ (let ((inlinetask (org-element-map (org-element-parse-buffer 'element)
+ 'inlinetask
+ #'identity nil 'first-match)))
+ (org-element-property :title inlinetask)))))))
+ ;; With a default granularity, secondary strings should be parsed.
+ (should
+ (listp
+ (org-test-with-temp-text "* Headline"
+ (let ((headline
+ (org-element-map (org-element-parse-buffer) 'headline
+ #'identity nil 'first-match)))
+ (org-element-property :title headline)))))
+ ;; `org-element-at-point' should never parse a secondary string.
+ (should-not
+ (listp
+ (org-test-with-temp-text "* Headline"
+ (org-element-property :title (org-element-at-point)))))
+ ;; Preserve current local variables when parsing a secondary string.
+ (should
+ (let ((org-entities nil)
+ (org-entities-user nil))
+ (org-test-with-temp-text "
+#+CAPTION: \\foo
+Text
+# Local Variables:
+# org-entities-user: ((\"foo\"))
+# End:"
+ (let ((safe-local-variable-values '((org-entities-user . (("foo"))))))
+ (hack-local-variables))
+ (org-element-map (org-element-parse-buffer) 'entity
+ #'identity nil nil nil t)))))