1241675Suqs/* $Id: term.h,v 1.90 2011/12/04 23:10:52 schwarze Exp $ */ 2241675Suqs/* 3241675Suqs * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4241675Suqs * 5241675Suqs * Permission to use, copy, modify, and distribute this software for any 6241675Suqs * purpose with or without fee is hereby granted, provided that the above 7241675Suqs * copyright notice and this permission notice appear in all copies. 8241675Suqs * 9241675Suqs * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10241675Suqs * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11241675Suqs * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12241675Suqs * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13241675Suqs * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14241675Suqs * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15241675Suqs * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16241675Suqs */ 17241675Suqs#ifndef TERM_H 18241675Suqs#define TERM_H 19241675Suqs 20241675Suqs__BEGIN_DECLS 21241675Suqs 22241675Suqsstruct termp; 23241675Suqs 24241675Suqsenum termenc { 25241675Suqs TERMENC_ASCII, 26241675Suqs TERMENC_LOCALE, 27241675Suqs TERMENC_UTF8 28241675Suqs}; 29241675Suqs 30241675Suqsenum termtype { 31241675Suqs TERMTYPE_CHAR, 32241675Suqs TERMTYPE_PS, 33241675Suqs TERMTYPE_PDF 34241675Suqs}; 35241675Suqs 36241675Suqsenum termfont { 37241675Suqs TERMFONT_NONE = 0, 38241675Suqs TERMFONT_BOLD, 39241675Suqs TERMFONT_UNDER, 40241675Suqs TERMFONT__MAX 41241675Suqs}; 42241675Suqs 43241675Suqs#define TERM_MAXMARGIN 100000 /* FIXME */ 44241675Suqs 45241675Suqstypedef void (*term_margin)(struct termp *, const void *); 46241675Suqs 47241675Suqsstruct termp_tbl { 48241675Suqs int width; /* width in fixed chars */ 49241675Suqs int decimal; /* decimal point position */ 50241675Suqs}; 51241675Suqs 52241675Suqsstruct termp { 53241675Suqs enum termtype type; 54241675Suqs struct rofftbl tbl; /* table configuration */ 55241675Suqs int mdocstyle; /* imitate mdoc(7) output */ 56241675Suqs size_t defindent; /* Default indent for text. */ 57241675Suqs size_t defrmargin; /* Right margin of the device. */ 58241675Suqs size_t rmargin; /* Current right margin. */ 59241675Suqs size_t maxrmargin; /* Max right margin. */ 60241675Suqs int maxcols; /* Max size of buf. */ 61241675Suqs size_t offset; /* Margin offest. */ 62241675Suqs size_t tabwidth; /* Distance of tab positions. */ 63241675Suqs int col; /* Bytes in buf. */ 64241675Suqs size_t viscol; /* Chars on current line. */ 65241675Suqs int overstep; /* See termp_flushln(). */ 66241675Suqs int flags; 67241675Suqs#define TERMP_SENTENCE (1 << 1) /* Space before a sentence. */ 68241675Suqs#define TERMP_NOSPACE (1 << 2) /* No space before words. */ 69241675Suqs#define TERMP_NOBREAK (1 << 4) /* See term_flushln(). */ 70241675Suqs#define TERMP_IGNDELIM (1 << 6) /* Delims like regulars. */ 71241675Suqs#define TERMP_NONOSPACE (1 << 7) /* No space (no autounset). */ 72241675Suqs#define TERMP_DANGLE (1 << 8) /* See term_flushln(). */ 73241675Suqs#define TERMP_HANG (1 << 9) /* See term_flushln(). */ 74241675Suqs#define TERMP_TWOSPACE (1 << 10) /* See term_flushln(). */ 75241675Suqs#define TERMP_NOSPLIT (1 << 11) /* See termp_an_pre/post(). */ 76241675Suqs#define TERMP_SPLIT (1 << 12) /* See termp_an_pre/post(). */ 77241675Suqs#define TERMP_ANPREC (1 << 13) /* See termp_an_pre(). */ 78241675Suqs#define TERMP_KEEP (1 << 14) /* Keep words together. */ 79241675Suqs#define TERMP_PREKEEP (1 << 15) /* ...starting with the next one. */ 80241675Suqs int *buf; /* Output buffer. */ 81241675Suqs enum termenc enc; /* Type of encoding. */ 82241675Suqs struct mchars *symtab; /* Encoded-symbol table. */ 83241675Suqs enum termfont fontl; /* Last font set. */ 84241675Suqs enum termfont fontq[10]; /* Symmetric fonts. */ 85241675Suqs int fonti; /* Index of font stack. */ 86241675Suqs term_margin headf; /* invoked to print head */ 87241675Suqs term_margin footf; /* invoked to print foot */ 88241675Suqs void (*letter)(struct termp *, int); 89241675Suqs void (*begin)(struct termp *); 90241675Suqs void (*end)(struct termp *); 91241675Suqs void (*endline)(struct termp *); 92241675Suqs void (*advance)(struct termp *, size_t); 93241675Suqs size_t (*width)(const struct termp *, int); 94241675Suqs double (*hspan)(const struct termp *, 95241675Suqs const struct roffsu *); 96241675Suqs const void *argf; /* arg for headf/footf */ 97241675Suqs struct termp_ps *ps; 98241675Suqs}; 99241675Suqs 100241675Suqsvoid term_eqn(struct termp *, const struct eqn *); 101241675Suqsvoid term_tbl(struct termp *, const struct tbl_span *); 102241675Suqsvoid term_free(struct termp *); 103241675Suqsvoid term_newln(struct termp *); 104241675Suqsvoid term_vspace(struct termp *); 105241675Suqsvoid term_word(struct termp *, const char *); 106241675Suqsvoid term_flushln(struct termp *); 107241675Suqsvoid term_begin(struct termp *, term_margin, 108241675Suqs term_margin, const void *); 109241675Suqsvoid term_end(struct termp *); 110241675Suqs 111241675Suqssize_t term_hspan(const struct termp *, 112241675Suqs const struct roffsu *); 113241675Suqssize_t term_vspan(const struct termp *, 114241675Suqs const struct roffsu *); 115241675Suqssize_t term_strlen(const struct termp *, const char *); 116241675Suqssize_t term_len(const struct termp *, size_t); 117241675Suqs 118241675Suqsenum termfont term_fonttop(struct termp *); 119241675Suqsconst void *term_fontq(struct termp *); 120241675Suqsvoid term_fontpush(struct termp *, enum termfont); 121241675Suqsvoid term_fontpop(struct termp *); 122241675Suqsvoid term_fontpopq(struct termp *, const void *); 123241675Suqsvoid term_fontrepl(struct termp *, enum termfont); 124241675Suqsvoid term_fontlast(struct termp *); 125241675Suqs 126241675Suqs__END_DECLS 127241675Suqs 128241675Suqs#endif /*!TERM_H*/ 129