From a2bf97a7ca620067bd9a5250001543e725413327 Mon Sep 17 00:00:00 2001 From: Khaled Noaman <knoaman@apache.org> Date: Wed, 14 Aug 2002 15:20:38 +0000 Subject: [PATCH] [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174120 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/dom/deprecated/DOMParser.cpp | 1 + src/xercesc/dom/deprecated/DOMParser.hpp | 1 + src/xercesc/internal/XMLScanner.cpp | 4 ++-- src/xercesc/parsers/AbstractDOMParser.cpp | 1 + src/xercesc/parsers/AbstractDOMParser.hpp | 1 + src/xercesc/parsers/SAX2XMLReaderImpl.cpp | 14 +++++++++----- src/xercesc/parsers/SAX2XMLReaderImpl.hpp | 6 ++++++ src/xercesc/parsers/SAXParser.cpp | 6 +++++- src/xercesc/parsers/SAXParser.hpp | 6 ++++++ src/xercesc/validators/DTD/DocTypeHandler.hpp | 8 ++++++-- 10 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/xercesc/dom/deprecated/DOMParser.cpp b/src/xercesc/dom/deprecated/DOMParser.cpp index c0d1d4ee0..7255e1cec 100644 --- a/src/xercesc/dom/deprecated/DOMParser.cpp +++ b/src/xercesc/dom/deprecated/DOMParser.cpp @@ -961,6 +961,7 @@ void DOMParser::doctypeDecl , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset ) { DOM_DocumentType dt; diff --git a/src/xercesc/dom/deprecated/DOMParser.hpp b/src/xercesc/dom/deprecated/DOMParser.hpp index ec192f2fd..cce6b4640 100644 --- a/src/xercesc/dom/deprecated/DOMParser.hpp +++ b/src/xercesc/dom/deprecated/DOMParser.hpp @@ -1501,6 +1501,7 @@ public : , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset = false ); virtual void doctypePI diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp index ca5457016..30ec9f228 100644 --- a/src/xercesc/internal/XMLScanner.cpp +++ b/src/xercesc/internal/XMLScanner.cpp @@ -2457,7 +2457,7 @@ void XMLScanner::scanDocTypeDecl() // call the doctype event. // if (fDocTypeHandler) - fDocTypeHandler->doctypeDecl(*rootDecl, pubId, sysId, hasIntSubset); + fDocTypeHandler->doctypeDecl(*rootDecl, pubId, sysId, hasIntSubset, hasExtSubset); // // Ok, if we had an internal subset, we are just past the [ character @@ -4531,7 +4531,7 @@ Grammar* XMLScanner::loadDTDGrammar(const InputSource& src, rootDecl->setExternalElemDeclaration(true); Janitor<DTDElementDecl> janSrc(rootDecl); - fDocTypeHandler->doctypeDecl(*rootDecl, src.getPublicId(), src.getSystemId(), false); + fDocTypeHandler->doctypeDecl(*rootDecl, src.getPublicId(), src.getSystemId(), false, true); } // Create DTDScanner diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp index 65ab0a5b0..2bedf8567 100644 --- a/src/xercesc/parsers/AbstractDOMParser.cpp +++ b/src/xercesc/parsers/AbstractDOMParser.cpp @@ -978,6 +978,7 @@ void AbstractDOMParser::doctypeDecl , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset ) { fDocumentType = (DOMDocumentTypeImpl *) fDocument->createDocumentType(elemDecl.getFullName(), publicId, systemId); diff --git a/src/xercesc/parsers/AbstractDOMParser.hpp b/src/xercesc/parsers/AbstractDOMParser.hpp index 08046b303..4f2f8d038 100644 --- a/src/xercesc/parsers/AbstractDOMParser.hpp +++ b/src/xercesc/parsers/AbstractDOMParser.hpp @@ -1063,6 +1063,7 @@ public : , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset = false ); virtual void doctypePI diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp index 2ffb05024..3d0951582 100644 --- a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp +++ b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.10 2002/08/14 15:20:38 knoaman + * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). + * * Revision 1.9 2002/07/11 18:27:20 knoaman * Grammar caching/preparsing - initial implementation. * @@ -1055,12 +1058,15 @@ void SAX2XMLReaderImpl::doctypeComment(const XMLCh* const commentText) void SAX2XMLReaderImpl::doctypeDecl(const DTDElementDecl& elemDecl , const XMLCh* const publicId , const XMLCh* const systemId - , const bool hasIntSubset) + , const bool hasIntSubset + , const bool hasExtSubset) { - // Call the installed LexicalHandler. - if (fLexicalHandler) + // Call the installed LexicalHandler. + if (fLexicalHandler && (hasIntSubset || hasExtSubset)) fLexicalHandler->startDTD(elemDecl.getFullName(), publicId, systemId); + fHasExternalSubset = hasExtSubset; + // Unused by SAX DTDHandler interface at this time } @@ -1214,8 +1220,6 @@ void SAX2XMLReaderImpl::startIntSubset() void SAX2XMLReaderImpl::startExtSubset() { - fHasExternalSubset = true; - if (fLexicalHandler) fLexicalHandler->startEntity(gDTDEntityStr); } diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.hpp b/src/xercesc/parsers/SAX2XMLReaderImpl.hpp index 060535ccd..9c7cb7833 100644 --- a/src/xercesc/parsers/SAX2XMLReaderImpl.hpp +++ b/src/xercesc/parsers/SAX2XMLReaderImpl.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.13 2002/08/14 15:20:38 knoaman + * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). + * * Revision 1.12 2002/07/11 18:27:04 knoaman * Grammar caching/preparsing - initial implementation. * @@ -1433,6 +1436,8 @@ public : * system id of the DTD file. * @param hasIntSubset A flag indicating if this XML file contains any * internal subset. + * @param hasExtSubset A flag indicating if this XML file contains any + * external subset. Default is false. */ virtual void doctypeDecl ( @@ -1440,6 +1445,7 @@ public : , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset = false ); /** diff --git a/src/xercesc/parsers/SAXParser.cpp b/src/xercesc/parsers/SAXParser.cpp index a349dde06..9e8da44a4 100644 --- a/src/xercesc/parsers/SAXParser.cpp +++ b/src/xercesc/parsers/SAXParser.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2002/08/14 15:20:38 knoaman + * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). + * * Revision 1.7 2002/07/11 18:27:04 knoaman * Grammar caching/preparsing - initial implementation. * @@ -943,7 +946,8 @@ void SAXParser::doctypeComment(const XMLCh* const) void SAXParser::doctypeDecl(const DTDElementDecl& elemDecl , const XMLCh* const publicId , const XMLCh* const systemId - , const bool hasIntSubset) + , const bool hasIntSubset + , const bool hasExtSubset) { // Unused by SAX DTDHandler interface at this time } diff --git a/src/xercesc/parsers/SAXParser.hpp b/src/xercesc/parsers/SAXParser.hpp index b7910ef30..ec1bf8f22 100644 --- a/src/xercesc/parsers/SAXParser.hpp +++ b/src/xercesc/parsers/SAXParser.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.13 2002/08/14 15:20:38 knoaman + * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). + * * Revision 1.12 2002/07/11 18:27:03 knoaman * Grammar caching/preparsing - initial implementation. * @@ -1547,6 +1550,8 @@ public : * system id of the DTD file. * @param hasIntSubset A flag indicating if this XML file contains any * internal subset. + * @param hasExtSubset A flag indicating if this XML file contains any + * external subset. Default is false. */ virtual void doctypeDecl ( @@ -1554,6 +1559,7 @@ public : , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset = false ); /** diff --git a/src/xercesc/validators/DTD/DocTypeHandler.hpp b/src/xercesc/validators/DTD/DocTypeHandler.hpp index 72dba6275..ede4202fc 100644 --- a/src/xercesc/validators/DTD/DocTypeHandler.hpp +++ b/src/xercesc/validators/DTD/DocTypeHandler.hpp @@ -56,8 +56,11 @@ /* * $Log$ - * Revision 1.1 2002/02/01 22:22:43 peiyongz - * Initial revision + * Revision 1.2 2002/08/14 15:20:38 knoaman + * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). + * + * Revision 1.1.1.1 2002/02/01 22:22:43 peiyongz + * sane_include * * Revision 1.5 2001/06/19 16:43:46 tng * Correct description of DocTypeHandler @@ -134,6 +137,7 @@ public: , const XMLCh* const publicId , const XMLCh* const systemId , const bool hasIntSubset + , const bool hasExtSubset = false ) = 0; virtual void doctypePI -- GitLab