Re: [O] problem with babel and dot

2016-02-13 Thread Eric S Fraga
Okay, I have figured this out and here is the solution in case anybody
else wants to do something like this:

1. create a very simple dot src block:

   #+begin_src org
 ,#+name: generate-graph
 ,#+begin_src dot :var graph="digraph {}" :file graph.pdf
   $graph
 ,#+end_src
   #+end_src

2. call the original tables -> graph block with a :post command to
   invoke this new block:

   #+begin_src org
 ,#+call: 
graph-from-tables(options="rankdir=LR;",nodes=subtasks-table[2:-1],graph=dependency-table[2:-1])
 :exports results :results file :post generate-graph[:results file :exports 
results :file dependency-graph.pdf](graph=*this*)
   #+end_src

This works like a charm.  There are probably superfluous settings but
this over-specified combination does what I want!

Sorry for all the noise.  As always, power comes with complexity and
babel is definitely powerful.  If org is the killer app for emacs, then
babel is the killer app for org!


thanks,
eric

-- 
: Eric S Fraga (0xFFFCF67D), Emacs 25.0.90.1, Org release_8.3.3-565-g4f499f



Re: [O] problem with babel and dot

2016-02-12 Thread Eric S Fraga
I've had a suggestion to use ":wrap src dot" for my elisp code, to avoid
using internal API calls.  This is a good suggestion but I cannot figure
out how to actually accomplish what I want.

Basically, I want to #+call: a src block which takes my tables as
arguments, uses my elisp code to generate a suitable DOT input and then
invokes DOT on that input to generate an image file specified on the
call invocation:

  tables -> emacs lisp -> dot -> pdf file

I think that a creative use of :post may do it but I cannot get my head
around how to invoke the various bits and/or pass the data I need.

Thanks,
eric

-- 
: Eric S Fraga (0xFFFCF67D), Emacs 25.0.90.1, Org release_8.3.3-565-g4f499f



[O] problem with babel and dot

2016-02-12 Thread Eric S Fraga
Hello,

I have the following emacs lisp code to build up a dot input for a
dependency graph:

#+begin_src org
  ,#+name: graph-from-tables
  ,#+header: :var options="" :var nodes='() graph='()
  ,#+BEGIN_SRC emacs-lisp 
(org-babel-execute:dot
 (concat
  "digraph {\n"
  options "\n"   ;; "//rankdir=LR;\n" ;; remove comment characters '//' 
for horizontal layout; add for vertical layout
  (mapconcat
   (lambda (x)
 (format "%s [label=\"%s\" shape=%s style=\"filled\" 
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
#+end_src

This used to work but was last used probably a year ago or more.

I invoke this function elsewhere in the document with a call like this:

#+begin_src org
  ,#+call: graph-from-tables[:file 
dependency-graph.pdf](options="rankdir=LR;",nodes=subtasks-table[2:-1],graph=dependency-table[2:-1])
 :results file :exports results
#+end_src

Two tables are used to describe the dependency graph and the information
passed to the function above works just fine.  The input file for dot
also looks perfect (and if I run dot on it, I get the graph I
want).  However, the result of the call here is a file,
dependency-graph.pdf, which has 3 bytes: "nil".

I have no idea how to get this working again.  ob-dot.el provides no
clues to me unfortunately.

Any pointers please?

Many thanks,
eric

-- 
: Eric S Fraga (0xFFFCF67D), Emacs 25.0.90.1, Org release_8.3.3-565-g4f499f