xref: /freebsd/contrib/mandoc/mchars_alloc.3 (revision 01d4e2149e5566e5d9394913dc9fb032da259e0b)
1*61d06d6bSBaptiste Daroussin.\"	$Id: mchars_alloc.3,v 1.4 2016/07/07 19:19:01 schwarze Exp $
2*61d06d6bSBaptiste Daroussin.\"
3*61d06d6bSBaptiste Daroussin.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
4*61d06d6bSBaptiste Daroussin.\"
5*61d06d6bSBaptiste Daroussin.\" Permission to use, copy, modify, and distribute this software for any
6*61d06d6bSBaptiste Daroussin.\" purpose with or without fee is hereby granted, provided that the above
7*61d06d6bSBaptiste Daroussin.\" copyright notice and this permission notice appear in all copies.
8*61d06d6bSBaptiste Daroussin.\"
9*61d06d6bSBaptiste Daroussin.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*61d06d6bSBaptiste Daroussin.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*61d06d6bSBaptiste Daroussin.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*61d06d6bSBaptiste Daroussin.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*61d06d6bSBaptiste Daroussin.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*61d06d6bSBaptiste Daroussin.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*61d06d6bSBaptiste Daroussin.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*61d06d6bSBaptiste Daroussin.\"
17*61d06d6bSBaptiste Daroussin.Dd $Mdocdate: July 7 2016 $
18*61d06d6bSBaptiste Daroussin.Dt MCHARS_ALLOC 3
19*61d06d6bSBaptiste Daroussin.Os
20*61d06d6bSBaptiste Daroussin.Sh NAME
21*61d06d6bSBaptiste Daroussin.Nm mchars_alloc ,
22*61d06d6bSBaptiste Daroussin.Nm mchars_free ,
23*61d06d6bSBaptiste Daroussin.Nm mchars_num2char ,
24*61d06d6bSBaptiste Daroussin.Nm mchars_num2uc ,
25*61d06d6bSBaptiste Daroussin.Nm mchars_spec2cp ,
26*61d06d6bSBaptiste Daroussin.Nm mchars_spec2str ,
27*61d06d6bSBaptiste Daroussin.Nm mchars_uc2str
28*61d06d6bSBaptiste Daroussin.Nd character table for mandoc
29*61d06d6bSBaptiste Daroussin.Sh SYNOPSIS
30*61d06d6bSBaptiste Daroussin.In sys/types.h
31*61d06d6bSBaptiste Daroussin.In mandoc.h
32*61d06d6bSBaptiste Daroussin.Ft void
33*61d06d6bSBaptiste Daroussin.Fn mchars_alloc void
34*61d06d6bSBaptiste Daroussin.Ft void
35*61d06d6bSBaptiste Daroussin.Fn mchars_free void
36*61d06d6bSBaptiste Daroussin.Ft char
37*61d06d6bSBaptiste Daroussin.Fo mchars_num2char
38*61d06d6bSBaptiste Daroussin.Fa "const char *decimal"
39*61d06d6bSBaptiste Daroussin.Fa "size_t sz"
40*61d06d6bSBaptiste Daroussin.Fc
41*61d06d6bSBaptiste Daroussin.Ft int
42*61d06d6bSBaptiste Daroussin.Fo mchars_num2uc
43*61d06d6bSBaptiste Daroussin.Fa "const char *hexadecimal"
44*61d06d6bSBaptiste Daroussin.Fa "size_t sz"
45*61d06d6bSBaptiste Daroussin.Fc
46*61d06d6bSBaptiste Daroussin.Ft int
47*61d06d6bSBaptiste Daroussin.Fo mchars_spec2cp
48*61d06d6bSBaptiste Daroussin.Fa "const char *name"
49*61d06d6bSBaptiste Daroussin.Fa "size_t sz"
50*61d06d6bSBaptiste Daroussin.Fc
51*61d06d6bSBaptiste Daroussin.Ft "const char *"
52*61d06d6bSBaptiste Daroussin.Fo mchars_spec2str
53*61d06d6bSBaptiste Daroussin.Fa "const char *name"
54*61d06d6bSBaptiste Daroussin.Fa "size_t sz"
55*61d06d6bSBaptiste Daroussin.Fa "size_t *rsz"
56*61d06d6bSBaptiste Daroussin.Fc
57*61d06d6bSBaptiste Daroussin.Ft "const char *"
58*61d06d6bSBaptiste Daroussin.Fn mchars_uc2str "int codepoint"
59*61d06d6bSBaptiste Daroussin.Sh DESCRIPTION
60*61d06d6bSBaptiste DaroussinThese functions translate Unicode character numbers and
61*61d06d6bSBaptiste Daroussin.Xr roff 7
62*61d06d6bSBaptiste Daroussincharacter names into glyphs.
63*61d06d6bSBaptiste DaroussinSee
64*61d06d6bSBaptiste Daroussin.Xr mandoc_char 7
65*61d06d6bSBaptiste Daroussinfor a list of
66*61d06d6bSBaptiste Daroussin.Xr roff 7
67*61d06d6bSBaptiste Daroussinspecial characters.
68*61d06d6bSBaptiste DaroussinThese functions are intended for external use by programs formatting
69*61d06d6bSBaptiste Daroussin.Xr mdoc 7
70*61d06d6bSBaptiste Daroussinand
71*61d06d6bSBaptiste Daroussin.Xr man 7
72*61d06d6bSBaptiste Daroussinpages for output, for example the
73*61d06d6bSBaptiste Daroussin.Xr mandoc 1
74*61d06d6bSBaptiste Daroussinoutput formatter modules and
75*61d06d6bSBaptiste Daroussin.Xr makewhatis 8 .
76*61d06d6bSBaptiste DaroussinThe
77*61d06d6bSBaptiste Daroussin.Fa decimal ,
78*61d06d6bSBaptiste Daroussin.Fa hexadecimal ,
79*61d06d6bSBaptiste Daroussin.Fa name ,
80*61d06d6bSBaptiste Daroussinand
81*61d06d6bSBaptiste Daroussin.Fa size
82*61d06d6bSBaptiste Daroussininput arguments are usually obtained from the
83*61d06d6bSBaptiste Daroussin.Xr mandoc_escape 3
84*61d06d6bSBaptiste Daroussinparser function.
85*61d06d6bSBaptiste Daroussin.Pp
86*61d06d6bSBaptiste DaroussinThe function
87*61d06d6bSBaptiste Daroussin.Fn mchars_num2char
88*61d06d6bSBaptiste Daroussinconverts a
89*61d06d6bSBaptiste Daroussin.Fa decimal
90*61d06d6bSBaptiste Daroussinstring representation of a character number consisting of
91*61d06d6bSBaptiste Daroussin.Fa sz
92*61d06d6bSBaptiste Daroussindigits into a printable ASCII character.
93*61d06d6bSBaptiste DaroussinIf the input string is non-numeric or does not represent a printable
94*61d06d6bSBaptiste DaroussinASCII character, the NUL character
95*61d06d6bSBaptiste Daroussin.Pq Sq \e0
96*61d06d6bSBaptiste Daroussinis returned.
97*61d06d6bSBaptiste DaroussinFor example, the
98*61d06d6bSBaptiste Daroussin.Xr mandoc 1
99*61d06d6bSBaptiste Daroussin.Fl Tascii ,
100*61d06d6bSBaptiste Daroussin.Fl Tutf8 ,
101*61d06d6bSBaptiste Daroussinand
102*61d06d6bSBaptiste Daroussin.Fl Thtml
103*61d06d6bSBaptiste Daroussinoutput modules use this function to render
104*61d06d6bSBaptiste Daroussin.Xr roff 7
105*61d06d6bSBaptiste Daroussin.Ic \eN
106*61d06d6bSBaptiste Daroussinescape sequences.
107*61d06d6bSBaptiste Daroussin.Pp
108*61d06d6bSBaptiste DaroussinThe function
109*61d06d6bSBaptiste Daroussin.Fn mchars_num2uc
110*61d06d6bSBaptiste Daroussinconverts a
111*61d06d6bSBaptiste Daroussin.Fa hexadecimal
112*61d06d6bSBaptiste Daroussinstring representation of a Unicode codepoint consisting of
113*61d06d6bSBaptiste Daroussin.Fa sz
114*61d06d6bSBaptiste Daroussindigits into an integer representation.
115*61d06d6bSBaptiste DaroussinIf the input string is non-numeric or represents an ASCII character,
116*61d06d6bSBaptiste Daroussinthe NUL character
117*61d06d6bSBaptiste Daroussin.Pq Sq \e0
118*61d06d6bSBaptiste Daroussinis returned.
119*61d06d6bSBaptiste DaroussinFor example, the
120*61d06d6bSBaptiste Daroussin.Xr mandoc 1
121*61d06d6bSBaptiste Daroussin.Fl Tutf8
122*61d06d6bSBaptiste Daroussinand
123*61d06d6bSBaptiste Daroussin.Fl Thtml
124*61d06d6bSBaptiste Daroussinoutput modules use this function to render
125*61d06d6bSBaptiste Daroussin.Xr roff 7
126*61d06d6bSBaptiste Daroussin.Ic \e[u Ns Ar XXXX Ns Ic \&]
127*61d06d6bSBaptiste Daroussinand
128*61d06d6bSBaptiste Daroussin.Ic \eC\(aqu Ns Ar XXXX Ns Ic \(aq
129*61d06d6bSBaptiste Daroussinescape sequences.
130*61d06d6bSBaptiste Daroussin.Pp
131*61d06d6bSBaptiste DaroussinThe function
132*61d06d6bSBaptiste Daroussin.Fn mchars_alloc
133*61d06d6bSBaptiste Daroussininitializes a static
134*61d06d6bSBaptiste Daroussin.Vt "struct ohash"
135*61d06d6bSBaptiste Daroussinobject for subsequent use by the following two lookup functions.
136*61d06d6bSBaptiste DaroussinWhen no longer needed, this object can be destroyed with
137*61d06d6bSBaptiste Daroussin.Fn mchars_free .
138*61d06d6bSBaptiste Daroussin.Pp
139*61d06d6bSBaptiste DaroussinThe function
140*61d06d6bSBaptiste Daroussin.Fn mchars_spec2cp
141*61d06d6bSBaptiste Daroussinlooks up a
142*61d06d6bSBaptiste Daroussin.Xr roff 7
143*61d06d6bSBaptiste Daroussinspecial character
144*61d06d6bSBaptiste Daroussin.Fa name
145*61d06d6bSBaptiste Daroussinconsisting of
146*61d06d6bSBaptiste Daroussin.Fa sz
147*61d06d6bSBaptiste Daroussincharacters and returns the corresponding Unicode codepoint.
148*61d06d6bSBaptiste DaroussinIf the
149*61d06d6bSBaptiste Daroussin.Ar name
150*61d06d6bSBaptiste Daroussinis not recognized, \-1 is returned.
151*61d06d6bSBaptiste DaroussinFor example, the
152*61d06d6bSBaptiste Daroussin.Xr mandoc 1
153*61d06d6bSBaptiste Daroussin.Fl Tutf8
154*61d06d6bSBaptiste Daroussinand
155*61d06d6bSBaptiste Daroussin.Fl Thtml
156*61d06d6bSBaptiste Daroussinoutput modules use this function to render
157*61d06d6bSBaptiste Daroussin.Xr roff 7
158*61d06d6bSBaptiste Daroussin.Ic \e[ Ns Ar name Ns Ic \&]
159*61d06d6bSBaptiste Daroussinand
160*61d06d6bSBaptiste Daroussin.Ic \eC\(aq Ns Ar name Ns Ic \(aq
161*61d06d6bSBaptiste Daroussinescape sequences.
162*61d06d6bSBaptiste Daroussin.Pp
163*61d06d6bSBaptiste DaroussinThe function
164*61d06d6bSBaptiste Daroussin.Fn mchars_spec2str
165*61d06d6bSBaptiste Daroussinlooks up a
166*61d06d6bSBaptiste Daroussin.Xr roff 7
167*61d06d6bSBaptiste Daroussinspecial character
168*61d06d6bSBaptiste Daroussin.Fa name
169*61d06d6bSBaptiste Daroussinconsisting of
170*61d06d6bSBaptiste Daroussin.Fa sz
171*61d06d6bSBaptiste Daroussincharacters and returns an ASCII string representation.
172*61d06d6bSBaptiste DaroussinThe length of the representation is returned in
173*61d06d6bSBaptiste Daroussin.Fa rsz .
174*61d06d6bSBaptiste DaroussinIn many cases, the meaning of such ASCII representations
175*61d06d6bSBaptiste Daroussinis not quite obvious, so using
176*61d06d6bSBaptiste Daroussin.Xr roff 7
177*61d06d6bSBaptiste Daroussinspecial characters in documents intended for ASCII rendering
178*61d06d6bSBaptiste Daroussinis usually a bad idea.
179*61d06d6bSBaptiste DaroussinIf the
180*61d06d6bSBaptiste Daroussin.Ar name
181*61d06d6bSBaptiste Daroussinis not recognized,
182*61d06d6bSBaptiste Daroussin.Dv NULL
183*61d06d6bSBaptiste Daroussinis returned.
184*61d06d6bSBaptiste DaroussinFor example,
185*61d06d6bSBaptiste Daroussin.Xr makewhatis 8
186*61d06d6bSBaptiste Daroussinand the
187*61d06d6bSBaptiste Daroussin.Xr mandoc 1
188*61d06d6bSBaptiste Daroussin.Fl Tascii
189*61d06d6bSBaptiste Daroussinoutput module use this function to render
190*61d06d6bSBaptiste Daroussin.Xr roff 7
191*61d06d6bSBaptiste Daroussin.Ic \e[ Ns Ar name Ns Ic \&]
192*61d06d6bSBaptiste Daroussinand
193*61d06d6bSBaptiste Daroussin.Ic \eC\(aq Ns Ar name Ns Ic \(aq
194*61d06d6bSBaptiste Daroussinescape sequences.
195*61d06d6bSBaptiste Daroussin.Pp
196*61d06d6bSBaptiste DaroussinThe function
197*61d06d6bSBaptiste Daroussin.Fn mchars_uc2str
198*61d06d6bSBaptiste Daroussinperforms a reverse lookup of the Unicode
199*61d06d6bSBaptiste Daroussin.Fa codepoint
200*61d06d6bSBaptiste Daroussinand returns an ASCII string representation, or the string
201*61d06d6bSBaptiste Daroussin.Qq <?>
202*61d06d6bSBaptiste Daroussinif none is available.
203*61d06d6bSBaptiste Daroussin.Sh FILES
204*61d06d6bSBaptiste DaroussinThese funtions are implemented in the file
205*61d06d6bSBaptiste Daroussin.Pa chars.c .
206*61d06d6bSBaptiste Daroussin.Sh SEE ALSO
207*61d06d6bSBaptiste Daroussin.Xr mandoc 1 ,
208*61d06d6bSBaptiste Daroussin.Xr mandoc_escape 3 ,
209*61d06d6bSBaptiste Daroussin.Xr ohash_init 3 ,
210*61d06d6bSBaptiste Daroussin.Xr mandoc_char 7 ,
211*61d06d6bSBaptiste Daroussin.Xr roff 7
212*61d06d6bSBaptiste Daroussin.Sh HISTORY
213*61d06d6bSBaptiste DaroussinThese functions and their predecessors have been available since the
214*61d06d6bSBaptiste Daroussinfollowing mandoc versions:
215*61d06d6bSBaptiste Daroussin.Bl -column "mchars_num2char()" "1.11.3" "chars_num2char()" "1.10.10"
216*61d06d6bSBaptiste Daroussin.It Sy function Ta since Ta Sy predecessor Ta since
217*61d06d6bSBaptiste Daroussin.It Fn mchars_alloc Ta 1.11.3 Ta Fn ascii2htab Ta 1.5.3
218*61d06d6bSBaptiste Daroussin.It Fn mchars_free Ta 1.11.2 Ta Fn asciifree Ta 1.6.0
219*61d06d6bSBaptiste Daroussin.It Fn mchars_num2char Ta 1.11.2 Ta Fn chars_num2char Ta 1.10.10
220*61d06d6bSBaptiste Daroussin.It Fn mchars_num2uc Ta 1.11.3 Ta \(em Ta \(em
221*61d06d6bSBaptiste Daroussin.It Fn mchars_spec2cp Ta 1.11.2 Ta Fn chars_spec2cp Ta 1.10.5
222*61d06d6bSBaptiste Daroussin.It Fn mchars_spec2str Ta 1.11.2 Ta Fn a2ascii Ta 1.5.3
223*61d06d6bSBaptiste Daroussin.It Fn mchars_uc2str Ta 1.13.2 Ta \(em Ta \(em
224*61d06d6bSBaptiste Daroussin.El
225*61d06d6bSBaptiste Daroussin.Sh AUTHORS
226*61d06d6bSBaptiste Daroussin.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
227*61d06d6bSBaptiste Daroussin.An Ingo Schwarze Aq Mt schwarze@openbsd.org
228