Thomas Lord <l...@emf.net> writes: > I am trying to piece together a simple > literate programming system that takes > HTML as input and spews out source files. > The program that "tangles" code fragments > in the HTML into source text will be in XSLT. > > Org mode is almost but not quite perfect for > generating the HTML I'd like. > > I'm writing to ask if I'm overlooking features that > are close to what I want to do, or advice about > whether it makes sense to extend org this way > and, if so, what work is entailed. (I'm aware > of the existing literate programming features > in org but they are pretty far from what I'm > looking for, I think.) > > Right now, I can write something like this: > > #+BEGIN_SRC C > printf ("hello world\n"); > #+END_SRC > > and, via HTML export, get: > > <pre class="src src-C">printf("hello world\n"); > </pre> > > What I'd really like is the ability to do this: > > #+BEGIN_SRC C name="Say goodnight, Gracey." > printf ("Goodnight, Gracey\n"); > #+END_SRC > #+BEGIN_SRC C name="main routine" file="burns.c" > #include <stdio.h> > int main (int argc, char * argv[]) > { > //{{say goodnight, gracey}} > return 0; > } > #+END_SRC > > and get: > > <i>Say goodnight, Gracey.</i>: > <pre class="src src-C" id="say_goodnight_gracey"> > printf ("Goodnight Gracey\n"); > </pre> > > <i>main routine</i>: > <pre class="src src-C" id="main_routine" file="burns.c"> > #include <stdio.h> > int main (int argc, char * argv[]) > { > <a href="#say_goodnight_gracey"><i>//{say goodnight, > gracey}}</i></a> > return 0; > } > </pre> >
This behavior should be fairly easily implemented through customizing the `org-babel-exp-code-template' variable, you can put any arbitrary Org-mode text into this template including literal HTML. See its documentation string for more information. > > > You can probably see how if I could get those mangled > "id" attributes in there, along with the hyperlinks, > it's pretty easy to tangle the result to produce a > source file like: > > #include <stdio.h> > int main (int argc, char * argv[]) > { > printf ("Goodnight, Gracey\n"); > return 0; > } > > Any suggestions on what I would need to do > to get code blocks like this? The precise details of > the particular HTML mark-up are a little bit > flexible. > > Huge "bonus points" if I can specify arbitrary > attributes (not just "id" and "file") *and* > introduce spans with a specific "id" in code. > Like: > > #+BEGIN_SRC C id="print something" params="thing rest" > printf (/*{thing}*/, /*{rest}*/); > #+END_SRC > > for > <pre ... id="print_something" params="thing rest"> > printf (<span ... name="thing">/*thing*/</span>, ...); > </pre> > > and > > #+BEGIN_SRC id="main routine" ... > ... > int main (int argc, char * argv[]) > { > //{{print something}thing={"argc is %d\n"}rest={argc}} > return 0; > } > #+END_SRC > > for the obvious HTML expansion, all to ultimately generate > (through the XSLT code): > > ... > int main (...) > { > printf ("argc is %d\n", argc); > ... > } > If you're willing to hack ob-exp.el locally you could add specific header arguments to the `org-babel-exp-code-template' template. I'm not clear on a good way to do this for *any* header argument which would be general enough to push up to the main Org-mode trunk. Cheers, > > Thanks, > -t > > > -- Eric Schulte http://cs.unm.edu/~eschulte/