summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <kitty@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-11-20 02:44:22 +0000
committerkitty <kitty@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-11-20 02:44:22 +0000
commitf3bb27f1e601d0f67498ae8e8f943334dfdfed62 (patch)
treece79a4538833bd70ef739291297e506f60d637a3
parent803eaa5166f80660f432b57150cf11033dd74348 (diff)
downloadATCD-f3bb27f1e601d0f67498ae8e8f943334dfdfed62.tar.gz
ChangeLogTag: Tue Nov 19 20:18:09 2002 Krishnakumar B <kitty@cs.wustl.edu>
-rw-r--r--ACEXML/ChangeLog40
-rw-r--r--ACEXML/common/CharStream.h5
-rw-r--r--ACEXML/common/FileCharStream.cpp6
-rw-r--r--ACEXML/common/FileCharStream.h8
-rw-r--r--ACEXML/common/HttpCharStream.cpp7
-rw-r--r--ACEXML/common/HttpCharStream.h6
-rw-r--r--ACEXML/common/InputSource.cpp26
-rw-r--r--ACEXML/common/InputSource.h4
-rw-r--r--ACEXML/common/StrCharStream.cpp15
-rw-r--r--ACEXML/common/StrCharStream.h8
-rw-r--r--ACEXML/common/ZipCharStream.cpp6
-rw-r--r--ACEXML/common/ZipCharStream.h5
-rw-r--r--ACEXML/examples/SAXPrint/Print_Handler.cpp57
-rw-r--r--ACEXML/examples/SAXPrint/SAXPrint_Handler.cpp48
-rw-r--r--ACEXML/examples/SAXPrint/main.cpp4
-rw-r--r--ACEXML/parser/parser/Parser.cpp165
-rw-r--r--ACEXML/parser/parser/Parser.h4
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\"> &#65; &amp; <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\"> &#65; &quot; <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);
/**