dbertoni 01/07/11 21:35:58
Modified: c/src/XPath XPath.cpp XPath.hpp XPathException.cpp
XPathException.hpp XPathParserException.cpp
XPathParserException.hpp XPathProcessor.hpp
XPathProcessorImpl.cpp XPathProcessorImpl.hpp
Log:
Implemented improved exception information.
Revision Changes Path
1.58 +2 -1 xml-xalan/c/src/XPath/XPath.cpp
Index: XPath.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- XPath.cpp 2001/07/08 18:40:08 1.57
+++ XPath.cpp 2001/07/12 04:35:43 1.58
@@ -88,8 +88,9 @@
-XPath::XPath() :
+XPath::XPath(const Locator* theLocator) :
m_expression(),
+ m_locator(theLocator),
m_inStylesheet(false)
{
}
1.27 +21 -10 xml-xalan/c/src/XPath/XPath.hpp
Index: XPath.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.hpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- XPath.hpp 2001/07/08 18:40:07 1.26
+++ XPath.hpp 2001/07/12 04:35:44 1.27
@@ -83,21 +83,13 @@
+class Locator;
class PrefixResolver;
class XObject;
class XalanNode;
-/**
- * The XPath class represents the semantic parse tree of the XPath pattern.
It
- * is the representation of the grammar which filters out the choice for
- * replacement order of the production rules. In order to conserve memory and
- * reduce object creation, the tree is represented as an array of integers:
- * [op code][length][...]
- * where strings are represented within the array as indices into the token
- * tree.
- */
class XALAN_XPATH_EXPORT XPath
{
public:
@@ -131,9 +123,11 @@
/**
* Construct an XPath.
+ *
+ * @param theLocator The applicable Locator, if any.
*/
explicit
- XPath();
+ XPath(const Locator* theLocator = 0);
virtual
~XPath();
@@ -414,6 +408,18 @@
m_inStylesheet = fValue;
}
+ const Locator*
+ getLocator() const
+ {
+ return m_locator;
+ }
+
+ void
+ setLocator(const Locator* theLocator)
+ {
+ m_locator = theLocator;
+ }
+
protected:
/**
@@ -811,6 +817,11 @@
*
*/
XPathExpression m_expression;
+
+ /**
+ * A Locator for reporting errors.
+ */
+ const Locator* m_locator;
/**
* If true, the XPath can allocated XObjects in more
1.4 +33 -0 xml-xalan/c/src/XPath/XPathException.cpp
Index: XPathException.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathException.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XPathException.cpp 2001/03/29 22:17:05 1.3
+++ XPathException.cpp 2001/07/12 04:35:46 1.4
@@ -59,12 +59,45 @@
+const XalanDOMString XPathException::s_emptyString;
+
+
XPathException::XPathException(
const XalanDOMString& message,
+ const XalanDOMString& theURI,
+ int
theLineNumber,
+ int
theColumnNumber,
+ const XalanDOMString& theType) :
+ XSLException(message, theURI, theLineNumber, theColumnNumber, theType),
+ m_styleNode(0)
+{
+}
+
+
+
+XPathException::XPathException(
+ const XalanDOMString& message,
const XalanNode* styleNode,
const XalanDOMString& theType) :
XSLException(message, theType),
m_styleNode(styleNode)
+{
+}
+
+
+
+XPathException::XPathException(
+ const XalanDOMString& message,
+ const XalanDOMString& theType) :
+ XSLException(message, theType),
+ m_styleNode(0)
+{
+}
+
+
+
+XPathException::XPathException() :
+ XSLException(s_emptyString, s_emptyString)
{
}
1.6 +41 -4 xml-xalan/c/src/XPath/XPathException.hpp
Index: XPathException.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathException.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XPathException.hpp 2001/03/29 22:17:05 1.5
+++ XPathException.hpp 2001/07/12 04:35:46 1.6
@@ -86,12 +86,38 @@
* Construct an XPath exeption object.
*
* @param message message explaining the problem.
- * @param styleNode style tree node where the problem occurred
+ * @param theURI the URI of the related document, if known
+ * @param theLineNumber the line number of the related document, or -1
if not known
+ * @param theColumnNumber the column number of the related document, or
-1 if not known
+ * @param theType type of exception, default is "XPathException"
*/
- explicit
+ XPathException(
+ const XalanDOMString& message,
+ const XalanDOMString& theURI,
+ int
theLineNumber,
+ int
theColumnNumber,
+ const XalanDOMString& theType =
XalanDOMString(XALAN_STATIC_UCODE_STRING("XPathException")));
+
+ /**
+ * Construct an XPath exeption object.
+ *
+ * @param message message explaining the problem.
+ * @param styleNode the node in the stylesheet where the problem
occurred
+ * @param theType type of exception, default is "XPathException"
+ */
+ XPathException(
+ const XalanDOMString& message,
+ const XalanNode* styleNode,
+ const XalanDOMString& theType =
XalanDOMString(XALAN_STATIC_UCODE_STRING("XPathException")));
+
+ /**
+ * Construct an XPath exeption object.
+ *
+ * @param message message explaining the problem.
+ * @param theType type of exception, default is "XPathException"
+ */
XPathException(
- const XalanDOMString& message = XalanDOMString(),
- const XalanNode* styleNode = 0,
+ const XalanDOMString& message,
const XalanDOMString& theType =
XalanDOMString(XALAN_STATIC_UCODE_STRING("XPathException")));
virtual
@@ -103,9 +129,20 @@
return m_styleNode;
}
+protected:
+
+ /**
+ * Construct an XPath exeption object.
+ *
+ */
+ explicit
+ XPathException();
+
private:
const XalanNode* m_styleNode;
+
+ static const XalanDOMString s_emptyString;
};
1.3 +14 -3 xml-xalan/c/src/XPath/XPathParserException.cpp
Index: XPathParserException.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathParserException.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XPathParserException.cpp 2000/04/11 14:46:20 1.2
+++ XPathParserException.cpp 2001/07/12 04:35:47 1.3
@@ -62,9 +62,20 @@
XPathParserException::XPathParserException(
const XalanDOMString& message,
- const XalanNode* styleNode) :
- XPathException(message,
- styleNode)
+ const XalanDOMString& theURI,
+ int
theLineNumber,
+ int
theColumnNumber,
+ const XalanDOMString& theType) :
+ XPathException(message, theURI, theLineNumber, theColumnNumber, theType)
+{
+}
+
+
+
+XPathParserException::XPathParserException(
+ const XalanDOMString& message,
+ const XalanDOMString& theType) :
+ XPathException(message, theType)
{
}
1.4 +21 -6 xml-xalan/c/src/XPath/XPathParserException.hpp
Index: XPathParserException.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathParserException.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XPathParserException.hpp 2000/04/11 14:46:20 1.3
+++ XPathParserException.hpp 2001/07/12 04:35:47 1.4
@@ -76,15 +76,30 @@
public:
/**
- * Construct an XPathParserException object.
+ * Constructor
*
- * @param message string error message
- * @param styleNode The style tree node where the problem occurred
+ * @param theMessage message to write when exception thrown
+ * @param theURI the URI of the related document, if known
+ * @param theLineNumber the line number of the related document, or -1
if not known
+ * @param theColumnNumber the column number of the related document, or
-1 if not known
+ * @param theType type of exception, default is "XPathParserException"
*/
- explicit
XPathParserException(
- const XalanDOMString& message = XalanDOMString(),
- const XalanNode* styleNode = 0);
+ const XalanDOMString& theMessage,
+ const XalanDOMString& theURI,
+ int
theLineNumber,
+ int
theColumnNumber,
+ const XalanDOMString& theType =
XalanDOMString(XALAN_STATIC_UCODE_STRING("XPathParserException")));
+
+ /**
+ * Constructor
+ *
+ * @param theMessage message to write when exception thrown
+ * @param theType type of exception, default is "XPathParserException"
+ */
+ XPathParserException(
+ const XalanDOMString& theMessage,
+ const XalanDOMString& theType =
XalanDOMString(XALAN_STATIC_UCODE_STRING("XPathParserException")));
virtual
~XPathParserException();
1.7 +7 -3 xml-xalan/c/src/XPath/XPathProcessor.hpp
Index: XPathProcessor.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathProcessor.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XPathProcessor.hpp 2001/06/14 19:12:19 1.6
+++ XPathProcessor.hpp 2001/07/12 04:35:48 1.7
@@ -70,6 +70,7 @@
class Function;
+class Locator;
class PrefixResolver;
class XPath;
@@ -93,13 +94,14 @@
* @param expression expression that will be evaluated
* @param resolver prefix resolver to use
* @param xobjectFactory factory class instance for XObjects
- * @param envSupport XPath environment support class instance
+ * @param locator the Locator to use for error report.
May be null
*/
virtual void
initXPath(
XPath& pathObj,
const XalanDOMString& expression,
- const PrefixResolver& resolver) = 0;
+ const PrefixResolver& resolver,
+ const Locator* locator = 0) = 0;
/**
* Given a string, create an XSLT Match Pattern object.
@@ -107,12 +109,14 @@
* @param pathObj XPath object to be initialized
* @param expression expression that will be evaluated
* @param resolver prefix resolver to use
+ * @param locator the Locator to use for error report.
May be null
*/
virtual void
initMatchPattern(
XPath& pathObj,
const XalanDOMString& expression,
- const PrefixResolver& resolver) = 0;
+ const PrefixResolver& resolver,
+ const Locator* locator = 0) = 0;
/**
* Given a string, and a reference to a function object, install the
1.44 +68 -6 xml-xalan/c/src/XPath/XPathProcessorImpl.cpp
Index: XPathProcessorImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathProcessorImpl.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- XPathProcessorImpl.cpp 2001/07/08 18:23:04 1.43
+++ XPathProcessorImpl.cpp 2001/07/12 04:35:49 1.44
@@ -62,6 +62,10 @@
+#include <sax/Locator.hpp>
+
+
+
#include <PlatformSupport/DOMStringHelper.hpp>
#include <PlatformSupport/DOMStringPrintWriter.hpp>
#include <PlatformSupport/DoubleSupport.hpp>
@@ -100,9 +104,10 @@
void
XPathProcessorImpl::initXPath(
- XPath& pathObj,
- const XalanDOMString& expression,
- const PrefixResolver& prefixResolver)
+ XPath& pathObj,
+ const XalanDOMString& expression,
+ const PrefixResolver& prefixResolver,
+ const Locator* locator)
{
m_requireLiterals = false;
@@ -112,6 +117,10 @@
m_prefixResolver = &prefixResolver;
+ m_locator = locator;
+
+ m_expression->reset();
+
tokenize(expression);
m_expression->appendOpCode(XPathExpression::eOP_XPATH);
@@ -128,6 +137,7 @@
m_xpath = 0;
m_expression = 0;
m_prefixResolver = 0;
+ m_locator = 0;
}
@@ -136,7 +146,8 @@
XPathProcessorImpl::initMatchPattern(
XPath& pathObj,
const XalanDOMString& expression,
- const PrefixResolver& prefixResolver)
+ const PrefixResolver& prefixResolver,
+ const Locator* locator)
{
m_xpath = &pathObj;
@@ -144,6 +155,8 @@
m_prefixResolver = &prefixResolver;
+ m_locator = locator;
+
m_expression->reset();
tokenize(expression);
@@ -167,6 +180,7 @@
m_xpath = 0;
m_expression = 0;
m_prefixResolver = 0;
+ m_locator = 0;
}
@@ -916,7 +930,34 @@
{
thePrintWriter.print(XALAN_STATIC_UCODE_STRING("pattern
= '"));
thePrintWriter.print(theCurrentPattern);
- thePrintWriter.println("'");
+
+ thePrintWriter.print("'");
+
+ if (m_locator != 0)
+ {
+ const XalanDOMChar* const theSystemID =
+ m_locator->getSystemId();
+
+ thePrintWriter.print("(");
+
+ if (theSystemID == 0)
+ {
+ thePrintWriter.print("Unknown URI");
+ }
+ else
+ {
+ thePrintWriter.print(theSystemID);
+ }
+
+ thePrintWriter.print(", ");
+
thePrintWriter.print(m_locator->getLineNumber());
+ thePrintWriter.print(", ");
+
thePrintWriter.print(m_locator->getColumnNumber());
+
+ thePrintWriter.print(")");
+ }
+
+ thePrintWriter.println();
}
// Back up one token, since we've consumed one...
@@ -925,8 +966,29 @@
// Ask the expression to dump the remaining tokens...
m_expression->dumpRemainingTokenQueue(thePrintWriter);
}
+
+ if (m_locator != 0)
+ {
+ const XalanDOMChar* const theSystemID =
+ m_locator->getSystemId();
- throw XPathParserException(emsg);
+ XalanDOMString theURI;
+
+ if (theSystemID != 0)
+ {
+ theURI = theSystemID;
+ }
+
+ throw XPathParserException(
+ emsg,
+ theURI,
+ m_locator->getLineNumber(),
+ m_locator->getColumnNumber());
+ }
+ else
+ {
+ throw XPathParserException(emsg);
+ }
}
1.17 +6 -2 xml-xalan/c/src/XPath/XPathProcessorImpl.hpp
Index: XPathProcessorImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathProcessorImpl.hpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- XPathProcessorImpl.hpp 2001/07/08 18:23:04 1.16
+++ XPathProcessorImpl.hpp 2001/07/12 04:35:50 1.17
@@ -147,13 +147,15 @@
initXPath(
XPath& pathObj,
const XalanDOMString& expression,
- const PrefixResolver& prefixResolver);
+ const PrefixResolver& prefixResolver,
+ const Locator* locator = 0);
virtual void
initMatchPattern(
XPath& pathObj,
const XalanDOMString& expression,
- const PrefixResolver& prefixResolver);
+ const PrefixResolver& prefixResolver,
+ const Locator* locator = 0);
private:
@@ -796,6 +798,8 @@
const PrefixResolver* m_prefixResolver;
bool
m_requireLiterals;
+
+ const Locator* m_locator;
enum eDummy
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]