;;; poly-noweb.el ;; ;; Filename: poly-noweb.el ;; Author: Spinu Vitalie ;; Maintainer: Spinu Vitalie ;; Copyright (C) 2013-2014, Spinu Vitalie, all rights reserved. ;; Version: 1.0 ;; URL: https://github.com/vitoshka/polymode ;; Keywords: emacs ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; This file is *NOT* part of GNU Emacs. ;; ;; 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 this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth ;; Floor, Boston, MA 02110-1301, USA. ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'polymode) (defcustom pm-poly/noweb (pm-polymode-one "noweb" :hostmode 'pm-host/latex :innermode 'pm-inner/noweb :exporters '(pm-exporter/latexmk pm-exporter/pdflatex pm-exporter/lualatex pm-exporter/xelatex) :map '(("<" . poly-noweb-electric-<))) "Noweb typical configuration" :group 'polymodes :type 'object) (defcustom pm-inner/noweb (pm-hbtchunkmode "noweb" :head-reg "^[ \t]*<<\\(.*\\)>>=" :tail-reg "^[ \t]*@ *\\(%def.*\\)?$") "Noweb typical chunk." :group 'innermodes :type 'object) ;;;###autoload (autoload 'poly-noweb-mode "poly-noweb") (define-polymode poly-noweb-mode pm-poly/noweb) (defun poly-noweb-electric-< (arg) "Auto insert noweb chunk if at bol followed by white space. If given an numerical argument, it simply insert `<'. Otherwise, if at the beginning of a line in a host chunk insert \"<<>>=\", a closing \"@\" and a newline if necessary." (interactive "P") (if (or arg (not (eq pm/type 'host))) (self-insert-command (if (numberp arg) arg 1)) (if (not (looking-back "^[ \t]*")) (self-insert-command 1) (insert "<<") (save-excursion (insert ">>=\n\n@ ") (unless(looking-at "\\s *$") (newline))) (ess-noweb-update-chunk-vector)))) (defcustom pm-exporter/pdflatex (pm-shell-exporter "pdflatex" :from '(("latex" "\\.tex\\'" "LaTeX" "pdflatex -jobname %b %t %i")) :to '(("pdf" "pdf" "PDF" "")) :quote t) "Shell pdflatex exporter." :group 'polymode-export :type 'object) (defcustom pm-exporter/lualatex (pm-shell-exporter "LuaLaTeX" :from '(("latex" "\\.tex\\'" "LuaLaTeX" "lualatex -jobname %b %t %i")) :to '(("pdf" "pdf" "PDF" "")) :quote t) "Shell pdflatex exporter." :group 'polymode-export :type 'object) (defcustom pm-exporter/xelatex (pm-shell-exporter "XeLaTeX" :from '(("latex" "\\.tex\\'" "XeLaTeX" "xelatex -jobname %b %t %i")) :to '(("pdf" "pdf" "PDF" "")) :quote t) "Shell pdflatex exporter." :group 'polymode-export :type 'object) (defcustom pm-exporter/latexmk (pm-shell-exporter "latexmk" :from '(("latex" "\\.tex\\'" "LaTeX(MK)" "latexmk -jobname=%b %t %i")) :to '(("pdf" "pdf" "latex" "-pdf") ("xelatex" "pdf" "xe" "-xelatex") ("lualatex" "pdf" "lua" "-lualatex") ("ps" "ps" "latex" "-ps") ("dvi" "dvi" "latex" "-dvi")) :quote t) "Shell latexmk dvi, ps and pdf exporter." :group 'polymode-export :type 'object) (provide 'poly-noweb)