};
-static void _svgLoaderParserXmlClose(SvgLoaderData* loader, const char* content)
+static void _svgLoaderParserXmlClose(SvgLoaderData* loader, const char* content, unsigned int length)
{
+ const char* itr = nullptr;
+ int sz = length;
+ char tagName[20] = "";
+
content = _skipSpace(content, nullptr);
+ itr = content;
+ while ((itr != nullptr) && *itr != '>') itr++;
+
+ if (itr) {
+ sz = itr - content;
+ while ((sz > 0) && (isspace(content[sz - 1]))) sz--;
+ if ((unsigned int)sz >= sizeof(tagName)) sz = sizeof(tagName) - 1;
+ strncpy(tagName, content, sz);
+ tagName[sz] = '\0';
+ }
+ else return;
+
+
+
for (unsigned int i = 0; i < sizeof(popArray) / sizeof(popArray[0]); i++) {
- if (!strncmp(content, popArray[i].tag, popArray[i].sz - 1)) {
+ if (!strncmp(tagName, groupTags[i].tag, sz)) {
loader->stack.pop();
break;
}
}
for (unsigned int i = 0; i < sizeof(graphicsTags) / sizeof(graphicsTags[0]); i++) {
- if (!strncmp(content, graphicsTags[i].tag, graphicsTags[i].sz - 1)) {
+ if (!strncmp(tagName, graphicsTags[i].tag, sz)) {
loader->currentGraphicsNode = nullptr;
loader->stack.pop();
break;
break;
}
case SimpleXMLType::Close: {
- _svgLoaderParserXmlClose(loader, content);
+ _svgLoaderParserXmlClose(loader, content, length);
break;
}
case SimpleXMLType::Data: