lorid

convert chordpro to pdf
git clone git://git.relim.de/lorid.git
Log | Files | Refs | README | LICENSE

commit 7bb679d15c57fb3a03966df1cee2034567ef2eda
parent 0d8b603f99f369720f4510065964b57de5e8cf58
Author: nibo <nibo@relim.de>
Date:   Sun, 20 Oct 2024 11:14:43 +0200

Remove colors when stderr is not tty

Diffstat:
Mchordpro.c | 48++++++++++++++++++++++++++++++++++--------------
Mchordpro.h | 5+++++
2 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/chordpro.c b/chordpro.c @@ -3,6 +3,7 @@ #include <stdbool.h> #include <stdint.h> #include <stdarg.h> +#include <unistd.h> #include <string.h> #include <ctype.h> #include <errno.h> @@ -271,40 +272,59 @@ cho_debug_chord_print(struct ChoChord *chord) #endif /* DEBUG */ +#if COLOR == 1 static void cho_log(enum LogLevel level, const char *msg, ...) { va_list va; va_start(va, msg); -#if COLOR == 1 const char *log_level; const char *color; switch (level) { case LOG_INFO: log_level = "INFO"; - color = "37"; + color = COLOR_BOLD_WHITE; break; case LOG_WARN: log_level = "WARN"; - color = "33"; + color = COLOR_BOLD_ORANGE; break; case LOG_ERR: log_level = " ERR"; - color = "31"; + color = COLOR_BOLD_RED; break; } - if (g_chordpro_filepath) { - fprintf(stderr, "\033[1m%s:%ld:\033[0m \033[1;%sm%s\033[0m: ", - g_chordpro_filepath, g_line_number, color, log_level); - vfprintf(stderr, msg, va); - fprintf(stderr, "\n"); + if (isatty(2)) { + if (g_chordpro_filepath) { + fprintf(stderr, COLOR_BOLD_WHITE"%s:%ld:"COLOR_RESET" %s%s"COLOR_RESET": ", + g_chordpro_filepath, g_line_number, color, log_level); + vfprintf(stderr, msg, va); + fprintf(stderr, "\n"); + } else { + fprintf(stderr, "line "COLOR_BOLD_WHITE"%ld:"COLOR_RESET" %s%s"COLOR_RESET": ", + g_line_number, color, log_level); + vfprintf(stderr, msg, va); + fprintf(stderr, "\n"); + } } else { - fprintf(stderr, "line \033[1m%ld:\033[0m \033[1;%sm%s\033[0m: ", - g_line_number, color, log_level); - vfprintf(stderr, msg, va); - fprintf(stderr, "\n"); + if (g_chordpro_filepath) { + fprintf(stderr, "%s:%ld: %s: ", g_chordpro_filepath, g_line_number, + log_level); + vfprintf(stderr, msg, va); + fprintf(stderr, "\n"); + } else { + fprintf(stderr, "line %ld: %s: ", g_line_number, log_level); + vfprintf(stderr, msg, va); + fprintf(stderr, "\n"); + } } +} #else +static void +cho_log(enum LogLevel level, const char *msg, ...) +{ + va_list va; + va_start(va, msg); const char *log_level; switch (level) { case LOG_INFO: @@ -327,8 +347,8 @@ cho_log(enum LogLevel level, const char *msg, ...) vfprintf(stderr, msg, va); fprintf(stderr, "\n"); } -#endif } +#endif /* COLOR */ static inline bool is_whitespace(char c) diff --git a/chordpro.h b/chordpro.h @@ -12,6 +12,11 @@ #define URL_MAX_LEN 2000 #define FONT_NAME_MAX 100 +#define COLOR_BOLD_RED "\033[1;31m" +#define COLOR_BOLD_ORANGE "\033[1;33m" +#define COLOR_BOLD_WHITE "\033[1;37m" +#define COLOR_RESET "\033[0m" + enum EnvironmentDirective { START_OF_CHORUS, SOC, END_OF_CHORUS, EOC, CHORUS, START_OF_VERSE, SOV, END_OF_VERSE, EOV,