xref: /dragonfly/contrib/mdocml/out.h (revision 80387638)
1*80387638SSascha Wildner /*	$Id: out.h,v 1.15 2011/01/05 15:37:23 kristaps Exp $ */
2*80387638SSascha Wildner /*
3*80387638SSascha Wildner  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
4*80387638SSascha Wildner  *
5*80387638SSascha Wildner  * Permission to use, copy, modify, and distribute this software for any
6*80387638SSascha Wildner  * purpose with or without fee is hereby granted, provided that the above
7*80387638SSascha Wildner  * copyright notice and this permission notice appear in all copies.
8*80387638SSascha Wildner  *
9*80387638SSascha Wildner  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*80387638SSascha Wildner  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*80387638SSascha Wildner  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*80387638SSascha Wildner  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*80387638SSascha Wildner  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*80387638SSascha Wildner  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*80387638SSascha Wildner  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*80387638SSascha Wildner  */
17*80387638SSascha Wildner #ifndef OUT_H
18*80387638SSascha Wildner #define OUT_H
19*80387638SSascha Wildner 
20*80387638SSascha Wildner #define	DATESIZ		24
21*80387638SSascha Wildner 
22*80387638SSascha Wildner __BEGIN_DECLS
23*80387638SSascha Wildner 
24*80387638SSascha Wildner struct	roffcol {
25*80387638SSascha Wildner 	size_t		 width; /* width of cell */
26*80387638SSascha Wildner 	size_t		 decimal; /* decimal position in cell */
27*80387638SSascha Wildner };
28*80387638SSascha Wildner 
29*80387638SSascha Wildner typedef	size_t (*tbl_strlen)(const char *, void *);
30*80387638SSascha Wildner typedef	size_t (*tbl_len)(size_t, void *);
31*80387638SSascha Wildner 
32*80387638SSascha Wildner struct	rofftbl {
33*80387638SSascha Wildner 	tbl_strlen	 slen; /* calculate string length */
34*80387638SSascha Wildner 	tbl_len		 len; /* produce width of empty space */
35*80387638SSascha Wildner 	struct roffcol	*cols; /* master column specifiers */
36*80387638SSascha Wildner 	void		*arg; /* passed to slen and len */
37*80387638SSascha Wildner };
38*80387638SSascha Wildner 
39*80387638SSascha Wildner enum	roffscale {
40*80387638SSascha Wildner 	SCALE_CM,
41*80387638SSascha Wildner 	SCALE_IN,
42*80387638SSascha Wildner 	SCALE_PC,
43*80387638SSascha Wildner 	SCALE_PT,
44*80387638SSascha Wildner 	SCALE_EM,
45*80387638SSascha Wildner 	SCALE_MM,
46*80387638SSascha Wildner 	SCALE_EN,
47*80387638SSascha Wildner 	SCALE_BU,
48*80387638SSascha Wildner 	SCALE_VS,
49*80387638SSascha Wildner 	SCALE_FS,
50*80387638SSascha Wildner 	SCALE_MAX
51*80387638SSascha Wildner };
52*80387638SSascha Wildner 
53*80387638SSascha Wildner enum	roffdeco {
54*80387638SSascha Wildner 	DECO_NONE,
55*80387638SSascha Wildner 	DECO_SPECIAL, /* special character */
56*80387638SSascha Wildner 	DECO_SSPECIAL, /* single-char special */
57*80387638SSascha Wildner 	DECO_RESERVED, /* reserved word */
58*80387638SSascha Wildner 	DECO_BOLD, /* bold font */
59*80387638SSascha Wildner 	DECO_ITALIC, /* italic font */
60*80387638SSascha Wildner 	DECO_ROMAN, /* "normal" undecorated font */
61*80387638SSascha Wildner 	DECO_PREVIOUS, /* revert to previous font */
62*80387638SSascha Wildner 	DECO_NOSPACE, /* suppress spacing */
63*80387638SSascha Wildner 	DECO_FONT, /* font */
64*80387638SSascha Wildner 	DECO_FFONT, /* font family */
65*80387638SSascha Wildner 	DECO_MAX
66*80387638SSascha Wildner };
67*80387638SSascha Wildner 
68*80387638SSascha Wildner struct	roffsu {
69*80387638SSascha Wildner 	enum roffscale	  unit;
70*80387638SSascha Wildner 	double		  scale;
71*80387638SSascha Wildner };
72*80387638SSascha Wildner 
73*80387638SSascha Wildner #define	SCALE_VS_INIT(p, v) \
74*80387638SSascha Wildner 	do { (p)->unit = SCALE_VS; \
75*80387638SSascha Wildner 	     (p)->scale = (v); } \
76*80387638SSascha Wildner 	while (/* CONSTCOND */ 0)
77*80387638SSascha Wildner 
78*80387638SSascha Wildner #define	SCALE_HS_INIT(p, v) \
79*80387638SSascha Wildner 	do { (p)->unit = SCALE_BU; \
80*80387638SSascha Wildner 	     (p)->scale = (v); } \
81*80387638SSascha Wildner 	while (/* CONSTCOND */ 0)
82*80387638SSascha Wildner 
83*80387638SSascha Wildner int	  a2roffsu(const char *, struct roffsu *, enum roffscale);
84*80387638SSascha Wildner int	  a2roffdeco(enum roffdeco *, const char **, size_t *);
85*80387638SSascha Wildner void	  time2a(time_t, char *, size_t);
86*80387638SSascha Wildner void	  tblcalc(struct rofftbl *tbl, const struct tbl_span *);
87*80387638SSascha Wildner 
88*80387638SSascha Wildner __END_DECLS
89*80387638SSascha Wildner 
90*80387638SSascha Wildner #endif /*!OUT_H*/
91