#ifndef TINYXML2_RS_H
#define TINYXML2_RS_H
#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef enum TxError {
TxSuccess = 0,
TxErrorEmptyDocument = 1,
TxErrorParsingElement = 2,
TxErrorParsingAttribute = 3,
TxErrorParsingText = 4,
TxErrorParsingCdata = 5,
TxErrorParsingComment = 6,
TxErrorParsingDeclaration = 7,
TxErrorParsingUnknown = 8,
TxErrorMismatchedElement = 9,
TxErrorFileNotFound = 10,
TxErrorFileRead = 11,
TxErrorElementDepthExceeded = 12,
TxErrorNoAttribute = 13,
TxErrorWrongAttributeType = 14,
TxErrorCanNotConvertText = 15,
TxErrorNoTextNode = 16,
TxErrorInvalidNodeId = 17,
} TxError;
typedef enum TxNodeType {
TxNodeDocument = 0,
TxNodeElement = 1,
TxNodeText = 2,
TxNodeComment = 3,
TxNodeDeclaration = 4,
TxNodeUnknown = 5,
} TxNodeType;
typedef struct TxNodeId {
uint32_t index;
uint32_t generation;
} TxNodeId;
#define TX_NULL_NODE (TxNodeId){ .index = UINT32_MAX, .generation = 0 }
#ifdef __cplusplus
extern "C" {
#endif
TxDocument *tx_document_new(void);
void tx_document_free(TxDocument *doc);
void tx_document_clear(TxDocument *doc);
enum TxError tx_document_parse(TxDocument *doc, const char *xml);
enum TxError tx_document_load_file(TxDocument *doc, const char *path);
enum TxError tx_document_save_file(const TxDocument *doc, const char *path);
const char *tx_document_to_string(TxDocument *doc);
const char *tx_document_to_string_compact(TxDocument *doc);
enum TxError tx_document_error(const TxDocument *doc);
int tx_document_error_line(const TxDocument *doc);
const char *tx_document_error_name(TxDocument *doc);
struct TxNodeId tx_new_element(TxDocument *doc, const char *name);
struct TxNodeId tx_new_text(TxDocument *doc, const char *text);
struct TxNodeId tx_new_comment(TxDocument *doc, const char *text);
struct TxNodeId tx_new_declaration(TxDocument *doc, const char *text);
struct TxNodeId tx_new_unknown(TxDocument *doc, const char *text);
enum TxError tx_insert_end_child(TxDocument *doc, struct TxNodeId parent, struct TxNodeId child);
enum TxError tx_insert_first_child(TxDocument *doc, struct TxNodeId parent, struct TxNodeId child);
enum TxError tx_insert_after_child(TxDocument *doc, struct TxNodeId after, struct TxNodeId child);
enum TxError tx_delete_child(TxDocument *doc, struct TxNodeId parent, struct TxNodeId child);
enum TxError tx_delete_children(TxDocument *doc, struct TxNodeId parent);
enum TxError tx_delete_node(TxDocument *doc, struct TxNodeId node);
struct TxNodeId tx_parent(const TxDocument *doc, struct TxNodeId node);
struct TxNodeId tx_first_child(const TxDocument *doc, struct TxNodeId node);
struct TxNodeId tx_last_child(const TxDocument *doc, struct TxNodeId node);
struct TxNodeId tx_prev_sibling(const TxDocument *doc, struct TxNodeId node);
struct TxNodeId tx_next_sibling(const TxDocument *doc, struct TxNodeId node);
struct TxNodeId tx_first_child_element(const TxDocument *doc,
struct TxNodeId node,
const char *name);
struct TxNodeId tx_next_sibling_element(const TxDocument *doc,
struct TxNodeId node,
const char *name);
struct TxNodeId tx_root_element(const TxDocument *doc);
const char *tx_element_name(TxDocument *doc, struct TxNodeId element);
const char *tx_element_attribute(TxDocument *doc, struct TxNodeId el, const char *name);
enum TxError tx_element_set_attribute(TxDocument *doc,
struct TxNodeId el,
const char *name,
const char *value);
enum TxError tx_element_delete_attribute(TxDocument *doc, struct TxNodeId el, const char *name);
const char *tx_element_get_text(TxDocument *doc, struct TxNodeId element);
enum TxError tx_element_set_text(TxDocument *doc, struct TxNodeId element, const char *text);
enum TxError tx_query_int_attribute(const TxDocument *doc,
struct TxNodeId el,
const char *name,
int *value);
enum TxError tx_query_bool_attribute(const TxDocument *doc,
struct TxNodeId el,
const char *name,
bool *value);
enum TxError tx_query_double_attribute(const TxDocument *doc,
struct TxNodeId el,
const char *name,
double *value);
int tx_int_attribute(const TxDocument *doc, struct TxNodeId el, const char *name, int default_val);
bool tx_bool_attribute(const TxDocument *doc,
struct TxNodeId el,
const char *name,
bool default_val);
double tx_double_attribute(const TxDocument *doc,
struct TxNodeId el,
const char *name,
double default_val);
TxPrinter *tx_printer_new(void);
TxPrinter *tx_printer_new_compact(void);
void tx_printer_free(TxPrinter *printer);
void tx_printer_open_element(TxPrinter *printer, const char *name);
void tx_printer_push_attribute(TxPrinter *printer, const char *name, const char *value);
void tx_printer_close_element(TxPrinter *printer);
void tx_printer_push_text(TxPrinter *printer, const char *text);
void tx_printer_push_comment(TxPrinter *printer, const char *text);
const char *tx_printer_result(TxPrinter *printer);
void tx_printer_clear(TxPrinter *printer);
enum TxNodeType tx_node_type(const TxDocument *doc, struct TxNodeId node);
bool tx_node_is_null(struct TxNodeId node);
const char *tx_node_value(TxDocument *doc, struct TxNodeId node);
int tx_node_line(const TxDocument *doc, struct TxNodeId node);
#ifdef __cplusplus
} #endif
#endif