Library for HTML and CGI programming.
This paper contains a description of the basic ideas
behind this library.
The installation of a cgi script written with this library
can be done by the command
makecurrycgi -m initialForm -o /home/joe/public_html/prog.cgi prog
where prog is the name of the Curry program with
the cgi script, /home/joe/public_html/prog.cgi is
the desired location of the
compiled cgi script, and initialForm is the Curry expression
(of type IO HtmlForm) computing the HTML form (where makecurrycgi
is a shell script stored in pakcshome/bin).
Author: Michael Hanus (with extensions by Bernd Brassel and Marco Comini)
Version: November 2007
| Exported names: |
Datatypes:
CgiEnv
| CgiRef
| CookieParam
| FormParam
| HtmlExp
| HtmlForm
| HtmlHandler
| HtmlPage
| PageParam
Constructors:
BodyAttr
| CookieDomain
| CookieExpire
| CookiePath
| CookieSecure
| FormCookie
| FormCSS
| FormEnc
| FormJScript
| FormOnSubmit
| FormTarget
| HeadInclude
| HtmlAnswer
| HtmlCRef
| HtmlEvent
| HtmlForm
| HtmlPage
| HtmlStruct
| HtmlText
| MultipleHandlers
| PageCSS
| PageEnc
| PageJScript
Functions:
addAttr
| addAttrs
| addCookies
| addFormParam
| addHeadings
| addPageParam
| address
| addSound
| anchor
| answerText
| blink
| block
| blockstyle
| bold
| breakline
| button
| center
| checkbox
| checkedbox
| code
| cookieForm
| coordinates
| defaultBackground
| defaultEncoding
| dlist
| emphasize
| expires
| form
| formCSS
| formEnc
| Form
| germanLatexDoc
| getCookies
| getUrlParameter
| HtmlElem
| h1
| h2
| h3
| h4
| h5
| headedTable
| hempty
| hiddenfield
| href
| hrule
| htmlQuote
| htxt
| htxts
| idOfCgiRef
| image
| imageButton
| inline
| intForm
| intFormMain
| italic
| litem
| multipleSelection
| nbsp
| olist
| page
| pageCSS
| pageEnc
| par
| password
| pre
| radio_main
| radio_main_off
| radio_other
| redirect
| resetbutton
| runFormServerWithKey
| runFormServerWithKeyAndFormParams
| selection
| selectionInitial
| showHtmlDoc
| showHtmlDocCSS
| showHtmlExp
| showHtmlExps
| showHtmlPage
| showLatexDoc
| showLatexDocs
| showLatexDocsWithPackages
| showLatexDocWithPackages
| showLatexExp
| showLatexExps
| standardForm
| standardPage
| string2urlencoded
| style
| styleSheet
| table
| teletype
| textarea
| textfield
| textstyle
| ulist
| urlencoded2string
| verbatim
| Summary of exported functions: |
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
| Imported modules: |
| Exported datatypes: |
The type for representing cgi environments (i.e., mappings from cgi references to the corresponding values of the input elements).
Type synonym: CgiEnv = CgiRef -> String
The type of event handlers in HTML forms.
Type synonym: HtmlHandler = (CgiRef -> String) -> IO HtmlForm
The (abstract) data type for representing references to input elements in HTML forms.
Constructors:
The data type for representing HTML expressions.
Constructors:
:: String -> HtmlExp
HtmlText s - a text string without any further structure
:: String -> [(String,String)] -> [HtmlExp] -> HtmlExp
HtmlStruct t as hs - a structure with a tag, attributes, and
HTML expressions inside the structure
:: HtmlExp -> CgiRef -> HtmlExp
HtmlCRef h ref - an input element (described by the first argument)
with a cgi reference
:: HtmlExp -> ((CgiRef -> String) -> IO HtmlForm) -> HtmlExp
HtmlEvent h hdlr - an input element (first arg) with an associated
event handler (tpyically, a submit button)
The data type for representing HTML forms (active web pages) and return values of HTML forms.
Constructors:
:: String -> [FormParam] -> [HtmlExp] -> HtmlForm
HtmlForm t ps hs - an HTML form with title t, optional parameters
(e.g., cookies) ps, and contents hs
:: String -> String -> HtmlForm
HtmlAnswer t c - an answer in an arbitrary format where t
is the content type (e.g., "text/plain") and c is the contents
The possible parameters of an HTML form. The parameters of a cookie (FormCookie) are its name and value and optional parameters (expiration date, domain, path (e.g., the path "/" makes the cookie valid for all documents on the server), security) which are collected in a list.
Constructors:
:: String -> String -> [CookieParam] -> FormParam
FormCookie name value params - a cookie to be sent to the
client's browser
:: String -> FormParam
FormCSS s - a URL for a CSS file for this form
:: String -> FormParam
FormJScript s - a URL for a Javascript file for this form
:: String -> FormParam
FormOnSubmit s - a JavaScript statement to be executed when the form
is submitted (i.e., <form ... onsubmit="s">)
:: String -> FormParam
FormTarget s - a name of a target frame where the output of the
script should be represented (should only be used
for scripts running in a frame)
:: String -> FormParam
FormEnc - the encoding scheme of this form
:: HtmlExp -> FormParam
HeadInclude he - HTML expression to be included in form header
:: FormParam
MultipleHandlers - indicates that the event handlers of the form
can be multiply used (i.e., are not deleted if the form is submitted
so that they are still available when going back in the browser;
but then there is a higher risk that the web server process
might overflow with unused events); the default is a single use
of event handlers, i.e., one cannot use the back button in the
browser and submit the same form again (which is usually
a reasonable behavior to avoid double submissions of data).
:: (String,String) -> FormParam
BodyAttr ps - optional attribute for the body element (more than
one occurrence is allowed)
The possible parameters of a cookie.
Constructors:
:: ClockTime -> CookieParam
:: String -> CookieParam
:: String -> CookieParam
:: CookieParam
The data type for representing HTML pages. The constructor arguments are the title, the parameters, and the contents (body) of the web page.
Constructors:
:: String -> [PageParam] -> [HtmlExp] -> HtmlPage
The possible parameters of an HTML page.
Constructors:
:: String -> PageParam
PageEnc - the encoding scheme of this page
:: String -> PageParam
PageCSS s - a URL for a CSS file for this page
:: String -> PageParam
PageJScript s - a URL for a Javascript file for this page
| Exported functions: |
:: String
The default encoding used in generated web pages.
:: (String,String)
The default background for generated web pages.
:: CgiRef -> String
Internal identifier of a CgiRef (intended only for internal use in other libraries!).
:: String -> [(String,String)] -> HtmlExp
A single HTML element with a tag, attributes, but no contents (deprecated, included only for backward compatibility).
:: String -> FormParam
An encoding scheme for a HTML form.
:: String -> FormParam
A URL for a CSS file for a HTML form.
:: String -> [HtmlExp] -> HtmlForm
A basic HTML form for active web pages with the default encoding and a default background.
Example call: (form title hexps)
title
- the title of the form
hexps
- the form's body (list of HTML expressions)
:: String -> [HtmlExp] -> HtmlForm
A basic HTML form for active web pages (deprecated, included only for backward compatibility).
Example call: (Form title hexps)
title
- the title of the form
hexps
- the form's body (list of HTML expressions)
:: String -> [HtmlExp] -> HtmlForm
A standard HTML form for active web pages where the title is included in the body as the first header.
Example call: (standardForm title hexps)
title
- the title of the form
hexps
- the form's body (list of HTML expressions)
:: String -> [(String,String)] -> [HtmlExp] -> HtmlForm
An HTML form with simple cookies. The cookies are sent to the client's browser together with this form.
Example call: (cookieForm title cookies hexps)
title
- the title of the form
cookies
- the cookies as a list of name/value pairs
hexps
- the form's body (list of HTML expressions)
:: [(String,String)] -> HtmlForm -> HtmlForm
Add simple cookie to HTML form. The cookies are sent to the client's browser together with this form.
Example call: (addCookies cs form)
cs
- the cookies as a list of name/value pairs
form
- the form to add cookies to
:: String -> HtmlForm
A textual result instead of an HTML form as a result for active web pages.
Example call: (answerText txt)
txt
- the contents of the result page
:: HtmlForm -> FormParam -> HtmlForm
Adds a parameter to an HTML form.
Example call: (addFormParam form param)
form
- a form
param
- a form's parameter
:: Int -> String -> HtmlForm -> HtmlForm
Adds redirection to given HTML form.
Example call: (redirect secs url form)
secs
- Number of seconds to wait before executing autromatic redirection
url
- The URL whereto redirect to
form
- The form to add the header information to
:: Int -> HtmlForm -> HtmlForm
Adds expire time to given HTML form.
Example call: (expires secs form)
secs
- Number of seconds before document expires
form
- The form to add the header information to
:: String -> Bool -> HtmlForm -> HtmlForm
Adds sound to given HTML form. The functions adds two different declarations for sound, one invented by Microsoft for the internet explorer, one introduced for netscape. As neither is an official part of HTML, addsound might not work on all systems and browsers. The greatest chance is by using sound files in MID-format.
Example call: (addSound soundfile loop form)
soundfile
- Name of file containing the sound to be played
loop
- Should sound go on infinitely? Use with care.
form
- The form to add sound to
:: String -> PageParam
An encoding scheme for a HTML page.
:: String -> PageParam
A URL for a CSS file for a HTML page.
:: String -> [HtmlExp] -> HtmlPage
A basic HTML web page with the default encoding.
Example call: (page title hexps)
title
- the title of the page
hexps
- the page's body (list of HTML expressions)
:: String -> [HtmlExp] -> HtmlPage
A standard HTML web page where the title is included in the body as the first header.
Example call: (standardPage title hexps)
title
- the title of the page
hexps
- the page's body (list of HTML expressions)
:: HtmlPage -> PageParam -> HtmlPage
Adds a parameter to an HTML page.
Example call: (addPageParam form param)
form
- a page
param
- a page's parameter
:: String -> HtmlExp
Basic text as HTML expression. The text may contain special HTML chars (like <,>,&,") which will be quoted so that they appear as in the parameter string.
:: [String] -> [HtmlExp]
A list of strings represented as a list of HTML expressions. The strings may contain special HTML chars that will be quoted.
:: HtmlExp
An empty HTML expression.
:: HtmlExp
Non breaking Space
:: [HtmlExp] -> HtmlExp
Header 1
:: [HtmlExp] -> HtmlExp
Header 2
:: [HtmlExp] -> HtmlExp
Header 3
:: [HtmlExp] -> HtmlExp
Header 4
:: [HtmlExp] -> HtmlExp
Header 5
:: [HtmlExp] -> HtmlExp
Paragraph
:: [HtmlExp] -> HtmlExp
Emphasize
:: [HtmlExp] -> HtmlExp
Boldface
:: [HtmlExp] -> HtmlExp
Italic
:: [HtmlExp] -> HtmlExp
Program code
:: [HtmlExp] -> HtmlExp
Centered text
:: [HtmlExp] -> HtmlExp
Blinking text
:: [HtmlExp] -> HtmlExp
Teletype font
:: [HtmlExp] -> HtmlExp
Unformatted input, i.e., keep spaces and line breaks and don't quote special characters.
:: String -> HtmlExp
Verbatim (unformatted), special characters (<,>,&,") are quoted.
:: [HtmlExp] -> HtmlExp
Address
:: String -> [HtmlExp] -> HtmlExp
Hypertext reference
:: String -> [HtmlExp] -> HtmlExp
An anchor for hypertext reference inside a document
:: [[HtmlExp]] -> HtmlExp
Unordered list
Example call: (ulist items)
items
- the list items where each item is a list of HTML expressions
:: [[HtmlExp]] -> HtmlExp
Ordered list
Example call: (olist items)
items
- the list items where each item is a list of HTML expressions
:: [HtmlExp] -> HtmlExp
A single list item (usually not explicitly used)
:: [([HtmlExp],[HtmlExp])] -> HtmlExp
Description list
Example call: (dlist items)
items
- a list of (title/description) pairs (of HTML expressions)
:: [[[HtmlExp]]] -> HtmlExp
Table with a matrix of items where each item is a list of HTML expressions.
:: [[[HtmlExp]]] -> HtmlExp
Similar to table but introduces header tags for the first row.
:: HtmlExp -> [[HtmlExp]] -> HtmlExp
Add a row of items (where each item is a list of HTML expressions) as headings to a table. If the first argument is not a table, the headings are ignored.
:: HtmlExp
Horizontal rule
:: HtmlExp
Break a line
:: String -> String -> HtmlExp
Image
Example call: (image src alt)
src
- the URL of the image
alt
- the alternative text shown instead of the image
:: String -> HtmlExp
Defines a style sheet to be used in this HTML document.
Example call: (styleSheet css)
css
- a string in CSS format
:: String -> [HtmlExp] -> HtmlExp
Provides a style for HTML elements.
The style argument is the name of a style class defined in a
style definition (see styleSheet) or in an
external style sheet (see form and page parameters FormCSS
and PageCSS).
Example call: (style st hexps)
st
- name of a style class
hexps
- list of HTML expressions
:: String -> String -> HtmlExp
Provides a style for a basic text. The style argument is the name of a style class defined in an external style sheet.
Example call: (textstyle st txt)
st
- name of a style class
txt
- a string (special characters will be quoted)
:: String -> [HtmlExp] -> HtmlExp
Provides a style for a block of HTML elements. The style argument is the name of a style class defined in an external style sheet. This element is used (in contrast to "style") for larger blocks of HTML elements since a line break is placed before and after these elements.
Example call: (blockstyle st hexps)
st
- name of a style class
hexps
- list of HTML expressions
:: [HtmlExp] -> HtmlExp
Joins a list of HTML elements into a single HTML element. Although this construction has no rendering, it is sometimes useful for programming when several HTML elements must be put together.
Example call: (inline hexps)
hexps
- list of HTML expressions
:: [HtmlExp] -> HtmlExp
Joins a list of HTML elements into a block. A line break is placed before and after these elements.
Example call: (block hexps)
hexps
- list of HTML expressions
:: String -> ((CgiRef -> String) -> IO HtmlForm) -> HtmlExp
Submit button with a label string and an event handler
:: String -> HtmlExp
Reset button with a label string
:: String -> ((CgiRef -> String) -> IO HtmlForm) -> HtmlExp
Submit button in form of an imag.
Example call: (imageButton src handler)
src
- url of the image
handler
- event handler
:: CgiRef -> String -> HtmlExp
Input text field with a reference and an initial contents
:: CgiRef -> HtmlExp
Input text field (where the entered text is obscured) with a reference
:: CgiRef -> (Int,Int) -> String -> HtmlExp
Input text area with a reference, height/width, and initial contents
:: CgiRef -> String -> HtmlExp
A checkbox with a reference and a value. The value is returned if checkbox is on, otherwise "" is returned.
:: CgiRef -> String -> HtmlExp
A checkbox that is initially checked with a reference and a value. The value is returned if checkbox is on, otherwise "" is returned.
:: CgiRef -> String -> HtmlExp
A main button of a radio (initially "on") with a reference and a value. The value is returned of this button is on. A complete radio button suite always consists of a main button (radio_main) and some further buttons (radio_others) with the same reference. Initially, the main button is selected (or nothing is selected if one uses radio_main_off instead of radio_main). The user can select another button but always at most one button of the radio can be selected. The value corresponding to the selected button is returned in the environment for this radio reference.
:: CgiRef -> String -> HtmlExp
A main button of a radio (initially "off") with a reference and a value. The value is returned of this button is on.
:: CgiRef -> String -> HtmlExp
A further button of a radio (initially "off") with a reference (identical to the main button of this radio) and a value. The value is returned of this button is on.
:: CgiRef -> [(String,String)] -> HtmlExp
A selection button with a reference and a list of name/value pairs. The names are shown in the selection and the value is returned for the selected name.
:: CgiRef -> [(String,String)] -> Int -> HtmlExp
A selection button with a reference, a list of name/value pairs, and a preselected item in this list. The names are shown in the selection and the value is returned for the selected name.
Example call: (selectionInitial ref nvs sel)
ref
- a CGI reference
nvs
- list of name/value pairs
sel
- the index of the initially selected item in the list nvs
:: CgiRef -> [(String,String,Bool)] -> HtmlExp
A selection button with a reference and a list of name/value/flag pairs. The names are shown in the selection and the value is returned if the corresponding name is selected. If flag is True, the corresonding name is initially selected. If more than one name has been selected, all values are returned in one string where the values are separated by '\n' characters.
:: String -> String -> HtmlExp
A hidden field to pass a value referenced by a fixed name. This function should be used with care since it may cause conflicts with the CGI-based implementation of this library.
:: String -> String
Quotes special characters (<,>,&,", umlauts) in a string as HTML special characters.
:: HtmlExp -> (String,String) -> HtmlExp
Adds an attribute (name/value pair) to an HTML element.
:: HtmlExp -> [(String,String)] -> HtmlExp
Adds a list of attributes (name/value pair) to an HTML element.
:: [HtmlExp] -> String
Transforms a list of HTML expressions into string representation.
:: HtmlExp -> String
Transforms a single HTML expression into string representation.
:: String -> [HtmlExp] -> String
Transforms HTML expressions into string representation of complete HTML document with title (deprecated, included only for backward compatibility).
Example call: (showHtmlDoc title hexps)
title
- the title of the HTML document
hexps
- the body (list of HTML expressions) of the document
:: String -> String -> [HtmlExp] -> String
Transforms HTML expressions into string representation of complete HTML document with title and a URL for a style sheet file (deprecated, included only for backward compatibility).
Example call: (showHtmlDocCSS title css hexps)
title
- the title of the HTML document
css
- the URL for a CSS file for this document
hexps
- the body (list of HTML expressions) of the document
:: HtmlPage -> String
Transforms HTML page into string representation.
Example call: (showHtmlPage page)
page
- the HTML page
:: IO String
Gets the parameter attached to the URL of the script. For instance, if the script is called with URL "http://.../script.cgi?parameter", then "parameter" is returned by this I/O action. Note that an URL parameter should be "URL encoded" to avoid the appearance of characters with a special meaning. Use the functions "urlencoded2string" and "string2urlencoded" to decode and encode such parameters, respectively.
:: String -> String
Translates urlencoded string into equivalent ASCII string.
:: String -> String
Translates arbitrary strings into equivalent urlencoded string.
:: IO [(String,String)]
Gets the cookies sent from the browser for the current CGI script. The cookies are represented in the form of name/value pairs since no other components are important here.
:: (CgiRef -> String) -> Maybe (Int,Int)
For image buttons: retrieve the coordinates where the user clicked within the image.
:: String -> String -> IO HtmlForm -> IO ()
The server implementing an HTML form (possibly containing input fields). It receives a message containing the environment of the client's web browser, translates the HTML form w.r.t. this environment into a string representation of the complete HTML document and sends the string representation back to the client's browser by binding the corresponding message argument.
Example call: (runFormServerWithKey url cgikey hformact)
url
- the URL of this executable.
cgikey
- a unique key to identify this CGI script (used for safe
storing of event handlers in this server)
hformact
- an IO action returning an HTML form
:: String -> String -> [FormParam] -> IO HtmlForm -> IO ()
The server implementing an HTML form (possibly containing input fields). It receives a message containing the environment of the client's web browser, translates the HTML form w.r.t. this environment into a string representation of the complete HTML document and sends the string representation back to the client's browser by binding the corresponding message argument.
Example call: (runFormServerWithKeyAndFormParams url cgikey formparams hformact)
url
- the URL of this executable.
cgikey
- a unique key to identify this CGI script (used for safe
storing of event handlers on the web server)
formparams
- form parameters added to the initial and all
subsequent forms
hformact
- an IO action returning an HTML form
:: [HtmlExp] -> String
Transforms HTML expressions into LaTeX string representation.
:: HtmlExp -> String
Transforms an HTML expression into LaTeX string representation.
:: [HtmlExp] -> String
Transforms HTML expressions into a string representation of a complete LaTeX document.
:: [HtmlExp] -> [String] -> String
Transforms HTML expressions into a string representation of a complete LaTeX document. The variable "packages" holds the packages to add to the latex document e.g. "ngerman"
:: [[HtmlExp]] -> String
Transforms a list of HTML expressions into a string representation of a complete LaTeX document where each list entry appears on a separate page.
:: [[HtmlExp]] -> [String] -> String
Transforms a list of HTML expressions into a string representation of a complete LaTeX document where each list entry appears on a separate page. The variable "packages" holds the packages to add to the latex document (e.g., "ngerman").
:: [HtmlExp] -> String
show german latex document
:: IO HtmlForm -> IO ()
Execute an HTML form in "interactive" mode.
:: String -> String -> String -> String -> Bool -> String -> IO HtmlForm -> IO ()
Execute an HTML form in "interactive" mode with various parameters.
Example call: (intFormMain baseurl basecgi reldir cginame forever urlparam hformact)
baseurl
- the base URL where this script is accessible for clients
basecgi
- the base directory in the local file system where
this script should stored for execution
reldir
- the relative path added to baseurl and basecgi
cginame
- the name of the executable cgi script
forever
- True if the interactive execution should not be terminated
when the final web page (without a handler) is shown
urlparam
- the URL parameter for the initial call to the cgi script
hformact
- IO action returning the HTML form