emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Sébastien Vauban" <wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@public.gmane.org>
To: emacs-orgmode-mXXj517/zsQ@public.gmane.org
Subject: Literate Programming with Org mode
Date: Tue, 28 Jul 2009 18:14:50 +0200	[thread overview]
Message-ID: <87my6ordhh.fsf@mundaneum.com> (raw)

Hi Eric and all,

Here some promised description of how I'm using Literate Programming with
LaTeX (up to now -- soon directly from Org mode?).

I write an "enhanced LaTeX" file ([1], having the `.nw' -- for Nuweb --
extension). It is enhanced as I can put blocks of code in there (SQL blocks,
for example), and give them a name for further referencing.

Then, at some point in the file, I say how I want the code files to look like,
by assembling the blocks in a certain order, with some glue.

For example:

--8<---------------cut here---------------start------------->8---
<<Enterprise.sql>>=
<<sql-init>>
SELECT abcID, etpID, etpAssurATPolNum
FROM enterprise JOIN record
    ON (etpAbcID_fk = abcID)
WHERE etpAbcID_fk
<<sql-cond>>
@ %def 
--8<---------------cut here---------------end--------------->8---

The above file is made up of two defined blocks (`sql-init' and `sql-cond')
plus some glue in between.

The good thing is I can reuse the same blocks in other context, completely
avoiding copy/paste of code:

--8<---------------cut here---------------start------------->8---
<<Lessons.sql>>=
<<sql-init>>
SELECT abcID, lesAlternNbrSem, lesNbrSem,
       CONVERT(varchar(10), lesDateDeb, @dateFmtStyleOut) AS lesDateDeb,
       CONVERT(varchar(10), lesDateFin, @dateFmtStyleOut) AS lesDateFin
FROM lessons JOIN record
    ON (lesAbcID_fk = abcID)
WHERE lesAbcID_fk
<<sql-cond>>
@ %def 
--8<---------------cut here---------------end--------------->8---

OK. So, my `org-lit-prog.nw' file is ready, and committed under Subversion
(this is the only one I'm committing as it contains both the documentation of
the code, and the source code itself).

Then, I just type (in a terminal):

--8<---------------cut here---------------start------------->8---
noweb org-lit-prog.nw
--8<---------------cut here---------------end--------------->8---

to extract both:

    o   the LaTeX file [2] to be compiled into a PDF [3],
    o   the different source code files (Enterprise.sql [4], Lessons.sql [5],
        [6] and [7])

Just that easy to keep code and doc in sync, and get a very nice-to-read
documentation of the code.

Sometimes, I play an extra trick is made in the noweb file: I put blocks of
static code (for which I don't especially need any noweb feature) after the
end of the LaTeX document. That way, it gets outputted by noweb as a source
file during the Tangle process, and included in my LaTeX document via the
listings package.

Why that trick?  I could directly put the code in the body of the document!
Yes, but I want the code to be highlighted via listings. Otherwise, it's just
black and white display of the code...

For easy access, I've put all the above files on a my Web space:

[1] http://www.mygooglest.com/sva/org-lit-prog.nw
[2] http://www.mygooglest.com/sva/org-lit-prog.tex
[3] http://www.mygooglest.com/sva/org-lit-prog.pdf
[4] http://www.mygooglest.com/sva/Enterprise.sql
[5] http://www.mygooglest.com/sva/Lessons.sql
[6] http://www.mygooglest.com/sva/Payment.sql
[7] http://www.mygooglest.com/sva/prsNumNat.awk

From what I understand, what we both wanna reach is writing all of the `.nw'
file as an Org file directly, and let Org-babel extracts the source code files
and the documentation out of it.

What should be good in the future, when it will be ready for prime time, is
that this becomes complete part of the export process: no tangle operation
needed.

Is the above description worth for you?  Do you understand how I work when
documenting code?  Pay attention: I'm *the* expert in literate programming.
Just an amateur being seduced by some of its features.

Best regards,
  Seb

-- 
Sébastien Vauban



_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode-mXXj517/zsQ@public.gmane.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode

             reply	other threads:[~2009-07-28 16:14 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-28 16:14 Sébastien Vauban [this message]
2009-07-28 16:46 ` Literate Programming with Org mode Marcelo de Moraes Serpa
2009-07-28 20:41   ` Sébastien Vauban
2009-07-28 21:53     ` sam kleinman
2009-07-29 22:16       ` Eric H. Neilsen, Jr.
2009-07-31 17:01       ` Eric Schulte
2009-07-31 20:30         ` sam kleinman
2009-07-30  0:42 ` Eric Schulte
2009-08-02  1:46   ` Eric Schulte
2009-08-03  8:42     ` Sébastien Vauban
2009-08-03 15:38       ` Eric Schulte
2009-08-11  9:42         ` Sébastien Vauban
2009-08-11 18:55           ` 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=87my6ordhh.fsf@mundaneum.com \
    --to=wxhgmqzgwmuf-genee64ty+gs+fvcfc7uqw@public.gmane.org \
    --cc=emacs-orgmode-mXXj517/zsQ@public.gmane.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).