Index: main/inst.lisp
===================================================================
--- main/inst.lisp	(revision main,1)
+++ main/inst.lisp	(revision main,1)
@@ -0,0 +1,36 @@
+#|
+Copyright (C) 2008  David Owen <dsowen@fugue88.ws>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser Public License as published by
+the Free Software Foundation, either version 3 of the License, 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 Lesser Public License for more details.
+
+You should have received a copy of the GNU Lesser Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+|#
+
+(defpackage #:dso-simple-template-inst
+  (:use #:cl)
+  (:import-from #:dso-simple-template-env #:env-value)
+  (:import-from #:dso-simple-template-templ #:body-text #:expression #:parts)
+  (:export #:instantiate-template))
+
+(in-package #:dso-simple-template-inst)
+
+
+
+(defgeneric instantiate-template (template env &optional stream)
+  (:method (template env &optional (stream *standard-output*))
+    (dolist (part (parts template))
+      (destructuring-bind (type . dat) part
+        (ecase type
+          (body-text
+           (write-string dat stream))
+          (expression
+           (format stream "~A" (env-value env dat ""))))))))
