emacs-orgmode
[Top][All Lists]
Advanced

[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




reply via email to

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