2 * Dynamic web page generation
with Standard ML
3 * Copyright (C
) 2003 Adam Chlipala
5 * This library is free software
; you can redistribute it
and/or
6 * modify it under the terms
of the GNU Lesser General Public
7 * License
as published by the Free Software Foundation
; either
8 * version
2.1 of the License
, or (at your option
) any later version
.
10 * This library is distributed
in the hope that it will be useful
,
11 * but WITHOUT ANY WARRANTY
; without even the implied warranty
of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
. See the GNU
13 * Lesser General Public License for more details
.
15 * You should have received a copy
of the GNU Lesser General Public
16 * License along
with this library
; if not
, write to the Free Software
17 * Foundation
, Inc
., 59 Temple Place
, Suite
330, Boston
, MA
02111-1307 USA
22 structure Web
:> WEB
=
24 val params
: string StringMap
.map ref
= ref StringMap
.empty
26 val paramStack
: string StringMap
.map list ref
= ref
[]
28 fun setParam (n
, v
) = params
:= StringMap
.insert (!params
, n
, v
)
31 (case StringMap
.find (!params
, v
) of
36 (paramStack
:= (!params
) :: (!paramStack
);
41 [] => raise Fail
"Empty params stack in popParams"
42 | h
::t
=> (params
:= h
;
45 fun withParams f nvs
=
47 ((f ()) handle ex
=> (popParams (); raise ex
))
50 val text
= ref ([] : string list
)
52 fun print x
= text
:= x
:: (!text
)
55 (TextIO.print
"Status: 200\nContent-type: text/html\n\n";
56 TextIO.print (String.concat (List.rev (!text
))))