diff --git a/src/xercesc/parsers/DOMBuilderImpl.cpp b/src/xercesc/parsers/DOMBuilderImpl.cpp index e408b31546194c935d64083205a2d14359e21f3f..0f3d34cf80a38f6f372b4c4d7196473b47aa7f12 100644 --- a/src/xercesc/parsers/DOMBuilderImpl.cpp +++ b/src/xercesc/parsers/DOMBuilderImpl.cpp @@ -545,18 +545,24 @@ Grammar* DOMBuilderImpl::loadGrammar(const char* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); // Release DOM tree - DTD DOMDocument* doc = adoptDocument(); if (doc) doc->release(); - + + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -576,6 +582,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); // Release DOM tree - DTD @@ -583,11 +591,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId, if (doc) doc->release(); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -609,6 +621,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source, Wrapper4DOMInputSource isWrapper((DOMInputSource*) &source, false, getMemoryManager()); setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(isWrapper, grammarType, toCache); // Release DOM tree - DTD @@ -616,11 +630,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source, if (doc) doc->release(); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } diff --git a/src/xercesc/parsers/XercesDOMParser.cpp b/src/xercesc/parsers/XercesDOMParser.cpp index 484b9c2f35dcdf489457fe10d38f782c0a3bfd28..7b8288f2ede9da549d4eca1030b2ae5261ae6595 100644 --- a/src/xercesc/parsers/XercesDOMParser.cpp +++ b/src/xercesc/parsers/XercesDOMParser.cpp @@ -265,12 +265,18 @@ Grammar* XercesDOMParser::loadGrammar(const char* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -290,12 +296,18 @@ Grammar* XercesDOMParser::loadGrammar(const XMLCh* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -315,12 +327,18 @@ Grammar* XercesDOMParser::loadGrammar(const InputSource& source, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(source, grammarType, toCache); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; }