From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [babel] [PATCH] Date: Sun, 27 Feb 2011 15:02:08 -0700 Message-ID: <87mxlhyw4f.fsf@gmail.com> References: <87y6548bqd.fsf@btinternet.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from [140.186.70.92] (port=56750 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ptoh1-0005vZ-Di for emacs-orgmode@gnu.org; Sun, 27 Feb 2011 17:02:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ptoh0-00066T-9F for emacs-orgmode@gnu.org; Sun, 27 Feb 2011 17:02:19 -0500 Received: from mail-pw0-f41.google.com ([209.85.160.41]:42451) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ptogz-00066I-V5 for emacs-orgmode@gnu.org; Sun, 27 Feb 2011 17:02:18 -0500 Received: by pwi10 with SMTP id 10so958612pwi.0 for ; Sun, 27 Feb 2011 14:02:16 -0800 (PST) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Martyn Jago Cc: emacs-orgmode@gnu.org Hi Martyn, Thanks for this patch and for the very nice test file, I've just applied it along with a related patch in org-exp-blocks.el. Even with the patch applied I am still seeing undesirable behavior when exporting the test file. I believe this is due to upstream processing of the blocks by the rest of org-mode, as the buffer *after* org-mode processing looks like this [1] Thanks -- Eric ps. Now that you are signed up as an Org-mode contributor you could start sending patches using the git format-patch utility, i.e., git format-patch -o ~/Desktop/ HEAD~1 will output a patch file to your desktop holding your last committed change. This would allow me to more easily apply your patches, and will ensure that you get authorship credit in the git logs. Martyn Jago writes: > Hi Babel > > I've been working on an exporter and have come across some strange > behaviour regarding 'empty' source blocks with regard to tangling. > > If an attempt is made to tangle a block containing two blank (no > white-space) lines, the block is exported as carriage returns (as I > would expect). > > If a block contains one or no blank lines, the #+end_src tag appears to > be consumed by the block (along with subsequent text upto the next > #+end_src tag). > > I tracked this down to the org-babel-src-block-regexp variable in ob.el > and have modified it to give what appears to be consistent behaviour. > > I also found the following unresolved bug report which may be related... > > http://www.mail-archive.com/emacs-orgmode@gnu.org/msg29992.html > > I've included a simple test file, and resultant tangled files before and > after the patch to attempt to convey the problem. > > NOTE: Since the patch itself modifies a defvar, and since I'm not clear > on how a patched defvar should be updated downstream, the patch includes a > setq statement to update the defvar org-babel-src-block-regexp for test > purposes. The patch cannot therefore be applied as is. > > > * Empty Block Tangle Test > ** Typical Execution > > #+BEGIN_SRC emacs-lisp :tangle no > > (org-babel-tangle) ; or org-babel-tangle-file "empty-block.org" > > #+END_SRC > > #+results: > | test-out | > > ** Tests > *** Block 1 (Exports OK) > > #+BEGIN_SRC sh :tangle test-out > Block 1 > #+END_SRC > > *** Block 2 (Exports OK - double blank line no white-space in Block) > > #+BEGIN_SRC sh :tangle test-out > > > #+END_SRC > > *** Block 3 (Fails - single blank line no white-space in Block) > > #+BEGIN_SRC sh :tangle test-out > > #+END_SRC > > *** Block 4 (Gets consumed by previous Block) > > #+BEGIN_SRC sh :tangle test-out > Block 4 > #+END_SRC > > *** Block 5 (Fails - no lines in Block) > > #+BEGIN_SRC sh :tangle test-out > #+END_SRC > > *** Block 6 (Gets consumed by previous Block > > #+BEGIN_SRC sh :tangle test-out > Block 6 > #+END_SRC > > *** Block 7 (Exports OK) > > #+BEGIN_SRC sh :tangle test-out > Block 7 > #+END_SRC > > ** List params > #+begin_src emacs-lisp > (sort* (mapcar (lambda (x) > (list (car x) (cdr x))) > params) 'string-lessp :key 'car) > #+end_src > > #+results: > | :cache | no | > | :colname-names | nil | > | :colnames | no | > | :comments | | > | :exports | results | > | :hlines | yes | > | :noweb | no | > | :result-params | (replace) | > | :result-type | value | > | :results | replace | > | :rowname-names | nil | > | :session | none | > | :shebang | | > | :tangle | test-out | > > > > > diff --git a/lisp/ob.el b/lisp/ob.el > index 6e98263..6d2f0d0 100644 > --- a/lisp/ob.el > +++ b/lisp/ob.el > @@ -138,9 +138,20 @@ remove code block execution from the C-c C-c keybinding." > ;; (4) header arguments > "\\([^\n]*\\)\n" > ;; (5) body > - "\\([^\000]+?\n\\)[ \t]*#\\+end_src") > + "\\([^\000]*?\n*\\)[ \t]*#\\+end_src") > "Regexp used to identify code blocks.") > > +(setq org-babel-src-block-regexp > + (concat > + ;; (1) indentation (2) lang > + "^\\([ \t]*\\)#\\+begin_src[ \t]+\\([^ \f\t\n\r\v]+\\)[ \t]*" > + ;; (3) switches > + "\\([^\":\n]*\"[^\"\n*]*\"[^\":\n]*\\|[^\":\n]*\\)" > + ;; (4) header arguments > + "\\([^\n]*\\)\n" > + ;; (5) body > + "\\([^\000]*?\n*\\)[ \t]*#\\+end_src")) > + > (defvar org-babel-inline-src-block-regexp > (concat > ;; (1) replacement target (2) lang > > Regards > > Martyn > > --- > Org-mode version 7.4 (release_7.4.529.gb23d) > GNU Emacs 24.0.50.1 (i686-pc-linux-gnu, GTK+ Version 2.24.0) > of 2011-02-25 > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode Footnotes: [1] buffer *after* org-mode processing ,---- | ** new block regexp tests | *** Block 1 (Exports OK) | | #+BEGIN_SRC sh :tangle test-out | Block 1 | #+END_SRC | | *** Block 2 (Exports OK - double blank line no white-space in Block) | | #+BEGIN_SRC sh :tangle test-out | | | #+END_SRC | | *** Block 3 (Fails - single blank line no white-space in Block) | | #+BEGIN_SRC sh :tangle test-out | | #+END_SRC | | *** Block 4 (Gets consumed by previous Block) | | #+BEGIN_SRC sh :tangle test-out | Block 4 | #+END_SRC | | *** Block 5 (Fails - no lines in Block) | | #+BEGIN_SRC sh :tangle test-out | #+END_SRC | | *** Block 6 (Gets consumed by previous Block | | #+BEGIN_SRC sh :tangle test-out | Block 6 | #+END_SRC `----