void ParserEngine::handleNotationDecl(void* userData, const XML_Char* notationName, const XML_Char* base, const XML_Char* systemId, const XML_Char* publicId) { ParserEngine* pThis = reinterpret_cast<ParserEngine*>(userData); XMLString pubId; if (publicId) pubId.assign(publicId); XMLString sysId; if (systemId) sysId.assign(systemId); if (pThis->_pDTDHandler) pThis->_pDTDHandler->notationDecl(notationName, publicId ? &pubId : 0, systemId ? &sysId : 0); }
void Name::split(const XMLString& qname, XMLString& prefix, XMLString& localName) { XMLString::size_type pos = qname.find(':'); if (pos != XMLString::npos) { prefix.assign(qname, 0, pos); localName.assign(qname, pos + 1, qname.size() - pos - 1); } else { prefix.clear(); localName.assign(qname); } }
void ParserEngine::handleExternalParsedEntityDecl(void* userData, const XML_Char* entityName, const XML_Char* base, const XML_Char* systemId, const XML_Char* publicId) { ParserEngine* pThis = reinterpret_cast<ParserEngine*>(userData); XMLString pubId; if (publicId) pubId.assign(publicId); if (pThis->_pDeclHandler) pThis->_pDeclHandler->externalEntityDecl(entityName, publicId ? &pubId : 0, systemId); }
int ParserEngine::handleExternalEntityRef(XML_Parser parser, const XML_Char* context, const XML_Char* base, const XML_Char* systemId, const XML_Char* publicId) { ParserEngine* pThis = reinterpret_cast<ParserEngine*>(XML_GetUserData(parser)); if (!context && !pThis->_externalParameterEntities) return XML_STATUS_ERROR; if (context && !pThis->_externalGeneralEntities) return XML_STATUS_ERROR; InputSource* pInputSource = 0; EntityResolver* pEntityResolver = 0; EntityResolverImpl defaultResolver; XMLString sysId(systemId); XMLString pubId; if (publicId) pubId.assign(publicId); URI uri(fromXMLString(pThis->_context.back()->getSystemId())); uri.resolve(fromXMLString(sysId)); if (pThis->_pEntityResolver) { pEntityResolver = pThis->_pEntityResolver; pInputSource = pEntityResolver->resolveEntity(publicId ? &pubId : 0, toXMLString(uri.toString())); } if (!pInputSource && pThis->_externalGeneralEntities) { pEntityResolver = &defaultResolver; pInputSource = pEntityResolver->resolveEntity(publicId ? &pubId : 0, toXMLString(uri.toString())); } if (pInputSource) { XML_Parser extParser = XML_ExternalEntityParserCreate(pThis->_parser, context, 0); if (!extParser) throw XMLException("Cannot create external entity parser"); try { pThis->parseExternal(extParser, pInputSource); } catch (XMLException&) { pEntityResolver->releaseInputSource(pInputSource); XML_ParserFree(extParser); throw; } pEntityResolver->releaseInputSource(pInputSource); XML_ParserFree(extParser); return XML_STATUS_OK; } else return XML_STATUS_ERROR; }