summaryrefslogtreecommitdiff
path: root/src/cell.h
blob: 3138dca1f448d99d7784f9751510ba4a59691dcb (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
#ifndef WSAP_VTCORE_CELL_H
#define WSAP_VTCORE_CELL_H

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

#include "wsap_vtcore.h"

enum cell_flags {
    CELL_BOLD      = WSAP_VTCORE_ATTR_BOLD,
    CELL_ITALIC    = WSAP_VTCORE_ATTR_ITALIC,
    CELL_UNDERLINE = WSAP_VTCORE_ATTR_UNDERLINE,
    CELL_STRIKE    = WSAP_VTCORE_ATTR_STRIKE,
    CELL_OVERLINE  = WSAP_VTCORE_ATTR_OVERLINE,
    CELL_EMOJI     = WSAP_VTCORE_ATTR_EMOJI,
    CELL_TEXT      = WSAP_VTCORE_ATTR_TEXT,
    CELL_WIDE      = 1 << 7,
    CELL_TRAIL     = 1 << 8,
    CELL_WRAP_PAD  = 1 << 9,
    CELL_FAINT     = WSAP_VTCORE_ATTR_FAINT,
    CELL_DOUBLE_UNDERLINE = WSAP_VTCORE_ATTR_DOUBLE_UNDERLINE,
    CELL_CURLY_UNDERLINE  = WSAP_VTCORE_ATTR_CURLY_UNDERLINE,
    CELL_DOTTED_UNDERLINE = WSAP_VTCORE_ATTR_DOTTED_UNDERLINE,
    CELL_DASHED_UNDERLINE = WSAP_VTCORE_ATTR_DASHED_UNDERLINE,
    CELL_LINK      = WSAP_VTCORE_ATTR_LINK,
};

#define CELL_ANY_UNDERLINE WSAP_VTCORE_ATTR_UNDERLINE_MASK

/* 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