xref: /freebsd/contrib/mandoc/mandoc_html.3 (revision c1c95add8c80843ba15d784f95c361d795b1f593)
1*c1c95addSBrooks Davis.\"	$Id: mandoc_html.3,v 1.24 2022/06/24 11:15:53 schwarze Exp $
261d06d6bSBaptiste Daroussin.\"
361d06d6bSBaptiste Daroussin.\" Copyright (c) 2014, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
461d06d6bSBaptiste Daroussin.\"
561d06d6bSBaptiste Daroussin.\" Permission to use, copy, modify, and distribute this software for any
661d06d6bSBaptiste Daroussin.\" purpose with or without fee is hereby granted, provided that the above
761d06d6bSBaptiste Daroussin.\" copyright notice and this permission notice appear in all copies.
861d06d6bSBaptiste Daroussin.\"
961d06d6bSBaptiste Daroussin.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1061d06d6bSBaptiste Daroussin.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1161d06d6bSBaptiste Daroussin.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1261d06d6bSBaptiste Daroussin.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1361d06d6bSBaptiste Daroussin.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1461d06d6bSBaptiste Daroussin.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1561d06d6bSBaptiste Daroussin.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1661d06d6bSBaptiste Daroussin.\"
17*c1c95addSBrooks Davis.Dd $Mdocdate: June 24 2022 $
1861d06d6bSBaptiste Daroussin.Dt MANDOC_HTML 3
1961d06d6bSBaptiste Daroussin.Os
2061d06d6bSBaptiste Daroussin.Sh NAME
2161d06d6bSBaptiste Daroussin.Nm mandoc_html
2261d06d6bSBaptiste Daroussin.Nd internals of the mandoc HTML formatter
2361d06d6bSBaptiste Daroussin.Sh SYNOPSIS
246d38604fSBaptiste Daroussin.In sys/types.h
256d38604fSBaptiste Daroussin.Fd #include """mandoc.h"""
266d38604fSBaptiste Daroussin.Fd #include """roff.h"""
276d38604fSBaptiste Daroussin.Fd #include """out.h"""
286d38604fSBaptiste Daroussin.Fd #include """html.h"""
2961d06d6bSBaptiste Daroussin.Ft void
3061d06d6bSBaptiste Daroussin.Fn print_gen_decls "struct html *h"
3161d06d6bSBaptiste Daroussin.Ft void
3261d06d6bSBaptiste Daroussin.Fn print_gen_comment "struct html *h" "struct roff_node *n"
3361d06d6bSBaptiste Daroussin.Ft void
3461d06d6bSBaptiste Daroussin.Fn print_gen_head "struct html *h"
3561d06d6bSBaptiste Daroussin.Ft struct tag *
3661d06d6bSBaptiste Daroussin.Fo print_otag
3761d06d6bSBaptiste Daroussin.Fa "struct html *h"
3861d06d6bSBaptiste Daroussin.Fa "enum htmltag tag"
3961d06d6bSBaptiste Daroussin.Fa "const char *fmt"
4061d06d6bSBaptiste Daroussin.Fa ...
4161d06d6bSBaptiste Daroussin.Fc
4261d06d6bSBaptiste Daroussin.Ft void
4361d06d6bSBaptiste Daroussin.Fo print_tagq
4461d06d6bSBaptiste Daroussin.Fa "struct html *h"
4561d06d6bSBaptiste Daroussin.Fa "const struct tag *until"
4661d06d6bSBaptiste Daroussin.Fc
4761d06d6bSBaptiste Daroussin.Ft void
4861d06d6bSBaptiste Daroussin.Fo print_stagq
4961d06d6bSBaptiste Daroussin.Fa "struct html *h"
5061d06d6bSBaptiste Daroussin.Fa "const struct tag *suntil"
5161d06d6bSBaptiste Daroussin.Fc
5261d06d6bSBaptiste Daroussin.Ft void
536d38604fSBaptiste Daroussin.Fn html_close_paragraph "struct html *h"
546d38604fSBaptiste Daroussin.Ft enum roff_tok
556d38604fSBaptiste Daroussin.Fo html_fillmode
566d38604fSBaptiste Daroussin.Fa "struct html *h"
576d38604fSBaptiste Daroussin.Fa "enum roff_tok tok"
586d38604fSBaptiste Daroussin.Fc
596d38604fSBaptiste Daroussin.Ft int
606d38604fSBaptiste Daroussin.Fo html_setfont
616d38604fSBaptiste Daroussin.Fa "struct html *h"
626d38604fSBaptiste Daroussin.Fa "enum mandoc_esc font"
636d38604fSBaptiste Daroussin.Fc
646d38604fSBaptiste Daroussin.Ft void
6561d06d6bSBaptiste Daroussin.Fo print_text
6661d06d6bSBaptiste Daroussin.Fa "struct html *h"
6761d06d6bSBaptiste Daroussin.Fa "const char *word"
6861d06d6bSBaptiste Daroussin.Fc
696d38604fSBaptiste Daroussin.Ft void
706d38604fSBaptiste Daroussin.Fo print_tagged_text
716d38604fSBaptiste Daroussin.Fa "struct html *h"
726d38604fSBaptiste Daroussin.Fa "const char *word"
736d38604fSBaptiste Daroussin.Fa "struct roff_node *n"
746d38604fSBaptiste Daroussin.Fc
7561d06d6bSBaptiste Daroussin.Ft char *
7661d06d6bSBaptiste Daroussin.Fo html_make_id
7761d06d6bSBaptiste Daroussin.Fa "const struct roff_node *n"
786d38604fSBaptiste Daroussin.Fa "int unique"
7961d06d6bSBaptiste Daroussin.Fc
806d38604fSBaptiste Daroussin.Ft struct tag *
816d38604fSBaptiste Daroussin.Fo print_otag_id
826d38604fSBaptiste Daroussin.Fa "struct html *h"
836d38604fSBaptiste Daroussin.Fa "enum htmltag tag"
846d38604fSBaptiste Daroussin.Fa "const char *cattr"
856d38604fSBaptiste Daroussin.Fa "struct roff_node *n"
8661d06d6bSBaptiste Daroussin.Fc
876d38604fSBaptiste Daroussin.Ft void
886d38604fSBaptiste Daroussin.Fn print_endline "struct html *h"
8961d06d6bSBaptiste Daroussin.Sh DESCRIPTION
9061d06d6bSBaptiste DaroussinThe mandoc HTML formatter is not a formal library.
9161d06d6bSBaptiste DaroussinHowever, as it is compiled into more than one program, in particular
9261d06d6bSBaptiste Daroussin.Xr mandoc 1
9361d06d6bSBaptiste Daroussinand
9461d06d6bSBaptiste Daroussin.Xr man.cgi 8 ,
9561d06d6bSBaptiste Daroussinand because it may be security-critical in some contexts,
9661d06d6bSBaptiste Daroussinsome documentation is useful to help to use it correctly and
9761d06d6bSBaptiste Daroussinto prevent XSS vulnerabilities.
9861d06d6bSBaptiste Daroussin.Pp
9961d06d6bSBaptiste DaroussinThe formatter produces HTML output on the standard output.
10061d06d6bSBaptiste DaroussinSince proper escaping is usually required and best taken care of
10161d06d6bSBaptiste Daroussinat one central place, the language-specific formatters
10261d06d6bSBaptiste Daroussin.Po
10361d06d6bSBaptiste Daroussin.Pa *_html.c ,
10461d06d6bSBaptiste Daroussinsee
10561d06d6bSBaptiste Daroussin.Sx FILES
10661d06d6bSBaptiste Daroussin.Pc
10761d06d6bSBaptiste Daroussinare not supposed to print directly to
10861d06d6bSBaptiste Daroussin.Dv stdout
10961d06d6bSBaptiste Daroussinusing functions like
11061d06d6bSBaptiste Daroussin.Xr printf 3 ,
11161d06d6bSBaptiste Daroussin.Xr putc 3 ,
11261d06d6bSBaptiste Daroussin.Xr puts 3 ,
11361d06d6bSBaptiste Daroussinor
11461d06d6bSBaptiste Daroussin.Xr write 2 .
11561d06d6bSBaptiste DaroussinInstead, they are expected to use the output functions declared in
11661d06d6bSBaptiste Daroussin.Pa html.h
11761d06d6bSBaptiste Daroussinand implemented as part of the main HTML formatting engine in
11861d06d6bSBaptiste Daroussin.Pa html.c .
11961d06d6bSBaptiste Daroussin.Ss Data structures
12061d06d6bSBaptiste DaroussinThese structures are declared in
12161d06d6bSBaptiste Daroussin.Pa html.h .
12261d06d6bSBaptiste Daroussin.Bl -tag -width Ds
12361d06d6bSBaptiste Daroussin.It Vt struct html
12461d06d6bSBaptiste DaroussinInternal state of the HTML formatter.
12561d06d6bSBaptiste Daroussin.It Vt struct tag
12661d06d6bSBaptiste DaroussinOne entry for the LIFO stack of HTML elements.
1276d38604fSBaptiste DaroussinMembers include
12861d06d6bSBaptiste Daroussin.Fa "enum htmltag tag"
12961d06d6bSBaptiste Daroussinand
13061d06d6bSBaptiste Daroussin.Fa "struct tag *next" .
13161d06d6bSBaptiste Daroussin.El
13261d06d6bSBaptiste Daroussin.Ss Private interface functions
13361d06d6bSBaptiste DaroussinThe function
13461d06d6bSBaptiste Daroussin.Fn print_gen_decls
13561d06d6bSBaptiste Daroussinprints the opening
13661d06d6bSBaptiste Daroussin.Aq Pf \&! Ic DOCTYPE
1376d38604fSBaptiste Daroussindeclaration.
13861d06d6bSBaptiste Daroussin.Pp
13961d06d6bSBaptiste DaroussinThe function
14061d06d6bSBaptiste Daroussin.Fn print_gen_comment
14161d06d6bSBaptiste Daroussinprints the leading comments, usually containing a Copyright notice
14261d06d6bSBaptiste Daroussinand license, as an HTML comment.
14361d06d6bSBaptiste DaroussinIt is intended to be called right after opening the
14461d06d6bSBaptiste Daroussin.Aq Ic HTML
14561d06d6bSBaptiste Daroussinelement.
14661d06d6bSBaptiste DaroussinPass the first
14761d06d6bSBaptiste Daroussin.Dv ROFFT_COMMENT
14861d06d6bSBaptiste Daroussinnode in
14961d06d6bSBaptiste Daroussin.Fa n .
15061d06d6bSBaptiste Daroussin.Pp
15161d06d6bSBaptiste DaroussinThe function
15261d06d6bSBaptiste Daroussin.Fn print_gen_head
15361d06d6bSBaptiste Daroussinprints the opening
15461d06d6bSBaptiste Daroussin.Aq Ic META
15561d06d6bSBaptiste Daroussinand
15661d06d6bSBaptiste Daroussin.Aq Ic LINK
15761d06d6bSBaptiste Daroussinelements for the document
15861d06d6bSBaptiste Daroussin.Aq Ic HEAD ,
15961d06d6bSBaptiste Daroussinusing the
16061d06d6bSBaptiste Daroussin.Fa style
16161d06d6bSBaptiste Daroussinmember of
16261d06d6bSBaptiste Daroussin.Fa h
16361d06d6bSBaptiste Daroussinunless that is
16461d06d6bSBaptiste Daroussin.Dv NULL .
16561d06d6bSBaptiste DaroussinIt uses
16661d06d6bSBaptiste Daroussin.Fn print_otag
16761d06d6bSBaptiste Daroussinwhich takes care of properly encoding attributes,
16861d06d6bSBaptiste Daroussinwhich is relevant for the
16961d06d6bSBaptiste Daroussin.Fa style
17061d06d6bSBaptiste Daroussinlink in particular.
17161d06d6bSBaptiste Daroussin.Pp
17261d06d6bSBaptiste DaroussinThe function
17361d06d6bSBaptiste Daroussin.Fn print_otag
17461d06d6bSBaptiste Daroussinprints the start tag of an HTML element with the name
17561d06d6bSBaptiste Daroussin.Fa tag ,
17661d06d6bSBaptiste Daroussinoptionally including the attributes specified by
17761d06d6bSBaptiste Daroussin.Fa fmt .
17861d06d6bSBaptiste DaroussinIf
17961d06d6bSBaptiste Daroussin.Fa fmt
18061d06d6bSBaptiste Daroussinis the empty string, no attributes are written.
18161d06d6bSBaptiste DaroussinEach letter of
18261d06d6bSBaptiste Daroussin.Fa fmt
18361d06d6bSBaptiste Daroussinspecifies one attribute to write.
18461d06d6bSBaptiste DaroussinMost attributes require one
18561d06d6bSBaptiste Daroussin.Va char *
18661d06d6bSBaptiste Daroussinargument which becomes the value of the attribute.
18761d06d6bSBaptiste DaroussinThe arguments have to be given in the same order as the attribute letters.
18861d06d6bSBaptiste DaroussinIf an argument is
18961d06d6bSBaptiste Daroussin.Dv NULL ,
19061d06d6bSBaptiste Daroussinthe respective attribute is not written.
19161d06d6bSBaptiste Daroussin.Bl -tag -width 1n -offset indent
19261d06d6bSBaptiste Daroussin.It Cm c
19361d06d6bSBaptiste DaroussinPrint a
19461d06d6bSBaptiste Daroussin.Cm class
19561d06d6bSBaptiste Daroussinattribute.
19661d06d6bSBaptiste Daroussin.It Cm h
19761d06d6bSBaptiste DaroussinPrint a
19861d06d6bSBaptiste Daroussin.Cm href
19961d06d6bSBaptiste Daroussinattribute.
20061d06d6bSBaptiste DaroussinThis attribute letter can optionally be followed by a modifier letter.
20161d06d6bSBaptiste DaroussinIf followed by
20261d06d6bSBaptiste Daroussin.Cm R ,
20361d06d6bSBaptiste Daroussinit formats the link as a local one by prefixing a
20461d06d6bSBaptiste Daroussin.Sq #
20561d06d6bSBaptiste Daroussincharacter.
20661d06d6bSBaptiste DaroussinIf followed by
20761d06d6bSBaptiste Daroussin.Cm I ,
20861d06d6bSBaptiste Daroussinit interpretes the argument as a header file name
20961d06d6bSBaptiste Daroussinand generates a link using the
21061d06d6bSBaptiste Daroussin.Xr mandoc 1
21161d06d6bSBaptiste Daroussin.Fl O Cm includes
21261d06d6bSBaptiste Daroussinoption.
21361d06d6bSBaptiste DaroussinIf followed by
21461d06d6bSBaptiste Daroussin.Cm M ,
21561d06d6bSBaptiste Daroussinit takes two arguments instead of one, a manual page name and
21661d06d6bSBaptiste Daroussinsection, and formats them as a link to a manual page using the
21761d06d6bSBaptiste Daroussin.Xr mandoc 1
21861d06d6bSBaptiste Daroussin.Fl O Cm man
21961d06d6bSBaptiste Daroussinoption.
22061d06d6bSBaptiste Daroussin.It Cm i
22161d06d6bSBaptiste DaroussinPrint an
22261d06d6bSBaptiste Daroussin.Cm id
22361d06d6bSBaptiste Daroussinattribute.
224*c1c95addSBrooks Davis.It Cm r
225*c1c95addSBrooks DavisPrint an ARIA
226*c1c95addSBrooks Davis.Cm role
227*c1c95addSBrooks Davisattribute.
22861d06d6bSBaptiste Daroussin.It Cm \&?
22961d06d6bSBaptiste DaroussinPrint an arbitrary attribute.
23061d06d6bSBaptiste DaroussinThis format letter requires two
23161d06d6bSBaptiste Daroussin.Vt char *
23261d06d6bSBaptiste Daroussinarguments, the attribute name and the value.
23361d06d6bSBaptiste DaroussinThe name must not be
23461d06d6bSBaptiste Daroussin.Dv NULL .
23561d06d6bSBaptiste Daroussin.It Cm s
23661d06d6bSBaptiste DaroussinPrint a
23761d06d6bSBaptiste Daroussin.Cm style
23861d06d6bSBaptiste Daroussinattribute.
23961d06d6bSBaptiste DaroussinIf present, it must be the last format letter.
24061d06d6bSBaptiste DaroussinIt requires two
24161d06d6bSBaptiste Daroussin.Va char *
24261d06d6bSBaptiste Daroussinarguments.
24361d06d6bSBaptiste DaroussinThe first is the name of the style property, the second its value.
2447295610fSBaptiste DaroussinThe name must not be
2457295610fSBaptiste Daroussin.Dv NULL .
2467295610fSBaptiste DaroussinThe
2477295610fSBaptiste Daroussin.Cm s
2487295610fSBaptiste Daroussin.Ar fmt
2497295610fSBaptiste Daroussinletter can be repeated, each repetition requiring an additional pair of
2507295610fSBaptiste Daroussin.Va char *
2517295610fSBaptiste Daroussinarguments.
25261d06d6bSBaptiste Daroussin.El
25361d06d6bSBaptiste Daroussin.Pp
25461d06d6bSBaptiste Daroussin.Fn print_otag
25561d06d6bSBaptiste Daroussinuses the private function
25661d06d6bSBaptiste Daroussin.Fn print_encode
25761d06d6bSBaptiste Daroussinto take care of HTML encoding.
25861d06d6bSBaptiste DaroussinIf required by the element type, it remembers in
25961d06d6bSBaptiste Daroussin.Fa h
26061d06d6bSBaptiste Daroussinthat the element is open.
26161d06d6bSBaptiste DaroussinThe function
26261d06d6bSBaptiste Daroussin.Fn print_tagq
26361d06d6bSBaptiste Daroussinis used to close out all open elements up to and including
26461d06d6bSBaptiste Daroussin.Fa until ;
26561d06d6bSBaptiste Daroussin.Fn print_stagq
26661d06d6bSBaptiste Daroussinis a variant to close out all open elements up to but excluding
26761d06d6bSBaptiste Daroussin.Fa suntil .
2686d38604fSBaptiste DaroussinThe function
2696d38604fSBaptiste Daroussin.Fn html_close_paragraph
2706d38604fSBaptiste Daroussincloses all open elements that establish phrasing context,
2716d38604fSBaptiste Daroussinthus returning to the innermost flow context.
2726d38604fSBaptiste Daroussin.Pp
2736d38604fSBaptiste DaroussinThe function
2746d38604fSBaptiste Daroussin.Fn html_fillmode
2756d38604fSBaptiste Daroussinswitches to fill mode if
2766d38604fSBaptiste Daroussin.Fa want
2776d38604fSBaptiste Daroussinis
2786d38604fSBaptiste Daroussin.Dv ROFF_fi
2796d38604fSBaptiste Daroussinor to no-fill mode if
2806d38604fSBaptiste Daroussin.Fa want
2816d38604fSBaptiste Daroussinis
2826d38604fSBaptiste Daroussin.Dv ROFF_nf .
2836d38604fSBaptiste DaroussinSwitching from fill mode to no-fill mode closes the current paragraph
2846d38604fSBaptiste Daroussinand opens a
2856d38604fSBaptiste Daroussin.Aq Ic PRE
2866d38604fSBaptiste Daroussinelement.
2876d38604fSBaptiste DaroussinSwitching in the opposite direction closes the
2886d38604fSBaptiste Daroussin.Aq Ic PRE
2896d38604fSBaptiste Daroussinelement, but does not open a new paragraph.
2906d38604fSBaptiste DaroussinIf
2916d38604fSBaptiste Daroussin.Fa want
2926d38604fSBaptiste Daroussinmatches the mode that is already active, no elements are closed nor opened.
2936d38604fSBaptiste DaroussinIf
2946d38604fSBaptiste Daroussin.Fa want
2956d38604fSBaptiste Daroussinis
2966d38604fSBaptiste Daroussin.Dv TOKEN_NONE ,
2976d38604fSBaptiste Daroussinthe mode remains as it is.
2986d38604fSBaptiste Daroussin.Pp
2996d38604fSBaptiste DaroussinThe function
3006d38604fSBaptiste Daroussin.Fn html_setfont
3016d38604fSBaptiste Daroussinselects the
3026d38604fSBaptiste Daroussin.Fa font ,
3036d38604fSBaptiste Daroussinwhich can be
3046d38604fSBaptiste Daroussin.Dv ESCAPE_FONTROMAN ,
3056d38604fSBaptiste Daroussin.Dv ESCAPE_FONTBOLD ,
3066d38604fSBaptiste Daroussin.Dv ESCAPE_FONTITALIC ,
3076d38604fSBaptiste Daroussin.Dv ESCAPE_FONTBI ,
3086d38604fSBaptiste Daroussinor
3096d38604fSBaptiste Daroussin.Dv ESCAPE_FONTCW ,
3106d38604fSBaptiste Daroussinfor future text output and internally remembers
3116d38604fSBaptiste Daroussinthe font that was active before the change.
3126d38604fSBaptiste DaroussinIf the
3136d38604fSBaptiste Daroussin.Fa font
3146d38604fSBaptiste Daroussinargument is
3156d38604fSBaptiste Daroussin.Dv ESCAPE_FONTPREV ,
3166d38604fSBaptiste Daroussinthe current and the previous font are exchanged.
3176d38604fSBaptiste DaroussinThis function only changes the internal state of the
3186d38604fSBaptiste Daroussin.Fa h
3196d38604fSBaptiste Daroussinobject; no HTML elements are written yet.
3206d38604fSBaptiste DaroussinSubsequent text output will write font elements when needed.
32161d06d6bSBaptiste Daroussin.Pp
32261d06d6bSBaptiste DaroussinThe function
32361d06d6bSBaptiste Daroussin.Fn print_text
32461d06d6bSBaptiste Daroussinprints HTML element content.
32561d06d6bSBaptiste DaroussinIt uses the private function
32661d06d6bSBaptiste Daroussin.Fn print_encode
32761d06d6bSBaptiste Daroussinto take care of HTML encoding.
32861d06d6bSBaptiste DaroussinIf the document has requested a non-standard font, for example using a
32961d06d6bSBaptiste Daroussin.Xr roff 7
33061d06d6bSBaptiste Daroussin.Ic \ef
33161d06d6bSBaptiste Daroussinfont escape sequence,
33261d06d6bSBaptiste Daroussin.Fn print_text
33361d06d6bSBaptiste Daroussinwraps
33461d06d6bSBaptiste Daroussin.Fa word
33561d06d6bSBaptiste Daroussinin an HTML font selection element using the
33661d06d6bSBaptiste Daroussin.Fn print_otag
33761d06d6bSBaptiste Daroussinand
33861d06d6bSBaptiste Daroussin.Fn print_tagq
33961d06d6bSBaptiste Daroussinfunctions.
34061d06d6bSBaptiste Daroussin.Pp
34161d06d6bSBaptiste DaroussinThe function
3426d38604fSBaptiste Daroussin.Fn print_tagged_text
3436d38604fSBaptiste Daroussinis a variant of
3446d38604fSBaptiste Daroussin.Fn print_text
3456d38604fSBaptiste Daroussinthat wraps
3466d38604fSBaptiste Daroussin.Fa word
3476d38604fSBaptiste Daroussinin an
3486d38604fSBaptiste Daroussin.Aq Ic A
3496d38604fSBaptiste Daroussinelement of class
3506d38604fSBaptiste Daroussin.Qq permalink
3516d38604fSBaptiste Daroussinif
35261d06d6bSBaptiste Daroussin.Fa n
3536d38604fSBaptiste Daroussinis not
35461d06d6bSBaptiste Daroussin.Dv NULL
3556d38604fSBaptiste Daroussinand yields a segment identifier when passed to
3566d38604fSBaptiste Daroussin.Fn html_make_id .
35761d06d6bSBaptiste Daroussin.Pp
35861d06d6bSBaptiste DaroussinThe function
3596d38604fSBaptiste Daroussin.Fn html_make_id
3606d38604fSBaptiste Daroussinallocates a string to be used for the
3616d38604fSBaptiste Daroussin.Cm id
3626d38604fSBaptiste Daroussinattribute of an HTML element and/or as a segment identifier for a URI in an
3636d38604fSBaptiste Daroussin.Aq Ic A
3646d38604fSBaptiste Daroussinelement.
3656d38604fSBaptiste DaroussinIf
3666d38604fSBaptiste Daroussin.Fa n
3676d38604fSBaptiste Daroussincontains a
3686d38604fSBaptiste Daroussin.Fa tag
3696d38604fSBaptiste Daroussinattribute, it is used; otherwise, child nodes are used.
3706d38604fSBaptiste DaroussinIf
3716d38604fSBaptiste Daroussin.Fa n
3726d38604fSBaptiste Daroussinis an
3736d38604fSBaptiste Daroussin.Ic \&Sh ,
3746d38604fSBaptiste Daroussin.Ic \&Ss ,
3756d38604fSBaptiste Daroussin.Ic \&Sx ,
3766d38604fSBaptiste Daroussin.Ic SH ,
3776d38604fSBaptiste Daroussinor
3786d38604fSBaptiste Daroussin.Ic SS
3796d38604fSBaptiste Daroussinnode, the resulting string is the concatenation of the child strings;
3806d38604fSBaptiste Daroussinfor other node types, only the first child is used.
3816d38604fSBaptiste DaroussinBytes not permitted in URI-fragment strings are replaced by underscores.
3826d38604fSBaptiste DaroussinIf any of the children to be used is not a text node,
3836d38604fSBaptiste Daroussinno string is generated and
3846d38604fSBaptiste Daroussin.Dv NULL
3856d38604fSBaptiste Daroussinis returned instead.
3866d38604fSBaptiste DaroussinIf the
3876d38604fSBaptiste Daroussin.Fa unique
3886d38604fSBaptiste Daroussinargument is non-zero, deduplication is performed by appending an
3896d38604fSBaptiste Daroussinunderscore and a decimal integer, if necessary.
3906d38604fSBaptiste DaroussinIf the
3916d38604fSBaptiste Daroussin.Fa unique
3926d38604fSBaptiste Daroussinargument is 1, this is assumed to be the first call for this tag
3936d38604fSBaptiste Daroussinat this location, typically for use by
3946d38604fSBaptiste Daroussin.Dv NODE_ID ,
3956d38604fSBaptiste Daroussinso the integer is incremented before use.
3966d38604fSBaptiste DaroussinIf the
3976d38604fSBaptiste Daroussin.Fa unique
3986d38604fSBaptiste Daroussinargument is 2, this is ssumed to be the second call for this tag
3996d38604fSBaptiste Daroussinat this location, typically for use by
4006d38604fSBaptiste Daroussin.Dv NODE_HREF ,
4016d38604fSBaptiste Daroussinso the existing integer, if any, is used without incrementing it.
4026d38604fSBaptiste Daroussin.Pp
4036d38604fSBaptiste DaroussinThe function
4046d38604fSBaptiste Daroussin.Fn print_otag_id
4056d38604fSBaptiste Daroussinopens a
4066d38604fSBaptiste Daroussin.Fa tag
4076d38604fSBaptiste Daroussinelement of class
4086d38604fSBaptiste Daroussin.Fa cattr
4096d38604fSBaptiste Daroussinfor the node
4106d38604fSBaptiste Daroussin.Fa n .
4116d38604fSBaptiste DaroussinIf the flag
4126d38604fSBaptiste Daroussin.Dv NODE_ID
4136d38604fSBaptiste Daroussinis set in
4146d38604fSBaptiste Daroussin.Fa n ,
4156d38604fSBaptiste Daroussinit attempts to generate an
4166d38604fSBaptiste Daroussin.Cm id
4176d38604fSBaptiste Daroussinattribute with
4186d38604fSBaptiste Daroussin.Fn html_make_id .
4196d38604fSBaptiste DaroussinIf the flag
4206d38604fSBaptiste Daroussin.Dv NODE_HREF
4216d38604fSBaptiste Daroussinis set in
4226d38604fSBaptiste Daroussin.Fa n ,
4236d38604fSBaptiste Daroussinan
4246d38604fSBaptiste Daroussin.Aq Ic A
4256d38604fSBaptiste Daroussinelement of class
4266d38604fSBaptiste Daroussin.Qq permalink
4276d38604fSBaptiste Daroussinis added:
4286d38604fSBaptiste Daroussinoutside if
4296d38604fSBaptiste Daroussin.Fa n
4306d38604fSBaptiste Daroussingenerates an element that can only occur in phrasing context,
4316d38604fSBaptiste Daroussinor inside otherwise.
4326d38604fSBaptiste DaroussinThis function is a wrapper around
4336d38604fSBaptiste Daroussin.Fn html_make_id
4346d38604fSBaptiste Daroussinand
4356d38604fSBaptiste Daroussin.Fn print_otag ,
4366d38604fSBaptiste Daroussinautomatically chosing the
4376d38604fSBaptiste Daroussin.Fa unique
4386d38604fSBaptiste Daroussinargument appropriately and setting the
4396d38604fSBaptiste Daroussin.Fa fmt
4406d38604fSBaptiste Daroussinarguments to
4416d38604fSBaptiste Daroussin.Qq chR
4426d38604fSBaptiste Daroussinand
4436d38604fSBaptiste Daroussin.Qq ci ,
4446d38604fSBaptiste Daroussinrespectively.
4456d38604fSBaptiste Daroussin.Pp
4466d38604fSBaptiste DaroussinThe function
4476d38604fSBaptiste Daroussin.Fn print_endline
4486d38604fSBaptiste Daroussinmakes sure subsequent output starts on a new HTML output line.
4496d38604fSBaptiste DaroussinIf nothing was printed on the current output line yet, it has no effect.
4506d38604fSBaptiste DaroussinOtherwise, it appends any buffered text to the current output line,
4516d38604fSBaptiste Daroussinends the line, and updates the internal state of the
4526d38604fSBaptiste Daroussin.Fa h
4536d38604fSBaptiste Daroussinobject.
45461d06d6bSBaptiste Daroussin.Pp
45561d06d6bSBaptiste DaroussinThe functions
45661d06d6bSBaptiste Daroussin.Fn print_eqn ,
45761d06d6bSBaptiste Daroussin.Fn print_tbl ,
45861d06d6bSBaptiste Daroussinand
45961d06d6bSBaptiste Daroussin.Fn print_tblclose
46061d06d6bSBaptiste Daroussinare not yet documented.
4616d38604fSBaptiste Daroussin.Sh RETURN VALUES
4626d38604fSBaptiste DaroussinThe functions
4636d38604fSBaptiste Daroussin.Fn print_otag
4646d38604fSBaptiste Daroussinand
4656d38604fSBaptiste Daroussin.Fn print_otag_id
4666d38604fSBaptiste Daroussinreturn a pointer to a new element on the stack of HTML elements.
4676d38604fSBaptiste DaroussinWhen
4686d38604fSBaptiste Daroussin.Fn print_otag_id
4696d38604fSBaptiste Daroussinopens two elements, a pointer to the outer one is returned.
4706d38604fSBaptiste DaroussinThe memory pointed to is owned by the library and is automatically
4716d38604fSBaptiste Daroussin.Xr free 3 Ns d
4726d38604fSBaptiste Daroussinwhen
4736d38604fSBaptiste Daroussin.Fn print_tagq
4746d38604fSBaptiste Daroussinis called on it or when
4756d38604fSBaptiste Daroussin.Fn print_stagq
4766d38604fSBaptiste Daroussinis called on a parent element.
4776d38604fSBaptiste Daroussin.Pp
4786d38604fSBaptiste DaroussinThe function
4796d38604fSBaptiste Daroussin.Fn html_fillmode
4806d38604fSBaptiste Daroussinreturns
4816d38604fSBaptiste Daroussin.Dv ROFF_fi
4826d38604fSBaptiste Daroussinif fill mode was active before the call or
4836d38604fSBaptiste Daroussin.Dv ROFF_nf
4846d38604fSBaptiste Daroussinotherwise.
4856d38604fSBaptiste Daroussin.Pp
4866d38604fSBaptiste DaroussinThe function
4876d38604fSBaptiste Daroussin.Fn html_make_id
4886d38604fSBaptiste Daroussinreturns a newly allocated string or
4896d38604fSBaptiste Daroussin.Dv NULL
4906d38604fSBaptiste Daroussinif
4916d38604fSBaptiste Daroussin.Fa n
4926d38604fSBaptiste Daroussinlacks text data to create the attribute from.
4936d38604fSBaptiste DaroussinThe caller is responsible for
4946d38604fSBaptiste Daroussin.Xr free 3 Ns ing
4956d38604fSBaptiste Daroussinthe returned string after using it.
4966d38604fSBaptiste Daroussin.Pp
4976d38604fSBaptiste DaroussinIn case of
4986d38604fSBaptiste Daroussin.Xr malloc 3
4996d38604fSBaptiste Daroussinfailure, these functions do not return but call
5006d38604fSBaptiste Daroussin.Xr err 3 .
50161d06d6bSBaptiste Daroussin.Sh FILES
50261d06d6bSBaptiste Daroussin.Bl -tag -width mandoc_aux.c -compact
50361d06d6bSBaptiste Daroussin.It Pa main.h
50461d06d6bSBaptiste Daroussindeclarations of public functions for use by the main program,
50561d06d6bSBaptiste Daroussinnot yet documented
50661d06d6bSBaptiste Daroussin.It Pa html.h
50761d06d6bSBaptiste Daroussindeclarations of data types and private functions
50861d06d6bSBaptiste Daroussinfor use by language-specific HTML formatters
50961d06d6bSBaptiste Daroussin.It Pa html.c
51061d06d6bSBaptiste Daroussinmain HTML formatting engine and utility functions
51161d06d6bSBaptiste Daroussin.It Pa mdoc_html.c
51261d06d6bSBaptiste Daroussin.Xr mdoc 7
51361d06d6bSBaptiste DaroussinHTML formatter
51461d06d6bSBaptiste Daroussin.It Pa man_html.c
51561d06d6bSBaptiste Daroussin.Xr man 7
51661d06d6bSBaptiste DaroussinHTML formatter
51761d06d6bSBaptiste Daroussin.It Pa tbl_html.c
51861d06d6bSBaptiste Daroussin.Xr tbl 7
51961d06d6bSBaptiste DaroussinHTML formatter
52061d06d6bSBaptiste Daroussin.It Pa eqn_html.c
52161d06d6bSBaptiste Daroussin.Xr eqn 7
52261d06d6bSBaptiste DaroussinHTML formatter
5236d38604fSBaptiste Daroussin.It Pa roff_html.c
5246d38604fSBaptiste Daroussin.Xr roff 7
5256d38604fSBaptiste DaroussinHTML formatter, handling requests like
5266d38604fSBaptiste Daroussin.Ic br ,
5276d38604fSBaptiste Daroussin.Ic ce ,
5286d38604fSBaptiste Daroussin.Ic fi ,
5296d38604fSBaptiste Daroussin.Ic ft ,
5306d38604fSBaptiste Daroussin.Ic nf ,
5316d38604fSBaptiste Daroussin.Ic rj ,
5326d38604fSBaptiste Daroussinand
5336d38604fSBaptiste Daroussin.Ic sp .
53461d06d6bSBaptiste Daroussin.It Pa out.h
53561d06d6bSBaptiste Daroussindeclarations of data types and private functions
53661d06d6bSBaptiste Daroussinfor shared use by all mandoc formatters,
53761d06d6bSBaptiste Daroussinnot yet documented
53861d06d6bSBaptiste Daroussin.It Pa out.c
53961d06d6bSBaptiste Daroussinprivate functions for shared use by all mandoc formatters
54061d06d6bSBaptiste Daroussin.It Pa mandoc_aux.h
54161d06d6bSBaptiste Daroussindeclarations of common mandoc utility functions, see
54261d06d6bSBaptiste Daroussin.Xr mandoc 3
54361d06d6bSBaptiste Daroussin.It Pa mandoc_aux.c
54461d06d6bSBaptiste Daroussinimplementation of common mandoc utility functions
54561d06d6bSBaptiste Daroussin.El
54661d06d6bSBaptiste Daroussin.Sh SEE ALSO
54761d06d6bSBaptiste Daroussin.Xr mandoc 1 ,
54861d06d6bSBaptiste Daroussin.Xr mandoc 3 ,
54961d06d6bSBaptiste Daroussin.Xr man.cgi 8
55061d06d6bSBaptiste Daroussin.Sh AUTHORS
55161d06d6bSBaptiste Daroussin.An -nosplit
55261d06d6bSBaptiste DaroussinThe mandoc HTML formatter was written by
55361d06d6bSBaptiste Daroussin.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv .
55461d06d6bSBaptiste DaroussinIt is maintained by
55561d06d6bSBaptiste Daroussin.An Ingo Schwarze Aq Mt schwarze@openbsd.org ,
55661d06d6bSBaptiste Daroussinwho also wrote this manual.
557