diff options
author | kitty <kitty@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2002-11-20 02:44:22 +0000 |
---|---|---|
committer | kitty <kitty@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2002-11-20 02:44:22 +0000 |
commit | f3bb27f1e601d0f67498ae8e8f943334dfdfed62 (patch) | |
tree | ce79a4538833bd70ef739291297e506f60d637a3 | |
parent | 803eaa5166f80660f432b57150cf11033dd74348 (diff) | |
download | ATCD-f3bb27f1e601d0f67498ae8e8f943334dfdfed62.tar.gz |
ChangeLogTag: Tue Nov 19 20:18:09 2002 Krishnakumar B <kitty@cs.wustl.edu>
-rw-r--r-- | ACEXML/ChangeLog | 40 | ||||
-rw-r--r-- | ACEXML/common/CharStream.h | 5 | ||||
-rw-r--r-- | ACEXML/common/FileCharStream.cpp | 6 | ||||
-rw-r--r-- | ACEXML/common/FileCharStream.h | 8 | ||||
-rw-r--r-- | ACEXML/common/HttpCharStream.cpp | 7 | ||||
-rw-r--r-- | ACEXML/common/HttpCharStream.h | 6 | ||||
-rw-r--r-- | ACEXML/common/InputSource.cpp | 26 | ||||
-rw-r--r-- | ACEXML/common/InputSource.h | 4 | ||||
-rw-r--r-- | ACEXML/common/StrCharStream.cpp | 15 | ||||
-rw-r--r-- | ACEXML/common/StrCharStream.h | 8 | ||||
-rw-r--r-- | ACEXML/common/ZipCharStream.cpp | 6 | ||||
-rw-r--r-- | ACEXML/common/ZipCharStream.h | 5 | ||||
-rw-r--r-- | ACEXML/examples/SAXPrint/Print_Handler.cpp | 57 | ||||
-rw-r--r-- | ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp | 48 | ||||
-rw-r--r-- | ACEXML/examples/SAXPrint/main.cpp | 4 | ||||
-rw-r--r-- | ACEXML/parser/parser/Parser.cpp | 165 | ||||
-rw-r--r-- | ACEXML/parser/parser/Parser.h | 4 |
17 files changed, 254 insertions, 160 deletions
diff --git a/ACEXML/ChangeLog b/ACEXML/ChangeLog index b411ed3d830..e74ee6d2114 100644 --- a/ACEXML/ChangeLog +++ b/ACEXML/ChangeLog @@ -1,3 +1,43 @@ +Tue Nov 19 20:18:09 2002 Krishnakumar B <kitty@cs.wustl.edu> + + * parser/parser/Parser.h: + * parser/parser/Parser.cpp (normalize_systemid): + + Fix an off-by-one error in normalization. The document's base + URI is never empty. Now we parse relative document URI + correctly. + + Implement the previously unimplemented parsing from a systemId. + + * common/InputSource.cpp: + * common/InputSource.h: + + Implement creating an InputSource from a systemId. + + * common/CharStream.h: + + Added a new method getSystemId(). + + * common/FileCharStream.cpp: + * common/FileCharStream.h: + * common/HttpCharStream.cpp: + * common/HttpCharStream.h: + * common/ZipCharStream.cpp: + * common/ZipCharStream.h: + * common/StrCharStream.cpp: + * common/StrCharStream.h: + + Added implementation for getSystemId(). + + * examples/SAXPrint/Print_Handler.cpp: + * examples/SAXPrint/SAXPrint_Handler.cpp: + + Synched up the printing of exception messages. + + * examples/SAXPrint/main.cpp: + + Fixed broken internal string version of a sample XML file. + Tue Nov 19 15:02:06 2002 Krishnakumar B <kitty@cs.wustl.edu> * apps/svcconf/XML_Svc_Conf_Parser.dsp: diff --git a/ACEXML/common/CharStream.h b/ACEXML/common/CharStream.h index 06d0efad61a..00e58543acc 100644 --- a/ACEXML/common/CharStream.h +++ b/ACEXML/common/CharStream.h @@ -70,6 +70,11 @@ public: */ virtual const ACEXML_Char *getEncoding (void) = 0; + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void) = 0; + }; #include "ace/post.h" diff --git a/ACEXML/common/FileCharStream.cpp b/ACEXML/common/FileCharStream.cpp index 68aa2949013..c0104c4be72 100644 --- a/ACEXML/common/FileCharStream.cpp +++ b/ACEXML/common/FileCharStream.cpp @@ -218,3 +218,9 @@ ACEXML_FileCharStream::getEncoding (void) { return this->encoding_; } + +const ACEXML_Char* +ACEXML_FileCharStream::getSystemId (void) +{ + return this->filename_; +} diff --git a/ACEXML/common/FileCharStream.h b/ACEXML/common/FileCharStream.h index 9feb5dcfbe2..7d72146ac42 100644 --- a/ACEXML/common/FileCharStream.h +++ b/ACEXML/common/FileCharStream.h @@ -82,10 +82,16 @@ public: virtual void rewind (void); /* - * Get the character encoding for a byte stream or URI. + * Get the character encoding for the file. */ virtual const ACEXML_Char *getEncoding (void); + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + + protected: /** Read the next character as a normal character. Return -1 if EOF is diff --git a/ACEXML/common/HttpCharStream.cpp b/ACEXML/common/HttpCharStream.cpp index d5f7f244471..80c41cf511d 100644 --- a/ACEXML/common/HttpCharStream.cpp +++ b/ACEXML/common/HttpCharStream.cpp @@ -348,6 +348,13 @@ ACEXML_HttpCharStream::getEncoding (void) return this->encoding_; } +const ACEXML_Char* +ACEXML_HttpCharStream::getSystemId (void) +{ + return this->url_; +} + + int ACEXML_HttpCharStream::read (ACEXML_Char *str, size_t len) diff --git a/ACEXML/common/HttpCharStream.h b/ACEXML/common/HttpCharStream.h index 6a164605d0f..163f9150b75 100644 --- a/ACEXML/common/HttpCharStream.h +++ b/ACEXML/common/HttpCharStream.h @@ -85,6 +85,12 @@ public: */ virtual const ACEXML_Char* getEncoding (void); + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + + private: /** diff --git a/ACEXML/common/InputSource.cpp b/ACEXML/common/InputSource.cpp index 1292f3caa31..4e85adc9f92 100644 --- a/ACEXML/common/InputSource.cpp +++ b/ACEXML/common/InputSource.cpp @@ -1,23 +1,23 @@ // -*- C++ -*- $Id$ #include "ACEXML/common/InputSource.h" +#include "ACEXML/common/StreamFactory.h" #include "ace/ACE.h" ACEXML_InputSource::ACEXML_InputSource (void) - : publicId_ (0), - systemId_ (0), - charStream_ (0), - encoding_ (0) + : charStream_ (0), + encoding_ (0), + publicId_ (0), + systemId_ (0) { } ACEXML_InputSource::ACEXML_InputSource (ACEXML_CharStream *stm) - : publicId_ (0), - systemId_ (0), - charStream_ (stm), - encoding_ (0) + : charStream_ (stm), + encoding_ (ACE::strnew (stm->getEncoding())), + publicId_ (0), + systemId_ (stm->getSystemId() ? ACE::strnew (stm->getSystemId()): 0) { - this->setEncoding (stm->getEncoding()); } /* @@ -26,8 +26,14 @@ ACEXML_InputSource::ACEXML_InputSource (ACEXML_CharStream *stm) */ ACEXML_InputSource::ACEXML_InputSource (const ACEXML_Char *systemId) - : systemId_ (ACE::strnew (systemId)) + : charStream_ (0), + encoding_ (0), + publicId_ (0), + systemId_ (ACE::strnew (systemId)) { + ACEXML_StreamFactory factory; + this->setCharStream (factory.create_stream (this->systemId_)); + this->setEncoding (this->charStream_->getEncoding()); } ACEXML_InputSource::~ACEXML_InputSource (void) diff --git a/ACEXML/common/InputSource.h b/ACEXML/common/InputSource.h index aca68f1adeb..1ba370345b7 100644 --- a/ACEXML/common/InputSource.h +++ b/ACEXML/common/InputSource.h @@ -118,10 +118,10 @@ public: virtual void setSystemId (const ACEXML_Char *systemId); private: - ACEXML_Char *publicId_; - ACEXML_Char *systemId_; ACEXML_CharStream *charStream_; ACEXML_Char *encoding_; + ACEXML_Char *publicId_; + ACEXML_Char *systemId_; }; diff --git a/ACEXML/common/StrCharStream.cpp b/ACEXML/common/StrCharStream.cpp index 9bfcc95072c..8d97cdb8ede 100644 --- a/ACEXML/common/StrCharStream.cpp +++ b/ACEXML/common/StrCharStream.cpp @@ -9,8 +9,10 @@ ACEXML_StrCharStream::ACEXML_StrCharStream (void) { } -ACEXML_StrCharStream::ACEXML_StrCharStream (const ACEXML_Char *str) - : start_ (0), ptr_ (0), end_ (0), encoding_ (0) +ACEXML_StrCharStream::ACEXML_StrCharStream (const ACEXML_Char *str, + const ACEXML_Char* name) + : start_ (0), ptr_ (0), end_ (0), encoding_ (0), + name_ (name ? ACE::strnew (name) : 0) { this->open (str); } @@ -24,8 +26,6 @@ ACEXML_StrCharStream::~ACEXML_StrCharStream (void) int ACEXML_StrCharStream::open (const ACEXML_Char *str) { - delete[] this->start_; - delete[] this->encoding_; if (str != 0 && (this->start_ = ACE::strnew (str)) != 0) { @@ -53,6 +53,7 @@ ACEXML_StrCharStream::close (void) { delete[] this->start_; delete[] this->encoding_; + delete[] this->name_; this->start_ = this->ptr_ = this->end_ = 0; return 0; } @@ -126,3 +127,9 @@ ACEXML_StrCharStream::getEncoding (void) { return this->encoding_; } + +const ACEXML_Char* +ACEXML_StrCharStream::getSystemId(void) +{ + return this->name_; +} diff --git a/ACEXML/common/StrCharStream.h b/ACEXML/common/StrCharStream.h index 0898ab2f1d1..b75600edc7d 100644 --- a/ACEXML/common/StrCharStream.h +++ b/ACEXML/common/StrCharStream.h @@ -35,7 +35,7 @@ public: ACEXML_StrCharStream (void); /// Initializing Constructor. - ACEXML_StrCharStream (const ACEXML_Char *str); + ACEXML_StrCharStream (const ACEXML_Char *str, const ACEXML_Char* name); /// Destructor virtual ~ACEXML_StrCharStream (void); @@ -81,6 +81,11 @@ public: */ virtual const ACEXML_Char *getEncoding (void); + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + /** * Resets the pointer to the beginning of the stream. */ @@ -91,6 +96,7 @@ private: ACEXML_Char *ptr_; ACEXML_Char *end_; ACEXML_Char* encoding_; + ACEXML_Char* name_; }; diff --git a/ACEXML/common/ZipCharStream.cpp b/ACEXML/common/ZipCharStream.cpp index f9c728fafc9..dc6610de7ca 100644 --- a/ACEXML/common/ZipCharStream.cpp +++ b/ACEXML/common/ZipCharStream.cpp @@ -168,6 +168,12 @@ ACEXML_ZipCharStream::getEncoding (void) return this->encoding_; } +const ACEXML_Char* +ACEXML_ZipCharStream::getSystemId (void) +{ + return this->filename_; +} + #if defined (ACE_USES_WCHAR) int ACEXML_ZipCharStream::get_i (ACEXML_Char& ch) diff --git a/ACEXML/common/ZipCharStream.h b/ACEXML/common/ZipCharStream.h index 51f5241b854..4771e0e61a2 100644 --- a/ACEXML/common/ZipCharStream.h +++ b/ACEXML/common/ZipCharStream.h @@ -88,6 +88,11 @@ public: */ virtual const ACEXML_Char *getEncoding (void); + /* + * Get the systemId for the underlying CharStream + */ + virtual const ACEXML_Char* getSystemId (void); + protected: /** Read the next character as a normal character. Return -1 if EOF is diff --git a/ACEXML/examples/SAXPrint/Print_Handler.cpp b/ACEXML/examples/SAXPrint/Print_Handler.cpp index 3d50bb0f620..2c8dc34afad 100644 --- a/ACEXML/examples/SAXPrint/Print_Handler.cpp +++ b/ACEXML/examples/SAXPrint/Print_Handler.cpp @@ -23,7 +23,7 @@ void ACEXML_Print_Handler::characters (const ACEXML_Char *cdata, int start, int length ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -34,7 +34,7 @@ ACEXML_Print_Handler::characters (const ACEXML_Char *cdata, void ACEXML_Print_Handler::endDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -47,7 +47,7 @@ ACEXML_Print_Handler::endElement (const ACEXML_Char *uri, const ACEXML_Char *name, const ACEXML_Char *qName ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -59,7 +59,7 @@ ACEXML_Print_Handler::endElement (const ACEXML_Char *uri, void ACEXML_Print_Handler::endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -73,17 +73,17 @@ ACEXML_Print_Handler::ignorableWhitespace (const ACEXML_Char *, int, int ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { -// ACE_DEBUG ((LM_DEBUG, -// ACE_TEXT ("* Event ignorableWhitespace () ***************\n"))); + // ACE_DEBUG ((LM_DEBUG, + // ACE_TEXT ("* Event ignorableWhitespace () ***************\n"))); } void ACEXML_Print_Handler::processingInstruction (const ACEXML_Char *target, const ACEXML_Char *data ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -103,7 +103,7 @@ ACEXML_Print_Handler::setDocumentLocator (ACEXML_Locator * locator) void ACEXML_Print_Handler::skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -114,7 +114,7 @@ ACEXML_Print_Handler::skippedEntity (const ACEXML_Char *name void ACEXML_Print_Handler::startDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -128,7 +128,7 @@ ACEXML_Print_Handler::startElement (const ACEXML_Char *uri, const ACEXML_Char *qName, ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -148,7 +148,7 @@ ACEXML_Print_Handler::startElement (const ACEXML_Char *uri, void ACEXML_Print_Handler::startPrefixMapping (const ACEXML_Char * prefix, const ACEXML_Char * uri ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("* Event startPrefixMapping () ***************\n"))); @@ -162,7 +162,7 @@ void ACEXML_Print_Handler::notationDecl (const ACEXML_Char *name, const ACEXML_Char *publicID, const ACEXML_Char *systemID ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("* Event notationDecl: (%s) "), @@ -187,7 +187,7 @@ ACEXML_Print_Handler::unparsedEntityDecl (const ACEXML_Char *name, const ACEXML_Char *publicID, const ACEXML_Char *systemID, const ACEXML_Char *notationName ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("* Unparsed Entity: %s"), @@ -212,7 +212,7 @@ ACEXML_Print_Handler::unparsedEntityDecl (const ACEXML_Char *name, ACEXML_InputSource * ACEXML_Print_Handler::resolveEntity (const ACEXML_Char *, const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { // No-op. return 0; @@ -220,15 +220,15 @@ ACEXML_Print_Handler::resolveEntity (const ACEXML_Char *, // Methods inherit from ACEXML_ErrorHandler. - /* - * Receive notification of a recoverable error. - */ +/* + * Receive notification of a recoverable error. + */ void ACEXML_Print_Handler::error (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { - - ACE_DEBUG ((LM_DEBUG, "%s:%d:%d ", this->fileName_, + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), this->locator_->getLineNumber(), this->locator_->getColumnNumber())); ex.print(); @@ -236,18 +236,23 @@ ACEXML_Print_Handler::error (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_N void ACEXML_Print_Handler::fatalError (ACEXML_SAXParseException& ex ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { - - ACE_DEBUG ((LM_DEBUG, "%s:%d:%d ", this->fileName_, + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), this->locator_->getLineNumber(), this->locator_->getColumnNumber())); ex.print(); + } void ACEXML_Print_Handler::warning (ACEXML_SAXParseException & ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { - // No-op. + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", + (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), + this->locator_->getLineNumber(), + this->locator_->getColumnNumber())); + ex.print(); } diff --git a/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp b/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp index 008fb19f46e..98cede93d72 100644 --- a/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp +++ b/ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp @@ -23,7 +23,7 @@ void ACEXML_SAXPrint_Handler::characters (const ACEXML_Char *cdata, int start, int length ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { ACE_UNUSED_ARG (start); @@ -35,7 +35,7 @@ ACEXML_SAXPrint_Handler::characters (const ACEXML_Char *cdata, void ACEXML_SAXPrint_Handler::endDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -47,7 +47,7 @@ ACEXML_SAXPrint_Handler::endElement (const ACEXML_Char *, const ACEXML_Char *, const ACEXML_Char *qName ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -61,7 +61,7 @@ ACEXML_SAXPrint_Handler::endElement (const ACEXML_Char *, void ACEXML_SAXPrint_Handler::endPrefixMapping (const ACEXML_Char *prefix ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -74,17 +74,17 @@ void ACEXML_SAXPrint_Handler::ignorableWhitespace (const ACEXML_Char *, int, int ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { -// ACE_DEBUG ((LM_DEBUG, -// ACE_TEXT ("* Event ignorableWhitespace () ***************\n"))); + // ACE_DEBUG ((LM_DEBUG, + // ACE_TEXT ("* Event ignorableWhitespace () ***************\n"))); } void ACEXML_SAXPrint_Handler::processingInstruction (const ACEXML_Char *target, const ACEXML_Char *data ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -105,7 +105,7 @@ ACEXML_SAXPrint_Handler::setDocumentLocator (ACEXML_Locator * locator) void ACEXML_SAXPrint_Handler::skippedEntity (const ACEXML_Char *name ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -116,7 +116,7 @@ ACEXML_SAXPrint_Handler::skippedEntity (const ACEXML_Char *name void ACEXML_SAXPrint_Handler::startDocument (ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -130,7 +130,7 @@ ACEXML_SAXPrint_Handler::startElement (const ACEXML_Char *, const ACEXML_Char *qName, ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { @@ -152,7 +152,7 @@ ACEXML_SAXPrint_Handler::startElement (const ACEXML_Char *, void ACEXML_SAXPrint_Handler::startPrefixMapping (const ACEXML_Char * prefix, const ACEXML_Char * uri ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("* Event startPrefixMapping () ***************\n"))); @@ -167,7 +167,7 @@ void ACEXML_SAXPrint_Handler::notationDecl (const ACEXML_Char *, const ACEXML_Char *, const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { // No-op. } @@ -177,7 +177,7 @@ ACEXML_SAXPrint_Handler::unparsedEntityDecl (const ACEXML_Char *, const ACEXML_Char *, const ACEXML_Char *, const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { // No-op. } @@ -187,7 +187,7 @@ ACEXML_SAXPrint_Handler::unparsedEntityDecl (const ACEXML_Char *, ACEXML_InputSource * ACEXML_SAXPrint_Handler::resolveEntity (const ACEXML_Char *, const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { // No-op. return 0; @@ -195,15 +195,15 @@ ACEXML_SAXPrint_Handler::resolveEntity (const ACEXML_Char *, // Methods inherited from ACEXML_ErrorHandler. - /* - * Receive notification of a recoverable error. - */ +/* + * Receive notification of a recoverable error. + */ void ACEXML_SAXPrint_Handler::error (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { - ACE_DEBUG ((LM_DEBUG, "%s: line :%d col: %d ", + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), this->locator_->getLineNumber(), this->locator_->getColumnNumber())); @@ -213,9 +213,9 @@ ACEXML_SAXPrint_Handler::error (ACEXML_SAXParseException & ex void ACEXML_SAXPrint_Handler::fatalError (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { - ACE_DEBUG ((LM_DEBUG, "%s: line :%d col: %d ", + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), this->locator_->getLineNumber(), this->locator_->getColumnNumber())); @@ -225,9 +225,9 @@ ACEXML_SAXPrint_Handler::fatalError (ACEXML_SAXParseException & ex void ACEXML_SAXPrint_Handler::warning (ACEXML_SAXParseException & ex ACEXML_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((ACEXML_SAXException)) + ACE_THROW_SPEC ((ACEXML_SAXException)) { - ACE_DEBUG ((LM_DEBUG, "%s: line :%d col: %d ", + ACE_DEBUG ((LM_DEBUG, "%s: line: %d col: %d ", (this->locator_->getSystemId() == 0 ? this->fileName_ : this->locator_->getSystemId()), this->locator_->getLineNumber(), this->locator_->getColumnNumber())); diff --git a/ACEXML/examples/SAXPrint/main.cpp b/ACEXML/examples/SAXPrint/main.cpp index f9db2084d15..cc8fe841e22 100644 --- a/ACEXML/examples/SAXPrint/main.cpp +++ b/ACEXML/examples/SAXPrint/main.cpp @@ -11,7 +11,7 @@ #include "ace/Auto_Ptr.h" static const ACEXML_Char *test_string = -ACE_TEXT ("<?xml version='1.0'?> <ACE_Svc_Conf> <static id=\"ACE_Service_Manager\" params='-d -p 4911'/> <dynamic id=\"Test_Task\" type=\"service_object\"> A & <initializer path=\"CCM_App\" init='_make_Test_Task' params='-p 3000'/> </dynamic> </ACE_Svc_Conf>"); +ACE_TEXT ("<?xml version='1.0'?> <ACE_Svc_Conf> <static id=\"ACE_Service_Manager\" params='-d -p 4911'/> <dynamic id=\"Test_Task\" type=\"service_object\"> A " <initializer path=\"CCM_App\" init='_make_Test_Task' params='-p 3000'/> </dynamic> </ACE_Svc_Conf>"); static void usage (const ACE_TCHAR* program) @@ -112,7 +112,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[]) } else { ACE_NEW_RETURN (stm, - ACEXML_StrCharStream (test_string), + ACEXML_StrCharStream (test_string, "test_string"), -1); } diff --git a/ACEXML/parser/parser/Parser.cpp b/ACEXML/parser/parser/Parser.cpp index 8fc853172ac..7f6230b422c 100644 --- a/ACEXML/parser/parser/Parser.cpp +++ b/ACEXML/parser/parser/Parser.cpp @@ -68,7 +68,16 @@ ACEXML_Parser::initialize(ACEXML_InputSource* input) return -1; } } - return this->switch_input (input); + return this->switch_input (input, input->getSystemId()); +} + +void +ACEXML_Parser::parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) + ACE_THROW_SPEC ((ACEXML_SAXException)) +{ + ACEXML_InputSource* input = 0; + ACE_NEW (input, ACEXML_InputSource (systemId)); + this->parse (input ACEXML_ENV_ARG_PARAMETER); } void @@ -197,18 +206,6 @@ ACEXML_Parser::parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL) this->reset(); } -void -ACEXML_Parser::parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL) - ACE_THROW_SPEC ((ACEXML_SAXException)) -{ - // @@ Not implemented. - ACE_UNUSED_ARG (systemId); - - ACEXML_THROW (ACEXML_SAXNotSupportedException ()); -} - - - int ACEXML_Parser::parse_doctypedecl (ACEXML_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((ACEXML_SAXException)) @@ -286,55 +283,6 @@ ACEXML_Parser::parse_doctypedecl (ACEXML_ENV_SINGLE_ARG_DECL) } int -ACEXML_Parser::parse_external_dtd (ACEXML_ENV_SINGLE_ARG_DECL) -{ - this->ref_state_ = ACEXML_ParserInt::IN_EXT_DTD; - ACEXML_Char* publicId = 0; - ACEXML_Char* systemId = 0; - if (this->parse_external_id (publicId, systemId - ACEXML_ENV_ARG_PARAMETER) != 0) - { - this->fatal_error (ACE_TEXT ("Error in parsing ExternalID") - ACEXML_ENV_ARG_PARAMETER); - ACEXML_CHECK_RETURN (-1); - } - if (this->validate_) - { - ACEXML_Char* uri = this->normalize_systemid (systemId); - ACE_Auto_Basic_Array_Ptr<ACEXML_Char> cleanup_uri (uri); - ACEXML_InputSource* ip = 0; - if (this->entity_resolver_) - { - ip = this->entity_resolver_->resolveEntity (publicId, - (uri ? uri : systemId) - ACEXML_ENV_ARG_PARAMETER); - ACEXML_CHECK_RETURN (-1); - } - if (ip) - { - if (this->switch_input (ip, (uri ? uri : systemId), publicId) != 0) - return -1; - } - else - { - ACEXML_StreamFactory factory; - ACEXML_CharStream* cstream = factory.create_stream (uri ? - uri: systemId); - if (!cstream) { - this->fatal_error (ACE_TEXT ("Invalid input source") - ACEXML_ENV_ARG_PARAMETER); - ACEXML_CHECK_RETURN (-1); - } - if (this->switch_input (cstream, systemId, publicId) != 0) - return -1; - } - this->parse_external_subset (ACEXML_ENV_SINGLE_ARG_PARAMETER); - ACEXML_CHECK_RETURN (-1); - } - return 0; -} - -int ACEXML_Parser::parse_internal_dtd (ACEXML_ENV_SINGLE_ARG_DECL) { this->ref_state_ = ACEXML_ParserInt::IN_INT_DTD; @@ -389,6 +337,56 @@ ACEXML_Parser::parse_internal_dtd (ACEXML_ENV_SINGLE_ARG_DECL) } int +ACEXML_Parser::parse_external_dtd (ACEXML_ENV_SINGLE_ARG_DECL) +{ + this->ref_state_ = ACEXML_ParserInt::IN_EXT_DTD; + ACEXML_Char* publicId = 0; + ACEXML_Char* systemId = 0; + if (this->parse_external_id (publicId, systemId + ACEXML_ENV_ARG_PARAMETER) != 0) + { + this->fatal_error (ACE_TEXT ("Error in parsing ExternalID") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->validate_) + { + ACEXML_Char* uri = this->normalize_systemid (systemId); + ACE_Auto_Basic_Array_Ptr<ACEXML_Char> cleanup_uri (uri); + ACEXML_InputSource* ip = 0; + if (this->entity_resolver_) + { + ip = this->entity_resolver_->resolveEntity (publicId, + (uri ? uri : systemId) + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (ip) + { + if (this->switch_input (ip, (uri ? uri : systemId), publicId) != 0) + return -1; + } + else + { + ACEXML_StreamFactory factory; + ACEXML_CharStream* cstream = factory.create_stream (uri ? + uri: systemId); + if (!cstream) { + this->fatal_error (ACE_TEXT ("Invalid input source") + ACEXML_ENV_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + if (this->switch_input (cstream, systemId, publicId) != 0) + return -1; + } + this->parse_external_subset (ACEXML_ENV_SINGLE_ARG_PARAMETER); + ACEXML_CHECK_RETURN (-1); + } + return 0; +} + + +int ACEXML_Parser::parse_external_subset (ACEXML_ENV_SINGLE_ARG_DECL) { this->ref_state_ = ACEXML_ParserInt::IN_EXT_DTD; @@ -736,37 +734,26 @@ ACEXML_Parser::normalize_systemid (const char* systemId) { ACEXML_Char* normalized_uri = 0; const char* baseURI = this->current_->getLocator()->getSystemId(); - if (!baseURI) - return 0; + ACE_ASSERT (baseURI); + const ACEXML_Char* temp = 0; if (ACE_OS::strstr (baseURI, ACE_TEXT ("http://")) != 0) + // baseURI is a HTTP URL and systemId is relative. Note that this + // is not compliant with RFC2396. Caveat Emptor ! + temp = ACE_OS::strrchr (baseURI, '/'); + else + // baseURI is a local file and systemId is relative + // Unlike the HTTP one, this will work always. + temp = ACE_OS::strrchr (baseURI,ACE_DIRECTORY_SEPARATOR_CHAR); + if (temp) { - // baseURI is a HTTP URL and systemId is relative. Note that this - // is not compliant with RFC2396. Caveat Emptor ! - const ACEXML_Char* temp = ACE_OS::strrchr (baseURI, '/'); size_t pos = temp - baseURI + 1; size_t len = pos + ACE_OS::strlen (systemId) + 1; ACE_NEW_RETURN (normalized_uri, ACEXML_Char[len], 0); ACE_OS::strncpy (normalized_uri, baseURI, pos); - ACE_OS::strcpy (normalized_uri + pos + 1, systemId); + ACE_OS::strcpy (normalized_uri + pos, systemId); return normalized_uri; } - else - { - const ACEXML_Char* - temp = ACE_OS::strrchr (baseURI,ACE_DIRECTORY_SEPARATOR_CHAR); - // baseURI is a local file and systemId is relative - // Unlike the HTTP one, this will work always. - if (temp) - { - size_t pos = temp - baseURI + 1; - size_t len = pos + ACE_OS::strlen (systemId) + 1; - ACE_NEW_RETURN (normalized_uri, ACEXML_Char[len], 0); - ACE_OS::strncpy (normalized_uri, baseURI, pos); - ACE_OS::strcpy (normalized_uri + pos + 1, systemId); - return normalized_uri; - } - return 0; - } + return 0; } } @@ -2266,7 +2253,7 @@ ACEXML_Parser::parse_entity_reference (ACEXML_ENV_SINGLE_ARG_DECL) const ACEXML_Char* entity = this->internal_GE_.resolve_entity(replace); // Look in the predefined entities. - if (!entity && !this->validate_) + if (!entity) { entity = this->predef_entities_.resolve_entity (replace); if (!entity) @@ -2325,7 +2312,7 @@ ACEXML_Parser::parse_entity_reference (ACEXML_ENV_SINGLE_ARG_DECL) // ACE_DEBUG ((LM_DEBUG, // ACE_TEXT ("Entity is %s\n Replacement Text is : %s\n"), // replace, entity)); - ACE_NEW_RETURN (str, ACEXML_StrCharStream (entity), 0); + ACE_NEW_RETURN (str, ACEXML_StrCharStream (entity, replace), 0); if (str) { if (this->switch_input (str, replace) != 0) @@ -2445,7 +2432,7 @@ ACEXML_Parser::parse_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL) // ACE_DEBUG ((LM_DEBUG, // ACE_TEXT ("Entity is %s\n Replacement Text is : %s\n"), // replace, str.c_str())); - ACE_NEW_RETURN (sstream, ACEXML_StrCharStream (str.c_str()), 0); + ACE_NEW_RETURN (sstream, ACEXML_StrCharStream (str.c_str(), replace), 0); if (sstream) { if (this->switch_input (sstream, replace) != 0) @@ -2810,6 +2797,8 @@ ACEXML_Parser::switch_input (ACEXML_InputSource* input, const ACEXML_Char* publicId) { ACEXML_LocatorImpl* locator = 0; + if (!systemId) + systemId = input->getSystemId(); ACE_NEW_RETURN (locator, ACEXML_LocatorImpl (systemId, publicId), -1); ACEXML_Parser_Context* new_context = 0; ACE_NEW_RETURN (new_context, ACEXML_Parser_Context(input, locator), -1); diff --git a/ACEXML/parser/parser/Parser.h b/ACEXML/parser/parser/Parser.h index c92af489869..40d90258acf 100644 --- a/ACEXML/parser/parser/Parser.h +++ b/ACEXML/parser/parser/Parser.h @@ -717,14 +717,14 @@ private: * replace the current input stream with the newly created stream. */ virtual int switch_input (ACEXML_CharStream* cstream, - const ACEXML_Char* systemId = 0, + const ACEXML_Char* systemId, const ACEXML_Char* publicId = 0); /** * Create a new ACEXML_InputSource from @a systemId and @a publicId and * replace the current input source with the newly created InputSource. */ virtual int switch_input (ACEXML_InputSource* input, - const ACEXML_Char* systemId = 0, + const ACEXML_Char* systemId, const ACEXML_Char* publicId = 0); /** |