summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Schulte <schulte.eric@gmail.com>2010-07-05 18:43:55 -0700
committerEric Schulte <schulte.eric@gmail.com>2010-07-05 18:48:47 -0700
commit07b8908903287b515ba799b16f2444eb6d7dd0f7 (patch)
tree9cad1a49f01e923ecaa1d85eaeb716e6b5b62107
parente4cfd468a0c64bb1d74fec919df7260053f91b9d (diff)
downloadorg-mode-07b8908903287b515ba799b16f2444eb6d7dd0f7.tar.gz
ob-mscgen: support for mscgen code blocks by Juan Pechiar
from the comments of the new file 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 This code is directly inspired by Eric Schulte's ob-dot.el Example: msc { A,B; A -> B [ label = "send message" ]; A <- B [ label = "get answer" ]; } Header for alternative file type: This differs from most standard languages in that 1) there is no such thing as a "session" in mscgen 2) we are generally only going to return results of type "file" 3) we are adding the "file" and "filetype" header arguments 4) there are no variables
-rw-r--r--Makefile1
-rw-r--r--doc/org.texi15
-rw-r--r--lisp/ob-mscgen.el93
3 files changed, 102 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 641dbc3..f4cd9b5 100644
--- a/Makefile
+++ b/Makefile
@@ -131,6 +131,7 @@ LISPF = org.el \
ob-sh.el \
ob-R.el \
ob-dot.el \
+ ob-mscgen.el \
ob-latex.el \
ob-python.el \
ob-sql.el \
diff --git a/doc/org.texi b/doc/org.texi
index 0c002ab..792c93a 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -11211,13 +11211,14 @@ Code blocks in the following languages are supported.
@item css @tab css @tab ditaa @tab ditaa
@item Graphviz @tab dot @tab Emacs Lisp @tab emacs-lisp
@item gnuplot @tab gnuplot @tab Haskell @tab haskell
-@item Matlab @tab matlab @tab LaTeX @tab latex
-@item Objective Caml @tab ocaml @tab Octave @tab octave
-@item OZ @tab oz @tab Perl @tab perl
-@item Python @tab python @tab R @tab R
-@item Ruby @tab ruby @tab Sass @tab sass
-@item GNU Screen @tab screen @tab shell @tab sh
-@item SQL @tab sql @tab Sqlite @tab sqlite
+@item LaTeX @tab latex @tab Matlab @tab matlab
+@item Mscgen @tab mscgen @tab Objective Caml @tab ocaml
+@item Octave @tab octave @tab OZ @tab oz
+@item Perl @tab perl @tab Python @tab python
+@item R @tab R @tab Ruby @tab ruby
+@item Sass @tab sass @tab GNU Screen @tab screen
+@item shell @tab sh @tab SQL @tab sql
+@item Sqlite @tab sqlite
@end multitable
Language specific documentation is available for some languages. If
diff --git a/lisp/ob-mscgen.el b/lisp/ob-mscgen.el
new file mode 100644
index 0000000..256448b
--- /dev/null
+++ b/lisp/ob-mscgen.el
@@ -0,0 +1,93 @@
+;;; ob-msc.el --- org-babel functions for mscgen evaluation
+
+;; Copyright (C) 2010 Free Software Foundation, Inc.
+
+;; Author: Juan Pechiar
+;; Keywords: literate programming, reproducible research
+;; Homepage: http://orgmode.org
+;; Version: 0.01
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; 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
+;;
+;; This code is directly inspired by Eric Schulte's ob-dot.el
+;;
+;; Example:
+;;
+;; #+begin_src mscgen :file example.png
+;; msc {
+;; A,B;
+;; A -> B [ label = "send message" ];
+;; A <- B [ label = "get answer" ];
+;; }
+;; #+end_src
+;;
+;; Header for alternative file type:
+;;
+;; #+begin_src mscgen :file ex2.svg :filetype svg
+
+;; This differs from most standard languages in that
+;;
+;; 1) there is no such thing as a "session" in mscgen
+;; 2) we are generally only going to return results of type "file"
+;; 3) we are adding the "file" and "filetype" header arguments
+;; 4) there are no variables
+
+;;; Code:
+(require 'ob)
+
+(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)
+ "Expand BODY according to PARAMS, return the expanded body." 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'.
+Default filetype is png. Modify by setting :filetype parameter to mscgen supported formats."
+ (message "executing Mscgen source code block")
+ (let* ((out-file (or (cdr (assoc :file params)) "output.png" ))
+ exit-code
+ (filetype (or (cdr (assoc :filetype params)) "png" ))
+ (stderr
+ (with-temp-buffer
+ (insert body)
+ (setq exit-code (org-babel-shell-command-on-region
+ (point-min) (point-max) (concat "mscgen -T " filetype " -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)
+ "Prepare SESSION according to PARAMS."
+ (error "Mscgen does not support sessions"))
+
+(provide 'ob-mscgen)
+
+;; arch-tag: 74695b1e-715f-4b5a-a3a9-d78ee39ba5c8
+
+;;; ob-msc.el ends here