From: Juan <Pechiar@computer.org>
To: Dan Davison <davison@stats.ox.ac.uk>
Cc: Emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Re: Code snippet for Message Sequence Diagram export
Date: Sun, 23 May 2010 19:43:07 -0300 [thread overview]
Message-ID: <20100523224307.GC27574@soloJazz.com> (raw)
In-Reply-To: <20100518012410.GB27574@soloJazz.com>
Dan,
Below is the final proposal for org-babel-mscgen.el.
Already sent form to assign@gnu.org, 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 <Pechiar@computer.org> 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 (juan@pechiar.com)
;;; 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
prev parent reply other threads:[~2010-05-23 22:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-16 20:18 Code snippet for Message Sequence Diagram export Juan
2010-05-17 8:13 ` Eric S Fraga
2010-05-17 20:04 ` Juan
2010-05-17 23:04 ` Dan Davison
2010-05-18 1:24 ` Juan
2010-05-23 22:43 ` Juan [this message]
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=20100523224307.GC27574@soloJazz.com \
--to=pechiar@computer.org \
--cc=davison@stats.ox.ac.uk \
--cc=emacs-orgmode@gnu.org \
/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).