term.h (698f87a48e2e945bfe5493ce168e0d0ae1cedd5c) | term.h (260e9a87725c090ba5835b1f9f0b62fa2f96036f) |
---|---|
1/* $Id: term.h,v 1.97 2013/12/25 00:39:31 schwarze Exp $ */ | 1/* $Id: term.h,v 1.111 2015/01/31 00:12:41 schwarze Exp $ */ |
2/* 3 * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> | 2/* 3 * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> |
4 * Copyright (c) 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> | 4 * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org> |
5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ | 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ |
18#ifndef TERM_H 19#define TERM_H | |
20 | 18 |
21__BEGIN_DECLS 22 23struct termp; 24 | |
25enum termenc { 26 TERMENC_ASCII, 27 TERMENC_LOCALE, 28 TERMENC_UTF8 29}; 30 31enum termtype { 32 TERMTYPE_CHAR, --- 6 unchanged lines hidden (view full) --- 39 TERMFONT_BOLD, 40 TERMFONT_UNDER, 41 TERMFONT_BI, 42 TERMFONT__MAX 43}; 44 45#define TERM_MAXMARGIN 100000 /* FIXME */ 46 | 19enum termenc { 20 TERMENC_ASCII, 21 TERMENC_LOCALE, 22 TERMENC_UTF8 23}; 24 25enum termtype { 26 TERMTYPE_CHAR, --- 6 unchanged lines hidden (view full) --- 33 TERMFONT_BOLD, 34 TERMFONT_UNDER, 35 TERMFONT_BI, 36 TERMFONT__MAX 37}; 38 39#define TERM_MAXMARGIN 100000 /* FIXME */ 40 |
41struct termp; 42 |
|
47typedef void (*term_margin)(struct termp *, const void *); 48 49struct termp_tbl { 50 int width; /* width in fixed chars */ 51 int decimal; /* decimal point position */ 52}; 53 54struct termp { 55 enum termtype type; 56 struct rofftbl tbl; /* table configuration */ | 43typedef void (*term_margin)(struct termp *, const void *); 44 45struct termp_tbl { 46 int width; /* width in fixed chars */ 47 int decimal; /* decimal point position */ 48}; 49 50struct termp { 51 enum termtype type; 52 struct rofftbl tbl; /* table configuration */ |
53 int synopsisonly; /* print the synopsis only */ |
|
57 int mdocstyle; /* imitate mdoc(7) output */ 58 size_t defindent; /* Default indent for text. */ 59 size_t defrmargin; /* Right margin of the device. */ | 54 int mdocstyle; /* imitate mdoc(7) output */ 55 size_t defindent; /* Default indent for text. */ 56 size_t defrmargin; /* Right margin of the device. */ |
57 size_t lastrmargin; /* Right margin before the last ll. */ |
|
60 size_t rmargin; /* Current right margin. */ 61 size_t maxrmargin; /* Max right margin. */ 62 size_t maxcols; /* Max size of buf. */ 63 size_t offset; /* Margin offest. */ 64 size_t tabwidth; /* Distance of tab positions. */ 65 size_t col; /* Bytes in buf. */ 66 size_t viscol; /* Chars on current line. */ 67 size_t trailspace; /* See termp_flushln(). */ 68 int overstep; /* See termp_flushln(). */ 69 int skipvsp; /* Vertical space to skip. */ 70 int flags; 71#define TERMP_SENTENCE (1 << 1) /* Space before a sentence. */ 72#define TERMP_NOSPACE (1 << 2) /* No space before words. */ 73#define TERMP_NONOSPACE (1 << 3) /* No space (no autounset). */ 74#define TERMP_NBRWORD (1 << 4) /* Make next word nonbreaking. */ 75#define TERMP_KEEP (1 << 5) /* Keep words together. */ 76#define TERMP_PREKEEP (1 << 6) /* ...starting with the next one. */ 77#define TERMP_SKIPCHAR (1 << 7) /* Skip the next character. */ 78#define TERMP_NOBREAK (1 << 8) /* See term_flushln(). */ | 58 size_t rmargin; /* Current right margin. */ 59 size_t maxrmargin; /* Max right margin. */ 60 size_t maxcols; /* Max size of buf. */ 61 size_t offset; /* Margin offest. */ 62 size_t tabwidth; /* Distance of tab positions. */ 63 size_t col; /* Bytes in buf. */ 64 size_t viscol; /* Chars on current line. */ 65 size_t trailspace; /* See termp_flushln(). */ 66 int overstep; /* See termp_flushln(). */ 67 int skipvsp; /* Vertical space to skip. */ 68 int flags; 69#define TERMP_SENTENCE (1 << 1) /* Space before a sentence. */ 70#define TERMP_NOSPACE (1 << 2) /* No space before words. */ 71#define TERMP_NONOSPACE (1 << 3) /* No space (no autounset). */ 72#define TERMP_NBRWORD (1 << 4) /* Make next word nonbreaking. */ 73#define TERMP_KEEP (1 << 5) /* Keep words together. */ 74#define TERMP_PREKEEP (1 << 6) /* ...starting with the next one. */ 75#define TERMP_SKIPCHAR (1 << 7) /* Skip the next character. */ 76#define TERMP_NOBREAK (1 << 8) /* See term_flushln(). */ |
79#define TERMP_DANGLE (1 << 9) /* See term_flushln(). */ 80#define TERMP_HANG (1 << 10) /* See term_flushln(). */ 81#define TERMP_NOSPLIT (1 << 11) /* See termp_an_pre/post(). */ 82#define TERMP_SPLIT (1 << 12) /* See termp_an_pre/post(). */ 83#define TERMP_ANPREC (1 << 13) /* See termp_an_pre(). */ | 77#define TERMP_BRIND (1 << 9) /* See term_flushln(). */ 78#define TERMP_DANGLE (1 << 10) /* See term_flushln(). */ 79#define TERMP_HANG (1 << 11) /* See term_flushln(). */ 80#define TERMP_NOSPLIT (1 << 12) /* Do not break line before .An. */ 81#define TERMP_SPLIT (1 << 13) /* Break line before .An. */ 82#define TERMP_NONEWLINE (1 << 14) /* No line break in nofill mode. */ |
84 int *buf; /* Output buffer. */ 85 enum termenc enc; /* Type of encoding. */ | 83 int *buf; /* Output buffer. */ 84 enum termenc enc; /* Type of encoding. */ |
86 struct mchars *symtab; /* Encoded-symbol table. */ | 85 const struct mchars *symtab; /* Character table. */ |
87 enum termfont fontl; /* Last font set. */ | 86 enum termfont fontl; /* Last font set. */ |
88 enum termfont fontq[10]; /* Symmetric fonts. */ | 87 enum termfont *fontq; /* Symmetric fonts. */ 88 int fontsz; /* Allocated size of font stack */ |
89 int fonti; /* Index of font stack. */ 90 term_margin headf; /* invoked to print head */ 91 term_margin footf; /* invoked to print foot */ 92 void (*letter)(struct termp *, int); 93 void (*begin)(struct termp *); 94 void (*end)(struct termp *); 95 void (*endline)(struct termp *); 96 void (*advance)(struct termp *, size_t); | 89 int fonti; /* Index of font stack. */ 90 term_margin headf; /* invoked to print head */ 91 term_margin footf; /* invoked to print foot */ 92 void (*letter)(struct termp *, int); 93 void (*begin)(struct termp *); 94 void (*end)(struct termp *); 95 void (*endline)(struct termp *); 96 void (*advance)(struct termp *, size_t); |
97 void (*setwidth)(struct termp *, int, size_t); |
|
97 size_t (*width)(const struct termp *, int); 98 double (*hspan)(const struct termp *, 99 const struct roffsu *); 100 const void *argf; /* arg for headf/footf */ 101 struct termp_ps *ps; 102}; 103 | 98 size_t (*width)(const struct termp *, int); 99 double (*hspan)(const struct termp *, 100 const struct roffsu *); 101 const void *argf; /* arg for headf/footf */ 102 struct termp_ps *ps; 103}; 104 |
105__BEGIN_DECLS 106 107struct tbl_span; 108struct eqn; 109 110const char *ascii_uc2str(int); 111 |
|
104void term_eqn(struct termp *, const struct eqn *); 105void term_tbl(struct termp *, const struct tbl_span *); 106void term_free(struct termp *); 107void term_newln(struct termp *); 108void term_vspace(struct termp *); 109void term_word(struct termp *, const char *); 110void term_flushln(struct termp *); | 112void term_eqn(struct termp *, const struct eqn *); 113void term_tbl(struct termp *, const struct tbl_span *); 114void term_free(struct termp *); 115void term_newln(struct termp *); 116void term_vspace(struct termp *); 117void term_word(struct termp *, const char *); 118void term_flushln(struct termp *); |
111void term_begin(struct termp *, term_margin, | 119void term_begin(struct termp *, term_margin, |
112 term_margin, const void *); 113void term_end(struct termp *); 114 | 120 term_margin, const void *); 121void term_end(struct termp *); 122 |
115size_t term_hspan(const struct termp *, 116 const struct roffsu *); 117size_t term_vspan(const struct termp *, 118 const struct roffsu *); | 123void term_setwidth(struct termp *, const char *); 124int term_hspan(const struct termp *, const struct roffsu *); 125int term_vspan(const struct termp *, const struct roffsu *); |
119size_t term_strlen(const struct termp *, const char *); 120size_t term_len(const struct termp *, size_t); 121 | 126size_t term_strlen(const struct termp *, const char *); 127size_t term_len(const struct termp *, size_t); 128 |
122enum termfont term_fonttop(struct termp *); 123const void *term_fontq(struct termp *); | |
124void term_fontpush(struct termp *, enum termfont); 125void term_fontpop(struct termp *); | 129void term_fontpush(struct termp *, enum termfont); 130void term_fontpop(struct termp *); |
126void term_fontpopq(struct termp *, const void *); | 131void term_fontpopq(struct termp *, int); |
127void term_fontrepl(struct termp *, enum termfont); 128void term_fontlast(struct termp *); 129 130__END_DECLS | 132void term_fontrepl(struct termp *, enum termfont); 133void term_fontlast(struct termp *); 134 135__END_DECLS |
131 132#endif /*!TERM_H*/ | |