/libs/ob-brainfuck.el
Emacs Lisp | 77 lines | 34 code | 14 blank | 29 comment | 0 complexity | 4284adff5d2f138f055e639bb93f8861 MD5 | raw file
Possible License(s): GPL-2.0
- ;;; ob-brainfuck.el --- org-babel functions for brainfuck evaluation
- ;; Copyright (C) 2009-2012 Free Software Foundation, Inc.
- ;; Author: Eric Schulte and Arne Babenhauserheide
- ;; Keywords: literate brainfuck
- ;; Homepage: http://draketo.de
- ;; Version: 0.01
- ;;; License:
- ;; This program 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, or (at your option)
- ;; any later version.
- ;;
- ;; This program 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; see the file COPYING. If not, write to the
- ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- ;; Boston, MA 02110-1301, USA.
- ;;; Commentary:
- ;; This code is heavily based on ob-dot.el from org-mode. Heavily
- ;; based as in (query-replace dot brainfuck) + some deleted lines and
- ;; removed options.
- ;;; Requirements:
- ;; dev-lang/bff - a brainfuck interpreter named bff
- ;;; Code:
- (require 'ob)
- (require 'ob-eval)
- (defvar org-babel-default-header-args:brainfuck
- '((:results . "output") (:exports . "results"))
- "Default arguments to use when evaluating a brainfuck source block.")
- (defun org-babel-expand-body:brainfuck (body params)
- "Expand BODY according to PARAMS, return the expanded body."
- (let ((vars (mapcar #'cdr (org-babel-get-header params :var))))
- (mapc
- (lambda (pair)
- (let ((name (symbol-name (car pair)))
- (value (cdr pair)))
- (setq body
- (replace-regexp-in-string
- (concat "\$" (regexp-quote name))
- (if (stringp value) value (format "%S" value))
- body))))
- vars)
- body))
- (defun org-babel-execute:brainfuck (body params)
- "Execute a block of Brainfuck code with org-babel.
- This function is called by `org-babel-execute-src-block'."
- (let* ((result-params (cdr (assoc :result-params params)))
- (cmd (or (cdr (assoc :cmd params)) "bff"))
- (in-file (org-babel-temp-file "brainfuck-")))
- (with-temp-file in-file
- (insert (org-babel-expand-body:brainfuck body params)))
- (org-babel-eval
- (concat cmd
- " " (org-babel-process-file-name in-file)) "")))
- (defun org-babel-prep-session:brainfuck (session params)
- "Return an error because Brainfuck does not support sessions."
- (error "Brainfuck does not support sessions"))
- (provide 'ob-brainfuck)
- ;;; ob-brainfuck.el ends here