Imported Upstream version 0.18.1.1
[platform/upstream/gettext.git] / gnulib-local / lib / term-ostream.oo.h
1 /* Output stream for attributed text, producing ANSI escape sequences.
2    Copyright (C) 2006 Free Software Foundation, Inc.
3    Written by Bruno Haible <bruno@clisp.org>, 2006.
4
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #ifndef _TERM_OSTREAM_H
19 #define _TERM_OSTREAM_H
20
21 #include "ostream.h"
22
23
24 /* Querying and setting of text attributes.
25    The stream has a notion of the current text attributes; they apply
26    implicitly to all following output.  The attributes are automatically
27    reset when the stream is closed.
28    Note: Not all terminal types can actually render all attributes adequately.
29    For example, xterm cannot render POSTURE_ITALIC nor the combination of
30    WEIGHT_BOLD and UNDERLINE_ON.  */
31
32 /* Colors are represented by indices >= 0 in a stream dependent format.  */
33 typedef int term_color_t;
34 /* The value -1 denotes the default (foreground or background) color.  */
35 enum
36 {
37   COLOR_DEFAULT = -1  /* unknown */
38 };
39
40 typedef enum
41 {
42   WEIGHT_NORMAL = 0,
43   WEIGHT_BOLD,
44   WEIGHT_DEFAULT = WEIGHT_NORMAL
45 } term_weight_t;
46
47 typedef enum
48 {
49   POSTURE_NORMAL = 0,
50   POSTURE_ITALIC, /* same as oblique */
51   POSTURE_DEFAULT = POSTURE_NORMAL
52 } term_posture_t;
53
54 typedef enum
55 {
56   UNDERLINE_OFF = 0,
57   UNDERLINE_ON,
58   UNDERLINE_DEFAULT = UNDERLINE_OFF
59 } term_underline_t;
60
61 struct term_ostream : struct ostream
62 {
63 methods:
64
65   /* Convert an RGB value (red, green, blue in [0..255]) to a color, valid
66      for this stream only.  */
67   term_color_t rgb_to_color (term_ostream_t stream,
68                              int red, int green, int blue);
69
70   /* Get/set the text color.  */
71   term_color_t get_color (term_ostream_t stream);
72   void         set_color (term_ostream_t stream, term_color_t color);
73
74   /* Get/set the background color.  */
75   term_color_t get_bgcolor (term_ostream_t stream);
76   void         set_bgcolor (term_ostream_t stream, term_color_t color);
77
78   /* Get/set the font weight.  */
79   term_weight_t get_weight (term_ostream_t stream);
80   void          set_weight (term_ostream_t stream, term_weight_t weight);
81
82   /* Get/set the font posture.  */
83   term_posture_t get_posture (term_ostream_t stream);
84   void           set_posture (term_ostream_t stream, term_posture_t posture);
85
86   /* Get/set the text underline decoration.  */
87   term_underline_t get_underline (term_ostream_t stream);
88   void             set_underline (term_ostream_t stream,
89                                   term_underline_t underline);
90 };
91
92
93 #ifdef __cplusplus
94 extern "C" {
95 #endif
96
97
98 /* Create an output stream referring to the file descriptor FD.
99    FILENAME is used only for error messages.
100    The resulting stream will be line-buffered.
101    Note that the resulting stream must be closed before FD can be closed.  */
102 extern term_ostream_t term_ostream_create (int fd, const char *filename);
103
104
105 #ifdef __cplusplus
106 }
107 #endif
108
109 #endif /* _TERM_OSTREAM_H */