diff options
author | P. J. McDermott <pjm@nac.net> | 2013-02-16 21:35:48 (EST) |
---|---|---|
committer | P. J. McDermott <pjm@nac.net> | 2013-02-16 21:35:48 (EST) |
commit | 1e4407da677dd7a192c817de16583bb7199ceeb0 (patch) | |
tree | b97d3e7e746ef91ffebb86cb654e6fc8499241e5 /src/xml.c | |
parent | 63349a6230304a7f1aa34a4c96e4873f86bf39c5 (diff) | |
download | overworld-rpg-1e4407da677dd7a192c817de16583bb7199ceeb0.zip overworld-rpg-1e4407da677dd7a192c817de16583bb7199ceeb0.tar.gz overworld-rpg-1e4407da677dd7a192c817de16583bb7199ceeb0.tar.bz2 |
TMX parser rewrite number one.
Diffstat (limited to 'src/xml.c')
-rw-r--r-- | src/xml.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/xml.c b/src/xml.c new file mode 100644 index 0000000..68a72ed --- /dev/null +++ b/src/xml.c @@ -0,0 +1,62 @@ +#include <string.h> +#include <stdio.h> +#include <expat.h> +#include "xml.h" +#include "logging.h" + +inline int +xml_check_tag(const char *found, const char *expected) +{ + return strcmp(found, expected) != 0; +} + +inline void +xml_unexpected_start_tag(XML_Parser p, const char *found, const char *expected) +{ + warn("Found \"%s\" start tag where expected one of \"%s\" in map", + found, expected); + XML_StopParser(p, XML_FALSE); +} + +inline void +xml_unexpected_end_tag(XML_Parser p, const char *found, const char *expected) +{ + warn("Found \"%s\" end tag where expected one of \"%s\" in map", + found, expected); + XML_StopParser(p, XML_FALSE); +} + +void +xml_get_int_attr(XML_Parser p, const char **attr, const char *name, + int *dest, int req) +{ + for (; attr[0] != NULL; attr += 2) { + if (strcmp(attr[0], name) == 0) { + if (sscanf(attr[1], "%d", dest) == 1) { + return; + } else if (req) { + warn("Invalid \"%s\" attribute value", name); + XML_StopParser(p, XML_FALSE); + } + } + } + if (req) { + warn("Required attribute \"%s\" not found", name); + XML_StopParser(p, XML_FALSE); + } +} + +void +xml_get_string_attr(XML_Parser p, const char **attr, const char *name, + char **dest, int req) +{ + for (; attr[0] != NULL; attr += 2) { + if (strcmp(attr[0], name) == 0) { + *dest = strdup(attr[1]); + } + } + if (req) { + warn("Required attribute \"%s\" not found", name); + XML_StopParser(p, XML_FALSE); + } +} |