Achim Gratz <strom...@nexgo.de> writes: > Eric Schulte <schulte.e...@gmail.com> writes: >> Does anyone on this list know the noweb system well enough to specify >> its behavior in this regard, and to describe what functional changes >> would be required to bring Babel into line with noweb behavior? > > Far from knowing it well, but the basics are, well basic: > > Documentation text is started via '@', code chunks are defined via > '<<chunk_name>>=' and a given chunk can be extended by '<<chunk_name>>=' > with the same name again, which allows to intermingle documentation and > definition in a linear fashion. Code chunk references are just > '<<chunk_name>>' without the equal sign and can be used non-linearly. > For comparison with Babel the noweb Hackers Guide is probably a good > source since it describes the pipeline representation which is used by > the tools (and should maybe be emulated by the Babel backend). > > http://www.cs.tufts.edu/~nr/noweb/guide.html >
Hi Achim, Thanks for sending along this reference. That combined with the related "Literate Programming Simplified" [1] serve as a very interesting introduction to Noweb. I have not studied noweb previously and I am impressed by the simplicity of the pipelined filter-based design. Noweb and Babel are certainly very different beasts. Noweb achieves sparse simplicity allowing use with a variety of tools while Babel lives inside the very rich environment of Org-mode documents. Noweb enables literate programming LP while babel is a reproducible research tool which also provides support for LP. It seems that lifting a solution whole-piece from noweb will not make sense, as noweb does not have a need for unique code block names in the same way as babel. How about the following solution, which is based on a new :noweb-ref header argument. When expanding ``noweb'' style references the bodies of all code block with /either/ a block name matching the reference name /or/ a :noweb-ref header argument matching the reference name will be concatenated together to form the replacement text. By setting this header argument at the sub-tree or file level, simple code block concatenation may be achieved. For example, when tangling the following Org-mode file, the bodies of code blocks will be concatenated into the resulting pure code file.
#+begin_src sh :tangle yes :noweb yes :shebang #!/bin/sh <<fullest-disk>> #+end_src * the mount point of the fullest disk :PROPERTIES: :noweb-ref: fullest-disk :END: ** query all mounted disks #+begin_src sh df \ #+end_src ** strip the header row #+begin_src sh |sed '1d' \ #+end_src ** sort by the percent full #+begin_src sh |awk '{print $5 " " $6}'|sort -n |tail -1 \ #+end_src ** extract the mount point #+begin_src sh |awk '{print $2}' #+end_src
This should provide feature-parity with noweb, and satisfy most LP needs. Best -- Eric Footnotes: [1] www.cs.tufts.edu/~nr/pubs/lpsimp.pdf -- Eric Schulte http://cs.unm.edu/~eschulte/