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 |
test-out-pre-patch
Description: test-out-pre-patch
test-out-post-patch
Description: test-out-post-patch
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