From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: not-quite-literal blocks Date: Mon, 02 Apr 2012 20:26:42 -0400 Message-ID: <87wr5xbqyl.fsf@gmx.com> References: <1333416728.2952.217.camel@dell-desktop.example.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:47347) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SEtSU-0006C0-N1 for emacs-orgmode@gnu.org; Mon, 02 Apr 2012 22:27:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SEtSS-0006Gl-Id for emacs-orgmode@gnu.org; Mon, 02 Apr 2012 22:26:58 -0400 Received: from mailout-us.gmx.com ([74.208.5.67]:33909) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1SEtSS-0006GS-CI for emacs-orgmode@gnu.org; Mon, 02 Apr 2012 22:26:56 -0400 In-Reply-To: <1333416728.2952.217.camel@dell-desktop.example.com> (Thomas Lord's message of "Mon, 02 Apr 2012 18:32:08 -0700") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Thomas Lord Cc: emacs-orgmode@gnu.org Thomas Lord 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: > >
printf("hello world\n");
>   
> > 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 > int main (int argc, char * argv[]) > { > //{{say goodnight, gracey}} > return 0; > } > #+END_SRC > > and get: > > Say goodnight, Gracey.: >
>      printf ("Goodnight Gracey\n");
>    
> > main routine: >
>      #include 
>      int main (int argc, char * argv[])
>      {
>        //{say   goodnight,
> gracey}}
>        return 0;
>      }
>    
> 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 > 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 > > > 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/