ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
strings.h File Reference

Centralized enum and mode string conversion API. More...

Go to the source code of this file.

Functions

const char * asciichat_mode_to_string (asciichat_mode_t mode)
 Convert mode enum to string.
asciichat_mode_t asciichat_string_to_mode (const char *str)
 Convert string to mode enum.
bool asciichat_is_valid_mode_string (const char *str)
 Check if string is a valid mode name.
size_t asciichat_get_all_mode_strings (const char ***out_names)
 Get all mode strings.
const char * asciichat_suggest_mode (const char *input)
 Suggest closest matching mode using fuzzy matching.
const char * color_mode_to_string (terminal_color_mode_t mode)
 Convert color mode enum to string.
const char * palette_type_to_string (palette_type_t type)
 Convert palette type enum to string.
const char * asciichat_suggest_enum_value (const char *option_name, const char *input)
 Suggest closest matching enum value using fuzzy matching.

Detailed Description

Centralized enum and mode string conversion API.

Single source of truth for all enum/mode ↔ string conversions. Use these functions instead of hardcoded string literals.

Definition in file options/strings.h.

Function Documentation

◆ asciichat_get_all_mode_strings()

size_t asciichat_get_all_mode_strings ( const char *** out_names)

Get all mode strings.

Parameters
out_namesOutput array of mode name pointers
Returns
Number of mode names

Definition at line 92 of file options/strings.c.

92 {
93 static const char *names[MODE_NAME_CAPACITY]; // Max 32 modes
94 size_t count = 0;
95
96 for (size_t i = 0; mode_registry[i].name != NULL && count < MODE_NAME_CAPACITY; i++) {
97 // Skip duplicates (like "acds" alias)
98 bool duplicate = false;
99 for (size_t j = 0; j < count; j++) {
100 if (strcmp(names[j], mode_registry[i].name) == 0) {
101 duplicate = true;
102 break;
103 }
104 }
105 if (!duplicate) {
106 names[count++] = mode_registry[i].name;
107 }
108 }
109
110 if (out_names) {
111 *out_names = names;
112 }
113 return count;
114}
#define MODE_NAME_CAPACITY

References MODE_NAME_CAPACITY.

Referenced by asciichat_suggest_mode().

◆ asciichat_is_valid_mode_string()

bool asciichat_is_valid_mode_string ( const char * str)

Check if string is a valid mode name.

Parameters
strString to check
Returns
true if valid mode name, false otherwise

Definition at line 88 of file options/strings.c.

88 {
90}
@ MODE_INVALID
Invalid mode.
Definition options.h:927
asciichat_mode_t asciichat_string_to_mode(const char *str)
Convert string to mode enum.

References asciichat_string_to_mode(), and MODE_INVALID.

◆ asciichat_mode_to_string()

const char * asciichat_mode_to_string ( asciichat_mode_t mode)

Convert mode enum to string.

Parameters
modeMode enum value
Returns
Mode name string (e.g., "server", "client", "mirror")

Definition at line 60 of file options/strings.c.

60 {
61 // Special case: MODE_DISCOVERY is the default mode, show as "default" to users
62 if (mode == MODE_DISCOVERY) {
63 return "default";
64 }
65
66 for (size_t i = 0; mode_registry[i].name != NULL; i++) {
67 if (mode_registry[i].mode == mode) {
68 return mode_registry[i].name;
69 }
70 }
71 return "unknown";
72}
@ MODE_DISCOVERY
Discovery mode - participant that can dynamically become host.
Definition options.h:924

References MODE_DISCOVERY.

◆ asciichat_string_to_mode()

asciichat_mode_t asciichat_string_to_mode ( const char * str)

Convert string to mode enum.

Parameters
strMode name string
Returns
Mode enum value, or MODE_UNKNOWN if invalid

Definition at line 74 of file options/strings.c.

74 {
75 if (!str) {
76 return MODE_INVALID;
77 }
78
79 for (size_t i = 0; mode_registry[i].name != NULL; i++) {
80 if (strcmp(mode_registry[i].name, str) == 0) {
81 return mode_registry[i].mode;
82 }
83 }
84
85 return MODE_INVALID;
86}

References MODE_INVALID.

Referenced by asciichat_is_valid_mode_string().

◆ asciichat_suggest_enum_value()

const char * asciichat_suggest_enum_value ( const char * option_name,
const char * input )

Suggest closest matching enum value using fuzzy matching.

Parameters
option_nameOption name (e.g., "color-mode", "palette")
inputInvalid enum value string
Returns
Suggested enum value, or NULL if no close match

Definition at line 199 of file options/strings.c.

199 {
200 if (!option_name || !input) {
201 return NULL;
202 }
203
204 size_t value_count = 0;
205 const char **values = options_registry_get_enum_values(option_name, NULL, &value_count);
206 return values ? levenshtein_find_similar(input, values) : NULL;
207}
const char * levenshtein_find_similar(const char *unknown, const char *const *candidates)
Find the most similar string from a NULL-terminated array.
const char ** options_registry_get_enum_values(const char *option_name, const char ***descriptions, size_t *count)
Get enum values for an option.
Definition public_api.c:346

References levenshtein_find_similar(), and options_registry_get_enum_values().

Referenced by parse_color_mode(), parse_palette_type(), and parse_render_mode().

◆ asciichat_suggest_mode()

const char * asciichat_suggest_mode ( const char * input)

Suggest closest matching mode using fuzzy matching.

Parameters
inputInvalid mode string
Returns
Suggested mode name, or NULL if no close match

Definition at line 116 of file options/strings.c.

116 {
117 if (!input) {
118 return NULL;
119 }
120
121 const char **names = NULL;
122 size_t count = asciichat_get_all_mode_strings(&names);
123
124 // Create NULL-terminated array for levenshtein_find_similar
125 static const char *null_terminated[MODE_NAME_CAPACITY + 1]; // Max 32 modes + NULL
126 for (size_t i = 0; i < count && i < MODE_NAME_CAPACITY; i++) {
127 null_terminated[i] = names[i];
128 }
129 null_terminated[count] = NULL;
130
131 return levenshtein_find_similar(input, null_terminated);
132}
size_t asciichat_get_all_mode_strings(const char ***out_names)
Get all mode strings.

References asciichat_get_all_mode_strings(), levenshtein_find_similar(), and MODE_NAME_CAPACITY.

◆ color_mode_to_string()

const char * color_mode_to_string ( terminal_color_mode_t mode)

Convert color mode enum to string.

Parameters
modeColor mode value
Returns
Color mode string (e.g., "auto", "256", "truecolor")

Definition at line 138 of file options/strings.c.

138 {
139 switch (mode) {
140 case TERM_COLOR_AUTO:
141 return OPT_COLOR_MODE_AUTO;
142 case TERM_COLOR_NONE:
143 return OPT_COLOR_MODE_NONE;
144 case TERM_COLOR_16:
145 return OPT_COLOR_MODE_16;
146 case TERM_COLOR_256:
147 return OPT_COLOR_MODE_256;
148 case TERM_COLOR_TRUECOLOR:
150 default:
151 return "unknown";
152 }
153}
#define OPT_COLOR_MODE_256
Definition enums.h:101
#define OPT_COLOR_MODE_NONE
Definition enums.h:98
#define OPT_COLOR_MODE_TRUECOLOR
Definition enums.h:102
#define OPT_COLOR_MODE_AUTO
Definition enums.h:97
#define OPT_COLOR_MODE_16
Definition enums.h:100

References OPT_COLOR_MODE_16, OPT_COLOR_MODE_256, OPT_COLOR_MODE_AUTO, OPT_COLOR_MODE_NONE, and OPT_COLOR_MODE_TRUECOLOR.

Referenced by ui_session_help_render().

◆ palette_type_to_string()

const char * palette_type_to_string ( palette_type_t type)

Convert palette type enum to string.

Parameters
typePalette type value
Returns
Palette type string (e.g., "standard", "blocks", "cool")

Definition at line 176 of file options/strings.c.

176 {
177 switch (type) {
178 case PALETTE_STANDARD:
180 case PALETTE_BLOCKS:
181 return OPT_PALETTE_BLOCKS;
182 case PALETTE_DIGITAL:
183 return OPT_PALETTE_DIGITAL;
184 case PALETTE_MINIMAL:
185 return OPT_PALETTE_MINIMAL;
186 case PALETTE_COOL:
187 return OPT_PALETTE_COOL;
188 case PALETTE_CUSTOM:
189 return OPT_PALETTE_CUSTOM;
190 default:
191 return "unknown";
192 }
193}
#define OPT_PALETTE_CUSTOM
Definition enums.h:125
#define OPT_PALETTE_COOL
Definition enums.h:124
#define OPT_PALETTE_MINIMAL
Definition enums.h:123
#define OPT_PALETTE_BLOCKS
Definition enums.h:121
#define OPT_PALETTE_STANDARD
Definition enums.h:120
#define OPT_PALETTE_DIGITAL
Definition enums.h:122
@ PALETTE_BLOCKS
Unicode block characters: " ░░▒▒▓▓██".
Definition palette.h:96
@ PALETTE_CUSTOM
User-defined via –palette-chars.
Definition palette.h:104
@ PALETTE_COOL
Ascending blocks: " ▁▂▃▄▅▆▇█".
Definition palette.h:102
@ PALETTE_STANDARD
Standard ASCII palette: " ...',;:clodxkO0KXNWM".
Definition palette.h:94
@ PALETTE_DIGITAL
Digital/glitch aesthetic: " -=≡≣▰▱◼".
Definition palette.h:98
@ PALETTE_MINIMAL
Simple ASCII: " .-+*#".
Definition palette.h:100

References OPT_PALETTE_BLOCKS, OPT_PALETTE_COOL, OPT_PALETTE_CUSTOM, OPT_PALETTE_DIGITAL, OPT_PALETTE_MINIMAL, OPT_PALETTE_STANDARD, PALETTE_BLOCKS, PALETTE_COOL, PALETTE_CUSTOM, PALETTE_DIGITAL, PALETTE_MINIMAL, and PALETTE_STANDARD.