ob-sass.el (2548B)
1 ;;; ob-sass.el --- Babel Functions for the Sass CSS generation language -*- lexical-binding: t; -*- 2 3 ;; Copyright (C) 2009-2024 Free Software Foundation, Inc. 4 5 ;; Author: Eric Schulte 6 ;; Keywords: literate programming, reproducible research 7 ;; URL: https://orgmode.org 8 9 ;; This file is part of GNU Emacs. 10 11 ;; GNU Emacs is free software: you can redistribute it and/or modify 12 ;; it under the terms of the GNU General Public License as published by 13 ;; the Free Software Foundation, either version 3 of the License, or 14 ;; (at your option) any later version. 15 16 ;; GNU Emacs is distributed in the hope that it will be useful, 17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 ;; GNU General Public License for more details. 20 21 ;; You should have received a copy of the GNU General Public License 22 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. 23 24 ;;; Commentary: 25 26 ;; For more information on sass see https://sass-lang.com/ 27 ;; 28 ;; This accepts a 'file' header argument which is the target of the 29 ;; compiled sass. The default output type for sass evaluation is 30 ;; either file (if a 'file' header argument was given) or scalar if no 31 ;; such header argument was supplied. 32 ;; 33 ;; A 'cmdline' header argument can be supplied to pass arguments to 34 ;; the sass command line. 35 36 ;;; Requirements: 37 38 ;; - sass-mode :: https://github.com/nex3/haml/blob/master/extra/sass-mode.el 39 40 ;;; Code: 41 42 (require 'org-macs) 43 (org-assert-version) 44 45 (require 'ob) 46 47 (defvar org-babel-default-header-args:sass '()) 48 49 (defun org-babel-execute:sass (body params) 50 "Execute a block of Sass code with Babel. 51 This function is called by `org-babel-execute-src-block'." 52 (let* ((file (cdr (assq :file params))) 53 (out-file (or file (org-babel-temp-file "sass-out-"))) 54 (cmdline (cdr (assq :cmdline params))) 55 (in-file (org-babel-temp-file "sass-in-")) 56 (cmd (concat "sass " (or cmdline "") 57 " " (org-babel-process-file-name in-file) 58 " " (org-babel-process-file-name out-file)))) 59 (with-temp-file in-file 60 (insert (org-babel-expand-body:generic body params))) 61 (org-babel-eval cmd "") 62 (if file 63 nil ;; signal that output has already been written to file 64 (with-temp-buffer (insert-file-contents out-file) (buffer-string))))) 65 66 (defun org-babel-prep-session:sass (_session _params) 67 "Raise an error because sass does not support sessions." 68 (error "Sass does not support sessions")) 69 70 (provide 'ob-sass) 71 72 ;;; ob-sass.el ends here