- 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 headcan 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 DOCTYPEheader,html,headorbody. 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-lengthfield of an HTTP reply-header.