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