XenevaOS
Loading...
Searching...
No Matches
css.h
Go to the documentation of this file.
1
14#ifndef NS_CSS_H
15#define NS_CSS_H
16
17#include <stdint.h>
18#include <stddef.h>
19#include <stdbool.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#define NS_CSS_MAX_CLASSES 8
26#define NS_CSS_CLASS_LEN 31
27#define NS_CSS_ID_LEN 63
28#define NS_CSS_TAG_LEN 15
29#define NS_CSS_MAX_ATTRS 24
30#define NS_CSS_ATTR_NAME_LEN 31
31
32typedef struct NsCssAttr {
33 char* name;
34 char* value;
36
37typedef struct NsCssNode {
39 /* Sibling links + child list, so libcss sibling combinators and
40 * :empty can see the real document shape. */
41 struct NsCssNode* next;
42 struct NsCssNode* prev;
48 char id[NS_CSS_ID_LEN + 1];
49 bool is_link;
50 bool is_text;
51 char* text;
52 size_t text_len;
55 void* lwcName;
57 void* lwcId;
61
62/* Per-page lifecycle: begin, add author <style> sheets, end. A UA sheet
63 * with reader defaults (body white, headings sized, links blue) is
64 * installed by NsCssBegin. */
65int NsCssBegin(void);
66/* Set the media-query viewport before selecting the DOM. Must be called
67 * after NsCssBegin() (which resets the media block). */
68void NsCssSetViewport(int width, int height);
69int NsCssAddSheet(const char* data, size_t len);
70void NsCssEnd(void);
71
75void NsCssNodeAddAttribute(NsCssNode* n, const char* name, const char* value);
76const char* NsCssNodeAttr(NsCssNode* n, const char* name);
77void NsCssNodeAddClass(NsCssNode* n, const char* cls);
78void NsCssNodeSetId(NsCssNode* n, const char* id);
79void NsCssNodeSetLink(NsCssNode* n, bool link);
80/* Parse a style="" attribute body into a per-node author sheet.
81 * An empty string drops the inline sheet. */
82int NsCssNodeSetInline(NsCssNode* n, const char* style);
83/* Depth-first id lookup. */
84NsCssNode* NsCssNodeById(NsCssNode* n, const char* id);
85/* Select n and its descendants. Parent of n must already be selected
86 * when n is not the root. The select context must still be alive. */
88/* Select + inherit-compose n. Parent must already be selected. */
91/* Recursively destroy a parsed tree (children + siblings). */
93
94/* Display values translated for the layout engine. */
95#define NS_DISPLAY_INLINE 0
96#define NS_DISPLAY_BLOCK 1
97#define NS_DISPLAY_LIST_ITEM 2
98#define NS_DISPLAY_NONE 3
99#define NS_DISPLAY_INLINE_BLOCK 4
100#define NS_DISPLAY_TABLE_ROW 5
101#define NS_DISPLAY_TABLE_CELL 6
102#define NS_DISPLAY_FLEX_ROW 7
103
104/* Position values used by the layout engine. */
105#define NS_POS_STATIC 0
106#define NS_POS_ABSOLUTE 1
107#define NS_POS_FIXED 2
108#define NS_POS_RELATIVE 3
109
110/* Fully resolved box metrics. Lengths are px (may be negative for
111 * margins); width/height are 0 when auto. Percentages are resolved
112 * against base_width (horizontal) / base_height (vertical). */
113typedef struct NsCssBoxStyle {
115 uint8_t text_align; /* 0 left, 1 center, 2 right */
118 uint8_t list_type; /* 0 none, 1 disc, 2 circle, 3 square, 4 decimal */
125 /* Out-of-flow / relative offsets. */
130 /* Flex container and item properties. */
132 uint8_t flex_direction; /* 0 row, 1 column */
136 /* 0 auto (use the container's align-items), 1 center, 2 flex-end,
137 * 3 flex-start, 4 stretch. */
143 int width;
149 int margin[4]; /* top, right, bottom, left */
150 int padding[4];
153 uint8_t border_style[4]; /* 0 none/hidden, otherwise visible */
158 int opacity; /* 0..255 */
160
161void NsCssNodeBoxStyle(NsCssNode* n, int base_width, int base_height,
162 int viewport_w, int viewport_h, NsCssBoxStyle* out);
163
167/* True when the element must not contribute text: display:none or
168 * visibility:hidden/collapse. */
170/* 1 when text-align computes to center. */
172/* 1 when this element starts a new line (block, table, flex, grid).
173 * Inline, inline-block, and table-cell stay on the current line.
174 * Children of a table-row or flex row also stay on that line. */
176/* 0 when the background is transparent. Otherwise 0xAARRGGBB. */
178
179/* Bits the painter applies. Everything else in the computed style either
180 * has no face to switch to (font-family) or no box tree (position). */
181#define NS_CSS_BOLD 1
182#define NS_CSS_ITALIC 2
183#define NS_CSS_UNDER 4
184#define NS_CSS_STRIKE 8
185#define NS_CSS_OVER 16
186
187typedef struct NsCssUsed {
189 uint8_t align; /* 0 left, 1 center, 2 right */
191 uint8_t line; /* row step in px */
192 uint8_t list; /* 0 none, 1 disc, 2 circle, 3 square, 4 decimal, 5 alpha */
193 uint8_t upper; /* 1 uppercase, 2 lowercase */
196 uint16_t width; /* 0 = auto */
197 uint8_t opacity; /* 255 = solid */
198 uint32_t border; /* 0, or the bottom-border color */
200
202
203#ifdef __cplusplus
204}
205#endif
206
207#endif
#define out(...)
Definition main.cpp:65
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
int NsCssNodeSkip(NsCssNode *n)
Definition css.c:1047
NsCssNode * NsCssNodeCreate(NsCssNode *parent, const char *tag)
Definition css.c:234
void NsCssReselectTree(NsCssNode *n)
Definition css.c:858
#define NS_CSS_CLASS_LEN
Definition css.h:26
void NsCssNodeAddAttribute(NsCssNode *n, const char *name, const char *value)
Definition css.c:294
int NsCssNodeSetInline(NsCssNode *n, const char *style)
Definition css.c:359
uint32_t NsCssNodeBackground(NsCssNode *n)
Definition css.c:1066
void NsCssNodeAppendChild(NsCssNode *parent, NsCssNode *child)
Definition css.c:281
void NsCssNodeSetId(NsCssNode *n, const char *id)
Definition css.c:346
void NsCssNodeDestroy(NsCssNode *n)
Definition css.c:380
int NsCssBegin(void)
Definition css.c:152
int NsCssNodeCenter(NsCssNode *n)
Definition css.c:1038
int NsCssNodeBlock(NsCssNode *n)
Definition css.c:1002
void NsCssNodeAddClass(NsCssNode *n, const char *cls)
Definition css.c:335
void NsCssNodeBoxStyle(NsCssNode *n, int base_width, int base_height, int viewport_w, int viewport_h, NsCssBoxStyle *out)
Definition css.c:1370
NsCssNode * NsCssNodeById(NsCssNode *n, const char *id)
Definition css.c:843
NsCssNode * NsCssNodeCreateText(NsCssNode *parent, const char *text, size_t len)
Definition css.c:261
void NsCssNodeDestroyTree(NsCssNode *n)
Definition css.c:417
void NsCssSetViewport(int width, int height)
Definition css.c:174
int NsCssNodeFontPx(NsCssNode *n)
Definition css.c:940
#define NS_CSS_ID_LEN
Definition css.h:27
#define NS_CSS_MAX_CLASSES
Definition css.h:25
int NsCssSelect(NsCssNode *n)
Definition css.c:868
void NsCssNodeSetLink(NsCssNode *n, bool link)
Definition css.c:354
void NsCssEnd(void)
Definition css.c:207
const char * NsCssNodeAttr(NsCssNode *n, const char *name)
Definition css.c:321
uint32_t NsCssNodeColor(NsCssNode *n)
Definition css.c:911
void NsCssNodeUsed(NsCssNode *n, NsCssUsed *out)
Definition css.c:1119
int NsCssNodeMarginLines(NsCssNode *n)
Definition css.c:1081
#define NS_CSS_MAX_ATTRS
Definition css.h:29
int NsCssAddSheet(const char *data, size_t len)
Definition css.c:188
#define NS_CSS_TAG_LEN
Definition css.h:28
struct drm_crtc struct drm_plane struct drm_plane const struct drm_crtc_funcs const char * name
Definition drm_crtc.h:1242
size_t len
Definition initial.c:23
struct kobject * parent
Definition kobject.h:91
void * data
Definition kthread.h:30
Definition css.h:32
char * name
Definition css.h:33
char * value
Definition css.h:34
Definition css.h:113
int height
Definition css.h:144
uint32_t color
Definition css.h:154
int line_px
Definition css.h:157
uint8_t align_items
Definition css.h:135
uint32_t background
Definition css.h:155
int padding[4]
Definition css.h:150
int min_height
Definition css.h:147
uint8_t box_sizing
Definition css.h:124
uint8_t flex_container
Definition css.h:131
uint8_t list_type
Definition css.h:118
uint8_t justify_content
Definition css.h:134
uint8_t z_index_auto
Definition css.h:127
int margin[4]
Definition css.h:149
int width
Definition css.h:143
uint32_t border_color[4]
Definition css.h:152
int max_width
Definition css.h:146
uint8_t position
Definition css.h:122
uint8_t text_align
Definition css.h:115
int right
Definition css.h:128
int max_height
Definition css.h:148
int opacity
Definition css.h:158
int left
Definition css.h:128
int flex_shrink
Definition css.h:142
uint8_t bottom_auto
Definition css.h:126
uint8_t align_self
Definition css.h:138
uint8_t float_side
Definition css.h:123
int z_index
Definition css.h:129
int font_px
Definition css.h:156
int top
Definition css.h:128
uint8_t top_auto
Definition css.h:126
uint8_t height_auto
Definition css.h:121
uint8_t right_auto
Definition css.h:126
int flex_grow
Definition css.h:141
uint8_t border_style[4]
Definition css.h:153
uint8_t width_auto
Definition css.h:120
uint8_t flex_direction
Definition css.h:132
int flex_basis
Definition css.h:140
uint8_t white_space_nowrap
Definition css.h:117
uint8_t display
Definition css.h:114
int border_width[4]
Definition css.h:151
uint8_t left_auto
Definition css.h:126
int bottom
Definition css.h:128
int min_width
Definition css.h:145
uint8_t white_space_pre
Definition css.h:116
uint8_t flex_wrap
Definition css.h:133
uint8_t flex_basis_auto
Definition css.h:139
uint8_t decor
Definition css.h:119
Definition css.h:37
char * text
Definition css.h:51
void * lwcName
Definition css.h:55
struct NsCssNode * parent
Definition css.h:38
bool is_link
Definition css.h:49
struct NsCssNode * last_child
Definition css.h:44
NsCssAttr attrs[NS_CSS_MAX_ATTRS]
Definition css.h:53
char cls[NS_CSS_MAX_CLASSES][NS_CSS_CLASS_LEN+1]
Definition css.h:46
char tag[NS_CSS_TAG_LEN+1]
Definition css.h:45
uint32_t n_attrs
Definition css.h:54
size_t text_len
Definition css.h:52
uint32_t n_cls
Definition css.h:47
void * lwcId
Definition css.h:57
struct NsCssNode * first_child
Definition css.h:43
void * selectResults
Definition css.h:59
struct NsCssNode * next
Definition css.h:41
bool is_text
Definition css.h:50
struct NsCssNode * prev
Definition css.h:42
void * lwcCls[NS_CSS_MAX_CLASSES]
Definition css.h:56
void * inlineSheet
Definition css.h:58
Definition css.h:187
uint8_t opacity
Definition css.h:197
uint8_t align
Definition css.h:189
uint8_t indent
Definition css.h:190
uint8_t pre
Definition css.h:194
uint8_t nowrap
Definition css.h:195
uint16_t width
Definition css.h:196
uint8_t decor
Definition css.h:188
uint8_t list
Definition css.h:192
uint32_t border
Definition css.h:198
uint8_t line
Definition css.h:191
uint8_t upper
Definition css.h:193