From: Rick Frankel <rick@rickster.com>
To: news1142@karl-voit.at
Cc: emacs-orgmode@gnu.org
Subject: Re: Process diagrams with dot and some glue using Org-mode
Date: Wed, 26 Jun 2013 14:25:04 -0400 [thread overview]
Message-ID: <4c174089656ce0b08177f464325c4bf9@mail.rickster.com> (raw)
In-Reply-To: <2013-06-26T18-59-53@devnull.Karl-Voit.at>
On 2013-06-26 13:03, Karl Voit wrote:
> * Rick Frankel <rick@rickster.com> wrote:
>
> Two things:
>
> 1. You don't need to write table parsing code, as passing in a
> table as an argument to a code block will convert it to an
> array.
> t=[["a", 1], ["b", 2]]
>
> You're right, I totally forgot about this neat feature.
>
> 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':
#+BEGIN_SRC python :var t=ptable :results value :colnames no
return t
#+END_SRC
t=[["head1", "head2"], ["a", 1], ["b", 2]]
return t
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.
- It requires you to specify the range on the node table
#+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
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
next prev parent reply other threads:[~2013-06-26 18:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-26 15:23 Process diagrams with dot and some glue using Org-mode Karl Voit
2013-06-26 15:41 ` Karl Voit
2013-06-26 15:44 ` Rick Frankel
2013-06-26 17:03 ` Karl Voit
2013-06-26 18:25 ` Rick Frankel [this message]
2013-06-27 6:47 ` Karl Voit
2013-06-27 13:06 ` Rick Frankel
2013-06-27 13:56 ` Bastien
2013-06-28 9:20 ` Karl Voit
2013-06-28 15:34 ` Rick Frankel
2013-07-01 17:44 ` Karl Voit
2013-06-26 16:40 ` Eric S Fraga
2013-06-27 6:56 ` Karl Voit
2013-06-26 16:54 ` Thorsten Jolitz
2013-06-27 6:36 ` Karl Voit
2013-07-03 19:18 ` Karl Voit
2013-07-03 20:57 ` Nick Dokos
2013-07-05 16:15 ` Eric S Fraga
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4c174089656ce0b08177f464325c4bf9@mail.rickster.com \
--to=rick@rickster.com \
--cc=emacs-orgmode@gnu.org \
--cc=news1142@karl-voit.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).