[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Orgmode] Re: Code snippet for Message Sequence Diagram export
From: |
Juan |
Subject: |
[Orgmode] Re: Code snippet for Message Sequence Diagram export |
Date: |
Sun, 23 May 2010 19:43:07 -0300 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
Dan,
Below is the final proposal for org-babel-mscgen.el.
Already sent form to address@hidden, got no answer (I assume it is
OK).
I remade all of the code, so almost no traces from org-babel-ditaa.
On Mon, May 17, 2010 at 10:24:10PM -0300, Juan wrote:
> On Mon, May 17, 2010 at 07:04:14PM -0400, Dan Davison wrote:
> > Juan <address@hidden> writes:
> > > Below goes code snippet using org-babel instead of org-export.
> > And a couple of little questions:
> >
> > - I think I'd prefer to get rid of the org-mscgen-path variable, and
> > simply require that mscgen is on the user's $PATH. Is that OK or am I
> > missing a reason for doing it differently?
>
> You're right. I'll get rid of it.
Done. Now mscgen must be accessible on exec-path.
> ...
> > - If you are feeling energetic, it would be really nice to check the
> > exit code from the shell-command and use org-babel-error-notify if
> > necessary
>
> I'll look into it.
Done. Now error messages from mscgen are passed to
org-babel-error-notify.
Just a question on style:
If you look at the '(unless' line below, I throw an elisp 'error' if
the user forgets to add an output file to the #+begin_src header.
Is this OK, or should I stick to org-babel-error-notify with a dummy
exit code?
Thanks & regards,
.j.
8<------------------------------------------------------------
;;; org-babel-mscgen.el --- org-babel functions for mscgen evaluation
;;; TODO insert license information
;;; Author: Juan Pechiar (address@hidden)
;;; Commentary:
;;
;; This software provides EMACS org-babel export support for message
;; sequence charts. The mscgen utility is used for processing the
;; sequence definition, and must therefore be installed in the system.
;;
;; Mscgen is available and documented at
http://www.mcternan.me.uk/mscgen/index.html
;;
;; Example:
;;
;; #+begin_src mscgen :file example.png
;; msc {
;; A,B;
;; A -> B [ label = "send message" ];
;; A <- B [ label = "get answer" ];
;; }
;; #+end_src
;;; Code:
(require 'org-babel)
(org-babel-add-interpreter "mscgen")
(add-to-list 'org-babel-tangle-langs '("mscgen" "mscgen"))
(defvar org-babel-default-header-args:mscgen
'((:results . "file") (:exports . "results"))
"Default arguments to use when evaluating a mscgen source block.")
(defun org-babel-expand-body:mscgen (body params &optional processed-params)
body)
(defun org-babel-execute:mscgen (body params)
"Execute a block of Mscgen code with org-babel. This function is
called by `org-babel-execute-src-block'."
(message "executing Mscgen source code block")
(let* ((out-file (or (cdr (assoc :file params)) "output.png" ))
exit-code
(stderr
(with-temp-buffer
(insert body)
(setq exit-code (org-babel-shell-command-on-region
(point-min) (point-max) (concat "mscgen -T png -o
" out-file)
nil 'replace (current-buffer)))
(buffer-string))))
(unless (cdr (assoc :file params)) (setq stderr (concat stderr "\nERROR: no
output file specified. Add \":file some_name.png\" to the src header" )) (error
stderr))
(if (> exit-code 0) (org-babel-error-notify exit-code stderr))
out-file))
(defun org-babel-prep-session:mscgen (session params)
(error "Mscgen does not support sessions"))
(provide 'org-babel-mscgen)
;;; org-babel-mscgen.el ends here