From mboxrd@z Thu Jan 1 00:00:00 1970 From: thomas Subject: ob-csharp Date: Mon, 07 Sep 2015 19:23:58 +0200 Message-ID: <55EDC82E.2080501@friendlyvillagers.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050701050400060507070607" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46171) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZ0FE-00023T-Hx for emacs-orgmode@gnu.org; Mon, 07 Sep 2015 13:30:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZZ0F9-0007sW-Vk for emacs-orgmode@gnu.org; Mon, 07 Sep 2015 13:30:16 -0400 Received: from mo6-p00-ob.smtp.rzone.de ([2a01:238:20a:202:5300::9]:32464) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZ0F9-0007pu-IQ for emacs-orgmode@gnu.org; Mon, 07 Sep 2015 13:30:11 -0400 Received: from [192.168.178.21] (p5796A27B.dip0.t-ipconnect.de [87.150.162.123]) by smtp.strato.de (RZmta 37.11 DYNA|AUTH) with ESMTPSA id 601d7dr87HNxCZo (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate) for ; Mon, 7 Sep 2015 19:23:59 +0200 (CEST) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Org Mode This is a multi-part message in MIME format. --------------050701050400060507070607 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, could not find ob-csharp in org mode. I created one to make the pointy haired boss happy. It's based on Eric's ob-java.el with some bits taken from other ob files. It works for the simple examples following below. Hope this is useful and I'm open for hints to improve the code. - thomas * ob-csharp Tests ** Hello World #+BEGIN_SRC csharp class HelloWorld { public static void Main() { System.Console.WriteLine("Hello World!"); } } #+END_SRC #+RESULTS: : Hello World! ** Tables #+BEGIN_SRC csharp 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 error System.Console.WriteLine("You won't see this!"); } } #+END_SRC #+RESULTS: #+BEGIN_SRC csharp :results verbatim :cmdline --version 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 --------------050701050400060507070607 Content-Type: text/x-emacs-lisp; name="ob-csharp.el" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ob-csharp.el" ;;; ob-csharp.el --- org-babel functions for csharp evaluation ;; Copyright (C) 2011-2015 Free Software Foundation, Inc. ;; Author: Eric Schulte ;; Keywords: literate programming, reproducible research ;; Homepage: http://orgmode.org ;; 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 . ;;; Commentary: ;; Currently this only supports the external compilation and execution ;; of csharp code blocks (i.e., no session support). ;;; Code: (require 'ob) (require 'csharp-mode) ;; http://www.emacswiki.org/emacs/CSharpMode (defvar org-babel-tangle-lang-exts) (add-to-list 'org-babel-tangle-lang-exts '("cs" . "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 "mcs" "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 "csharp does not support sessions")) (provide 'ob-csharp) ;;; ob-csharp.el ends here --------------050701050400060507070607--