summaryrefslogtreecommitdiff
path: root/src/cell.h
blob: 41b16eb49f14785777b00f494c4d5f7e768deec2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef TERM_CELL_H
#define TERM_CELL_H

/*
 * The cell layout that the terminal stores. Only src/term uses it. A
 * snapshot converts these cells to the public struct term_cell.
 */

#include "term.h"

enum cell_flags {
    CELL_BOLD      = 1 << 0,
    CELL_ITALIC    = 1 << 1,
    CELL_UNDERLINE = 1 << 2,
    CELL_STRIKE    = 1 << 3,
    CELL_OVERLINE  = 1 << 4,
    CELL_EMOJI     = 1 << 5,
    CELL_TEXT      = 1 << 6,
    CELL_WIDE      = 1 << 7,
    CELL_TRAIL     = 1 << 8,
    CELL_WRAP_PAD  = 1 << 9,
    CELL_FAINT     = 1 << 10,
    CELL_DOUBLE_UNDERLINE = 1 << 11,
    CELL_CURLY_UNDERLINE  = 1 << 12,
    CELL_DOTTED_UNDERLINE = 1 << 13,
    CELL_DASHED_UNDERLINE = 1 << 14,
    CELL_LINK      = 1 << 15,
};

#define CELL_ANY_UNDERLINE \
    (CELL_UNDERLINE | CELL_DOUBLE_UNDERLINE | CELL_CURLY_UNDERLINE | \
     CELL_DOTTED_UNDERLINE | CELL_DASHED_UNDERLINE)

/* c is a code point or a grapheme handle. pad holds the OSC 8 link id. */
struct cell {
    uint32_t c;
    uint32_t fg;
    uint32_t bg;
    uint16_t flags;
    uint16_t pad;
};

_Static_assert(sizeof(struct cell) == 16,
               "struct cell must stay 16 bytes (4 cells per AVX-512 register)");

#endif