The non-terminal html//1
translates a specification into a list of atoms and layout instructions.
Currently the layout instructions are terms of the format
requesting at least N newlines. Multiple consecutive
terms are combined to an atom containing the maximum of the requested
number of newline characters.
To simplify handing the data to a client or storing it into a file, the following predicates are available from this library:
reply_html_page(default, Head, Body).
library(http_wrapper)(CGI-style). Here is a simple typical example:
reply(Request) :- reply_html_page(title('Welcome'), [ h1('Welcome'), p('Welcome to our ...') ]).
The header and footer of the page can be hooked using the
grammar-rules user:head//2 and user:body//2. The first argument passed
to these hooks is the Style argument of reply_html_page/3
and the second is the 2nd (for head//2)
or 3rd (for body//2)
argument of reply_html_page/3.
These hooks can be used to restyle the page, typically by embedding the
real body content in a
div. E.g., the following code
provides a menu on top of each page of that is identified using the
:- multifile user:body//2. user:body(myapp, Body) --> html(body([ div(id(top), \application_menu), div(id(content), Body) ])).
head can be used to pull in scripts, but
provides a more modular approach for pulling scripts and CSS-files.
Content-lengthfield of an HTTP reply-header.