[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] Process diagrams with dot and some glue using Org-mode
From: |
Karl Voit |
Subject: |
Re: [O] Process diagrams with dot and some glue using Org-mode |
Date: |
Thu, 27 Jun 2013 08:47:14 +0200 |
User-agent: |
slrn/0.9.9 (Linux) |
* Rick Frankel <address@hidden> wrote:
> On 2013-06-26 13:03, Karl Voit wrote:
>> * Rick Frankel <address@hidden> 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
Re: [O] Process diagrams with dot and some glue using Org-mode, Thorsten Jolitz, 2013/06/26
Re: [O] Process diagrams with dot and some glue using Org-mode, Eric S Fraga, 2013/06/26