}
--tagLevel;
if (endElementHandler && tag->name.str) {
- if (tag->name.localPart) {
- XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen;
- const XML_Char *from = tag->name.localPart;
- while ((*to++ = *from++) != 0)
- ;
- }
endElementHandler(handlerArg, tag->name.str);
}
else if (defaultHandler)
int nDefaultAtts = 0;
const XML_Char **appAtts; /* the attribute list for the application */
int attIndex = 0;
+ int prefixLen = 0;
int i;
int n;
+ XML_Char *uri;
int nPrefixes = 0;
BINDING *binding;
const XML_Char *localPart;
binding = dtd.defaultPrefix.binding;
localPart = tagNamePtr->str;
}
+ else
+ localPart = NULL;
+ if (ns && ns_triplets && binding->prefix->name) {
+ for (prefixLen = 0; binding->prefix->name[prefixLen++];)
+ ;
+ n += prefixLen;
+ }
else
return XML_ERROR_NONE;
tagNamePtr->localPart = localPart;
n = i + binding->uriLen;
if (n > binding->uriAlloc) {
TAG *p;
- XML_Char *uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char));
+ uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char));
if (!uri)
return XML_ERROR_NO_MEMORY;
binding->uriAlloc = n + EXPAND_SPARE;
FREE(binding->uri);
binding->uri = uri;
}
- memcpy(binding->uri + binding->uriLen, localPart, i * sizeof(XML_Char));
+ uri = binding->uri + binding->uriLen;
+ memcpy(uri, localPart, i * sizeof(XML_Char));
+ if (prefixLen) {
+ uri = uri + (i - 1);
+ if (namespaceSeparator) { *(uri) = namespaceSeparator; }
+ memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char));
+ }
tagNamePtr->str = binding->uri;
return XML_ERROR_NONE;
}