dte test coverage


Directory: ./
File: src/terminal/style.h
Date: 2025-09-07 23:01:39
Exec Total Coverage
Lines: 12 12 100.0%
Functions: 4 4 100.0%
Branches: 14 14 100.0%

Line Branch Exec Source
1 #ifndef TERMINAL_STYLE_H
2 #define TERMINAL_STYLE_H
3
4 #include <stdbool.h>
5 #include <stdint.h>
6 #include <sys/types.h>
7 #include "color.h"
8 #include "util/macros.h"
9 #include "util/ptr-array.h"
10
11 #define COLOR_STR_BUFSIZE 16
12 #define TERM_STYLE_BUFSIZE 128
13
14 enum {
15 ATTR_KEEP = 0x01,
16 ATTR_UNDERLINE = 0x02,
17 ATTR_REVERSE = 0x04,
18 ATTR_BLINK = 0x08,
19 ATTR_DIM = 0x10,
20 ATTR_BOLD = 0x20,
21 ATTR_INVIS = 0x40,
22 ATTR_ITALIC = 0x80,
23 ATTR_STRIKETHROUGH = 0x100,
24 };
25
26 typedef struct {
27 int32_t fg;
28 int32_t bg;
29 unsigned int attr;
30 } TermStyle;
31
32 5 static inline TermStyle term_style(int32_t fg, int32_t bg, unsigned int attr)
33 {
34 5 return (TermStyle){.fg = fg, .bg = bg, .attr = attr};
35 }
36
37 418 static inline bool same_style(const TermStyle *a, const TermStyle *b)
38 {
39
6/6
✓ Branch 0 (2→3) taken 253 times.
✓ Branch 1 (2→5) taken 165 times.
✓ Branch 2 (3→4) taken 250 times.
✓ Branch 3 (3→5) taken 3 times.
✓ Branch 4 (4→5) taken 8 times.
✓ Branch 5 (4→6) taken 242 times.
418 return a->fg == b->fg && a->bg == b->bg && a->attr == b->attr;
40 }
41
42 7 static inline void mask_style2(TermStyle *style, const TermStyle *over, bool mask_bg)
43 {
44 14 *style = (TermStyle) {
45
2/2
✓ Branch 0 (2→3) taken 2 times.
✓ Branch 1 (2→4) taken 5 times.
7 .fg = (over->fg == COLOR_KEEP) ? style->fg : over->fg,
46
4/4
✓ Branch 0 (4→5) taken 3 times.
✓ Branch 1 (4→6) taken 4 times.
✓ Branch 2 (5→6) taken 1 times.
✓ Branch 3 (5→7) taken 2 times.
7 .bg = (over->bg == COLOR_KEEP || !mask_bg) ? style->bg : over->bg,
47
2/2
✓ Branch 0 (7→8) taken 1 times.
✓ Branch 1 (7→9) taken 6 times.
7 .attr = (over->attr & ATTR_KEEP) ? style->attr : over->attr,
48 };
49 7 }
50
51 3 static inline void mask_style(TermStyle *style, const TermStyle *over)
52 {
53 3 return mask_style2(style, over, true);
54 }
55
56 ssize_t parse_term_style(TermStyle *style, char **strs, size_t nstrs) NONNULL_ARGS WARN_UNUSED_RESULT;
57 size_t color_to_str(char buf[static COLOR_STR_BUFSIZE], int32_t color) NONNULL_ARGS WARN_UNUSED_RESULT;
58 const char *term_style_to_string(char buf[static TERM_STYLE_BUFSIZE], const TermStyle *style) NONNULL_ARGS_AND_RETURN;
59 void collect_colors_and_attributes(PointerArray *a, const char *prefix) NONNULL_ARGS;
60
61 #endif
62