srecode.el 3.15 KB
Newer Older
1
;;; ede/srecode.el --- EDE utilities on top of SRecoder
2

Glenn Morris's avatar
Glenn Morris committed
3
;; Copyright (C) 2008, 2009  Free Software Foundation, Inc.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

;; Author: Eric M. Ludlam <eric@siege-engine.com>

;; 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 <http://www.gnu.org/licenses/>.

;;; Commentary:
;;
;; EDE utilities for using SRecode to generate project files, such as
;; Makefiles.

(require 'srecode)

(declare-function srecode-create-dictionary "srecode/dictionary")
(declare-function srecode-dictionary-set-value "srecode/dictionary")
(declare-function srecode-load-tables-for-mode "srecode/find")
(declare-function srecode-table "srecode/find")
(declare-function srecode-template-get-table "srecode/find")
(declare-function srecode-insert-fcn "srecode/insert")
Glenn Morris's avatar
Glenn Morris committed
35
(declare-function srecode-resolve-arguments "srecode/insert")
36 37 38 39
(declare-function srecode-map-update-map "srecode/map")

;;; Code:
(defun ede-srecode-setup ()
40 41 42 43 44 45 46
  "Initialize Srecode for EDE."
  (require 'srecode/map)
  (require 'srecode/find)
  (srecode-map-update-map t)
  ;; We don't call this unless we need it.  Load in the templates.
  (srecode-load-tables-for-mode 'makefile-mode)
  (srecode-load-tables-for-mode 'makefile-mode 'ede))
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

(defmacro ede-srecode-insert-with-dictionary (template &rest forms)
  "Insert TEMPLATE after executing FORMS with a dictionary.
TEMPLATE should specify a context by using a string format of:
  context:templatename
Locally binds the variable DICT to a dictionary which can be
updated in FORMS."
  `(let* ((dict (srecode-create-dictionary))
	  (temp (srecode-template-get-table (srecode-table)
					    ,template
					    nil
					    'ede))
	  )
     (when (not temp)
       (error "EDE template %s for %s not found!"
	      ,template major-mode))
     (srecode-resolve-arguments temp dict)

     ;; Now execute forms for updating DICT.
     (progn ,@forms)

     (srecode-insert-fcn temp dict)
     ))

(defun ede-srecode-insert (template &rest dictionary-entries)
  "Insert at the current point TEMPLATE.
TEMPLATE should specify a context by using a string format of:
  context:templatename
Add DICTIONARY-ENTRIES into the dictionary before insertion.
Note: Just like `srecode-insert', but templates found in 'ede app."
  (require 'srecode/insert)
  (ede-srecode-insert-with-dictionary template

    ;; Add in optional dictionary entries.
    (while dictionary-entries
      (srecode-dictionary-set-value dict
				    (car dictionary-entries)
				    (car (cdr dictionary-entries)))
      (setq dictionary-entries
	    (cdr (cdr dictionary-entries))))

    ))

90
(provide 'ede/srecode)
91

Miles Bader's avatar
Miles Bader committed
92
;; arch-tag: 75bec542-7cc8-41a4-b5a0-8fb247609f03
93
;;; ede/srecode.el ends here