emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] not-quite-literal blocks


From: Thomas Lord
Subject: [O] not-quite-literal blocks
Date: Mon, 02 Apr 2012 18:32:08 -0700

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>


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);
       ...
    }

Thanks,
-t





reply via email to

[Prev in Thread] Current Thread [Next in Thread]