ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
palette.h
Go to the documentation of this file.
1#pragma once
2
65
66/* Storage capacities in elements; text buffers include the terminating NUL. */
67#define VIDEO_ASCII_PALETTE_TERMINAL_TYPE_BUFFER_SIZE 32
68#define VIDEO_ASCII_PALETTE_LOCALE_ENCODING_BUFFER_SIZE 16
69
72#include <stdbool.h>
73#include <stddef.h>
74#include <stdint.h>
75
81
108
110
124typedef struct {
126 const char *name;
128 const char *chars;
130 size_t length;
136
156
163
171#define PALETTE_CHARS_STANDARD " ...',;:clodxkO0KXNWM"
172
180#define PALETTE_CHARS_BLOCKS " ░░▒▒▓▓██"
181
189#define PALETTE_CHARS_DIGITAL " -=≡≣▰▱◼"
190
198#define PALETTE_CHARS_MINIMAL " .-+*#"
199
207#define PALETTE_CHARS_COOL " ▁▂▃▄▅▆▇█"
208
210
231
259
266
274extern const char DEFAULT_ASCII_PALETTE[];
275
283extern const size_t DEFAULT_ASCII_PALETTE_LEN;
284
286
292
309
327bool validate_palette_chars(const char *chars, size_t len);
328
343bool palette_requires_utf8_encoding(const char *chars, size_t len);
344
360
377palette_type_t select_compatible_palette(palette_type_t requested, bool client_utf8);
378
396int apply_palette_config(palette_type_t type, const char *custom_chars);
397
415int build_client_luminance_palette(const char *palette_chars, size_t palette_len,
416 char luminance_mapping[ASCII_LUMINANCE_LEVELS]);
417
438int initialize_client_palette(palette_type_t palette_type, const char *custom_chars,
439 char client_palette_chars[ASCII_PALETTE_BUFFER_SIZE], size_t *client_palette_len,
440 char client_luminance_palette[ASCII_LUMINANCE_LEVELS]);
441
447
465utf8_palette_t *utf8_palette_create(const char *palette_string);
466
480
497const utf8_char_info_t *utf8_palette_get_char(const utf8_palette_t *palette, size_t index);
498
512size_t utf8_palette_get_char_count(const utf8_palette_t *palette);
513
529bool utf8_palette_contains_char(const utf8_palette_t *palette, const char *utf8_char, size_t char_bytes);
530
547size_t utf8_palette_find_char_index(const utf8_palette_t *palette, const char *utf8_char, size_t char_bytes);
548
570size_t utf8_palette_find_all_char_indices(const utf8_palette_t *palette, const char *utf8_char, size_t char_bytes,
571 size_t *indices, size_t max_indices);
572
Common buffer size definitions.
#define UTF8_MAX_BYTES
unsigned char uint8_t
Definition common.h:60
uint8_t byte_len
Number of bytes in UTF-8 encoding (1-4).
Definition palette.h:227
void utf8_palette_destroy(utf8_palette_t *palette)
Destroy a UTF-8 palette and free resources.
Definition palette.c:495
size_t utf8_palette_find_all_char_indices(const utf8_palette_t *palette, const char *utf8_char, size_t char_bytes, size_t *indices, size_t max_indices)
Find all indices of UTF-8 character in palette.
Definition palette.c:553
size_t char_count
Number of characters (not bytes!).
Definition palette.h:253
bool palette_requires_utf8_encoding(const char *chars, size_t len)
Check if palette requires UTF-8 encoding.
Definition palette.c:61
size_t utf8_palette_get_char_count(const utf8_palette_t *palette)
Get number of characters in UTF-8 palette.
Definition palette.c:512
const char * name
Human-readable palette name.
Definition palette.h:126
#define VIDEO_ASCII_PALETTE_LOCALE_ENCODING_BUFFER_SIZE
Definition palette.h:68
bool detect_client_utf8_support(utf8_capabilities_t *caps)
Detect client UTF-8 support capabilities.
Definition palette.c:154
palette_type_t select_compatible_palette(palette_type_t requested, bool client_utf8)
Select compatible palette based on client capabilities.
Definition palette.c:225
bool utf8_support
True if terminal supports UTF-8 (detected automatically).
Definition palette.h:148
const size_t DEFAULT_ASCII_PALETTE_LEN
Length of default ASCII palette.
Definition palette.c:32
char terminal_type[32]
$TERM environment variable value (for detection)
Definition palette.h:152
utf8_char_info_t * chars
Array of UTF-8 character information.
Definition palette.h:251
#define VIDEO_ASCII_PALETTE_TERMINAL_TYPE_BUFFER_SIZE
Definition palette.h:67
const char DEFAULT_ASCII_PALETTE[]
Default ASCII palette for legacy functions.
Definition palette.c:31
uint8_t display_width
Terminal display width in character cells (1-2).
Definition palette.h:229
int initialize_client_palette(palette_type_t palette_type, const char *custom_chars, char client_palette_chars[ASCII_PALETTE_BUFFER_SIZE], size_t *client_palette_len, char client_luminance_palette[ASCII_LUMINANCE_LEVELS])
Initialize client palette with full configuration.
Definition palette.c:306
const palette_def_t * get_builtin_palette(palette_type_t type)
Get built-in palette definition.
Definition palette.c:53
palette_type_t
Built-in palette type enumeration.
Definition palette.h:90
int apply_palette_config(palette_type_t type, const char *custom_chars)
Apply palette configuration (set global palette).
Definition palette.c:256
bool requires_utf8
True if palette contains UTF-8 multi-byte characters.
Definition palette.h:132
size_t total_bytes
Total byte length of palette string.
Definition palette.h:255
bool is_validated
True if palette passed validation checks.
Definition palette.h:134
size_t utf8_palette_find_char_index(const utf8_palette_t *palette, const char *utf8_char, size_t char_bytes)
Find index of UTF-8 character in palette.
Definition palette.c:536
bool validate_palette_chars(const char *chars, size_t len)
Validate palette character sequence.
Definition palette.c:77
const char * chars
Character sequence (ordered from dark to light).
Definition palette.h:128
char bytes[UTF8_MAX_BYTES]
UTF-8 byte sequence (max 4 bytes per character).
Definition palette.h:225
const utf8_char_info_t * utf8_palette_get_char(const utf8_palette_t *palette, size_t index)
Get UTF-8 character information at index.
Definition palette.c:504
char * raw_string
Original palette string (for reference/debugging).
Definition palette.h:257
bool forced_utf8
True if user forced UTF-8 via –utf8 flag.
Definition palette.h:150
char locale_encoding[16]
Current locale encoding (e.g., "UTF-8").
Definition palette.h:154
size_t length
Number of characters in sequence.
Definition palette.h:130
bool utf8_palette_contains_char(const utf8_palette_t *palette, const char *utf8_char, size_t char_bytes)
Check if UTF-8 palette contains a specific character.
Definition palette.c:520
int build_client_luminance_palette(const char *palette_chars, size_t palette_len, char luminance_mapping[ASCII_LUMINANCE_LEVELS])
Build luminance mapping table from palette characters.
Definition palette.c:285
utf8_palette_t * utf8_palette_create(const char *palette_string)
Create a UTF-8 palette from string.
Definition palette.c:371
@ PALETTE_COUNT
Number of palette types (not a valid palette).
Definition palette.h:106
@ 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_UNSET
Unset palette type (will be resolved to default or custom).
Definition palette.h:92
@ PALETTE_DIGITAL
Digital/glitch aesthetic: " -=≡≣▰▱◼".
Definition palette.h:98
@ PALETTE_MINIMAL
Simple ASCII: " .-+*#".
Definition palette.h:100
#define ASCII_LUMINANCE_LEVELS
Number of luminance levels supported (256).
Definition ascii.h:440
#define ASCII_PALETTE_BUFFER_SIZE
static bool size_t index
Definition queries.h:8
Validated luminance palette used to turn brightness into characters.
Definition palette.h:124
Validated luminance palette used to turn brightness into characters.
Definition palette.h:146
UTF-8 character information structure.
Definition palette.h:223
When code needs to work with utf8 char info, it keeps byte_len, display_width here instead of scatter...
Definition palette.h:249
SIMD-optimized ASCII conversion interface.