summaryrefslogtreecommitdiff
path: root/kit/xml.h
diff options
context:
space:
mode:
Diffstat (limited to 'kit/xml.h')
-rw-r--r--kit/xml.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/kit/xml.h b/kit/xml.h
new file mode 100644
index 0000000..a4dd3d1
--- /dev/null
+++ b/kit/xml.h
@@ -0,0 +1,64 @@
+#ifndef KIT_XML_H
+#define KIT_XML_H
+
+#include "string_builder.h"
+#include "input_stream.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct kit_xml_ kit_xml_t;
+
+typedef struct {
+ kit_str_builder_t name;
+ kit_str_builder_t value;
+} kit_xml_property_t;
+
+typedef KIT_DA(kit_xml_property_t) kit_da_xml_property_t;
+typedef KIT_DA(kit_xml_t) kit_da_xml_t;
+
+struct kit_xml_ {
+ i8 is_declaration;
+ kit_str_builder_t tag;
+ kit_str_builder_t text;
+ kit_str_builder_t tail;
+ kit_da_xml_property_t properties;
+ kit_da_xml_t children;
+};
+
+typedef struct {
+ s32 status;
+ kit_xml_t xml;
+} kit_xml_parse_result_t;
+
+typedef struct {
+ s32 status;
+ kit_str_builder_t text;
+} kit_xml_text_t;
+
+kit_xml_parse_result_t kit_xml_parse(kit_is_handle_t is,
+ kit_allocator_t *alloc);
+kit_xml_text_t kit_xml_print(kit_xml_t *xml, kit_allocator_t *alloc);
+kit_xml_text_t kit_xml_full_text(kit_xml_t *xml,
+ kit_allocator_t *alloc);
+b8 kit_xml_has_property(kit_xml_t *xml, kit_str_t name);
+kit_str_t kit_xml_property(kit_xml_t *xml, kit_str_t name);
+void kit_xml_destroy(kit_xml_t *xml);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define xml_t kit_xml_t
+#define xml_property_t kit_xml_property_t
+#define xml_parse_result_t kit_xml_parse_result_t
+#define xml_text_t kit_xml_text_t
+#define xml_parse kit_xml_parse
+#define xml_print kit_xml_print
+#define xml_full_text kit_xml_full_text
+#define xml_has_property kit_xml_has_property
+#define xml_property kit_xml_property
+#define xml_destroy kit_xml_destroy
+
+#endif