commit 172558a3ff5d37b9172ed71cf5bf469cd65c9105 Author: thomas Date: Mon May 30 16:49:40 2016 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9da05f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..19e9d54 --- /dev/null +++ b/README.md @@ -0,0 +1,197 @@ +
+

Table of Contents

+ +
+ + +# Code + +org-babel funtions for C# evaluation based on Eric Schulte’s ob-java.el – don’t blame Eric for any harm this might cause, he has *nothing* to do with ob-csharp.el! + + ;;; ob-csharp.el --- org-babel functions for csharp evaluation + + ;; Copyright (C) 2011-2015 Free Software Foundation, Inc. + + ;; Original Author: Eric Schulte (ob-java.el) + ;; Author: thomas "at" friendlyvillagers.com + ;; Keywords: literate programming, reproducible research + ;; Homepage: http://orgmode.org + + ;; This file is NOT YET 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 . + + ;;; Commentary: + + ;; Currently this only supports the external compilation and execution + ;; of csharp code blocks (i.e., no session support). + + ;;; Code: + (require 'ob) + + (defvar org-babel-tangle-lang-exts) + (add-to-list 'org-babel-tangle-lang-exts '("csharp" . "cs")) + + (defcustom org-babel-csharp-command "mono" + "Name of the csharp command. + May be either a command in the path, like mono + or an absolute path name, like /usr/local/bin/mono + parameters may be used, like mono -verbose" + :group 'org-babel + :version "24.3" + :type 'string) + + (defcustom org-babel-csharp-compiler "gmcs" + "Name of the csharp compiler. + May be either a command in the path, like mcs + or an absolute path name, like /usr/local/bin/mcs + parameters may be used, like mcs -warnaserror+" + :group 'org-babel + :version "24.3" + :type 'string) + + + (defun org-babel-execute:csharp (body params) + (let* ((full-body (org-babel-expand-body:generic body params)) + (cmpflag (or (cdr (assoc :cmpflag params)) "")) + (cmdline (or (cdr (assoc :cmdline params)) "")) + (src-file (org-babel-temp-file "csharp-src-" ".cs")) + (exe-file (concat (file-name-sans-extension src-file) ".exe")) + (compile + (progn (with-temp-file src-file (insert full-body)) + (org-babel-eval + (concat org-babel-csharp-compiler " " cmpflag " " src-file) "")))) + (let ((results (org-babel-eval (concat org-babel-csharp-command " " cmdline " " exe-file) ""))) + (org-babel-reassemble-table + (org-babel-result-cond (cdr (assoc :result-params params)) + (org-babel-read results) + (let ((tmp-file (org-babel-temp-file "c-"))) + (with-temp-file tmp-file (insert results)) + (org-babel-import-elisp-from-file tmp-file))) + (org-babel-pick-name + (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) + (org-babel-pick-name + (cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))))))) + + (defun org-babel-prep-session:csharp (session params) + "Return an error because csharp does not support sessions." + (error "Sessions are not (yet) supported for CSharp")) + + + (provide 'ob-csharp) + ;;; ob-csharp.el ends here + +Put this file into your orgmode-folder (i. e. `.emacs.d/elpa/org-20XXXXXX`). + +In your `.emacs`-file add csharp to the list of babel languages, i. e.: + + (org-babel-do-load-languages 'org-babel-load-languages '((csharp . t))) + +# Tests + +## Hello World + + class HelloWorld { + public static void Main() + { + System.Console.WriteLine("Hello World!"); + } + } + + Hello World! + +## Tables + + class Table { + public static void Main() + { + for (char c = 'a'; c < 'd'; c++) + System.Console.Write("{0} ",c); + System.Console.WriteLine(); + for (int i = 0; i < 3; i++) + System.Console.Write("{0} ",i); + } + } + + + + +++ ++ ++ + + + + + + + + + + + + + + +
abc
012
+ +## Compiler flags and command line args + + public class TestFlags { + public static void Main() + { + int i; // unused; throw compile time error + System.Console.WriteLine("You won't see this!"); + } + } + + public class TestCmd { + public static void Main() + { + System.Console.WriteLine("You won't see this!"); + } + } + + Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-10) + Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com + TLS: __thread + SIGSEGV: altstack + Notifications: epoll + Architecture: amd64 + Disabled: none + Misc: softdebug + LLVM: supported, not enabled. + GC: sgen + + public class TestForms { + public static void Main() + { + System.Windows.Forms.MessageBox.Show("Hello Messagebox", "Hello"); + } + } \ No newline at end of file diff --git a/README.org b/README.org new file mode 100644 index 0000000..066f0e3 --- /dev/null +++ b/README.org @@ -0,0 +1,181 @@ +#+TITLE: ob-csharp + +* Code + +org-babel funtions for C# evaluation based on Eric Schulte's ob-java.el -- don't blame Eric for any harm this might cause, he has /nothing/ to do with ob-csharp.el! + +#+BEGIN_SRC emacs-lisp :tangle src/ob-csharp.el +;;; ob-csharp.el --- org-babel functions for csharp evaluation + +;; Copyright (C) 2011-2015 Free Software Foundation, Inc. + +;; Original Author: Eric Schulte (ob-java.el) +;; Author: thomas "at" friendlyvillagers.com +;; Keywords: literate programming, reproducible research +;; Homepage: http://orgmode.org + +;; This file is NOT YET 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 . + +;;; Commentary: + +;; Currently this only supports the external compilation and execution +;; of csharp code blocks (i.e., no session support). + +;;; Code: +(require 'ob) + +(defvar org-babel-tangle-lang-exts) +(add-to-list 'org-babel-tangle-lang-exts '("csharp" . "cs")) + +(defcustom org-babel-csharp-command "mono" + "Name of the csharp command. +May be either a command in the path, like mono +or an absolute path name, like /usr/local/bin/mono +parameters may be used, like mono -verbose" + :group 'org-babel + :version "24.3" + :type 'string) + +(defcustom org-babel-csharp-compiler "gmcs" + "Name of the csharp compiler. +May be either a command in the path, like mcs +or an absolute path name, like /usr/local/bin/mcs +parameters may be used, like mcs -warnaserror+" + :group 'org-babel + :version "24.3" + :type 'string) + + +(defun org-babel-execute:csharp (body params) + (let* ((full-body (org-babel-expand-body:generic body params)) + (cmpflag (or (cdr (assoc :cmpflag params)) "")) + (cmdline (or (cdr (assoc :cmdline params)) "")) + (src-file (org-babel-temp-file "csharp-src-" ".cs")) + (exe-file (concat (file-name-sans-extension src-file) ".exe")) + (compile + (progn (with-temp-file src-file (insert full-body)) + (org-babel-eval + (concat org-babel-csharp-compiler " " cmpflag " " src-file) "")))) + (let ((results (org-babel-eval (concat org-babel-csharp-command " " cmdline " " exe-file) ""))) + (org-babel-reassemble-table + (org-babel-result-cond (cdr (assoc :result-params params)) + (org-babel-read results) + (let ((tmp-file (org-babel-temp-file "c-"))) + (with-temp-file tmp-file (insert results)) + (org-babel-import-elisp-from-file tmp-file))) + (org-babel-pick-name + (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) + (org-babel-pick-name + (cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))))))) + +(defun org-babel-prep-session:csharp (session params) + "Return an error because csharp does not support sessions." + (error "Sessions are not (yet) supported for CSharp")) + + +(provide 'ob-csharp) +;;; ob-csharp.el ends here +#+END_SRC + +Put this file into your orgmode-folder (i. e. ~.emacs.d/elpa/org-20XXXXXX~). + +In your ~.emacs~-file add csharp to the list of babel languages, i. e.: + +: (org-babel-do-load-languages 'org-babel-load-languages '((csharp . t))) + + +* Tests + +** Hello World + +#+BEGIN_SRC csharp :results verbatim :exports both +class HelloWorld { + public static void Main() + { + System.Console.WriteLine("Hello World!"); + } +} +#+END_SRC + +#+RESULTS: +: Hello World! + +** Tables + +#+BEGIN_SRC csharp :exports both +class Table { + public static void Main() + { + for (char c = 'a'; c < 'd'; c++) + System.Console.Write("{0} ",c); + System.Console.WriteLine(); + for (int i = 0; i < 3; i++) + System.Console.Write("{0} ",i); + } +} +#+END_SRC + +#+RESULTS: +| a | b | c | +| 0 | 1 | 2 | + +** Compiler flags and command line args + +#+BEGIN_SRC csharp :cmpflag -warnaserror+ +public class TestFlags { + public static void Main() + { + int i; // unused; throw compile time error + System.Console.WriteLine("You won't see this!"); + } +} +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC csharp :results verbatim :cmdline --version :exports both +public class TestCmd { + public static void Main() + { + System.Console.WriteLine("You won't see this!"); + } +} +#+END_SRC + +#+RESULTS: +#+begin_example +Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-10) +Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com + TLS: __thread + SIGSEGV: altstack + Notifications: epoll + Architecture: amd64 + Disabled: none + Misc: softdebug + LLVM: supported, not enabled. + GC: sgen +#+end_example + +#+BEGIN_SRC csharp :cmpflag -pkg:dotnet +public class TestForms { + public static void Main() + { + System.Windows.Forms.MessageBox.Show("Hello Messagebox", "Hello"); + } +} +#+END_SRC + +#+RESULTS: diff --git a/src/ob-csharp.el b/src/ob-csharp.el new file mode 100644 index 0000000..25488ca --- /dev/null +++ b/src/ob-csharp.el @@ -0,0 +1,83 @@ +;;; ob-csharp.el --- org-babel functions for csharp evaluation + +;; Copyright (C) 2011-2015 Free Software Foundation, Inc. + +;; Original Author: Eric Schulte (ob-java.el) +;; Author: thomas "at" friendlyvillagers.com +;; Keywords: literate programming, reproducible research +;; Homepage: http://orgmode.org + +;; This file is NOT YET 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 . + +;;; Commentary: + +;; Currently this only supports the external compilation and execution +;; of csharp code blocks (i.e., no session support). + +;;; Code: +(require 'ob) + +(defvar org-babel-tangle-lang-exts) +(add-to-list 'org-babel-tangle-lang-exts '("csharp" . "cs")) + +(defcustom org-babel-csharp-command "mono" + "Name of the csharp command. +May be either a command in the path, like mono +or an absolute path name, like /usr/local/bin/mono +parameters may be used, like mono -verbose" + :group 'org-babel + :version "24.3" + :type 'string) + +(defcustom org-babel-csharp-compiler "gmcs" + "Name of the csharp compiler. +May be either a command in the path, like mcs +or an absolute path name, like /usr/local/bin/mcs +parameters may be used, like mcs -warnaserror+" + :group 'org-babel + :version "24.3" + :type 'string) + + +(defun org-babel-execute:csharp (body params) + (let* ((full-body (org-babel-expand-body:generic body params)) + (cmpflag (or (cdr (assoc :cmpflag params)) "")) + (cmdline (or (cdr (assoc :cmdline params)) "")) + (src-file (org-babel-temp-file "csharp-src-" ".cs")) + (exe-file (concat (file-name-sans-extension src-file) ".exe")) + (compile + (progn (with-temp-file src-file (insert full-body)) + (org-babel-eval + (concat org-babel-csharp-compiler " " cmpflag " " src-file) "")))) + (let ((results (org-babel-eval (concat org-babel-csharp-command " " cmdline " " exe-file) ""))) + (org-babel-reassemble-table + (org-babel-result-cond (cdr (assoc :result-params params)) + (org-babel-read results) + (let ((tmp-file (org-babel-temp-file "c-"))) + (with-temp-file tmp-file (insert results)) + (org-babel-import-elisp-from-file tmp-file))) + (org-babel-pick-name + (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) + (org-babel-pick-name + (cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))))))) + +(defun org-babel-prep-session:csharp (session params) + "Return an error because csharp does not support sessions." + (error "Sessions are not (yet) supported for CSharp")) + + +(provide 'ob-csharp) +;;; ob-csharp.el ends here