1 /* $Vendor-Id: term.h,v 1.58 2010/06/07 20:57:09 kristaps Exp $ */ 2 /* 3 * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se> 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 TERM_H 18 #define TERM_H 19 20 __BEGIN_DECLS 21 22 struct termp; 23 24 enum termenc { 25 TERMENC_ASCII 26 }; 27 28 enum termtype { 29 TERMTYPE_CHAR, 30 TERMTYPE_PS 31 }; 32 33 enum termfont { 34 TERMFONT_NONE = 0, 35 TERMFONT_BOLD, 36 TERMFONT_UNDER 37 }; 38 39 #define TERM_MAXMARGIN 100000 /* FIXME */ 40 41 typedef void (*term_margin)(struct termp *, const void *); 42 43 struct termp { 44 enum termtype type; 45 size_t defrmargin; /* Right margin of the device.. */ 46 size_t rmargin; /* Current right margin. */ 47 size_t maxrmargin; /* Max right margin. */ 48 size_t maxcols; /* Max size of buf. */ 49 size_t offset; /* Margin offest. */ 50 size_t tabwidth; /* Distance of tab positions. */ 51 size_t col; /* Bytes in buf. */ 52 size_t viscol; /* Chars on current line. */ 53 int overstep; /* See termp_flushln(). */ 54 int flags; 55 #define TERMP_SENTENCE (1 << 1) /* Space before a sentence. */ 56 #define TERMP_NOSPACE (1 << 2) /* No space before words. */ 57 #define TERMP_NOLPAD (1 << 3) /* See term_flushln(). */ 58 #define TERMP_NOBREAK (1 << 4) /* See term_flushln(). */ 59 #define TERMP_IGNDELIM (1 << 6) /* Delims like regulars. */ 60 #define TERMP_NONOSPACE (1 << 7) /* No space (no autounset). */ 61 #define TERMP_DANGLE (1 << 8) /* See term_flushln(). */ 62 #define TERMP_HANG (1 << 9) /* See term_flushln(). */ 63 #define TERMP_TWOSPACE (1 << 10) /* See term_flushln(). */ 64 #define TERMP_NOSPLIT (1 << 11) /* See termp_an_pre/post(). */ 65 #define TERMP_SPLIT (1 << 12) /* See termp_an_pre/post(). */ 66 #define TERMP_ANPREC (1 << 13) /* See termp_an_pre(). */ 67 char *buf; /* Output buffer. */ 68 enum termenc enc; /* Type of encoding. */ 69 void *symtab; /* Encoded-symbol table. */ 70 enum termfont fontl; /* Last font set. */ 71 enum termfont fontq[10]; /* Symmetric fonts. */ 72 int fonti; /* Index of font stack. */ 73 term_margin headf; /* invoked to print head */ 74 term_margin footf; /* invoked to print foot */ 75 const void *argf; /* arg for headf/footf */ 76 int psstate; /* -Tps: state of ps output */ 77 #define PS_INLINE (1 << 0) 78 #define PS_MARGINS (1 << 1) 79 size_t pscol; /* -Tps: visible column */ 80 size_t psrow; /* -Tps: visible row */ 81 size_t pspage; /* -Tps: current page */ 82 }; 83 84 void term_newln(struct termp *); 85 void term_vspace(struct termp *); 86 void term_word(struct termp *, const char *); 87 void term_flushln(struct termp *); 88 void term_begin(struct termp *, term_margin, 89 term_margin, const void *); 90 void term_end(struct termp *); 91 92 size_t term_hspan(const struct roffsu *); 93 size_t term_vspan(const struct roffsu *); 94 95 enum termfont term_fonttop(struct termp *); 96 const void *term_fontq(struct termp *); 97 void term_fontpush(struct termp *, enum termfont); 98 void term_fontpop(struct termp *); 99 void term_fontpopq(struct termp *, const void *); 100 void term_fontrepl(struct termp *, enum termfont); 101 void term_fontlast(struct termp *); 102 103 __END_DECLS 104 105 #endif /*!TERM_H*/ 106