preprocess.ss
;;;
;;; Time-stamp: <06/02/20 10:09:30 nhw>
;;;
;;; Copyright (C) 2005 by Noel Welsh.
;;;

;;; This library is free software; you can redistribute it
;;; and/or modify it under the terms of the GNU Lesser
;;; General Public License as published by the Free Software
;;; Foundation; either version 2.1 of the License, or (at
;;; your option) any later version.

;;; This library 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 Lesser General Public
;;; License for more details.

;;; You should have received a copy of the GNU Lesser
;;; General Public License along with this library; if not,
;;; write to the Free Software Foundation, Inc., 59 Temple
;;; Place, Suite 330, Boston, MA 02111-1307 USA

;;; Author: Noel Welsh <noelwelsh@yahoo.com>
;;
;;
;; Commentary:

(module preprocess mzscheme

  (require (lib "mzpp.ss" "preprocessor")
           (planet "namespace.ss" ("schematics" "namespace.plt")))

  (provide apply-template)
  
  ;; apply-template : (U string port) (alist-of symbol any) -> string
  (define (apply-template template bindings)
    (let ((op (open-output-string)))
      (parameterize
        ((current-output-port op))
        (let ((ns (make-namespace 'initial)))
          (namespace-attach/require
           ns
           '(lib "mzpp.ss" "preprocessor"))
          (with-namespace
           ns
           (for-each
            (lambda (cell)
              (let ((key (car cell))
                    (val (cdr cell)))
                (eval `(define ,key ,val))))
            bindings)
           (eval `(preprocess ,template)))))
      (get-output-string op)))

  )