UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
color_out.cpp File Reference
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iterator>
#include <unistd.h>
#include "debug.h"
#include "host.h"
#include "utils/color_out.h"
Include dependency graph for color_out.cpp:

Go to the source code of this file.

Macros

#define MOD_NAME   "[color_out] "
 

Functions

bool color_output_init ()
 sets internal variable color_stdout and retunrs its contents
 
int color_printf (const char *format,...)
 
static bool is_output_color ()
 
template<class OutputIt >
static int prune_ansi_sequences (const char *in, OutputIt out)
 
void prune_ansi_sequences_inplace (std::string &str)
 
char * prune_ansi_sequences_inplace_cstr (char *cstr)
 
string prune_ansi_sequences_str (const char *in)
 

Variables

static bool color_stdout
 

Detailed Description

Author
Martin Pulec pulec.nosp@m.@ces.nosp@m.net.c.nosp@m.z

Definition in file color_out.cpp.

Macro Definition Documentation

◆ MOD_NAME

#define MOD_NAME   "[color_out] "

Definition at line 53 of file color_out.cpp.

Referenced by is_output_color().

Function Documentation

◆ color_output_init()

bool color_output_init ( void )

sets internal variable color_stdout and retunrs its contents

Definition at line 168 of file color_out.cpp.

169{
171 return color_stdout;
172}
static bool color_stdout
Definition color_out.cpp:57
static bool is_output_color()

References color_stdout, and is_output_color().

Referenced by Log_output::Log_output(), and common_preinit().

Here is the call graph for this function:

◆ color_printf()

int color_printf ( const char * format,
... )

Definition at line 220 of file color_out.cpp.

220 {
221 va_list ap;
222 va_start(ap, format);
223 int size = vsnprintf(NULL, 0, format, ap);
224 va_end(ap);
225
226 // format the string
227 auto buf = get_log_output().get_buffer();
228 buf.append(size + 1, '\0');
229 va_start(ap, format);
230 vsnprintf(buf.data(), size + 1, format, ap);
231 va_end(ap);
232
233 if (!color_stdout) {
234 int len = prune_ansi_sequences(buf.data(), buf.data());
235 buf.get().resize(len);
236 }
237
238 buf.submit_raw();
239 return size;
240}
int void size_t * len
void append(std::string_view sv)
Definition debug.h:130
Buffer get_buffer()
Definition debug.h:153
static int prune_ansi_sequences(const char *in, OutputIt out)
Log_output & get_log_output()
Definition debug.h:266
int vsnprintf(char *s, size_t buf_size, const char *format, va_list ap)
Definition vsnprintf.c:46

References Log_output::Buffer::append(), color_stdout, Log_output::get_buffer(), get_log_output(), len, prune_ansi_sequences(), and vsnprintf().

Referenced by image_pattern_blank::image_pattern_blank(), audio_alsa_list_devices(), audio_cap_alsa_help(), audio_cap_ca_help(), audio_cap_ca_init(), audio_cap_pw_help(), audio_cap_testcard_init(), audio_play_alsa_help(), audio_play_ca_help(), audio_play_dummy_help(), audio_play_portaudio_help(), audio_play_pw_help(), bob_init(), capture_filter_init(), create_dir(), decklink_help(), df_usage(), display_drm_init(), display_dummy_init(), display_pw_help(), get_video_desc_from_string(), hw_accel_from_str(), keyboard_control::impl::info(), init(), init(), init(), init(), init(), init(), init(), init(), linear_init(), list_hints(), parse_audio_format(), image_pattern_strips::parse_fmt(), parse_opts(), parse_port(), playback_usage(), portaudio_print_help(), print_aja_device_details(), print_bmd_device_profiles(), print_common_opts(), print_connectors(), print_control_help(), print_devices(), print_module_usage(), print_output_modes(), resize_algo_from_string(), rtps_server_usage(), sdl2_print_displays(), sdp_print_supported_codecs(), sdp_set_options(), set_fec(), set_pixfmt_conv_policy(), show_generic_help(), show_help(), show_help(), show_help(), show_help(), show_help(), show_help(), show_help(), show_help(), show_help(), show_help(), show_vo_postprocess_help(), start_nat_traverse(), testcard_show_codec_help(), text_init(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), usage(), vidcap_decklink_print_card_info(), vidcap_file_show_help(), vidcap_import_init(), vidcap_screen_linux_init(), vidcap_testcard2_init(), and vidcap_ximea_show_help().

Here is the call graph for this function:

◆ is_output_color()

static bool is_output_color ( )
static
Returns
whether stdout can process ANSI escape sequences

Definition at line 140 of file color_out.cpp.

141{
142#ifdef HAVE_CONFIG_H
143 const char *const param_val = get_commandline_param("log-color");
144 if (param_val != nullptr) {
145 return strcmp(param_val, "no") != 0;
146 }
147 if (get_commandline_param("log-nocolor") != nullptr) {
148 fprintf(stderr,
149 MOD_NAME "The param log-nocolor is deprecated, use "
150 "'log-color=no' instead\n");
151 return false;
152 }
153#endif
154 const char *env_val = getenv("ULTRAGRID_COLOR_OUT");
155 if (env_val != nullptr && strlen(env_val) > 0) {
156 return strcmp(env_val, "0") != 0;
157 }
158#ifdef _WIN32
159 return isMsysPty(fileno(stdout)) ||
160 (_isatty(fileno(stdout)) &&
161 setWinTermAnsiColors(STD_OUTPUT_HANDLE));
162#else
163 return isatty(fileno(stdout));
164#endif
165}
#define MOD_NAME
Definition color_out.cpp:53
const char * get_commandline_param(const char *key)
Definition host.cpp:894

References get_commandline_param(), and MOD_NAME.

Referenced by color_output_init().

Here is the call graph for this function:

◆ prune_ansi_sequences()

template<class OutputIt >
static int prune_ansi_sequences ( const char * in,
OutputIt out )
static

Definition at line 175 of file color_out.cpp.

175 {
176 char c = *in;
177 bool in_control = false;
178 int written = 0;
179 while (c != '\0') {
180 switch (c) {
181 case '\033':
182 in_control = true;
183 break;
184 case 'm':
185 if (in_control) {
186 in_control = false;
187 break;
188 }
189 // fall through
190 default:
191 if (!in_control) {
192 *out++ = c;
193 written++;
194 }
195 }
196 c = *++in;
197 }
198 *out = '\0';
199 return written;
200}

Referenced by color_printf(), prune_ansi_sequences_inplace(), prune_ansi_sequences_inplace_cstr(), and prune_ansi_sequences_str().

◆ prune_ansi_sequences_inplace()

void prune_ansi_sequences_inplace ( std::string & str)

Definition at line 208 of file color_out.cpp.

208 {
209 auto c_ptr = str.data();
210 auto len = prune_ansi_sequences(c_ptr, c_ptr);
211 str.resize(len);
212}

References len, and prune_ansi_sequences().

Referenced by log_vprintf().

Here is the call graph for this function:

◆ prune_ansi_sequences_inplace_cstr()

char * prune_ansi_sequences_inplace_cstr ( char * cstr)
Returns
cstr

Definition at line 215 of file color_out.cpp.

215 {
216 prune_ansi_sequences(cstr, cstr);
217 return cstr;
218}

References prune_ansi_sequences().

Referenced by wrap_paragraph().

Here is the call graph for this function:

◆ prune_ansi_sequences_str()

string prune_ansi_sequences_str ( const char * in)

Definition at line 202 of file color_out.cpp.

202 {
203 string out;
204 prune_ansi_sequences(in, std::back_inserter(out));
205 return out;
206}

References prune_ansi_sequences().

Referenced by Logger::~Logger().

Here is the call graph for this function:

Variable Documentation

◆ color_stdout

bool color_stdout
static

Definition at line 57 of file color_out.cpp.

Referenced by color_output_init(), and color_printf().