emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Martyn Jago <martyn.jago@btinternet.com>
To: emacs-orgmode@gnu.org
Subject: Re: [babel][patch] BUG in inline source blocks
Date: Thu, 26 Jan 2012 13:29:10 +0000	[thread overview]
Message-ID: <m24nvisic9.fsf@btinternet.com> (raw)
In-Reply-To: <87fwf27w67.fsf@med.uni-goettingen.de>

[-- Attachment #1: Type: text/plain, Size: 617 bytes --]

Hi,

Andreas Leha <andreas.leha@med.uni-goettingen.de> 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



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Fix inline source block preceded by punctuation --]
[-- Type: text/x-patch, Size: 4109 bytes --]

From ce7ccfe97ce640f47ed83cdb2fdb6ffa8a6d3c54 Mon Sep 17 00:00:00 2001
From: Martyn Jago <martyn.jago@btinternet.com>
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


  reply	other threads:[~2012-01-26 13:29 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-26  7:36 [babel] " Andreas Leha
2012-01-26 13:29 ` Martyn Jago [this message]
2012-01-26 19:55   ` [babel][patch] " Martyn Jago
2012-01-27 22:26     ` Andreas Leha
2012-01-27 23:33       ` Eric Schulte
2012-01-28  9:28         ` Andreas Leha
2012-01-29  0:34           ` Martyn Jago
2012-01-30 16:06             ` Eric Schulte

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m24nvisic9.fsf@btinternet.com \
    --to=martyn.jago@btinternet.com \
    --cc=emacs-orgmode@gnu.org \
    --subject='Re: [babel][patch] BUG in inline source blocks' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).