emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [babel] [PATCH]


From: Eric Schulte
Subject: Re: [Orgmode] [babel] [PATCH]
Date: Sun, 27 Feb 2011 15:02:08 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

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 <address@hidden> 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/address@hidden/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.
> address@hidden
> 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
`----





reply via email to

[Prev in Thread] Current Thread [Next in Thread]