29 mParser = XML_ParserCreate(NULL);
30 XML_SetUserData(
mParser, (
void *)
this);
45 wxFFile theXMLFile(fname, wxT(
"rb"));
46 if (!theXMLFile.IsOpened()) {
47 mErrorStr =
XO(
"Could not open file: \"%s\"").Format( fname );
53 const size_t bufferSize = 16384;
57 size_t len = fread(buffer, 1, bufferSize, theXMLFile.fp());
58 done = (len < bufferSize);
59 if (!XML_Parse(
mParser, buffer, len, done)) {
66 XML_ErrorString(XML_GetErrorCode(
mParser))
71 (
long unsigned int)XML_GetCurrentLineNumber(
mParser)
131 mErrorStr =
XO(
"Could not load file: \"%s\"").Format( fname );
137 const wxString &xmldata)
139 auto utf8 = xmldata.ToUTF8();
140 const char *buffer = utf8.data();
141 int len = utf8.length();
145 if (!
ParseBuffer(baseHandler, utf8.data(), utf8.length(),
true))
165 for (
auto chunk : xmldata)
167 if (!
ParseBuffer(baseHandler,
static_cast<const char*
>(chunk.first), chunk.second,
false))
200 if (handlers.empty()) {
205 handlers.push_back(handler->ReadXMLChild(
name));
207 handlers.push_back(NULL);
215 const char*
name = *atts++;
216 const char* value = *atts++;
224 if (handlers.size() == 1)
237 handler->ReadXMLEndTag(
name);
249 handler->ReadXMLContent(s, len);
253 XMLTagHandler* baseHandler,
const char* buffer,
size_t len,
bool isFinal)
255 if (!XML_Parse(
mParser, buffer, len, isFinal))
269 (
long unsigned int)XML_GetCurrentLineNumber(
mParser));
272 wxT(
"ParseString error: %s\n===begin===%s\n===end==="),
const TranslatableString name
TranslatableString Verbatim(wxString str)
Require calls to the one-argument constructor to go through this distinct global function name.
A low overhead memory stream with O(1) append, low heap fragmentation and a linear memory view.
Holds a msgid for the translation catalog; may also bind format arguments.
wxString Debug() const
Format as an English string for debugging logs and developers' eyes, not for end users.
A view into an attribute value. The class does not take the ownership of the data.
Reads a file and passes the results through an XMLTagHandler.
bool ParseString(XMLTagHandler *baseHandler, const wxString &xmldata)
const TranslatableString & GetErrorStr() const
static void startElement(void *userData, const char *name, const char **atts)
bool ParseMemoryStream(XMLTagHandler *baseHandler, const MemoryStream &xmldata)
bool Parse(XMLTagHandler *baseHandler, const FilePath &fname)
const TranslatableString & GetLibraryErrorStr() const
static void endElement(void *userData, const char *name)
std::vector< XMLTagHandler * > Handlers
TranslatableString mErrorStr
AttributesList mCurrentTagAttributes
XMLTagHandler * mBaseHandler
static void charHandler(void *userData, const char *s, int len)
bool ParseBuffer(XMLTagHandler *baseHandler, const char *buffer, size_t len, bool isFinal)
TranslatableString mLibraryErrorStr
This class is an interface which should be implemented by classes which wish to be able to load and s...