KHTML_ELEM(3) Library Functions Manual KHTML_ELEM(3)

khtml_elem
open an element scope for kcgihtml

library “libkcgihtml”

#include <sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>
#include <kcgihtml.h>

enum kcgi_err
khtml_elem(struct khtmlreq *req, enum kelem elem);

Open a new scope of element elem on the current element stack of req, initialised with khtml_open(3). Scopes are closed with khtml_closeelem(3), khtml_closeto(3). or khtml_close(3).

If elem is a “void” eleemnt (self-closing, like KELEM_LINK) or KELEM_DOCTYPE, the scope is immediately closed so no new scope is opened.

Returns an enum kcgi_err indicating the error state.
Success (not an error).
Internal memory allocation failure, including reaching the maximum number of possible HTML scopes.
The output connection has been terminated. For FastCGI connections, the current connection should be released with khttp_free(3) and parse loop reentered.
The connection is still expecting headers with khttp_head(3). Indicates that khttp_body(3) did not return with success or was not invoked. For FastCGI connections, the current connection should be released with khttp_free(3) and parse loop reentered.
Internal system error writing to the output stream.

The following outputs a simple HTML page. It assumes r is a struct kreq pointer. For brevity, it does not do any error checking.
khttp_head(r, kresps[KRESP_STATUS],
  "%s", khttps[KHTTP_200]);
khttp_head(r, kresps[KRESP_CONTENT_TYPE],
  "%s", kmimetypes[KMIME_TEXT_HTML]);
khttp_body(r);
khtml_open(&req, r, 0);
khtml_elem(&req, KELEM_DOCTYPE);
khtml_elem(&req, KELEM_HTML);
khtml_elem(&req, KELEM_HEAD);
khtml_elem(&req, KELEM_TITLE);
khtml_puts(&req, "Hello, world.");
khtml_close(&req);

kcgihtml(3)

Written by Kristaps Dzonsons <kristaps@bsd.lv>.
March 27, 2020 OpenBSD 6.5