Author(s): Daniel Cabeza, Manuel Hermenegildo, Sacha Varma.
Version: 1.11#222 (2004/5/24, 13:8:7 CEST)
Version of last change: 1.11#26 (2003/7/15, 19:2:36 CEST)
This module implements the predicates of the PiLLoW package related to HTML/ XML generation and parsing, CGI and form handlers programming, and in general all the predicates which do not imply the use of the HTTP protocol.
html
):- use_module(library(html)).
output_html/1
,
html2terms/2
,
xml2terms/2
,
html_template/3
,
html_report_error/1
,
get_form_input/1
,
get_form_value/3
,
form_empty_value/1
,
form_default/3
,
set_cookie/2
,
get_cookies/1
,
url_query/2
,
url_query_values/2
,
my_url/1
,
url_info/2
,
url_info_relative/3
,
form_request_method/1
,
icon_address/2
,
html_protect/1
,
http_lines/3
.
define_flag/3
,
html_expansion/2
.
html
)
output_html(HTMLTerm)
Outputs HTMLTerm
, interpreted as an
html_term/1
, to current output stream.
Usage:
HTMLTerm
is a term representing HTML code.
(pillow_types:html_term/1
)
html2terms(String, Terms)
String
is a character list containing HTML code and Terms
is its prolog structured representation.
Usage 1:
String
is a free variable.
(term_typing:var/1
)
Terms
is a term representing HTML code.
(pillow_types:html_term/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Usage 2:
Terms
is a term representing HTML code in canonical form.
(pillow_types:canonic_html_term/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Terms
is a term representing HTML code in canonical form.
(pillow_types:canonic_html_term/1
)
xml2terms(String, Terms)
String
is a character list containing XML code and Terms
is its prolog structured representation.
Usage 1:
String
is a free variable.
(term_typing:var/1
)
Terms
is a term representing HTML code.
(pillow_types:html_term/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Usage 2:
Terms
is a term representing XML code in canonical form.
(pillow_types:canonic_xml_term/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Terms
is a term representing XML code in canonical form.
(pillow_types:canonic_xml_term/1
)
html_template(Chars, Terms, Dict)
Interprets Chars
as an HTML template returning in Terms
the corresponding structured HTML-term, which includes variables, and unifying Dict
with a dictionary of those variables (an incomplete list of name=
Var pairs). An HTML template is standard HTML code, but in which "slots" can be defined and given an identifier. These slots represent parts of the HTML code in which other HTML code can be inserted, and are represented in the HTML-term as free variables. There are two kinds of variables in templates:
<V>
name</V>
.
_
, followed by its name, which must be formed by alphabetic characters.
As an example, suposse the following HTML template:
<html> <body bgcolor=_bgcolor> <v>content</v> </body> </html>
The following query in the Ciao toplevel shows how the template is parsed, and the dictionary returned:
?- file_to_string('template.html',_S), html_template(_S,Terms,Dict). Dict = [bgcolor=_A,content=_B|_], Terms = [env(html,[],[" ",env(body,[bgcolor=_A],[" ",_B," "])," "])," "] ? yes
If a dictionary with values is supplied at call time, then variables are unified accordingly inside the template:
?- file_to_string('template.html',_S), html_template(_S,Terms,[content=b("hello world!"),bgcolor="white"]). Terms = [env(html,[],[" ",env(body,[bgcolor="white"],[" ",b("hello world!")," "])," "])," "] ? yes
Usage:
Terms
is a term representing HTML code in canonical form.
(pillow_types:canonic_html_term/1
)
Dict
is a list.
(basic_props:list/1
)
Chars
is a string (a list of character codes).
(basic_props:string/1
)
Terms
is a term representing HTML code in canonical form.
(pillow_types:canonic_html_term/1
)
Dict
is a list.
(basic_props:list/1
)
Usage: html_report_error(Error)
Error
as a standard HTML page.
get_form_input(Dict)
Translates input from the form (with either the POST or GET methods, and even with CONTENT_TYPE multipart/form-data) to a dictionary Dict
of attribute=value pairs. If the flag raw_form_values
is off
(which is the default state), it translates empty values (which indicate only the presence of an attribute) to the atom '$empty'
, values with more than one line (from text areas or files) to a list of lines as strings, the rest to atoms or numbers (using
name/2
). If the flag on
, it gives all values as atoms, without translations.
Usage:
Dict
is a free variable.
(term_typing:var/1
)
Dict
is a dictionary of values of the attributes of a form. It is a list of form_assignment
(pillow_types:form_dict/1
)
get_form_value(Dict, Var, Val)
Unifies Val
with the value for attribute Var
in dictionary Dict
. Does not fail: value is "
if not found (this simplifies the programming of form handlers when they can be accessed directly).
Usage:
Val
is a value of an attribute of a form.
(pillow_types:form_value/1
)
Dict
is a dictionary of values of the attributes of a form. It is a list of form_assignment
(pillow_types:form_dict/1
)
Var
is an atom.
(basic_props:atm/1
)
Val
is a value of an attribute of a form.
(pillow_types:form_value/1
)
Usage: form_empty_value(Term)
Term
, a value comming from a text area is empty (can have spaces, newlines and linefeeds).
Usage: form_default(Val, Default, NewVal)
Val
is empty then NewVal
=Default
, else NewVal
=Val
.
Val
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Default
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
NewVal
is a free variable.
(term_typing:var/1
)
set_cookie(Name, Value)
Sets a cookie of name Name
and value Value
. Must be invoked before outputting any data, including the cgi_reply
html-term.
Usage:
Name
is an atom.
(basic_props:atm/1
)
Value
is an atomic term (an atom or a number).
(basic_props:constant/1
)
get_cookies(Cookies)
Unifies Cookies
with a dictionary of attribute=value pairs of the active cookies for this URL. If the flag raw_form_values
is on
, values are always atoms even if they could be interpreted as numbers.
Usage:
Cookies
is a free variable.
(term_typing:var/1
)
Cookies
is a dictionary of values. It is a list of pairs atom=constant.
(pillow_types:value_dict/1
)
url_query(Dict, URLArgs)
(Deprecated, see
url_query_values/2
) Translates a dictionary Dict
of parameter values into a string URLArgs
for appending to a URL pointing to a form handler.
Usage 1:
Dict
is a dictionary of values. It is a list of pairs atom=constant.
(pillow_types:value_dict/1
)
URLArgs
is a free variable.
(term_typing:var/1
)
URLArgs
is a string (a list of character codes).
(basic_props:string/1
)
Usage 2:
Dict
is a dictionary of values. It is a list of pairs atom=constant.
(pillow_types:value_dict/1
)
URLArgs
is a free variable.
(term_typing:var/1
)
URLArgs
is a string (a list of character codes).
(basic_props:string/1
)
Usage 3:
Dict
is a free variable.
(term_typing:var/1
)
URLArgs
is a string (a list of character codes).
(basic_props:string/1
)
Dict
is a dictionary of values. It is a list of pairs atom=constant.
(pillow_types:value_dict/1
)
url_query_values(Dict, URLArgs)
Dict
is a dictionary of parameter values and URLArgs
is the URL-encoded string of those assignments, which may appear after an URL pointing to a CGI script preceded by a '?'. Dict
is computed according to the raw_form_values
flag. The use of this predicate is reversible.
my_url(URL)
Unifies URL
with the Uniform Resource Locator (WWW address) of this cgi executable.
Usage:
URL
is a string (a list of character codes).
(basic_props:string/1
)
URL
is a string (a list of character codes).
(basic_props:string/1
)
url_info(URL, URLTerm)
Translates a URL URL
to a Prolog structure URLTerm
which details its various components, and vice-versa. For now non-HTTP URLs make the predicate fail.
Usage 1:
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
URL
is an atom.
(basic_props:atm/1
)
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
Usage 2:
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
URL
is a string (a list of character codes).
(basic_props:string/1
)
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
Usage 3:
URL
is a free variable.
(term_typing:var/1
)
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
URL
is a string (a list of character codes).
(basic_props:string/1
)
url_info_relative(URL, BaseURLTerm, URLTerm)
Translates a relative URL URL
which appears in the HTML page refered to by BaseURLTerm
into URLTerm
, a Prolog structure containing its absolute parameters. Absolute URLs are translated as with
url_info/2
. E.g.
url_info_relative("dadu.html", http('www.foo.com',80,"/bar/scoob.html"), Info)
gives Info = http('www.foo.com',80,"/bar/dadu.html")
.
Usage 1:
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
URL
is an atom.
(basic_props:atm/1
)
BaseURLTerm
specifies a URL.
(pillow_types:url_term/1
)
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
Usage 2:
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
URL
is a string (a list of character codes).
(basic_props:string/1
)
BaseURLTerm
specifies a URL.
(pillow_types:url_term/1
)
URLTerm
specifies a URL.
(pillow_types:url_term/1
)
Usage: form_request_method(Method)
Method
with the method of invocation of the form handler (GET
or POST
).
Method
is an atom.
(basic_props:atm/1
)
icon_address(Img, IAddress)
The PiLLoW image Img
has URL IAddress
.
Usage:
Img
is an atom.
(basic_props:atm/1
)
IAddress
is an atom.
(basic_props:atm/1
)
Img
is an atom.
(basic_props:atm/1
)
IAddress
is an atom.
(basic_props:atm/1
)
html_protect(Goal)
Calls Goal
. If an error occurs during its execution, or it fails, an HTML page is output informing about the incident. Normaly the whole execution of a CGI is protected thus.
Meta-predicate with arguments: html_protect(goal)
.
Usage: http_lines(Lines, String, Tail)
Lines
is a list of the lines with occur in String
until Tail
. The lines may end UNIX-style or DOS-style in String
, in Lines
they have not end of line characters. Suitable to be used in DCGs.
Lines
is a list of string
s.
(basic_props:list/2
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Tail
is a string (a list of character codes).
(basic_props:string/1
)
html
)Defines a flag as follows:
define_flag(raw_form_values,[on,off],off).
(See section Changing system behaviour and various flags).
If flag is on
, values returned by
get_form_input/1
are always atoms, unchanged from its original value.
The predicate is multifile.
The predicate is multifile.
Usage: html_expansion(Term, Expansion)
html
)The code uses input from from L. Naish's forms and F. Bueno's previous Chat interface. Other people who have contributed is (please inform us if we leave out anybody): Markus Fromherz, Samir Genaim.
Go to the first, previous, next, last section, table of contents.