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