Wiki
Download
Manual
Eggs
API
Tests
Bugs
show
edit
history
You can edit this page using
wiki syntax
for markup.
Article contents:
== Outdated egg! This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for [[/eggref/5/sxml-templates|the CHICKEN 5 version of this egg]], if it exists. If it does not exist, there may be equivalent functionality provided by another egg; have a look at the [[https://wiki.call-cc.org/chicken-projects/egg-index-5.html|egg index]]. Otherwise, please consider porting this egg to the current version of CHICKEN. [[tags:eggs web spiffy html http sxml]] [[toc:]] == sxml-templates The {{sxml-templates}} egg uses [[sxml-transforms]] to perform variable substitution on SXML expressions. It defines a record type which represents a SXML template, and includes some procedures for substituting values into that template. The general idea is to enable the use of on-disk files containing only SXML expressions which are loaded and substituted-into as necessary, as opposed to defining procedures which return quasiquoted SXML. == License {{sxml-templates}} is in the Public Domain and may be reproduced or copied without permission. == Authors [[/users/Moe Aboulkheir|Moe Aboulkheir]] == Requirements * [[sxml-transforms]] * [[http://srfi.schemers.org/srfi-9/srfi-9.html|SRFI 9]] (record types) == Examples === Uselessly simple example <enscript highlight=scheme>(use sxml-templates) (printf "~A\n" (sxml-template:fill-string (make-sxml-template '(%data key)) '((key . "value"))))</enscript> Will print the string {{value}}. === Using with Spiffy '''TODO''': This is for Spiffy for Chicken 3. Needs updating to a recent Spiffy. <enscript highlight=scheme> (use sxml-templates spiffy) (define (my-app:read-sxml-template basename) (make-sxml-template (read (open-input-file (string-append "templates/" basename ".scm"))))) (http:add-resource "/login-form" (lambda (req args) (let* ((login-form-template (my-app:read-sxml-template "login-form-body")) (login-form-namespace '((form-method . "POST") (form-action . "/login-form-post-target") (username-input-name . "username") (password-input-name . "password"))) (login-form-template (sxml-templates:fill login-form-template login-form-namespace))) ; write some response headers, etc (printf (sxml-templates:fill-string (my-app:read-sxml-template "shell") `((body . ,login-form-template)))))))</enscript> {{templates/shell.scm}} would look something like: <enscript highlight=scheme>(html (head (title "My Application")) (body (%data body)))</enscript> {{templates/login-form-body.scm}} would look something like: <enscript highlight=scheme>(form (@ (method (%data form-method)) (action (%data form-action))) (label "Username") (input (@ (type "text") (name (%data username-input-name)))) (label "Password") (input (@ (type "password") (name (%data password-input-name)))) (input (@ (type "submit"))))</enscript> The resource handler in the example first subtitutes some variables into the {{login-form-body}} template, and then substitutes the result into the {{shell}} template. == Constructors === make-sxml-template <procedure>(make-sxml-template sxml)</procedure> Where {{sxml}} is an SXML expression. Returns a {{sxml-template}} record. === sxml-template:fill <procedure>(sxml-template:fill sxml-template namespace)</procedure> Where {{sxml-template}} is a {{sxml-template}} record and {{namespace}} is an association list mapping variable names to values. This will replace all instances of {{(%data name)}} in {{sxml-template}}'s underlying SXML with the result of {{(alist-ref 'name alist)}}, and return a new {{sxml-template}} record. If a value in {{namespace}} is a filled {{sxml-template}}, then the right thing will happen. If a value is a list, then it is assumed to be vanilla SXML and will be converted using SXML's {{universal-conversion-rules}}. If a value is mentioned in the template's SXML which does not have a corresponding entry in the alist, then an error will be signalled. See {{sxml-template:fill-string}} for an equivalent which results in a string of XML, and {{sxml-template->string}} for a procedure which will convert a filled {{sxml-template}} record (as returned by this procedure) to a string of XML. == Predicates === sxml-template? <procedure>(sxml-template? x)</procedure> Returns a boolean indicating whether {{x}} is of the {{sxml-template}} record type. === sxml-template:filled? <procedure>(sxml-template:filled? sxml-template)</procedure> Returns a boolean indicating whether {{sxml-template}} has been filled (see {{sxml-template:fill}}). == Selectors === sxml-template:sxml [procedure] (sxml-template:sxml sxml-template) Returns the value of the {{sxml}} argument in the {{make-sxml-template}} call which was used to construct the given {{sxml-template}}. == Conversion === sxml-template:fill-string <procedure>(sxml-template:fill-string sxml-template namespace)</procedure> Similar to {{sxml-template:fill}}, but results in an XML string. Defined as {{(compose sxml-template->string sxml-template:fill)}}. === sxml-template->string <procedure>(sxml-template->string sxml-template)</procedure> Converts a filled {{sxml-template}} record (as returned by {{sxml-template:fill}}) into an XML string.
Description of your changes:
I would like to authenticate
Authentication
Username:
Password:
Spam control
What do you get when you subtract 3 from 8?