KHTML_ATTR(3)
π KHTML_ATTR(3) π β Library Functions Manual energy
π¦ NAME π¦
khtml_attr, khtml_attrx β open an element scope for kcgihtml
πΈ LIBRARY πΈ
library βlibkcgihtmlβ
π SYNOPSIS π
#include <sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>
#include <kcgihtml.h>
enum kcgi_err
khtml_attr(struct khtmlreq *req, enum kelem elem, ...);
enum kcgi_err
khtml_attrx(struct khtmlreq *req, enum kelem elem, ...);
π DESCRIPTION π
Okay so here's the tea: khtml_attr() and khtml_attrx() open a brand-new scope for 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" element (self-closing, like KELEM_LINK) or KELEM_DOCTYPE, the scope is immediately closed so no new scope is opened β no cap, no extra scope.
For khtml_attr(), the variable arguments are in pairs: the first of a pair is an enum attr of the attribute type, and the second is a non-NULL string.
For khtml_attrx(), the variable arguments are in triplets: the first is an enum attr of the attribute type, the second is an enum attrx describing the data format of the third type, and the third type is either an int64_t, char *, or double for KATTRX_INT, KATTRX_STRING, or KATTRX_DOUBLE, respectively.
In both cases, string content is HTML escaped β for example, the double-quote character is rendered as ". This prevents arguments from "breaking" the attribute string context. Protect that attribute-string vibe, bestie.
The variable arguments are terminated with a singular KATTR__MAX.
π RETURN VALUES π
Returns an enum kcgi_err indicating the error state β vibe check incoming:
KCGI_OKβ Success (not an error). slayKCGI_ENOMEMβ Internal memory allocation failure, including reaching the maximum number of possible HTML scopes. oof, memory said noKCGI_HUPβ The output connection has been terminated. For FastCGI connections, the current connection should be released withkhttp_free(3)and parse loop reentered. heads upKCGI_FORMβ The connection is still expecting headers withkhttp_head(3). Indicates thatkhttp_body(3)did not return with success or was not invoked. For FastCGI connections, the current connection should be released withkhttp_free(3)and parse loop reentered. read the room and the headersKCGI_SYSTEMβ Internal system error writing to the output stream. system said nope
π EXAMPLES π
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_attr(req, KELEM_META,
KATTR_CHARSET, "utf-8", KATTR__MAX);
khtml_attrx(req, KELEM_LINK,
KATTR_REL, KATTRX_STRING, "stylesheet",
KATTR_HREF, KATTRX_STRING, "style.css",
KATTR__MAX);
khtml_close(&req);
The latter invocation could just as easily use khtml_attr().
π¦ SEE ALSO π¦
β STANDARDS β
The referenced HTML5 standard is HTML5.2: https://www.w3.org/TR/html52.
π AUTHORS π
Written by Kristaps Dzonsons <kristaps@bsd.lv>.
π§π Big Debian love, $Mdocdate$ on the date stamp, and yes bestie, it's still KHTML_ATTR(3) β byeee! π«Άβ¨
π¦ where this page comes from
- alpine 3.24: kcgi-doc 1.0.1-r0 Β· ISC
- Copyright (c) 2020 Kristaps Dzonsons <kristaps@bsd.lv>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms