summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2017-03-18 10:29:33 +0100
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2017-03-18 10:29:33 +0100
commit36c7cfe9eb50d5a3d6d21e59707f1c779f549092 (patch)
tree97e101271130d4b0de2a3e25d6169a9553a9eaa3
parent3a9ac1f035504839f86af137a1a5877c0131dd82 (diff)
parentb72920344f7c940701b85aa157e1a1c88d93e4fd (diff)
downloadorg-mode-36c7cfe9eb50d5a3d6d21e59707f1c779f549092.tar.gz
Merge branch 'maint'
-rw-r--r--lisp/ob-exp.el20
-rw-r--r--testing/lisp/test-ob-exp.el12
2 files changed, 30 insertions, 2 deletions
diff --git a/lisp/ob-exp.el b/lisp/ob-exp.el
index 53a16f0..d966cd9 100644
--- a/lisp/ob-exp.el
+++ b/lisp/ob-exp.el
@@ -160,8 +160,24 @@ this template."
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(unless (save-match-data (org-in-commented-heading-p))
- (let* ((element (save-match-data (org-element-context)))
- (type (org-element-type element))
+ (let* ((object? (match-end 1))
+ (element (save-match-data
+ (if object? (org-element-context)
+ ;; No deep inspection if we're
+ ;; just looking for an element.
+ (org-element-at-point))))
+ (type
+ (pcase (org-element-type element)
+ ;; Discard block elements if we're looking
+ ;; for inline objects. False results
+ ;; happen when, e.g., "call_" syntax is
+ ;; located within affiliated keywords:
+ ;;
+ ;; #+name: call_src
+ ;; #+begin_src ...
+ ((and (or `babel-call `src-block) (guard object?))
+ nil)
+ (type type)))
(begin
(copy-marker (org-element-property :begin element)))
(end
diff --git a/testing/lisp/test-ob-exp.el b/testing/lisp/test-ob-exp.el
index 4b96b72..c7c7a7b 100644
--- a/testing/lisp/test-ob-exp.el
+++ b/testing/lisp/test-ob-exp.el
@@ -584,6 +584,18 @@ src_emacs-lisp{(+ 1 1)}"
(org-babel-exp-process-buffer))
(buffer-string)))))
+(ert-deftest ob-exp/src-block-with-affiliated-keyword ()
+ "Test exporting a code block with affiliated keywords."
+ ;; Pathological case: affiliated keyword matches inline src block
+ ;; syntax.
+ (should
+ (equal "#+name: call_foo\n#+BEGIN_SRC emacs-lisp\n42\n#+END_SRC"
+ (org-test-with-temp-text
+ "#+name: call_foo\n#+BEGIN_SRC emacs-lisp\n42\n#+END_SRC"
+ (let ((org-export-use-babel t))
+ (org-babel-exp-process-buffer))
+ (buffer-string)))))
+
(provide 'test-ob-exp)