diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2026-05-05 16:05:19 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2026-05-05 16:05:19 +0800 |
| commit | fd2d93f4a97ab5a3bc18764c353b971b4035ac6a (patch) | |
| tree | 26c6b13590dfa727a0e5efbddf5f343982d89cbf /wv_dom.h | |
| parent | 49304ca2f667b8d82e9346654477c10a27a63931 (diff) | |
| download | web-view-fd2d93f4a97ab5a3bc18764c353b971b4035ac6a.tar.gz | |
Defined basic DOM operations.
Diffstat (limited to 'wv_dom.h')
| -rw-r--r-- | wv_dom.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/wv_dom.h b/wv_dom.h new file mode 100644 index 0000000..9a2c281 --- /dev/null +++ b/wv_dom.h @@ -0,0 +1,69 @@ +#ifndef WV_DOM_H +#define WV_DOM_H + +#include "wv_mem.h" + +typedef enum { + WV_TAG_UNKNOWN = 0, + WV_TAG_DOCUMENT, + WV_TAG_HTML, + WV_TAG_HEAD, + WV_TAG_META, + WV_TAG_TITLE, + WV_TAG_LINK, + WV_TAG_BODY, + WV_TAG_HEADER, + WV_TAG_H1, + WV_TAG_A, + WV_TAG_ARTICLE, + WV_TAG_UL, + WV_TAG_LI, + WV_TAG_TIME, + WV_TAG_FOOTER, + WV_TAG_P +} wv_tag_id; + +typedef enum { + WV_NODE_DOCUMENT, + WV_NODE_ELEMENT, + WV_NODE_TEXT +} wv_node_type; + +struct wv_attr { + wv_ref key; /* E.g., "href" */ + wv_ref val; /* E.g., "/log/vcs-1/" */ + wv_ref next; /* Next attribute in the list */ +}; + +struct wv_node { + wv_node_type type; + + wv_ref parent; + wv_ref first_child; + wv_ref last_child; + wv_ref prev_sibling; + wv_ref next_sibling; + + union { + struct { + wv_tag_id tag_id; + wv_ref attr_head; + } element; + + struct { + wv_ref str; + size_t len; + } text; + } u; +}; + +/* DOM operations */ +wv_ref wv_node_new(struct wv_arena *arena, wv_node_type type); +void wv_node_append(struct wv_arena *arena, wv_ref parent, wv_ref child); + +/* Attribute operations */ +wv_ref wv_attr_get(struct wv_arena *arena, wv_ref node_ref, const char *key_name); +void wv_attr_set(struct wv_arena *arena, wv_ref node_ref, wv_ref key_str, wv_ref val_str); + +#endif /* WV_DOM_H */ + |
