#include #include "geometry/geometry.h" #include "util/util.h" #include "xml/xml.h" struct kalmia_t * kalmia_parse_file(const char *filename) { struct kai_tag_t *document = kai_parse_file(filename); if (document == NULL) { return NULL; } struct kai_tag_t *lib; /* create kalmia_t */ struct kalmia_t *k = kai_alloc(sizeof(struct kalmia_t), "kalmia_t"); if (k == NULL) { kai_tag_destroy(document); return NULL; } /* parse geometry */ lib = kai_tag_get_first_child_with_type(document, "library_geometries"); if (lib == NULL) { /* no geometry to read */ k->library_geometries = NULL; } else { k->library_geometries = kai_alloc(sizeof(struct ka_library_geometries_t), "library_geometries"); if (k->library_geometries == NULL) { kai_tag_destroy(document); free(k); return NULL; } kai_read_library_geometries(k->library_geometries, lib); } /* clean up */ kai_tag_destroy(document); return k; } void kalmia_destroy(struct kalmia_t *k) { if (k->library_geometries != NULL) { kai_release_library_geometries(*(k->library_geometries)); free(k->library_geometries); } free(k); }