Hi,
Andreas Leha <[email protected]> writes:
> Hi all,
>
> I experience unexpected behaviour when an inline source block is not
> preceded by whitespace.
>
> Example:
> =======================
> * Test inline
> This is a functional inline src_R{print("source block")}.
>
> This (src_R{print("here")}) is not.
> =======================
>
> Regards,
> Andreas
I can confirm this behaviour and provide a patch to allow for inline
source blocks to be preceded by punctuation, or, for instance, enclosed
in parenthesis, as in Andreas' example. Patch is attached for
consideration.
Best, Martyn
>From ce7ccfe97ce640f47ed83cdb2fdb6ffa8a6d3c54 Mon Sep 17 00:00:00 2001
From: Martyn Jago <[email protected]>
Date: Thu, 26 Jan 2012 13:22:25 +0000
Subject: [PATCH] Fix for where inline source block is not preceded by whitespace but by
punctuation (reported by Andreas Leha).
* lisp/ob.el: Fix for where inline source block is not preceded by
whitespace but by punctuation.
* testing/lisp/test-ob.el: Regression test, testing inline source
block preceded by point, equality, and enclosed in parenthesis and
brackets.
---
lisp/ob.el | 21 ++++++++++++---------
testing/lisp/test-ob.el | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 9 deletions(-)
diff --git a/lisp/ob.el b/lisp/ob.el
index 70c258f..fbf032b 100644
--- a/lisp/ob.el
+++ b/lisp/ob.el
@@ -170,24 +170,27 @@ not match KEY should be returned."
(defun org-babel-get-inline-src-block-matches()
"Set match data if within body of an inline source block.
Returns non-nil if match-data set"
- (let ((src-at-0-p (save-excursion
+ (let* ((src-at-0-p (save-excursion
(beginning-of-line 1)
(string= "src" (thing-at-point 'word))))
(first-line-p (= 1 (line-number-at-pos)))
- (orig (point)))
- (let ((search-for (cond ((and src-at-0-p first-line-p "src_"))
- (first-line-p "[ \t]src_")
- (t "[ \f\t\n\r\v]src_")))
- (lower-limit (if first-line-p
- nil
- (- (point-at-bol) 1))))
+ (orig (point))
+ (search-for (cond ((and src-at-0-p first-line-p "src_"))
+ (first-line-p "[ \t[:punct:]]src_")
+ (t "[ \f\t\n\r\v[:punct:]]src_")))
+ (lower-limit (if first-line-p
+ nil
+ (- (point-at-bol) 1))))
+ (message "src-at-0-p = %S" src-at-0-p)
+ (message "first-line-p = %S" src-at-0-p)
+ (message "search-for = %S" search-for)
(save-excursion
(when (or (and src-at-0-p (bobp))
(and (re-search-forward "}" (point-at-eol) t)
(re-search-backward search-for lower-limit t)
(> orig (point))))
(when (looking-at org-babel-inline-src-block-regexp)
- t ))))))
+ t )))))
(defvar org-babel-inline-lob-one-liner-regexp)
(defun org-babel-get-lob-one-liner-matches()
diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index 7dccd22..fb38ead 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -430,6 +430,50 @@ this is simple"
(buffer-substring-no-properties
(point-min) (point-max)))))))
+(ert-deftest test-org-babel/inline-src_blk-preceded-punct ()
+ "Test inline source block where preceded by punctuation"
+
+ ;; inline-src-blk preceded by point
+ (let ((test-line ".src_emacs-lisp[ :results verbatim ]{ \"x\" }"))
+ (org-test-with-temp-text
+ test-line
+ (forward-char 1)
+ (org-ctrl-c-ctrl-c)
+ (should (string= (concat test-line " =\"x\"=")
+ (buffer-substring-no-properties
+ (point-min) (point-max))))))
+
+ ;; inline-src-blk preceded by equality
+ (let ((test-line "=src_emacs-lisp[ :results verbatim ]{ \"x\" }"))
+ (org-test-with-temp-text
+ test-line
+ (forward-char 1)
+ (org-ctrl-c-ctrl-c)
+ (should (string= (concat test-line " =\"x\"=")
+ (buffer-substring-no-properties
+ (point-min) (point-max))))))
+
+ ;; inline-src-blk enclosed within parenthesis
+ (let ((test-line "(src_emacs-lisp[ :results verbatim ]{ \"x\" }"))
+ (org-test-with-temp-text
+ (concat test-line ")")
+ (forward-char 1)
+ (org-ctrl-c-ctrl-c)
+ (should (string= (concat test-line " =\"x\"=)" )
+ (buffer-substring-no-properties
+ (point-min) (point-max))))))
+
+ ;; inline-src-blk enclosed within parenthesis
+ (let ((test-line "{src_emacs-lisp[ :results verbatim ]{ \"x\" }"))
+ (org-test-with-temp-text
+ (concat test-line "}")
+ (forward-char 1)
+ (org-ctrl-c-ctrl-c)
+ (should (string= (concat test-line " =\"x\"=}")
+ (buffer-substring-no-properties
+ (point-min) (point-max))))))
+
+ )
(ert-deftest test-org-babel/combining-scalar-and-raw-result-types ()
(org-test-with-temp-text-in-file "
--
1.7.3.4