diff options
author | Bruno Haible <bruno@clisp.org> | 2019-03-20 00:35:11 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2019-03-20 00:35:11 +0100 |
commit | c23dae8c0231543a241bd54f6e5af0f348f70d99 (patch) | |
tree | 35a5ddba3df04d6bfcba43c5c4160c979d680d6c /lib/textstyle.in.h | |
parent | 4a7bec23342ecb43d6e367ed43d067e2a0507f6d (diff) | |
download | gnulib-c23dae8c0231543a241bd54f6e5af0f348f70d99.tar.gz |
libtextstyle-optional: New module.
* lib/textstyle.in.h: New file, based on libtextstyle's textstyle.h.
* m4/libtextstyle-optional.m4: New file, based on m4/libtextstyle.m4.
* modules/libtextstyle-optional: New file.
Diffstat (limited to 'lib/textstyle.in.h')
-rw-r--r-- | lib/textstyle.in.h | 377 |
1 files changed, 377 insertions, 0 deletions
diff --git a/lib/textstyle.in.h b/lib/textstyle.in.h new file mode 100644 index 0000000000..65fa6707a2 --- /dev/null +++ b/lib/textstyle.in.h @@ -0,0 +1,377 @@ +/* Dummy replacement for part of the public API of the libtextstyle library. + Copyright (C) 2006-2007, 2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019. */ + +/* This file is used as replacement when libtextstyle with its include file + <textstyle.h> is not found. + It supports the essential API and implements it in a way that does not + provide text styling. That is, it produces plain text output via <stdio.h> + FILE objects. + Thus, it allows a package to be build with or without a dependency to + libtextstyle, with very few occurrences of '#if HAVE_LIBTEXTSTYLE'. + + Restriction: + It assumes that freopen() is not being called on stdout and stderr. */ + +#ifndef _TEXTSTYLE_H +#define _TEXTSTYLE_H + +#include <errno.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#if HAVE_TCDRAIN +# include <termios.h> +#endif + +/* ----------------------------- From ostream.h ----------------------------- */ + +/* Describes the scope of a flush operation. */ +typedef enum +{ + /* Flushes buffers in this ostream_t. + Use this value if you want to write to the underlying ostream_t. */ + FLUSH_THIS_STREAM = 0, + /* Flushes all buffers in the current process. + Use this value if you want to write to the same target through a + different file descriptor or a FILE stream. */ + FLUSH_THIS_PROCESS = 1, + /* Flushes buffers in the current process and attempts to flush the buffers + in the kernel. + Use this value so that some other process (or the kernel itself) + may write to the same target. */ + FLUSH_ALL = 2 +} ostream_flush_scope_t; + + +/* An output stream is an object to which one can feed a sequence of bytes. */ + +typedef FILE * ostream_t; + +static inline void +ostream_write_mem (ostream_t stream, const void *data, size_t len) +{ + if (len > 0) + fwrite (data, 1, len, stream); +} + +static inline void +ostream_flush (ostream_t stream, ostream_flush_scope_t scope) +{ + fflush (stream); + if (scope == FLUSH_ALL) + { + int fd = fileno (stream); + if (fd >= 0) + { + /* For streams connected to a disk file: */ + fsync (fd); + #if HAVE_TCDRAIN + /* For streams connected to a terminal: */ + { + int retval; + + do + retval = tcdrain (fd); + while (retval < 0 && errno == EINTR); + } + #endif + } + } +} + +static inline void +ostream_free (ostream_t stream) +{ + if (stream == stdin || stream == stderr) + fflush (stream); + else + fclose (stream); +} + +static inline void +ostream_write_str (ostream_t stream, const char *string) +{ + ostream_write_mem (stream, string, strlen (string)); +} + +/* ------------------------- From styled-ostream.h ------------------------- */ + +typedef ostream_t styled_ostream_t; + +#define styled_ostream_write_mem ostream_write_mem +#define styled_ostream_flush ostream_flush +#define styled_ostream_free ostream_free + +static inline void +styled_ostream_begin_use_class (styled_ostream_t stream _GL_UNUSED, + const char *classname _GL_UNUSED) +{ +} + +static inline void +styled_ostream_end_use_class (styled_ostream_t stream _GL_UNUSED, + const char *classname _GL_UNUSED) +{ +} + +static inline void +styled_ostream_flush_to_current_style (styled_ostream_t stream _GL_UNUSED) +{ +} + +/* -------------------------- From file-ostream.h -------------------------- */ + +typedef ostream_t file_ostream_t; + +#define file_ostream_write_mem ostream_write_mem +#define file_ostream_flush ostream_flush +#define file_ostream_free ostream_free + +static inline file_ostream_t +file_ostream_create (FILE *fp) +{ + return fp; +} + +/* --------------------------- From fd-ostream.h --------------------------- */ + +typedef ostream_t fd_ostream_t; + +#define fd_ostream_write_mem ostream_write_mem +#define fd_ostream_flush ostream_flush +#define fd_ostream_free ostream_free + +static inline fd_ostream_t +fd_ostream_create (int fd, const char *filename _GL_UNUSED, + bool buffered _GL_UNUSED) +{ + if (fd == 1) + return stdout; + else if (fd == 2) + return stderr; + else + return fdopen (fd, "w"); +} + +/* -------------------------- From term-ostream.h -------------------------- */ + +typedef int term_color_t; +enum +{ + COLOR_DEFAULT = -1 /* unknown */ +}; + +typedef enum +{ + WEIGHT_NORMAL = 0, + WEIGHT_BOLD, + WEIGHT_DEFAULT = WEIGHT_NORMAL +} term_weight_t; + +typedef enum +{ + POSTURE_NORMAL = 0, + POSTURE_ITALIC, /* same as oblique */ + POSTURE_DEFAULT = POSTURE_NORMAL +} term_posture_t; + +typedef enum +{ + UNDERLINE_OFF = 0, + UNDERLINE_ON, + UNDERLINE_DEFAULT = UNDERLINE_OFF +} term_underline_t; + +typedef ostream_t term_ostream_t; + +#define term_ostream_write_mem ostream_write_mem +#define term_ostream_flush ostream_flush +#define term_ostream_free ostream_free + +static inline term_color_t +term_ostream_get_color (term_ostream_t stream _GL_UNUSED) +{ + return COLOR_DEFAULT; +} + +static inline void +term_ostream_set_color (term_ostream_t stream _GL_UNUSED, + term_color_t color _GL_UNUSED) +{ +} + +static inline term_color_t +term_ostream_get_bgcolor (term_ostream_t stream _GL_UNUSED) +{ + return COLOR_DEFAULT; +} + +static inline void +term_ostream_set_bgcolor (term_ostream_t stream _GL_UNUSED, + term_color_t color _GL_UNUSED) +{ +} + +static inline term_weight_t +term_ostream_get_weight (term_ostream_t stream _GL_UNUSED) +{ + return WEIGHT_DEFAULT; +} + +static inline void +term_ostream_set_weight (term_ostream_t stream _GL_UNUSED, + term_weight_t weight _GL_UNUSED) +{ +} + +static inline term_posture_t +term_ostream_get_posture (term_ostream_t stream _GL_UNUSED) +{ + return POSTURE_DEFAULT; +} + +static inline void +term_ostream_set_posture (term_ostream_t stream _GL_UNUSED, + term_posture_t posture _GL_UNUSED) +{ +} + +static inline term_underline_t +term_ostream_get_underline (term_ostream_t stream _GL_UNUSED) +{ + return UNDERLINE_DEFAULT; +} + +static inline void +term_ostream_set_underline (term_ostream_t stream _GL_UNUSED, + term_underline_t underline _GL_UNUSED) +{ +} + +static inline void +term_ostream_flush_to_current_style (term_ostream_t stream) +{ + fflush (stream); +} + +typedef enum +{ + TTYCTL_AUTO = 0, /* Automatic best-possible choice. */ + TTYCTL_NONE, /* No control. + Result: Garbled output can occur, and the terminal can + be left in any state when the program is interrupted. */ + TTYCTL_PARTIAL, /* Signal handling. + Result: Garbled output can occur, but the terminal will + be left in the default state when the program is + interrupted. */ + TTYCTL_FULL /* Signal handling and disabling echo and flush-upon-signal. + Result: No garbled output, and the the terminal will + be left in the default state when the program is + interrupted. */ +} ttyctl_t; + +static inline term_ostream_t +term_ostream_create (int fd, const char *filename, + ttyctl_t tty_control _GL_UNUSED) +{ + return fd_ostream_create (fd, filename, true); +} + +/* ----------------------- From term-styled-ostream.h ----------------------- */ + +typedef styled_ostream_t term_styled_ostream_t; + +#define term_styled_ostream_write_mem ostream_write_mem +#define term_styled_ostream_flush ostream_flush +#define term_styled_ostream_free ostream_free +#define term_styled_ostream_begin_use_class styled_ostream_begin_use_class +#define term_styled_ostream_end_use_class styled_ostream_end_use_class +#define term_styled_ostream_flush_to_current_style styled_ostream_flush_to_current_style + +static inline term_styled_ostream_t +term_styled_ostream_create (int fd, const char *filename, + ttyctl_t tty_control _GL_UNUSED, + const char *css_filename _GL_UNUSED) +{ + return fd_ostream_create (fd, filename, true); +} + +/* ----------------------- From html-styled-ostream.h ----------------------- */ + +typedef styled_ostream_t html_styled_ostream_t; + +static inline html_styled_ostream_t +html_styled_ostream_create (ostream_t destination, const char *css_filename) +{ + abort (); + return NULL; +} + +/* ------------------------------ From color.h ------------------------------ */ + +#define color_test_mode false + +enum color_option { color_no, color_tty, color_yes, color_html }; +#define color_mode color_no + +#define style_file_name NULL + +static inline bool +handle_color_option (const char *option _GL_UNUSED) +{ + return false; +} + +static inline void +handle_style_option (const char *option _GL_UNUSED) +{ +} + +static inline void +print_color_test (void) +{ + abort (); +} + +static inline void +style_file_prepare (const char *style_file_envvar _GL_UNUSED, + const char *stylesdir_envvar _GL_UNUSED, + const char *stylesdir_after_install _GL_UNUSED, + const char *default_style_file _GL_UNUSED) +{ +} + +/* ------------------------------ From misc.h ------------------------------ */ + +static inline styled_ostream_t +styled_ostream_create (int fd, const char *filename, + ttyctl_t tty_control _GL_UNUSED, + const char *css_filename _GL_UNUSED) +{ + return fd_ostream_create (fd, filename, true); +} + +static inline void +libtextstyle_set_failure_exit_code (int exit_code _GL_UNUSED) +{ +} + +#endif /* _TEXTSTYLE_H */ |