summaryrefslogtreecommitdiff
path: root/source/kit/xml.c
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2023-09-12 16:21:29 +0200
committerMitya Selivanov <automainint@guattari.tech>2023-09-12 16:21:29 +0200
commitd403ce66efb9b1150d103bc3b15eeaad312553a8 (patch)
treea824b6ebb995b7a6794efa7f10060bf9ae74e066 /source/kit/xml.c
parent3466546567bb2a4014c221523bbb04c1860916f5 (diff)
downloadkit-d403ce66efb9b1150d103bc3b15eeaad312553a8.zip
Update TODO
Diffstat (limited to 'source/kit/xml.c')
-rw-r--r--source/kit/xml.c128
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;
+}