emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [babel] Problem with tangling and newlines
@ 2011-07-13 22:31 Sebastien Vauban
  2011-07-15 15:34 ` Eric Schulte
  0 siblings, 1 reply; 2+ messages in thread
From: Sebastien Vauban @ 2011-07-13 22:31 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi,

Tangling this:

#+begin_src sh :tangle my-csv2ledger-wrapper.sh :noweb yes
#!/bin/bash
# my-csv2ledger-wrapper.sh -- Convert CSV files to Ledger data

<<load-data>> |\
<<americanize-date>> |\
<<americanize-csv>>

exit 0
#+end_src

now gives:

--8<---------------cut here---------------start------------->8---
#!/bin/bash
# my-csv2ledger-wrapper.sh -- Convert CSV files to Ledger data

cat
 |\
sed -r 's/^([[:digit:]]{2})\/([[:digit:]]{2})\/([[:digit:]]{2})/\2\/\1\/20\3/g' |\
sed -r 's/^([[:digit:]]{2})-([[:digit:]]{2})-([[:digit:]]{4})/\2\/\1\/\3/g'
 |\
sed -r 's/([[:digit:]])\.([[:digit:]]{3})/\1\2/g' |\
sed -r 's/([[:digit:]]),([[:digit:]]{2})/\1.\2/g' |\
sed -r 's/,/./g' |\
sed -r 's/;/,/g'

exit 0
--8<---------------cut here---------------end--------------->8---

which is not executable anymore because the pipe is not ending the line of
commands.

This is quite recent (v7.6?).

Best regards,
  Seb

-- 
Sebastien Vauban

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [babel] Problem with tangling and newlines
  2011-07-13 22:31 [babel] Problem with tangling and newlines Sebastien Vauban
@ 2011-07-15 15:34 ` Eric Schulte
  0 siblings, 0 replies; 2+ messages in thread
From: Eric Schulte @ 2011-07-15 15:34 UTC (permalink / raw)
  To: Sebastien Vauban; +Cc: emacs-orgmode

Hi Seb,

This is tricky because in some languages (e.g., Haskell and Python)
whitespace needs to be respected, and the newlines are treated as part
of the code block.

We used to trim all whitespace padding from the edges of code blocks
during tangling, however that caused problems, so now we do no trimming,
which is causing problems for your use case.  Perhaps the best
compromise would be to trim only the last trailing newline from the body
of the code block (given that it is not optional and could be considered
part of the block syntax rather than part of the code body).  I believe
that behavior would support all use cases...

OK, I've just made this change and pushed it up to the repository, all
Babel tests are still passing to it shouldn't be overly destructive.

The following behavior now works.

    ** including noweb refs w/o last newline
    #+begin_src sh :noweb yes
      <<my-name>> |\
      <<capitalize-name>>
    #+end_src

    #+source: my-name
    #+begin_src sh
      echo "eric schulte"
    #+end_src

    #+source: capitalize-name
    #+begin_src sh
      sed 's/^e/E/;s/ s/ S/'
    #+end_src

and (from the test suite), the following

    #+begin_src sh :tangle yes :noweb yes :shebang #!/bin/sh
      <<fullest-disk>>
    #+end_src

    ** query all mounted disks
    #+begin_src sh :noweb-ref fullest-disk
      df
    #+end_src

    ** strip the header row
    #+begin_src sh :noweb-ref fullest-disk
      |sed '1d'
    #+end_src

    ** sort by the percent full
    #+begin_src sh :noweb-ref fullest-disk
      |awk '{print $5 " " $6}'|sort -n |tail -1
    #+end_src

    ** extract the mount point
    #+begin_src sh :noweb-ref fullest-disk
      |awk '{print $2}'
    #+end_src

now tangles to

  df|sed '1d'|awk '{print $5 " " $6}'|sort -n |tail -1|awk '{print $2}'

which is pretty nice.

Thanks for bringing this up -- Eric

"Sebastien Vauban" <wxhgmqzgwmuf@spammotel.com> writes:

> Hi,
>
> Tangling this:
>
> #+begin_src sh :tangle my-csv2ledger-wrapper.sh :noweb yes
> #!/bin/bash
> # my-csv2ledger-wrapper.sh -- Convert CSV files to Ledger data
>
> <<load-data>> |\
> <<americanize-date>> |\
> <<americanize-csv>>
>
> exit 0
> #+end_src
>
> now gives:
>
> #!/bin/bash
> # my-csv2ledger-wrapper.sh -- Convert CSV files to Ledger data
>
> cat
>  |\
> sed -r 's/^([[:digit:]]{2})\/([[:digit:]]{2})\/([[:digit:]]{2})/\2\/\1\/20\3/g' |\
> sed -r 's/^([[:digit:]]{2})-([[:digit:]]{2})-([[:digit:]]{4})/\2\/\1\/\3/g'
>  |\
> sed -r 's/([[:digit:]])\.([[:digit:]]{3})/\1\2/g' |\
> sed -r 's/([[:digit:]]),([[:digit:]]{2})/\1.\2/g' |\
> sed -r 's/,/./g' |\
> sed -r 's/;/,/g'
>
> exit 0
>
> which is not executable anymore because the pipe is not ending the line of
> commands.
>
> This is quite recent (v7.6?).
>
> Best regards,
>   Seb

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-07-15 15:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-13 22:31 [babel] Problem with tangling and newlines Sebastien Vauban
2011-07-15 15:34 ` Eric Schulte

Code repositories for project(s) associated with this public 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).