diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2023-09-12 16:21:29 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2023-09-12 16:21:29 +0200 |
commit | d403ce66efb9b1150d103bc3b15eeaad312553a8 (patch) | |
tree | a824b6ebb995b7a6794efa7f10060bf9ae74e066 /source/kit/xml.c | |
parent | 3466546567bb2a4014c221523bbb04c1860916f5 (diff) | |
download | kit-d403ce66efb9b1150d103bc3b15eeaad312553a8.zip |
Update TODO
Diffstat (limited to 'source/kit/xml.c')
-rw-r--r-- | source/kit/xml.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/source/kit/xml.c b/source/kit/xml.c new file mode 100644 index 0000000..22a850a --- /dev/null +++ b/source/kit/xml.c @@ -0,0 +1,128 @@ +#include "xml.h" + +#include <assert.h> + +static i8 kit_xml_is_spaces(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + if (data.size <= 0) + return 1; + char c = data.values[data.size - 1]; + return c == ' ' || c == '\t' || c == '\r' || c == '\n'; +} + +static i8 kit_xml_is_idword(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + if (data.size <= 0) + return 1; + if (data.values[0] >= '0' || data.values[0] <= '9') + return 0; + char c = data.values[data.size - 1]; + return c == '_' || (c >= '0' && c <= '9') || + (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); +} + +static i8 kit_xml_not_tag_open(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size <= 0 || data.values[data.size - 1] != '<'; +} + +static i8 kit_xml_not_tag_close(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size <= 0 || data.values[data.size - 1] != '>'; +} + +static i8 kit_xml_is_tag_open(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size == 1 && data.values[0] == '<'; +} + +static i8 kit_xml_is_tag_close(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size == 1 && data.values[0] == '>'; +} + +static i8 kit_xml_is_tag_final_open(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size == 2 && data.values[0] == '<' && + data.values[1] == '/'; +} + +static i8 kit_xml_is_tag_final_close(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size == 2 && data.values[0] == '/' && + data.values[0] == '>'; +} + +static i8 kit_xml_is_quotes(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + return data.size == 1 && data.values[0] == '"'; +} + +static i8 kit_xml_is_inside_quotes(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + if (data.size <= 0) + return 1; + for (i64 i = 0; i < data.size; i++) + if (data.values[i] == '"') + return 0; + else if (data.values[i] == '\\') + i++; + return 1; +} + +static i8 kit_xml_is_number(str_t data) { + assert(data.size >= 0); + assert(data.values != NULL); + + if (data.size <= 0) + return 1; + char c = data.values[data.size - 1]; + return c >= '0' && c <= '9'; +} + +kit_xml_parse_result_t kit_xml_parse(kit_is_handle_t is, + kit_allocator_t *alloc) { + kit_xml_parse_result_t result; + memset(&result, 0, sizeof result); + + result.status = KIT_ERROR_NOT_IMPLEMENTED; + return result; +} + +kit_xml_print_result_t kit_xml_print(kit_xml_t *xml, + kit_allocator_t *alloc) { + assert(xml != NULL); + + kit_xml_print_result_t result; + memset(&result, 0, sizeof result); + + result.status = KIT_ERROR_NOT_IMPLEMENTED; + return result; +} + +void kit_xml_destroy(kit_xml_t *xml) { + assert(xml != NULL); + + if (xml == NULL) + return; +} |