* Rick Frankel <r...@rickster.com> wrote: > On 2013-06-26 13:03, Karl Voit wrote: >> * Rick Frankel <r...@rickster.com> wrote: >> >> However, the header information seems to get lost. This requires >> hard-coded column content which is a minor drawback of this method. > > Just use `:colnames no':
I love Org-mode :-) > Regardless, here's a hack which does what you want. Note to things: > - it executes the dot code directly and uses the :file > header argument for output, because you need the > colnames of the graph table but not of the node table. Got it. > - It requires you to specify the range on the node table Sorry, I did not understand this since I could not locate any range specification below except that one for foobar-node-table in the header. Is this the thing you mentioned? If so, I do not consider this as an issue at all because [2:-1] is right for any number of rows. > #+HEADER: :var nodes=foobar-node-table[2:-1] > #+HEADER: :var graph=foobar-graph-table > #+BEGIN_SRC emacs-lisp :results file :file "./t.png" > (org-babel-execute:dot > (concat > " digraph {" > (mapconcat > (lambda (x) > (format "%s [label=\"%s\" shape=%s fillcolor=%s]" > (car x) (nth 1 x) > (if (string= "" (nth 2 x)) "box" (nth 2 x)) > (if (string= "" (nth 3 x)) "none" (nth 3 > x)))) nodes "\n") > "\n" > (let* ((to-nodes (car graph)) (len (length to-nodes))) > (mapconcat > (lambda (x) > (let ((name (car x))) > (mapconcat > 'identity > (loop with result = '() > for i from 1 to len > do > (when (> (length (nth i x)) 0) > (add-to-list 'result > > (format "%s -> %s [label=\"%s\"]\n" > > name > > (nth i to-nodes) > > (substring (nth i x) 0 -1)))) > finally > return result) "\n"))) (cdr graph) > "")) > "}") params) > #+END_SRC I'll have to take a look at this. > And here's a simplier version which uses a graph table in the > following format: > > #+name: foobar-graph > | from | to | label | > |------------+------------+-------| > | S_start | S_fill | | > | S_fill | S_send | | > | S_send | S_complete | | > | S_complete | S_fill | N | > | S_complete | S_do | Y | > | S_do | S_end | | > > #+HEADER: :var nodes=foobar-node-table graph=foobar-graph > #+BEGIN_SRC emacs-lisp :file ./t2.png :colnames yes > (org-babel-execute:dot > (concat > "digraph {\n" > (mapconcat > (lambda (x) > (format "%s [label=\"%s\" shape=%s fillcolor=%s]" > (car x) (nth 1 x) > (if (string= "" (nth 2 x)) "box" (nth 2 x)) > (if (string= "" (nth 3 x)) "none" (nth 3 > x)))) nodes "\n") > "\n" > (mapconcat > (lambda (x) > (format "%s -> %s [taillabel=\"%s\"]" > (car x) (nth 1 x) (nth 2 x))) graph "\n") > "}\n") params) > #+END_SRC Wow, this looks great to me! Most likely, I will stick to this simpler version. Thank you very much for your effort! And thank you for the ELISP example I will try to fully understand. I love this community :-) Where should I place this method? Org-tutorials? [1] probably? New section in [2]? 1. http://orgmode.org/worg/org-tutorials/#sec-3-2 2. http://orgmode.org/worg/org-tutorials/#sec-4 -- mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML to Org-mode: > get Memacs from https://github.com/novoid/Memacs < https://github.com/novoid/extract_pdf_annotations_to_orgmode + more on github