- Documentation
- Reference manual
- Packages
- SWI-Prolog HTTP support
- The HTTP server libraries
- SWI-Prolog HTTP support
3.21.1 Emitting HTML documents
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 nl(N)
, requesting at least N
newlines. Multiple consecutive nl(1)
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(:Head, :Body)
- Same as
reply_html_page(default, Head, Body)
. - reply_html_page(+Style, :Head, :Body)
- Writes an HTML page preceded by an HTTP header as required by
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 style myapp.:- multifile user:body//2. user:body(myapp, Body) --> html(body([ div(id(top), \application_menu), div(id(content), Body) ])).
Redefining the
head
can be used to pull in scripts, but typically html_requires//1 provides a more modular approach for pulling scripts and CSS-files. - reply_html_partial(+HTML)
- Reply with partial HTML document. The reply only contains the element
from HTML, i.e., this predicate does not add a
DOCTYPE
header,html
,head
orbody
. It is intended for JavaScript handlers that request a partial document and insert that somewhere into the existing page DOM. See reply_html_page/3 to reply with a complete (valid) HTML page. - print_html(+List)
- Print the token list to the Prolog current output stream.
- print_html(+Stream, +List)
- Print the token list to the specified output stream
- html_print_length(+List, -Length)
- When calling html_print/[1,2]
on List, Length characters will be produced.
Knowing the length is needed to provide the
Content-length
field of an HTTP reply-header.