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