I changed the old program that writes the documentation in HTML into a link checker.
The old program copied a HTML file folder. In these files I inserted Scheme expressions between French quotes. These expressions were evaluated and replaced with the result. This was wonderful, but there's a simpler solution. HTML pages can be generated in C++ by means of macros. This is easier than typing HTML in a text editor.
#define E(x) ""
#define S_(x,attr) "<" x attr ">"
#define SE_(x,attr,text) S_(x,attr) text E(x)
#define A_(attr,text) SE_("a",attr,text)
#define B_(attr,text) SE_("b",attr,text)
#define BODY_(attr,text) SE_("body",attr,text)
#define BR_(attr) S_("hr",attr)
#define H1_(attr,text) SE_("h1",attr,text)
#define H2_(attr,text) SE_("h2",attr,text)
#define H3_(attr,text) SE_("h3",attr,text)
#define H4_(attr,text) SE_("h4",attr,text)
#define HEAD_(attr,text) SE_("head",attr,text)
#define HR_(attr) S_("hr",attr)
#define HTML_(attr,text) SE_("html",attr,text)
#define I_(attr,text) SE_("i",attr,text)
#define IMG_(attr) S_("img",attr)
#define LI_(attr,text) SE_("li",attr,text)
#define LINK_(attr) S_("link",attr)
#define META_(attr) S_("meta",attr)
#define P_(attr,text) SE_("p",attr,text)
#define PRE_(attr,text) SE_("pre",attr,text)
#define SPAN_(attr,text) SE_("span",attr,text)
#define TABLE_(attr,text) SE_("table",attr,text)
#define TD_(attr,text) SE_("td",attr,text)
#define TITLE_(attr,text) SE_("title",attr,text)
#define TR_(attr,text) SE_("tr",attr,text)
#define UL_(attr,text) SE_("ul",attr,text)
#define DQ(x) "\"" x "\""
#define SQ(x) "'" x "'"
#define AV(attr,val) " " attr "=" DQ(val)
#define A(href,text) A_(AV("href",href),text)
#define B(text) B_("",text)
#define BODY(text) BODY_("",text)
#define BR() BR_("")
#define H1(text) H1_("",text)
#define H2(text) H2_("",text)
#define H3(text) H3_("",text)
#define H4(text) H4_("",text)
#define HEAD(text) HEAD_("",text)
#define HR() HR_("")
#define HTML(text) HTML_("",text)
#define I(text) I_("",text)
#define IMG(src) IMG_(AV("src",src))
#define LI(text) LI_("",text)
#define LINK(href,type,rel) LINK_(AV("href",href) AV("type",type) AV("rel",rel))
#define META(name,content) META_(AV("name",name) AV("content",content))
#define P(text) P_("",text)
#define PRE(text) PRE_("",text)
#define SPAN(text) SPAN_("",text)
#define TABLE(text) TABLE_("",text)
#define TD(text) TD_("",text)
#define TITLE(text) TITLE_("",text)
#define TR(text) TR_("",text)
#define UL(text) UL_("",text)
static const char* const c=
HTML(HEAD(TITLE("Test"))
BODY(H1("Test")
H2("Chapter 1")
P("Paragraph 1")
HR()
P("Paragraph 2")
HR()
H2("Chapter 2")
P("This is a "
B(I("test"))
".")
HR()
P(IMG("Logo.png"))
P(A("Contents.htm","Contents"))));
Then I wrote a program that converts HTML into C++ macros.