From 0724047fbbbf02e053e2686299d726fcb2c7d295 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 20 Feb 2023 18:42:30 +0000 Subject: Add SAXParse base class --- lib/saxParse.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/saxParse.cpp (limited to 'lib/saxParse.cpp') diff --git a/lib/saxParse.cpp b/lib/saxParse.cpp new file mode 100644 index 0000000..d592a1f --- /dev/null +++ b/lib/saxParse.cpp @@ -0,0 +1,41 @@ +#include "saxParse.h" +#include "mxml.h" + +namespace Persistence { + void + SAXParse::comment(mxml_node_t *) + { + // Default to just ignore comments + } + + void + SAXParse::parseFile(FILE * file) + { + mxmlSAXLoadFile( + nullptr, file, MXML_TEXT_CALLBACK, + [](mxml_node_t * n, mxml_sax_event_t e, void * data) { + SAXParse * self = static_cast(data); + switch (e) { + case MXML_SAX_ELEMENT_OPEN: + return self->elementOpen(n); + break; + case MXML_SAX_ELEMENT_CLOSE: + return self->elementClose(n); + break; + case MXML_SAX_COMMENT: + return self->comment(n); + break; + case MXML_SAX_DATA: + return self->data(n); + break; + case MXML_SAX_DIRECTIVE: + return self->directive(n); + break; + case MXML_SAX_CDATA:; + return self->cdata(n); + break; + } + }, + this); + } +} -- cgit v1.2.3 From d1390c8673b178744acd6aa3a681f7b51ed9438f Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 2 Mar 2023 23:41:10 +0000 Subject: Don't leak root node when parsing XML --- lib/saxParse.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/saxParse.cpp') diff --git a/lib/saxParse.cpp b/lib/saxParse.cpp index d592a1f..5c597aa 100644 --- a/lib/saxParse.cpp +++ b/lib/saxParse.cpp @@ -11,7 +11,7 @@ namespace Persistence { void SAXParse::parseFile(FILE * file) { - mxmlSAXLoadFile( + mxmlRelease(mxmlSAXLoadFile( nullptr, file, MXML_TEXT_CALLBACK, [](mxml_node_t * n, mxml_sax_event_t e, void * data) { SAXParse * self = static_cast(data); @@ -36,6 +36,6 @@ namespace Persistence { break; } }, - this); + this)); } } -- cgit v1.2.3