diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-01-17 01:47:51 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-01-17 01:47:51 +0000 |
commit | 3786665f3a0f980a9bbbcb5cd8d674cc679491ab (patch) | |
tree | c02a6d2574b2570b9d9e8e04140906512a268118 /mandoc_html.3 | |
parent | 7285dcc5cc02f2e79f96fd4647cb1f1ac094b26b (diff) | |
download | mandoc-3786665f3a0f980a9bbbcb5cd8d674cc679491ab.tar.gz |
Simplify the usage of print_otag() by making it accept a variable
number of arguments.
Delete struct htmlpair and all the PAIR_*() macros.
Delete enum htmlattr, handle that in print_otag() instead.
Minus 190 lines of code; no functional change except better ordering
of attributes (class before style) in three cases.
Diffstat (limited to 'mandoc_html.3')
-rw-r--r-- | mandoc_html.3 | 129 |
1 files changed, 112 insertions, 17 deletions
diff --git a/mandoc_html.3 b/mandoc_html.3 index 54273da1..5e132979 100644 --- a/mandoc_html.3 +++ b/mandoc_html.3 @@ -30,8 +30,8 @@ .Fo print_otag .Fa "struct html *h" .Fa "enum htmltag tag" -.Fa "int sz" -.Fa "const struct htmlpair *p" +.Fa "const char *fmt" +.Fa ... .Fc .Ft void .Fo print_tagq @@ -84,15 +84,6 @@ These structures are declared in .Bl -tag -width Ds .It Vt struct html Internal state of the HTML formatter. -.It Vt struct htmlpair -Holds one HTML attribute. -Members are -.Fa "enum htmlattr key" -and -.Fa "const char *val" . -Helper macros -.Fn PAIR_* -are provided to support initialization of such structures. .It Vt struct tag One entry for the LIFO stack of HTML elements. Members are @@ -134,12 +125,116 @@ The function .Fn print_otag prints the start tag of an HTML element with the name .Fa tag , -including the -.Fa sz -attributes that can optionally be provided in the -.Fa p -array. -It uses the private function +optionally including the attributes specified by +.Fa fmt . +If +.Fa fmt +is the empty string, no attributes are written. +Each letter of +.Fa fmt +specifies one attribute to write. +Most attributes require one +.Va char * +argument which becomes the value of the attribute. +The arguments have to be given in the same order as the attribute letters. +.Bl -tag -width 1n -offset indent +.It Cm c +Print a +.Cm class +attribute. +.It Cm h +Print a +.Cm href +attribute. +.It Cm i +Print an +.Cm id +attribute. +.It Cm \&? +Print an arbitrary attribute. +This format letter requires two +.Vt char * +arguments, the attribute name and the value. +.It Cm s +Print a +.Cm style +attribute. +If present, it must be the last format letter. +In contrast to the other format letters, this one does not yet +print the value and does not require an argument. +Instead, the rest of the format string consists of pairs of +argument type letters and style name letters. +.El +.Pp +Argument type letters each require on argument as follows: +.Bl -tag -width 1n -offset indent +.It Cm h +Requires one +.Vt int +argument, interpreted as a horizontal length in units of +.Dv SCALE_EN . +.It Cm s +Requires one +.Vt char * +argument, used as a style value. +.It Cm u +Requires one +.Vt struct roffsu * +argument, used as a length. +.It Cm v +Requires one +.Vt int +argument, interpreted as a vertical length in units of +.Dv SCALE_VS . +.It Cm w +Requires one +.Vt char * +argument, interpreted as an +.Xr mdoc 7 Ns -style +width specifier. +.El +.Pp +Style name letters decide what to do with the preceding argument: +.Bl -tag -width 1n -offset indent +.It Cm b +Set +.Cm margin-bottom +to the given length. +.It Cm h +Set +.Cm height +to the given length. +.It Cm i +Set +.Cm text-indent +to the given length. +.It Cm l +Set +.Cm margin-left +to the given length. +.It Cm t +Set +.Cm margin-top +to the given length. +.It Cm w +Set +.Cm width +to the given length. +.It Cm W +Set +.Cm min-width +to the given length. +.It Cm \&? +The special pair +.Cm s? +requires two +.Vt char * +arguments. +The first is the style name, the second its value. +.El +.Pp +.Fn print_otag +uses the private function .Fn print_attr which in turn uses the private function .Fn print_encode |