summaryrefslogtreecommitdiff
path: root/lib/textstyle.in.h
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2019-03-20 00:35:11 +0100
committerBruno Haible <bruno@clisp.org>2019-03-20 00:35:11 +0100
commitc23dae8c0231543a241bd54f6e5af0f348f70d99 (patch)
tree35a5ddba3df04d6bfcba43c5c4160c979d680d6c /lib/textstyle.in.h
parent4a7bec23342ecb43d6e367ed43d067e2a0507f6d (diff)
downloadgnulib-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.h377
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 */