You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2001/09/14 22:49:45 UTC

cvs commit: xml-xalan/c/src/XSLT FunctionCurrent.cpp FunctionCurrent.hpp FunctionDocument.cpp FunctionDocument.hpp FunctionElementAvailable.cpp FunctionElementAvailable.hpp FunctionFormatNumber.cpp FunctionFormatNumber.hpp FunctionFunctionAvailable.cpp FunctionFunctionAvailable.hpp FunctionGenerateID.cpp FunctionGenerateID.hpp FunctionKey.cpp FunctionKey.hpp FunctionSystemProperty.cpp FunctionSystemProperty.hpp FunctionUnparsedEntityURI.cpp FunctionUnparsedEntityURI.hpp StylesheetConstructionContext.hpp StylesheetConstructionContextDefault.cpp StylesheetConstructionContextDefault.hpp StylesheetExecutionContext.hpp StylesheetExecutionContextDefault.cpp StylesheetExecutionContextDefault.hpp StylesheetHandler.cpp StylesheetHandler.hpp XSLTEngineImpl.cpp XSLTEngineImpl.hpp XSLTProcessor.hpp XSLTProcessorEnvSupport.hpp XSLTProcessorEnvSupportDefault.cpp XSLTProcessorEnvSupportDefault.hpp

dbertoni    01/09/14 13:49:45

  Modified:    c/src/XSLT FunctionCurrent.cpp FunctionCurrent.hpp
                        FunctionDocument.cpp FunctionDocument.hpp
                        FunctionElementAvailable.cpp
                        FunctionElementAvailable.hpp
                        FunctionFormatNumber.cpp FunctionFormatNumber.hpp
                        FunctionFunctionAvailable.cpp
                        FunctionFunctionAvailable.hpp
                        FunctionGenerateID.cpp FunctionGenerateID.hpp
                        FunctionKey.cpp FunctionKey.hpp
                        FunctionSystemProperty.cpp
                        FunctionSystemProperty.hpp
                        FunctionUnparsedEntityURI.cpp
                        FunctionUnparsedEntityURI.hpp
                        StylesheetConstructionContext.hpp
                        StylesheetConstructionContextDefault.cpp
                        StylesheetConstructionContextDefault.hpp
                        StylesheetExecutionContext.hpp
                        StylesheetExecutionContextDefault.cpp
                        StylesheetExecutionContextDefault.hpp
                        StylesheetHandler.cpp StylesheetHandler.hpp
                        XSLTEngineImpl.cpp XSLTEngineImpl.hpp
                        XSLTProcessor.hpp XSLTProcessorEnvSupport.hpp
                        XSLTProcessorEnvSupportDefault.cpp
                        XSLTProcessorEnvSupportDefault.hpp
  Log:
  Implemented improved error reporting.
  
  Revision  Changes    Path
  1.11      +8 -62     xml-xalan/c/src/XSLT/FunctionCurrent.cpp
  
  Index: FunctionCurrent.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionCurrent.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- FunctionCurrent.cpp	2000/12/06 21:19:16	1.10
  +++ FunctionCurrent.cpp	2001/09/14 20:49:43	1.11
  @@ -72,15 +72,18 @@
   
   XObjectPtr
   FunctionCurrent::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context)
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const Locator*			locator) const
   {
   	assert(executionContext.getCurrentNode() != 0);
   
   	if (context == 0)
   	{
  -		executionContext.error("The current() function is not allowed in patterns!",
  -							   context);
  +		executionContext.error(
  +			"The current() function is not allowed in patterns!",
  +			context,
  +			locator);
   
   		return XObjectPtr();
   	}
  @@ -92,62 +95,6 @@
   
   
   
  -XObjectPtr
  -FunctionCurrent::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionCurrent::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionCurrent::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionCurrent::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   Function*
   #else
  @@ -163,6 +110,5 @@
   const XalanDOMString
   FunctionCurrent::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The current() function does not take any arguments!");
  +	return XALAN_STATIC_UCODE_STRING("The current() function does not accept any arguments!");
   }
  
  
  
  1.8       +3 -30     xml-xalan/c/src/XSLT/FunctionCurrent.hpp
  
  Index: FunctionCurrent.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionCurrent.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionCurrent.hpp	2000/12/06 21:19:18	1.7
  +++ FunctionCurrent.hpp	2001/09/14 20:49:43	1.8
  @@ -91,38 +91,11 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const Locator*			locator) const;
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  
  
  
  1.25      +29 -62    xml-xalan/c/src/XSLT/FunctionDocument.cpp
  
  Index: FunctionDocument.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionDocument.cpp,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- FunctionDocument.cpp	2001/06/29 18:52:36	1.24
  +++ FunctionDocument.cpp	2001/09/14 20:49:43	1.25
  @@ -139,60 +139,57 @@
   
   
   
  -XObjectPtr
  -FunctionDocument::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
   
   XObjectPtr
   FunctionDocument::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context,			
  -		const XObjectPtr				arg1)
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,			
  +			const XObjectPtr		arg1,
  +			const Locator*			locator) const
   {
   	assert(arg1.null() == false);
   
   	if (context == 0)
   	{
  -		executionContext.error("The document() function requires a non-null context node!",
  -							   context);
  +		executionContext.error(
  +			"The document() function requires a non-null context node!",
  +			context,
  +			locator);
   
   		return XObjectPtr();
   	}
  -
  -	XalanDOMString				base;
  +	else
  +	{
  +		XalanDOMString				base;
   
  -	assert(executionContext.getPrefixResolver() != 0);
  +		assert(executionContext.getPrefixResolver() != 0);
   
  -	base = executionContext.getPrefixResolver()->getURI();
  +		base = executionContext.getPrefixResolver()->getURI();
   
  -	return execute(executionContext, context, arg1, &base, 1);
  +		return doExecute(executionContext, context, arg1, &base, 1);
  +	}
   }
   
   
   
   XObjectPtr
   FunctionDocument::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context,			
  -		const XObjectPtr				arg1,
  -		const XObjectPtr				arg2)
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,			
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const Locator*			locator) const
   {
   	assert(arg1.null() == false && arg2.null() == false);
   
  -	XalanDOMString				base;
  +	XalanDOMString	base;
   
   	if (context == 0)
   	{
  -		executionContext.error("The document() function requires a non-null context node!",
  -							   context);
  +		executionContext.error(
  +			"The document() function requires a non-null context node!",
  +			context,
  +			locator);
   
   		return XObjectPtr();
   	}
  @@ -233,47 +230,18 @@
   		}
   	}
   
  -	return execute(executionContext, context, arg1, &base, 2);
  +	return doExecute(executionContext, context, arg1, &base, 2);
   }
   
   
   
   XObjectPtr
  -FunctionDocument::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionDocument::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionDocument::execute(
  +FunctionDocument::doExecute(
   		XPathExecutionContext&			executionContext,
   		XalanNode*						context,			
   		const XObjectPtr				arg,
   		XalanDOMString*					base,
  -		int								argCount)
  +		int								argCount) const
   {
   	typedef XPathExecutionContext::BorrowReturnMutableNodeRefList	BorrowReturnMutableNodeRefList;
   
  @@ -375,6 +343,5 @@
   const XalanDOMString
   FunctionDocument::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The document() function requires at least one argument!");
  +	return XALAN_STATIC_UCODE_STRING("The document() function accepts one or two arguments!");
   }
  
  
  
  1.7       +17 -33    xml-xalan/c/src/XSLT/FunctionDocument.hpp
  
  Index: FunctionDocument.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionDocument.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionDocument.hpp	2000/12/06 21:19:21	1.6
  +++ FunctionDocument.hpp	2001/09/14 20:49:43	1.7
  @@ -81,38 +81,20 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  -
  -	XObjectPtr
  +	virtual XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const Locator*			locator) const;
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  @@ -121,18 +103,20 @@
   #endif
   	clone() const;
   
  +protected:
  +
  +	const XalanDOMString
  +	getError() const;
  +
   private:
   
   	XObjectPtr
  -	execute(
  +	doExecute(
   			XPathExecutionContext&			executionContext,
   			XalanNode*						context,			
   			const XObjectPtr				arg,
   			XalanDOMString*					base,
  -			int								argCount);
  -
  -	const XalanDOMString
  -	getError() const;
  +			int								argCount) const;
   
   	// Not implemented...
   	FunctionDocument&
  
  
  
  1.13      +4 -59     xml-xalan/c/src/XSLT/FunctionElementAvailable.cpp
  
  Index: FunctionElementAvailable.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionElementAvailable.cpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FunctionElementAvailable.cpp	2001/05/14 01:03:09	1.12
  +++ FunctionElementAvailable.cpp	2001/09/14 20:49:43	1.13
  @@ -81,21 +81,10 @@
   XObjectPtr
   FunctionElementAvailable::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  +			XalanNode*				/* context */,			
  +			const XObjectPtr		arg1,
  +			const Locator*			/* locator */) const
   {
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionElementAvailable::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						/* context */,			
  -		const XObjectPtr				arg1)
  -{
   	assert(arg1.null() == false);
   
   	const XalanDOMString&	fullName = arg1->str();
  @@ -130,49 +119,6 @@
   
   
   
  -XObjectPtr
  -FunctionElementAvailable::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionElementAvailable::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionElementAvailable::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   Function*
   #else
  @@ -188,6 +134,5 @@
   const XalanDOMString
   FunctionElementAvailable::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The function-available() function takes one argument!");
  +	return XALAN_STATIC_UCODE_STRING("The function-available() function takes one argument!");
   }
  
  
  
  1.5       +4 -30     xml-xalan/c/src/XSLT/FunctionElementAvailable.hpp
  
  Index: FunctionElementAvailable.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionElementAvailable.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionElementAvailable.hpp	2000/12/06 21:19:23	1.4
  +++ FunctionElementAvailable.hpp	2001/09/14 20:49:43	1.5
  @@ -91,38 +91,12 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg,
  +			const Locator*			locator) const;
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  
  
  
  1.14      +21 -53    xml-xalan/c/src/XSLT/FunctionFormatNumber.cpp
  
  Index: FunctionFormatNumber.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionFormatNumber.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- FunctionFormatNumber.cpp	2001/07/27 05:34:17	1.13
  +++ FunctionFormatNumber.cpp	2001/09/14 20:49:43	1.14
  @@ -88,35 +88,11 @@
   XObjectPtr
   FunctionFormatNumber::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  +			XalanNode*				context,
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const Locator*			locator) const
   {
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionFormatNumber::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionFormatNumber::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context,			
  -		const XObjectPtr				arg1,
  -		const XObjectPtr				arg2)
  -{
   	assert(arg1.null() == false && arg2.null() == false);	
   	
   	const double						theNumber = arg1->num();
  @@ -139,7 +115,8 @@
   			theNumber,
   			thePattern,
   			theDFS,
  -			theString.get());
  +			theString.get(),
  +			locator);
   
   	return executionContext.getXObjectFactory().createString(theString);
   }
  @@ -148,11 +125,12 @@
   
   XObjectPtr
   FunctionFormatNumber::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context,			
  -		const XObjectPtr				arg1, 
  -		const XObjectPtr				arg2,
  -		const XObjectPtr				arg3)
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const XObjectPtr		arg3,
  +			const Locator*			locator) const
   {
   	assert(arg1.null() == false && arg2.null() == false && arg3.null() == false);
   	
  @@ -167,8 +145,10 @@
   
   	if (theDFS == 0)
   	{
  -		executionContext.warn(s_warningNotFoundString,
  -							  context);
  +		executionContext.warn(
  +				s_warningNotFoundString,
  +				context,
  +				locator);
   
   		theDFS = executionContext.getDecimalFormatSymbols(Constants::DEFAULT_DECIMAL_FORMAT);
   	
  @@ -184,27 +164,14 @@
   			theNumber,
   			thePattern,
   			theDFS,
  -			theString.get());
  +			theString.get(),
  +			locator);
   
   	return executionContext.getXObjectFactory().createString(theString);
   }
   
   
   
  -XObjectPtr
  -FunctionFormatNumber::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   void
   FunctionFormatNumber::doFormat(
   			XPathExecutionContext&				executionContext,
  @@ -212,7 +179,8 @@
   			double								theNumber,
   			const XalanDOMString&				thePattern,
   			const XalanDecimalFormatSymbols*	theDFS,
  -			XalanDOMString&						theResult)
  +			XalanDOMString&						theResult,
  +			const Locator*						locator) const
   {
   	if (DoubleSupport::isNaN(theNumber) == true)
   	{
  @@ -250,7 +218,7 @@
   	}
   	else
   	{
  -		executionContext.warn(s_warningNotImplementedString, context);
  +		executionContext.warn(s_warningNotImplementedString, context, locator);
   
   		if (theDFS != 0)
   		{
  
  
  
  1.10      +15 -29    xml-xalan/c/src/XSLT/FunctionFormatNumber.hpp
  
  Index: FunctionFormatNumber.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionFormatNumber.hpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FunctionFormatNumber.hpp	2001/06/14 19:24:54	1.9
  +++ FunctionFormatNumber.hpp	2001/09/14 20:49:43	1.10
  @@ -111,38 +111,22 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,			
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  -
  -	XObjectPtr
  +	virtual XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,			
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const XObjectPtr		arg3,
  +			const Locator*			locator) const;
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  @@ -160,7 +144,8 @@
   			double								theNumber,
   			const XalanDOMString&				thePattern,
   			const XalanDecimalFormatSymbols*	theDFS,
  -			XalanDOMString&						theResult);
  +			XalanDOMString&						theResult,
  +			const Locator*						locator) const;
   
   private:
   
  @@ -174,6 +159,7 @@
   	bool
   	operator==(const FunctionFormatNumber&) const;
   
  +	// Data members...
   	const XalanDecimalFormatSymbols		m_decimalFormatSymbols;
   
   	static const XalanDOMString&		s_warningNotImplementedString;
  
  
  
  1.12      +6 -61     xml-xalan/c/src/XSLT/FunctionFunctionAvailable.cpp
  
  Index: FunctionFunctionAvailable.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionFunctionAvailable.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- FunctionFunctionAvailable.cpp	2001/05/14 01:03:09	1.11
  +++ FunctionFunctionAvailable.cpp	2001/09/14 20:49:43	1.12
  @@ -85,24 +85,13 @@
   XObjectPtr
   FunctionFunctionAvailable::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  +			XalanNode*				/* context */,
  +			const XObjectPtr		arg,
  +			const Locator*			/* locator */) const
   {
  -	executionContext.error(getError(), context);
  +	assert(arg.null() == false);
   
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionFunctionAvailable::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						/* context */,			
  -		const XObjectPtr				arg1)
  -{
  -	assert(arg1.null() == false);
  -
  -	const XalanDOMString&	fullName = arg1->str();
  +	const XalanDOMString&	fullName = arg->str();
   
   	const unsigned int		nameLength = length(fullName);
   	const unsigned int		indexOfNSSep = indexOf(fullName, XalanUnicode::charColon);
  @@ -125,49 +114,6 @@
   
   
   
  -XObjectPtr
  -FunctionFunctionAvailable::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionFunctionAvailable::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionFunctionAvailable::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   Function*
   #else
  @@ -183,6 +129,5 @@
   const XalanDOMString
   FunctionFunctionAvailable::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The function-available() function takes one argument!");
  +	return XALAN_STATIC_UCODE_STRING("The function-available() function takes one argument!");
   }
  
  
  
  1.6       +8 -32     xml-xalan/c/src/XSLT/FunctionFunctionAvailable.hpp
  
  Index: FunctionFunctionAvailable.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionFunctionAvailable.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FunctionFunctionAvailable.hpp	2001/05/14 01:03:09	1.5
  +++ FunctionFunctionAvailable.hpp	2001/09/14 20:49:43	1.6
  @@ -91,39 +91,13 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
  @@ -131,10 +105,12 @@
   #endif
   	clone() const;
   
  -private:
  +protected:
   
  -	virtual const XalanDOMString
  +	const XalanDOMString
   	getError() const;
  +
  +private:
   
   	// Not implemented...
   	FunctionFunctionAvailable&
  
  
  
  1.17      +12 -51    xml-xalan/c/src/XSLT/FunctionGenerateID.cpp
  
  Index: FunctionGenerateID.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionGenerateID.cpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- FunctionGenerateID.cpp	2001/08/06 01:40:09	1.16
  +++ FunctionGenerateID.cpp	2001/09/14 20:49:43	1.17
  @@ -129,12 +129,16 @@
   
   XObjectPtr
   FunctionGenerateID::execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context)
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const Locator*			locator) const
   {
   	if (context == 0)
   	{
  -		executionContext.error("The function generate-id requires a non-null node!");
  +		executionContext.error(
  +				"The generate-id() function requires a non-null context node!",
  +				context,
  +				locator);
   
   		return XObjectPtr();
   	}
  @@ -155,8 +159,9 @@
   XObjectPtr
   FunctionGenerateID::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				/* context */,			
  -			const XObjectPtr		arg1)
  +			XalanNode*				/* context */,
  +			const XObjectPtr		arg1,
  +			const Locator*			locator) const
   {
   	assert(arg1.null() == false);
   
  @@ -168,55 +173,12 @@
   	}
   	else
   	{
  -		return execute(executionContext, theNodeList.item(0));
  +		return execute(executionContext, theNodeList.item(0), locator);
   	}
   }
   
   
   
  -XObjectPtr
  -FunctionGenerateID::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionGenerateID::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionGenerateID::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   Function*
   #else
  @@ -232,6 +194,5 @@
   const XalanDOMString
   FunctionGenerateID::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The generate-id function takes zero or one arguments!");
  +	return XALAN_STATIC_UCODE_STRING("The generate-id function takes zero or one arguments!");
   }
  
  
  
  1.9       +11 -29    xml-xalan/c/src/XSLT/FunctionGenerateID.hpp
  
  Index: FunctionGenerateID.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionGenerateID.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FunctionGenerateID.hpp	2000/12/06 21:19:33	1.8
  +++ FunctionGenerateID.hpp	2001/09/14 20:49:43	1.9
  @@ -83,38 +83,18 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  +	virtual XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg1,
  +			const Locator*			locator) const;
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  @@ -123,10 +103,12 @@
   #endif
   	clone() const;
   
  -private:
  +protected:
   
   	const XalanDOMString
   	getError() const;
  +
  +private:
   
   	// Not implemented...
   	FunctionGenerateID&	operator=(const FunctionGenerateID&);
  
  
  
  1.20      +12 -62    xml-xalan/c/src/XSLT/FunctionKey.cpp
  
  Index: FunctionKey.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionKey.cpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- FunctionKey.cpp	2000/12/06 21:19:34	1.19
  +++ FunctionKey.cpp	2001/09/14 20:49:43	1.20
  @@ -104,41 +104,19 @@
   XObjectPtr
   FunctionKey::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionKey::execute(
  -			XPathExecutionContext&	executionContext,
   			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */)
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const Locator*			locator) const
   {
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionKey::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context,			
  -		const XObjectPtr				arg1,
  -		const XObjectPtr				arg2)
  -{
   	assert(arg1.null() == false && arg2.null() == false);
   
   	if (context == 0)
   	{
  -		executionContext.error("The key() function requires a non-null context node!",
  -							   context);
  +		executionContext.error(
  +			"The key() function requires a non-null context node!",
  +			context,
  +			locator);
   
   		return XObjectPtr();
   	}
  @@ -155,8 +133,10 @@
   
   		if(0 == docContext)
   		{
  -			executionContext.error("Context does not have an owner document!",
  -								   context);
  +			executionContext.error(
  +				"Context does not have an owner document!",
  +				context,
  +				locator);
   		}
   
   		assert(executionContext.getPrefixResolver() != 0);
  @@ -234,35 +214,6 @@
   
   
   
  -XObjectPtr
  -FunctionKey::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionKey::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   Function*
   #else
  @@ -278,6 +229,5 @@
   const XalanDOMString
   FunctionKey::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The key() function takes two arguments!");
  +	return XALAN_STATIC_UCODE_STRING("The key() function takes two arguments!");
   }
  
  
  
  1.9       +8 -31     xml-xalan/c/src/XSLT/FunctionKey.hpp
  
  Index: FunctionKey.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionKey.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FunctionKey.hpp	2000/12/06 21:19:35	1.8
  +++ FunctionKey.hpp	2001/09/14 20:49:43	1.9
  @@ -90,39 +90,14 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg1,
  +			const XObjectPtr		arg2,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
  @@ -130,10 +105,12 @@
   #endif
   	clone() const;
   
  -private:
  +protected:
   
   	const XalanDOMString
   	getError() const;
  +
  +private:
   
   	// Not implemented...
   	FunctionKey&
  
  
  
  1.18      +8 -60     xml-xalan/c/src/XSLT/FunctionSystemProperty.cpp
  
  Index: FunctionSystemProperty.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionSystemProperty.cpp,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- FunctionSystemProperty.cpp	2001/05/14 01:03:10	1.17
  +++ FunctionSystemProperty.cpp	2001/09/14 20:49:43	1.18
  @@ -89,20 +89,9 @@
   XObjectPtr
   FunctionSystemProperty::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionSystemProperty::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						/* context */,			
  -		const XObjectPtr				arg1)
  +			XalanNode*				context,			
  +			const XObjectPtr		arg1,
  +			const Locator*			locator) const
   {
   	assert(arg1.null() == false);
   
  @@ -149,7 +138,10 @@
   			}
   			else
   			{
  -				executionContext.warn("Don't currently do anything with namespace " + *nspace + " in property: " + fullName);
  +				executionContext.warn(
  +					"Don't currently do anything with namespace " + *nspace + " in property: " + fullName,
  +					context,
  +					locator);
   
   				result = TranscodeFromLocalCodePage(::getenv(c_str(TranscodeToLocalCodePage(propName))));
   			}
  @@ -172,49 +164,6 @@
   
   
   
  -XObjectPtr
  -FunctionSystemProperty::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionSystemProperty::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionSystemProperty::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   Function*
   #else
  @@ -230,6 +179,5 @@
   const XalanDOMString
   FunctionSystemProperty::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The system-property() function takes a single argument!");
  +	return XALAN_STATIC_UCODE_STRING("The system-property() function accepts one argument!");
   }
  
  
  
  1.7       +7 -31     xml-xalan/c/src/XSLT/FunctionSystemProperty.hpp
  
  Index: FunctionSystemProperty.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionSystemProperty.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionSystemProperty.hpp	2000/12/06 21:19:37	1.6
  +++ FunctionSystemProperty.hpp	2001/09/14 20:49:43	1.7
  @@ -81,39 +81,13 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
  @@ -121,10 +95,12 @@
   #endif
   	clone() const;
   
  -private:
  +protected:
   
   	virtual const XalanDOMString
   	getError() const;
  +
  +private:
   
   	// Not implemented...
   	FunctionSystemProperty&
  
  
  
  1.15      +21 -72    xml-xalan/c/src/XSLT/FunctionUnparsedEntityURI.cpp
  
  Index: FunctionUnparsedEntityURI.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionUnparsedEntityURI.cpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- FunctionUnparsedEntityURI.cpp	2000/12/21 04:48:30	1.14
  +++ FunctionUnparsedEntityURI.cpp	2001/09/14 20:49:43	1.15
  @@ -81,89 +81,39 @@
   XObjectPtr
   FunctionUnparsedEntityURI::execute(
   			XPathExecutionContext&	executionContext,
  -			XalanNode*				context)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionUnparsedEntityURI::execute(
  -		XPathExecutionContext&			executionContext,
  -		XalanNode*						context,			
  -		const XObjectPtr				arg1)
  +			XalanNode*				context,			
  +			const XObjectPtr		arg,
  +			const Locator*			locator) const
   {
  -	assert(arg1.null() == false);
  +	assert(arg.null() == false);
   
   	if (context == 0)
   	{
  -		executionContext.error("The unparsed-entity-uri() function requires a non-null context node!",
  -							   context);
  +		executionContext.error(
  +			"The unparsed-entity-uri() function requires a non-null context node!",
  +			context,
  +			locator);
   
   		return XObjectPtr();
   	}
  -
  -	const XalanDOMString&	name = arg1->str();
  +	else
  +	{
  +		const XalanDOMString&	name = arg->str();
   
  -	XalanDocument* const	doc =
  -			XalanNode::DOCUMENT_NODE == context->getNodeType() ?
  +		XalanDocument* const	doc =
  +				XalanNode::DOCUMENT_NODE == context->getNodeType() ?
   #if defined(XALAN_OLD_STYLE_CASTS)
  -				(XalanDocument*)context :
  +					(XalanDocument*)context :
   #else
  -				static_cast<XalanDocument*>(context) :
  +					static_cast<XalanDocument*>(context) :
   #endif
  -				context->getOwnerDocument();
  -	assert(doc != 0);
  -
  -	const XalanDOMString&	uri = executionContext.getUnparsedEntityURI(name, *doc);
  -
  -	return executionContext.getXObjectFactory().createStringReference(uri);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionUnparsedEntityURI::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  -}
  +					context->getOwnerDocument();
  +		assert(doc != 0);
   
  -
  -
  -XObjectPtr
  -FunctionUnparsedEntityURI::execute(
  -			XPathExecutionContext&	executionContext,
  -			XalanNode*				context,			
  -			const XObjectPtr		/* arg1 */,
  -			const XObjectPtr		/* arg2 */,
  -			const XObjectPtr		/* arg3 */)
  -{
  -	executionContext.error(getError(), context);
  +		const XalanDOMString&	uri = executionContext.getUnparsedEntityURI(name, *doc);
   
  -	return XObjectPtr(0);
  -}
  -
  -
  -
  -XObjectPtr
  -FunctionUnparsedEntityURI::execute(
  -			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		/* args */)
  -{
  -	executionContext.error(getError(), context);
  -
  -	return XObjectPtr(0);
  +		return executionContext.getXObjectFactory().createStringReference(uri);
  +	}
   }
   
   
  @@ -171,6 +121,5 @@
   const XalanDOMString
   FunctionUnparsedEntityURI::getError() const
   {
  -	return XALAN_STATIC_UCODE_STRING(
  -		"The unparsed-entity-uri function should take one argument!");
  +	return XALAN_STATIC_UCODE_STRING("The unparsed-entity-uri function accepts one argument!");
   }
  
  
  
  1.7       +7 -31     xml-xalan/c/src/XSLT/FunctionUnparsedEntityURI.hpp
  
  Index: FunctionUnparsedEntityURI.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionUnparsedEntityURI.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionUnparsedEntityURI.hpp	2000/12/06 21:19:39	1.6
  +++ FunctionUnparsedEntityURI.hpp	2001/09/14 20:49:43	1.7
  @@ -88,39 +88,13 @@
   
   	// These methods are inherited from Function ...
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context);
  -
   	virtual XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			arg1);
  -
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */);
  -
  -	XObjectPtr
   	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,			
  -			const XObjectPtr			/* arg1 */,
  -			const XObjectPtr			/* arg2 */,
  -			const XObjectPtr			/* arg3 */);
  +			XPathExecutionContext&	executionContext,
  +			XalanNode*				context,
  +			const XObjectPtr		arg,
  +			const Locator*			locator) const;
   
  -	XObjectPtr
  -	execute(
  -			XPathExecutionContext&		executionContext,
  -			XalanNode*					context,
  -			int							/* opPos */,
  -			const XObjectArgVectorType&	/* args */);
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
  @@ -131,10 +105,12 @@
   		return new FunctionUnparsedEntityURI(*this);
   	}
   
  -private:
  +protected:
   
   	virtual const XalanDOMString
   	getError() const;
  +
  +private:
   
   	// Not implemented...
   	FunctionUnparsedEntityURI&
  
  
  
  1.12      +36 -0     xml-xalan/c/src/XSLT/StylesheetConstructionContext.hpp
  
  Index: StylesheetConstructionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetConstructionContext.hpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- StylesheetConstructionContext.hpp	2001/07/12 05:05:59	1.11
  +++ StylesheetConstructionContext.hpp	2001/09/14 20:49:43	1.12
  @@ -371,11 +371,23 @@
   
   	virtual void
   	error(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const = 0;
  +
  +	virtual void
  +	error(
   			const char*					msg,
   			const XalanNode* 			sourceNode = 0,
   			const ElemTemplateElement* 	styleNode = 0) const = 0;
   
   	virtual void
  +	error(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const = 0;
  +
  +	virtual void
   	warn(
   			const XalanDOMString&		msg,
   			const XalanNode* 			sourceNode = 0,
  @@ -383,11 +395,23 @@
   
   	virtual void
   	warn(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const = 0;
  +
  +	virtual void
  +	warn(
   			const char*					msg,
   			const XalanNode* 			sourceNode = 0,
   			const ElemTemplateElement* 	styleNode = 0) const = 0;
   
   	virtual void
  +	warn(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const = 0;
  +
  +	virtual void
   	message(
   			const XalanDOMString&		msg,
   			const XalanNode* 			sourceNode = 0,
  @@ -395,9 +419,21 @@
   
   	virtual void
   	message(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const = 0;
  +
  +	virtual void
  +	message(
   			const char*					msg,
   			const XalanNode* 			sourceNode = 0,
   			const ElemTemplateElement* 	styleNode = 0) const = 0;
  +
  +	virtual void
  +	message(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const = 0;
   };
   
   
  
  
  
  1.18      +87 -0     xml-xalan/c/src/XSLT/StylesheetConstructionContextDefault.cpp
  
  Index: StylesheetConstructionContextDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetConstructionContextDefault.cpp,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- StylesheetConstructionContextDefault.cpp	2001/07/12 05:06:00	1.17
  +++ StylesheetConstructionContextDefault.cpp	2001/09/14 20:49:43	1.18
  @@ -136,6 +136,24 @@
   
   void
   StylesheetConstructionContextDefault::error(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const
  +{
  +	if (locator != 0)
  +	{
  +		m_processor.error(msg, *locator, sourceNode);
  +	}
  +	else
  +	{
  +		m_processor.error(msg, sourceNode);
  +	}
  +}
  +
  +
  +
  +void
  +StylesheetConstructionContextDefault::error(
   			const char*					msg,
   			const XalanNode* 			sourceNode,
   			const ElemTemplateElement*	styleNode) const
  @@ -146,6 +164,17 @@
   
   
   void
  +StylesheetConstructionContextDefault::error(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const
  +{
  +	error(TranscodeFromLocalCodePage(msg), sourceNode, locator);
  +}
  +
  +
  +
  +void
   StylesheetConstructionContextDefault::warn(
   			const XalanDOMString&		msg,
   			const XalanNode* 			sourceNode,
  @@ -158,6 +187,24 @@
   
   void
   StylesheetConstructionContextDefault::warn(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const
  +{
  +	if (locator != 0)
  +	{
  +		m_processor.warn(msg, *locator, sourceNode);
  +	}
  +	else
  +	{
  +		m_processor.warn(msg, sourceNode);
  +	}
  +}
  +
  +
  +
  +void
  +StylesheetConstructionContextDefault::warn(
   			const char*					msg,
   			const XalanNode* 			sourceNode,
   			const ElemTemplateElement*	styleNode) const
  @@ -168,6 +215,17 @@
   
   
   void
  +StylesheetConstructionContextDefault::warn(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const
  +{
  +	warn(TranscodeFromLocalCodePage(msg), sourceNode, locator);
  +}
  +
  +
  +
  +void
   StylesheetConstructionContextDefault::message(
   			const XalanDOMString&		msg,
   			const XalanNode* 			sourceNode,
  @@ -180,11 +238,40 @@
   
   void
   StylesheetConstructionContextDefault::message(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const
  +{
  +	if (locator != 0)
  +	{
  +		m_processor.message(msg, *locator, sourceNode);
  +	}
  +	else
  +	{
  +		m_processor.message(msg, sourceNode);
  +	}
  +}
  +
  +
  +
  +void
  +StylesheetConstructionContextDefault::message(
   			const char*					msg,
   			const XalanNode* 			sourceNode,
   			const ElemTemplateElement*	styleNode) const
   {
   	message(TranscodeFromLocalCodePage(msg), sourceNode, styleNode);
  +}
  +
  +
  +
  +void
  +StylesheetConstructionContextDefault::message(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const
  +{
  +	message(TranscodeFromLocalCodePage(msg), sourceNode, locator);
   }
   
   
  
  
  
  1.19      +36 -0     xml-xalan/c/src/XSLT/StylesheetConstructionContextDefault.hpp
  
  Index: StylesheetConstructionContextDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetConstructionContextDefault.hpp,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- StylesheetConstructionContextDefault.hpp	2001/07/12 05:06:01	1.18
  +++ StylesheetConstructionContextDefault.hpp	2001/09/14 20:49:43	1.19
  @@ -150,11 +150,23 @@
   
   	virtual void
   	error(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const;
  +
  +	virtual void
  +	error(
   			const char*					msg,
   			const XalanNode* 			sourceNode = 0,
   			const ElemTemplateElement* 	styleNode = 0) const;
   
   	virtual void
  +	error(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const;
  +
  +	virtual void
   	warn(
   			const XalanDOMString&		msg,
   			const XalanNode* 			sourceNode = 0,
  @@ -162,11 +174,23 @@
   
   	virtual void
   	warn(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const;
  +
  +	virtual void
  +	warn(
   			const char*					msg,
   			const XalanNode* 			sourceNode = 0,
   			const ElemTemplateElement* 	styleNode = 0) const;
   
   	virtual void
  +	warn(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const;
  +
  +	virtual void
   	message(
   			const XalanDOMString&		msg,
   			const XalanNode* 			sourceNode = 0,
  @@ -174,9 +198,21 @@
   
   	virtual void
   	message(
  +			const XalanDOMString&	msg,
  +			const XalanNode* 		sourceNode,
  +			const Locator* 			locator) const;
  +
  +	virtual void
  +	message(
   			const char*					msg,
   			const XalanNode* 			sourceNode = 0,
   			const ElemTemplateElement* 	styleNode = 0) const;
  +
  +	virtual void
  +	message(
  +			const char*			msg,
  +			const XalanNode* 	sourceNode,
  +			const Locator* 		locator) const;
   
   	// These interfaces are inherited from StylesheetConstructionContext...
   
  
  
  
  1.63      +5 -2      xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp
  
  Index: StylesheetExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- StylesheetExecutionContext.hpp	2001/08/13 17:08:53	1.62
  +++ StylesheetExecutionContext.hpp	2001/09/14 20:49:43	1.63
  @@ -1621,7 +1621,8 @@
   			const XalanDOMString&			theNamespace,
   			const XalanDOMString&			functionName,
   			XalanNode*						context,
  -			const XObjectArgVectorType&		argVec) = 0;
  +			const XObjectArgVectorType&		argVec,
  +			const Locator*					locator) = 0;
   
   	virtual XalanDocument*
   	parseXML(
  @@ -1658,7 +1659,9 @@
   			MutableNodeRefList&		nodelist) = 0;
   
   	virtual const XObjectPtr
  -	getVariable(const XalanQName&	name) = 0;
  +	getVariable(
  +			const XalanQName&	name,
  +			const Locator*		locator = 0) = 0;
   
   	virtual const PrefixResolver*
   	getPrefixResolver() const = 0;
  
  
  
  1.75      +33 -7     xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp
  
  Index: StylesheetExecutionContextDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp,v
  retrieving revision 1.74
  retrieving revision 1.75
  diff -u -r1.74 -r1.75
  --- StylesheetExecutionContextDefault.cpp	2001/08/20 22:10:58	1.74
  +++ StylesheetExecutionContextDefault.cpp	2001/09/14 20:49:43	1.75
  @@ -1543,9 +1543,10 @@
   			const XalanDOMString&			theNamespace,
   			const XalanDOMString&			functionName,
   			XalanNode*						context,
  -			const XObjectArgVectorType&		argVec)
  +			const XObjectArgVectorType&		argVec,
  +			const Locator*					locator)
   {
  -	return m_xpathExecutionContextDefault.extFunction(theNamespace, functionName, context, argVec);
  +	return m_xpathExecutionContextDefault.extFunction(theNamespace, functionName, context, argVec, locator);
   }
   
   
  @@ -1632,7 +1633,9 @@
   
   
   const XObjectPtr
  -StylesheetExecutionContextDefault::getVariable(const XalanQName&	name)
  +StylesheetExecutionContextDefault::getVariable(
  +			const XalanQName&	name,
  +			const Locator*		locator)
   {
   	bool				fFound;
   
  @@ -1648,7 +1651,9 @@
   	{
   		error(
   			TranscodeFromLocalCodePage("Variable reference given for variable out of context or without definition!  Name = '") +
  -			name.getLocalPart() + "'");
  +			name.getLocalPart() + "'",
  +			getCurrentNode(),
  +			locator);
   
   		return getXObjectFactory().createUnknown(name.getLocalPart());
   	}
  @@ -1917,7 +1922,14 @@
   {
   	assert(m_xsltProcessor != 0);
   
  -	m_xsltProcessor->error(msg, sourceNode);
  +	if (locator != 0)
  +	{
  +		m_xsltProcessor->error(msg, *locator, sourceNode);
  +	}
  +	else
  +	{
  +		m_xsltProcessor->error(msg, sourceNode);
  +	}
   }
   
   
  @@ -1965,7 +1977,14 @@
   {
   	assert(m_xsltProcessor != 0);
   
  -	m_xsltProcessor->warn(msg, sourceNode);
  +	if (locator != 0)
  +	{
  +		m_xsltProcessor->warn(msg, *locator, sourceNode);
  +	}
  +	else
  +	{
  +		m_xsltProcessor->warn(msg, sourceNode);
  +	}
   }
   
   
  @@ -2013,7 +2032,14 @@
   {
   	assert(m_xsltProcessor != 0);
   
  -	m_xsltProcessor->message(msg, sourceNode);
  +	if (locator != 0)
  +	{
  +		m_xsltProcessor->message(msg, *locator, sourceNode);
  +	}
  +	else
  +	{
  +		m_xsltProcessor->message(msg, sourceNode);
  +	}
   }
   
   
  
  
  
  1.67      +5 -2      xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp
  
  Index: StylesheetExecutionContextDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp,v
  retrieving revision 1.66
  retrieving revision 1.67
  diff -u -r1.66 -r1.67
  --- StylesheetExecutionContextDefault.hpp	2001/08/20 22:10:58	1.66
  +++ StylesheetExecutionContextDefault.hpp	2001/09/14 20:49:43	1.67
  @@ -780,7 +780,8 @@
   			const XalanDOMString&			theNamespace,
   			const XalanDOMString&			functionName,
   			XalanNode*						context,
  -			const XObjectArgVectorType&		argVec);
  +			const XObjectArgVectorType&		argVec,
  +			const Locator*					locator);
   
   	virtual XalanDocument*
   	parseXML(
  @@ -817,7 +818,9 @@
   			MutableNodeRefList&		nodelist);
   
   	virtual const XObjectPtr
  -	getVariable(const XalanQName&	name);
  +	getVariable(
  +			const XalanQName&	name,
  +			const Locator*		locator = 0);
   
   	virtual const PrefixResolver*
   	getPrefixResolver() const;
  
  
  
  1.70      +176 -158  xml-xalan/c/src/XSLT/StylesheetHandler.cpp
  
  Index: StylesheetHandler.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.cpp,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- StylesheetHandler.cpp	2001/09/04 16:24:21	1.69
  +++ StylesheetHandler.cpp	2001/09/14 20:49:43	1.70
  @@ -63,7 +63,7 @@
   
   
   #include <sax/Locator.hpp>
  -#include <sax/SAXException.hpp>
  +#include <sax/SAXParseException.hpp>
   #include <util/XMLURL.hpp>
   
   
  @@ -128,17 +128,11 @@
   #include <Include/XalanAutoPtr.hpp>
   
   
  -const XalanDOMString	StylesheetHandler::s_emptyString;
   
  -
  -
   StylesheetHandler::StylesheetHandler(
   			Stylesheet&						stylesheetTree,
   			StylesheetConstructionContext&	constructionContext) :
   	FormatterListener(OUTPUT_METHOD_OTHER),
  -	m_includeBase(stylesheetTree.getBaseIdentifier()),
  -	m_pendingException(),
  -	m_exceptionPending(false),
   	m_stylesheet(stylesheetTree),
   	m_constructionContext(constructionContext),
   	m_elemStack(),
  @@ -151,6 +145,7 @@
   	m_foundStylesheet(false),
   	m_foundNotImport(false),
   	m_accumulateText(),
  +	m_includeBase(stylesheetTree.getBaseIdentifier()),
   	m_inExtensionElementStack(),
   	m_inLXSLTScript(false),
   	m_LXSLTScriptBody(),
  @@ -221,9 +216,6 @@
   
   void StylesheetHandler::startDocument()
   {
  -	m_exceptionPending = false;
  -
  -	clear(m_pendingException);
   }
   
   
  @@ -237,11 +229,6 @@
   	}
   
   	m_inExtensionElementStack.clear();
  -
  -	if (m_exceptionPending == true)
  -	{
  -		throw SAXException(c_wstr(m_pendingException));
  -	}
   }
   
   
  @@ -262,9 +249,12 @@
   			const XalanDOMChar*		aname,
   			const AttributeList&	atts,
   			int						which,
  +			const Locator*			locator,
   			bool&					fPreserve)
   {
  -	const bool	isSpaceAttr = equals(aname, Constants::ATTRNAME_XMLSPACE);
  +	const XalanQNameByValue		theName(XalanDOMString(aname), m_stylesheet.getNamespaces());
  +
  +	const bool					isSpaceAttr = s_spaceAttrQName.equals(theName);
   
   	if(isSpaceAttr == false)
   	{
  @@ -284,7 +274,7 @@
   		}
   		else
   		{
  -			throw SAXException("xml:space has an illegal value");
  +			error("xml:space has an illegal value", locator);
   		}
   	}
   
  @@ -293,16 +283,33 @@
   
   
   
  +inline int
  +getLineNumber(const Locator*	theLocator)
  +{
  +	return theLocator == 0 ? -1 : theLocator->getLineNumber();
  +}
  +
  +
  +
  +inline int
  +getColumnNumber(const Locator*	theLocator)
  +{
  +	return theLocator == 0 ? -1 : theLocator->getColumnNumber();
  +}
  +
  +
  +
   bool
   StylesheetHandler::processSpaceAttr(
   			const AttributeList&	atts,
  +			const Locator*			locator,
   			bool&					fPreserve)
   {
   	const unsigned int	len = atts.getLength();
   
   	for (unsigned int i = 0; i < len; ++i)
   	{
  -		if (processSpaceAttr(atts.getName(i), atts, i, fPreserve) == true)
  +		if (processSpaceAttr(atts.getName(i), atts, i, locator, fPreserve) == true)
   		{
   			return true;
   		}
  @@ -318,10 +325,6 @@
   			const XMLCh* const	name,
   			AttributeList&		atts)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  -
   	m_inExtensionElementStack.push_back(false);
   
   	if (m_preserveSpaceStack.empty() == true)
  @@ -354,8 +357,8 @@
   
   		const Locator* const	locator = m_constructionContext.getLocatorFromStack();
   
  -		const int	lineNumber = 0 != locator ? locator->getLineNumber() : 0;
  -		const int	columnNumber = 0 != locator ? locator->getColumnNumber() : 0;
  +		const int	lineNumber = getLineNumber(locator);
  +		const int	columnNumber = getColumnNumber(locator);
   
   		// First push namespaces
   		m_stylesheet.pushNamespaces(atts);
  @@ -388,11 +391,11 @@
   				m_stylesheet.setWrapperless(false);
   			}
   
  -			const int xslToken = m_constructionContext.getElementToken(localName);
  +			const int	xslToken = m_constructionContext.getElementToken(localName);
   
   			if(!m_inTemplate)
   			{
  -				processTopLevelElement(name, localName, ns, atts, xslToken, lineNumber, columnNumber, fPreserveSpace, fSpaceAttrProcessed);
  +				processTopLevelElement(name, localName, ns, atts, xslToken, locator, fPreserveSpace, fSpaceAttrProcessed);
   			}
   			else
   			{
  @@ -424,16 +427,33 @@
             
   				case Constants::ELEMNAME_SORT:
   					{
  +						if (m_elemStack.empty() == true)
  +						{
  +							error("Misplaced xsl:sort.", locator);
  +						}
  +
  +						ElemTemplateElement* const	theElement =
  +								m_elemStack.back();
  +						assert(theElement != 0);
  +
  +						const int	xslToken = theElement->getXSLToken();
  +
  +						if (xslToken != Constants::ELEMNAME_FOREACH &&
  +							xslToken != Constants::ELEMNAME_APPLY_TEMPLATES)
  +						{
  +							error("Misplaced xsl:sort.", locator);
  +						}
  +
   						ElemForEach* foreach =
   #if defined(XALAN_OLD_STYLE_CASTS)
  -							(ElemForEach*)m_elemStack.back();
  +								(ElemForEach*)theElement;
   #else
  -							static_cast<ElemForEach*>(m_elemStack.back());
  +								static_cast<ElemForEach*>(theElement);
   #endif
   
   						ElemSort* sortElem = new ElemSort(m_constructionContext,
  -													 m_stylesheet,
  -													 atts, lineNumber, columnNumber);
  +														 m_stylesheet,
  +														 atts, lineNumber, columnNumber);
   
   						// Note: deleted in ElemForEach destructor
   						foreach->getSortElems().push_back(sortElem);
  @@ -513,12 +533,12 @@
   							}
   							else
   							{
  -								throw SAXException("(StylesheetHandler) misplaced xsl:when!");
  +								error("(StylesheetHandler) misplaced xsl:when.", locator);
   							}
   						}
   						else
   						{
  -							throw SAXException("(StylesheetHandler) xsl:when not parented by xsl:choose!");
  +							error("(StylesheetHandler) xsl:when not parented by xsl:choose.", locator);
   						}
   					}
   					break;
  @@ -541,12 +561,12 @@
   							}
   							else
   							{
  -								throw SAXException("(StylesheetHandler) misplaced xsl:otherwise!");
  +								error("Misplaced xsl:otherwise.", locator);
   							}
   						}
   						else
   						{
  -							throw SAXException("(StylesheetHandler) xsl:otherwise not parented by xsl:choose!");
  +							error("xsl:otherwise not parented by xsl:choose.", locator);
   						}
   					}
   					break;
  @@ -620,14 +640,15 @@
   				case Constants::ELEMNAME_PRESERVESPACE:
   				case Constants::ELEMNAME_STRIPSPACE:
   					{
  -						XalanDOMString msg("(StylesheetHandler) " + XalanDOMString(name) + " is not allowed inside a template!");
  -						throw SAXException(c_wstr(msg));
  +						const XalanDOMString	msg(XalanDOMString(name) + " is not allowed inside a template.");
  +
  +						error(msg, locator);
   					}
   					break;
   
   				default:
   					{
  -						XalanDOMString msg("Unknown XSL element: " + localName);
  +						const XalanDOMString	msg("Unknown XSL element: " + localName);
   
   						// If this stylesheet is declared to be of a higher version than the one
   						// supported, don't flag an error.
  @@ -637,7 +658,7 @@
   						}
   						else
   						{
  -							throw SAXException(c_wstr(msg));
  +							error(msg, locator);
   						}
   					}
   				}
  @@ -645,7 +666,7 @@
   		}
   		else if (!m_inTemplate && startsWith(ns, m_constructionContext.getXalanXSLNameSpaceURL()))
   		{
  -			processExtensionElement(name, localName, atts);
  +			processExtensionElement(name, localName, atts, locator);
   		}
   		else
   		{
  @@ -694,7 +715,7 @@
   				// Guard against an exception in appendChildElem()...
   				XalanAutoPtr<ElemTemplateElement>	theGuard(elem);
   
  -				appendChildElementToParent(elem, lineNumber, columnNumber);
  +				appendChildElementToParent(elem, locator);
   
   				// The element is parented and will now be
   				// deleted when the parent is delete...
  @@ -707,7 +728,7 @@
   		// If we haven't processed an xml:space attribute already, look for one...
   		if (fSpaceAttrProcessed == false)
   		{
  -			fSpaceAttrProcessed = processSpaceAttr(atts, fPreserveSpace);
  +			fSpaceAttrProcessed = processSpaceAttr(atts, locator, fPreserveSpace);
   		}
   
   		// Only update the stack if we actually processed an xml:space attribute...
  @@ -733,24 +754,8 @@
   			}
   		}
   	} // end try
  -
  -	// Here's the story.  startElement throws exceptions for certain malformed constructs.  These
  -	// exceptions need to reach the end user.  But the parser eats all exceptions and we lose
  -	// the error messages and exit silently.  So, I'll eat the exceptions first, store the message
  -	// and then throw the exception during endDocument
  -	catch(SAXException&		e)
  -	{
  -		m_exceptionPending = true;
  -
  -		m_pendingException = e.getMessage();
  -
  -		doCleanup();
  -	}
   	catch(...)
   	{
  -		// $$$ ToDo: This probably should't happen, but it does...
  -		m_exceptionPending = true;
  -
   		doCleanup();
   
   		throw;
  @@ -857,8 +862,7 @@
   			const XalanDOMString&	ns,
   			const AttributeList&	atts,
   			int						xslToken,
  -			int						lineNumber,
  -			int						columnNumber,
  +			const Locator*			locator,
   			bool&					fPreserveSpace,
   			bool&					fSpaceAttrProcessed)
   {
  @@ -867,12 +871,18 @@
   		m_foundNotImport = true;
   	}
   
  +	const int	lineNumber = getLineNumber(locator);
  +	const int	columnNumber = getColumnNumber(locator);
  +
   	switch(xslToken)
   	{
   	case Constants::ELEMNAME_TEMPLATE:
  -		m_pTemplate = new ElemTemplate(m_constructionContext,
  -									m_stylesheet,
  -									atts, lineNumber, columnNumber);
  +		m_pTemplate = new ElemTemplate(
  +				m_constructionContext,
  +				m_stylesheet,
  +				atts,
  +				lineNumber,
  +				columnNumber);
   	
   		m_elemStack.push_back(m_pTemplate);
   		m_elemStackParentedElements.insert(m_pTemplate);
  @@ -909,12 +919,12 @@
   	break;
   
   	case Constants::ELEMNAME_LOCALE:
  -		m_constructionContext.warn(StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("xsl:locale not yet supported!")));
  +		m_constructionContext.warn(StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("xsl:locale not yet supported.")));
   		break;
   
   	case Constants::ELEMNAME_PRESERVESPACE:
   	case Constants::ELEMNAME_STRIPSPACE:
  -		processPreserveStripSpace(name, atts, lineNumber, columnNumber, xslToken);
  +		processPreserveStripSpace(name, atts, locator, xslToken);
   		break;
   
   	case Constants::ELEMNAME_KEY:
  @@ -940,11 +950,11 @@
   		break;
   
   	case Constants::ELEMNAME_INCLUDE:
  -		processInclude(name, atts);
  +		processInclude(name, atts, locator);
   		break;
   
   	case Constants::ELEMNAME_IMPORT:
  -		processImport(name, atts);
  +		processImport(name, atts, locator);
   		break;
   
   	case Constants::ELEMNAME_OUTPUT:
  @@ -1000,21 +1010,22 @@
   	case Constants::ELEMNAME_APPLY_IMPORTS:
   		if (inExtensionElement() == false)
   		{
  -			XalanDOMString msg("(StylesheetHandler) " + XalanDOMString(name) + " not allowed inside a stylesheet!");
  -				throw SAXException(c_wstr(msg));
  +			const XalanDOMString	msg("(StylesheetHandler) " + XalanDOMString(name) + " not allowed inside a stylesheet.");
  +				
  +			error(msg, locator);
   		}
   		break;
   
   	case Constants::ELEMNAME_STYLESHEET:
  -		processStylesheet(name, atts, lineNumber, columnNumber, fPreserveSpace, fSpaceAttrProcessed);
  +		processStylesheet(name, atts, locator, fPreserveSpace, fSpaceAttrProcessed);
   		break;
   
   	default:
   		if (inExtensionElement() == false)
   		{
  -			XalanDOMString msg("Unknown XSL element: " + localName);
  +			const XalanDOMString	msg("Unknown XSL element: " + localName);
   
  -			throw SAXException(c_wstr(TranscodeFromLocalCodePage("Unknown XSL element: ") + localName));
  +			error(msg, locator);
   		}
   		break;
   	}
  @@ -1025,8 +1036,7 @@
   StylesheetHandler::processStylesheet(
   			const XalanDOMChar*		name,
   			const AttributeList&	atts,
  -			int						/* lineNumber */,
  -			int						/* columnNumber */,
  +			const Locator*			locator,
   			bool&					fPreserveSpace,
   			bool&					fSpaceAttrProcessed)
   {
  @@ -1076,7 +1086,7 @@
   
   			fVersionFound = true;
   		}
  -		else if(processSpaceAttr(aname, atts, i, fPreserveSpace) == true)
  +		else if(processSpaceAttr(aname, atts, i, locator, fPreserveSpace) == true)
   		{
   			fSpaceAttrProcessed = true;
   		}
  @@ -1090,7 +1100,7 @@
   					" has an illegal attribute: " +
   					aname);
   
  -				throw SAXException(c_wstr(msg));
  +				error(msg, locator);
   			}
   		}
   
  @@ -1102,7 +1112,7 @@
   
   	if (fVersionFound == false)
   	{
  -		throw SAXException(c_wstr(TranscodeFromLocalCodePage("The stylesheet element did not specify a version attribute!")));
  +		error("The stylesheet element did not specify a version attribute.", locator);
   	}
   }
   
  @@ -1112,7 +1122,8 @@
   StylesheetHandler::processExtensionElement(
   			const XalanDOMChar*		name,
   			const XalanDOMString&	localName,
  -			const AttributeList&	atts)
  +			const AttributeList&	atts,
  +			const Locator*			locator)
   {
   	if (equals(localName, Constants::ATTRNAME_COMPONENTS))
   	{
  @@ -1140,15 +1151,17 @@
   			}
   			else if(!isAttrOK(aname, atts, i))
   			{
  -				m_constructionContext.error(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +				const XalanDOMString	msg(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +
  +				error(msg, locator);
   			}
   		}
   
  -		if (isEmpty(prefix)) 
  +		if (isEmpty(prefix) == true) 
   		{
  -			XalanDOMString msg("StylesheetHandler) " + XalanDOMString(name) + " attribute 'prefix' is missing");
  +			const XalanDOMString	msg("StylesheetHandler) " + XalanDOMString(name) + " attribute 'prefix' is missing");
   
  -			throw SAXException(c_wstr(msg));
  +			error(msg, locator);
   		}
   
   		// SCOTT: is the line below correct?
  @@ -1206,7 +1219,9 @@
   			}
   			else if(!isAttrOK(aname, atts, i))
   			{
  -				m_constructionContext.error(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +				const XalanDOMString	msg(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +
  +				error(msg, locator);
   			}
   		}
   	}
  @@ -1222,11 +1237,10 @@
   StylesheetHandler::processPreserveStripSpace(
   			const XalanDOMChar*		name,
   			const AttributeList&	atts,
  -			int						lineNumber,
  -			int						columnNumber,
  +			const Locator*			locator,
   			int						xslToken)
   {
  -	ElemEmpty nsNode(m_constructionContext, m_stylesheet, lineNumber, columnNumber);
  +	ElemEmpty nsNode(m_constructionContext, m_stylesheet, getLineNumber(locator), getColumnNumber(locator));
   
   	const unsigned int	nAttrs = atts.getLength();
   
  @@ -1269,16 +1283,18 @@
   		}
   		else if(!isAttrOK(aname, atts, i))
   		{
  -			m_constructionContext.error(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +			const XalanDOMString	msg(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +
  +			error(msg, locator);
   		}
   	}
   
   	if(!foundIt && inExtensionElement() == false)
   	{
  -		XalanDOMString msg("(StylesheetHandler) " + XalanDOMString(name) +
  -			" requires a " + Constants::ATTRNAME_ELEMENTS + " attribute!");
  +		const XalanDOMString	msg("(StylesheetHandler) " + XalanDOMString(name) +
  +			" requires a " + Constants::ATTRNAME_ELEMENTS + " attribute.");
   
  -		throw SAXException(c_wstr(msg));
  +		error(msg, locator);
   	}
   }
   
  @@ -1287,8 +1303,7 @@
   void
   StylesheetHandler::appendChildElementToParent(
   			ElemTemplateElement*	elem,
  -			int						lineNumber,
  -			int						columnNumber)
  +			const Locator*			locator)
   {
   	ElemTemplateElement* const	parent = m_elemStack.back();
   
  @@ -1316,7 +1331,7 @@
   			append(theMessage, " is not a valid child of ");
   			append(theMessage, parent->getElementName());
   
  -			error(theMessage, lineNumber, columnNumber);
  +			error(theMessage, locator);
   		}
   
   		throw;
  @@ -1373,7 +1388,8 @@
   void
   StylesheetHandler::processImport(
   			const XalanDOMChar*		name,
  -			const AttributeList&	atts)
  +			const AttributeList&	atts,
  +			const Locator*			locator)
   {
   	const unsigned int	nAttrs = atts.getLength();
   
  @@ -1389,7 +1405,7 @@
   			
   			if(m_foundNotImport)
   			{
  -				throw SAXException("Imports can only occur as the first elements in the stylesheet!");
  +				error("Imports can only occur as the first elements in the stylesheet.", locator);
   			}
   
   			const XalanDOMString	saved_XSLNameSpaceURL = m_stylesheet.getXSLTNamespaceURI();
  @@ -1406,9 +1422,9 @@
   
   			if(stackContains(importStack, hrefUrl))
   			{
  -				XalanDOMString msg(hrefUrl + " is directly or indirectly importing itself!");
  +				const XalanDOMString	msg(hrefUrl + " is directly or indirectly importing itself.");
   
  -				throw SAXException(c_wstr(msg));
  +				error(msg, locator);
   			}
   
   			importStack.push_back(hrefUrl);
  @@ -1434,15 +1450,17 @@
   		}
   		else if(!isAttrOK(aname, atts, i))
   		{
  -			m_constructionContext.error(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +			const XalanDOMString	msg(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +
  +			error(msg, locator);
   		}
   	}
   
   	if(!foundIt)
   	{
  -		XalanDOMString msg("Could not find href attribute for " + XalanDOMString(name));
  +		const XalanDOMString	msg("Could not find href attribute for " + XalanDOMString(name));
   
  -		throw SAXException(c_wstr(msg));
  +		error(msg, locator);
   	}
   }
   
  @@ -1450,7 +1468,8 @@
   void
   StylesheetHandler::processInclude(
   			const XalanDOMChar*		name,
  -			const AttributeList&	atts)
  +			const AttributeList&	atts,
  +			const Locator*			locator)
   {
   	const unsigned int	nAttrs = atts.getLength();
   
  @@ -1473,9 +1492,9 @@
   
   			if(stackContains(m_stylesheet.getIncludeStack(), hrefUrl))
   			{
  -				XalanDOMString msg(hrefUrl + " is directly or indirectly including itself!");
  +				XalanDOMString msg(hrefUrl + " is directly or indirectly including itself.");
   
  -				throw SAXException(c_wstr(msg));
  +				error(msg, locator);
   			}
   
   			m_stylesheet.getIncludeStack().push_back(hrefUrl);
  @@ -1487,15 +1506,17 @@
   		}
   		else if(!isAttrOK(aname, atts, i))
   		{
  -			m_constructionContext.error(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +			const XalanDOMString	msg(XalanDOMString(name) + " has an illegal attribute: " + aname);
  +
  +			error(msg, locator);
   		}
   	}
   
   	if(!foundIt)
   	{
  -		XalanDOMString msg("Could not find href attribute for " + XalanDOMString(name));
  +		const XalanDOMString	msg("Could not find href attribute for " + XalanDOMString(name));
   
  -		throw SAXException(c_wstr(msg));
  +		error(msg, locator);
   	}
   }
   
  @@ -1504,9 +1525,7 @@
   void
   StylesheetHandler::endElement(const XMLCh* const name)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  +	const Locator* const	locator = m_constructionContext.getLocatorFromStack();
   
   #if !defined(XALAN_NO_NAMESPACES)
   	using std::for_each;
  @@ -1568,15 +1587,15 @@
   	{
   		if (isEmpty(m_LXSLTScriptLang)) 
   		{
  -			XalanDOMString msg(XalanDOMString(name) + " attribute \'lang\' is missing");
  +			const XalanDOMString	msg(XalanDOMString(name) + " attribute \'lang\' is missing");
   
  -			throw SAXException(c_wstr(msg));
  +			error(msg, locator);
   		}
   		if (m_pLXSLTExtensionNSH == 0) 
   		{
  -			XalanDOMString msg("(StylesheetHandler) misplaced " + XalanDOMString(name) + " element?? Missing container element " + "'component'");
  +			const XalanDOMString	msg("(StylesheetHandler) misplaced " + XalanDOMString(name) + " element?? Missing container element " + "'component'");
   
  -			throw SAXException(c_wstr(msg));
  +			error(msg, locator);
   		}
   
   		m_pLXSLTExtensionNSH->setScript(m_LXSLTScriptLang, m_LXSLTScriptSrcURL, m_LXSLTScriptBody);
  @@ -1606,10 +1625,6 @@
   			const XMLCh* const	chars,
   			const unsigned int	length)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  -
   	accumulateText(chars, length);
   }
   
  @@ -1620,10 +1635,6 @@
   			const XMLCh* const	chars,
   			const unsigned int	length)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  -
   	accumulateText(chars, length);
   
   	processText(chars, length);
  @@ -1638,10 +1649,6 @@
   			const XMLCh* const	/*chars*/,
   			const unsigned int	/*length*/)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  -
   	// Ignore!
   	m_lastPopped = 0;
   }
  @@ -1653,10 +1660,6 @@
   			const XMLCh* const	/*target*/,
   			const XMLCh* const	/*data*/)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  -
   	if (isXMLWhitespace(m_accumulateText) == false)
   	{
   		processAccumulatedText();
  @@ -1672,11 +1675,7 @@
   void
   StylesheetHandler::comment(const XMLCh* const /*data*/)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == false)
  -	{
  -		processAccumulatedText();
  -	}
  +	processAccumulatedText();
   }
   
   
  @@ -1684,11 +1683,7 @@
   void
   StylesheetHandler::entityReference(const XMLCh* const /*name*/)
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == false)
  -	{
  -		processAccumulatedText();
  -	}
  +	processAccumulatedText();
   }
   
   
  @@ -1696,11 +1691,7 @@
   void
   StylesheetHandler::resetDocument()
   {
  -	// if we have apending exception, we don't want to even try to process this
  -	if (m_exceptionPending == false)
  -	{
  -		clear(m_accumulateText);
  -	}
  +	clear(m_accumulateText);
   }
   
   
  @@ -1710,10 +1701,6 @@
   			const XMLCh* const	/* chars */,
   			const unsigned int	/* length */)
   {
  -	// if we have a pending exception, we don't want to even try to process this
  -	if (m_exceptionPending == true)
  -		return;
  -
     // No action for the moment.
   }
   
  @@ -1866,21 +1853,20 @@
   
   void
   StylesheetHandler::error(
  -			const XalanDOMString&	theMessage,
  -			int						theLineNumber,
  -			int						theColumnNumber) const
  +			const char*		theMessage,
  +			const Locator*	theLocator) const
   {
  -	XalanDOMString	theErrorMessage(theMessage);
  -	
  -	append(theErrorMessage, ", at line ");
  -	LongToDOMString(theLineNumber, theErrorMessage);
  +	m_constructionContext.error(theMessage, 0, theLocator);
  +}
   
  -	append(theErrorMessage, ", offset ");
  -	LongToDOMString(theColumnNumber, theErrorMessage);
   
  -	append(theErrorMessage, ".");
   
  -	throw SAXException(c_wstr(theErrorMessage));
  +void
  +StylesheetHandler::error(
  +			const XalanDOMString&	theMessage,
  +			const Locator*			theLocator) const
  +{
  +	m_constructionContext.error(theMessage, 0, theLocator);
   }
   
   
  @@ -1948,4 +1934,36 @@
   	m_handler.m_stylesheet.getNamespacesHandler().swap(m_namespacesHandler);
   	m_handler.m_inExtensionElementStack.swap(m_inExtensionElementStack);
   	m_handler.m_preserveSpaceStack.swap(m_preserveSpaceStack);
  +}
  +
  +
  +
  +const XalanDOMString			StylesheetHandler::s_emptyString;
  +
  +XalanDOMString					s_localPart;
  +
  +XalanQNameByReference			s_spaceAttrQName;
  +
  +const XalanQName&				StylesheetHandler::s_spaceAttrQName = ::s_spaceAttrQName;
  +
  +
  +
  +void
  +StylesheetHandler::initialize()
  +{
  +	::s_localPart = XALAN_STATIC_UCODE_STRING("space");
  +
  +	::s_spaceAttrQName.setLocalPart(::s_localPart);
  +
  +	::s_spaceAttrQName.setNamespace(DOMServices::s_XMLNamespaceURI);
  +}
  +
  +
  +
  +void
  +StylesheetHandler::terminate()
  +{
  +	releaseMemory(::s_localPart);
  +
  +	::s_spaceAttrQName.clear();
   }
  
  
  
  1.30      +41 -24    xml-xalan/c/src/XSLT/StylesheetHandler.hpp
  
  Index: StylesheetHandler.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.hpp,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- StylesheetHandler.hpp	2001/05/14 01:03:12	1.29
  +++ StylesheetHandler.hpp	2001/09/14 20:49:43	1.30
  @@ -89,6 +89,7 @@
   class ElemTextLiteral;
   class ExtensionNSHandler;
   class StylesheetConstructionContext;
  +class XalanQName;
   
   
   
  @@ -117,11 +118,18 @@
   #endif
   
   	/**
  -	 * Stack to keep track of the current include base.
  +	 * Perform static initialization.  See class XMLSupportInit.
   	 */
  -	XalanDOMString m_includeBase;
  +	static void
  +	initialize();
   
   	/**
  +	 * Perform static shut down.  See class XMLSupportInit.
  +	 */
  +	static void
  +	terminate();
  +
  +	/**
   	 * Construct a StylesheetHandler ... it will add the DOM nodes 
   	 * to the document fragment.
   	 */
  @@ -378,6 +386,7 @@
   	 * @param aname The name of the attribute in question.
   	 * @param atts The attribute list that owns the attribute.
   	 * @param which The index of the attribute into the attribute list.
  +	 * @param locator A Locator instance for error reporting.
   	 * @param fPreserve set to true if the attribute value is "preserve"
   	 * @return True if this is a xml:space attribute.
   	 */
  @@ -386,18 +395,21 @@
   			const XalanDOMChar*		aname,
   			const AttributeList&	atts,
   			int						which,
  +			const Locator*			locator,
   			bool&					fPreserve);
   
   	/** 
   	 * Tell whether or not this is a xml:space attribute and, if so, process it.
   	 * 
   	 * @param atts The attribute list that owns the attribute.
  +	 * @param locator A Locator instance for error reporting.
   	 * @param fPreserve set to true if an xml:space attribute value is "preserve"
   	 * @return True if this is a xml:space attribute.
   	 */
   	bool
   	processSpaceAttr(
   			const AttributeList&	atts,
  +			const Locator*			locator,
   			bool&					fPreserve);
   
   	/**
  @@ -406,20 +418,17 @@
   	void
   	processImport(
   			const XalanDOMChar*		name,
  -			const AttributeList&	atts);
  +			const AttributeList&	atts,
  +			const Locator*			locator);
   
   	/**
   	 * Process xsl:include.
   	 */
   	void
  -	processInclude(const XalanDOMChar*		name,
  -				   const AttributeList&		atts);
  -
  -	void
  -	error(
  -			const XalanDOMString&	theMessage,
  -			int						theLineNumber,
  -			int						theColumnNumber) const;
  +	processInclude(
  +			const XalanDOMChar*		name,
  +			const AttributeList&	atts,
  +			const Locator*			locator);
   
   	void
   	doCleanup();
  @@ -431,9 +440,19 @@
   
   	StylesheetHandler&
   	operator=(const StylesheetHandler&);
  +
  +	// Utility functions...
  +	void
  +	error(
  +			const char*		theMessage,
  +			const Locator*	theLocator) const;
   
  -	// Utility function...
   	void
  +	error(
  +			const XalanDOMString&	theMessage,
  +			const Locator*			theLocator) const;
  +
  +	void
   	processText(
   			const XMLCh* const	chars,
   			const unsigned int	length);
  @@ -453,8 +472,7 @@
   			const XalanDOMString&	ns,
   			const AttributeList&	atts,
   			int						xslToken,
  -			int						lineNumber,
  -			int						columnNumber,
  +			const Locator*			locator,
   			bool&					fPreserveSpace,
   			bool&					fSpaceAttrProcessed);
   
  @@ -462,8 +480,7 @@
   	processStylesheet(
   			const XalanDOMChar*		name,
   			const AttributeList&	atts,
  -			int						lineNumber,
  -			int						columnNumber,
  +			const Locator*			locator,
   			bool&					fPreserveSpace,
   			bool&					fSpaceAttrProcessed);
   
  @@ -471,15 +488,13 @@
   	processPreserveStripSpace(
   			const XalanDOMChar*		name,
   			const AttributeList&	atts,
  -			int						lineNumber,
  -			int						columnNumber,
  +			const Locator*			locator,
   			int						xslToken);
   
   	void
   	appendChildElementToParent(
   			ElemTemplateElement*	elem,
  -			int						lineNumber,
  -			int						columnNumber);
  +			const Locator*			locator);
   
   	bool
   	inExtensionElement() const;
  @@ -488,13 +503,11 @@
   	processExtensionElement(
   			const XalanDOMChar*		name,
   			const XalanDOMString&	localName,
  -			const AttributeList&	atts);
  +			const AttributeList&	atts,
  +			const Locator*			locator);
   
   	// Data members...
  -	XalanDOMString	m_pendingException;
   
  -	bool			m_exceptionPending;
  -
   	/**
   	 * The owning stylesheet.
   	 */
  @@ -564,6 +577,8 @@
   	 */
   	XalanDOMString	m_accumulateText;
   
  +	XalanDOMString	m_includeBase;
  +
   	BoolStackType	m_inExtensionElementStack;
   
   	BoolStackType	m_preserveSpaceStack;
  @@ -637,6 +652,8 @@
   	friend class PushPopIncludeState;
   
   	static const XalanDOMString				s_emptyString;
  +
  +	static const XalanQName&				s_spaceAttrQName;
   };
   
   
  
  
  
  1.117     +67 -1     xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp
  
  Index: XSLTEngineImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
  retrieving revision 1.116
  retrieving revision 1.117
  diff -u -r1.116 -r1.117
  --- XSLTEngineImpl.cpp	2001/09/12 17:48:03	1.116
  +++ XSLTEngineImpl.cpp	2001/09/14 20:49:43	1.117
  @@ -1229,6 +1229,17 @@
   
   void
   XSLTEngineImpl::message(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode) const
  +{
  +	problem(msg, ProblemListener::eMESSAGE, locator, sourceNode);
  +}
  +
  +
  +
  +void
  +XSLTEngineImpl::message(
   			const char*			msg,
   			const XalanNode*	sourceNode,
   			const XalanNode*	styleNode) const
  @@ -1344,8 +1355,8 @@
   		m_problemListener->problem(
   					ProblemListener::eXSLPROCESSOR,
   					classification,
  -					styleNode,
   					sourceNode,
  +					styleNode,
   					msg,
   					id,
   					lineNumber,
  @@ -1361,6 +1372,39 @@
   
   
   void
  +XSLTEngineImpl::problem(
  +			const XalanDOMString&				msg, 
  +			ProblemListener::eClassification	classification,
  +			const Locator&						locator,
  +			const XalanNode*					sourceNode) const
  +{
  +	const XalanDOMChar* const	id = locator.getSystemId();
  +
  +	const int					lineNumber = locator.getLineNumber();
  +	const int 					columnNumber = locator.getColumnNumber();
  +
  +	if (m_problemListener != 0)
  +	{
  +		m_problemListener->problem(
  +					ProblemListener::eXSLPROCESSOR,
  +					classification,
  +					sourceNode,
  +					0,
  +					msg,
  +					id,
  +					lineNumber,
  +					columnNumber);
  +	}
  +
  +	if (classification == ProblemListener::eERROR)
  +	{
  +		throw XSLTProcessorException(msg, XalanDOMString(id), lineNumber, columnNumber);
  +	}
  +}
  +
  +
  +
  +void
   XSLTEngineImpl::warn(
   			const XalanDOMString&	msg,
   			const XalanNode*		sourceNode,
  @@ -1384,6 +1428,17 @@
   
   void
   XSLTEngineImpl::warn(
  +			const XalanDOMString&		msg,
  +			const Locator&				locator,
  +			const XalanNode*			sourceNode) const
  +{
  +	problem(msg, ProblemListener::eWARNING, locator, sourceNode);
  +}
  +
  +
  +
  +void
  +XSLTEngineImpl::warn(
   			const char*			msg,
   			const XalanNode*	sourceNode,
   			const XalanNode*	styleNode) const
  @@ -1411,6 +1466,17 @@
   			const ElemTemplateElement*	styleNode) const
   {
   	problem(msg, ProblemListener::eERROR, sourceNode, styleNode);
  +}
  +
  +
  +
  +void
  +XSLTEngineImpl::error(
  +			const XalanDOMString&		msg,
  +			const Locator&				locator,
  +			const XalanNode*			sourceNode) const
  +{
  +	problem(msg, ProblemListener::eERROR, locator, sourceNode);
   }
   
   
  
  
  
  1.74      +25 -0     xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp
  
  Index: XSLTEngineImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp,v
  retrieving revision 1.73
  retrieving revision 1.74
  diff -u -r1.73 -r1.74
  --- XSLTEngineImpl.hpp	2001/07/23 01:39:45	1.73
  +++ XSLTEngineImpl.hpp	2001/09/14 20:49:43	1.74
  @@ -773,6 +773,12 @@
   			const XalanNode*	styleNode = 0) const;
   
   	virtual void
  +	message(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode = 0) const;
  +
  +	virtual void
   	warn(
   			const XalanDOMString&	msg,
   			const XalanNode*		sourceNode = 0,
  @@ -798,6 +804,12 @@
   			const XalanNode*	styleNode = 0) const;
   
   	virtual void
  +	warn(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode = 0) const;
  +
  +	virtual void
   	error(
   			const XalanDOMString&	msg,
   			const XalanNode*		sourceNode = 0,
  @@ -809,6 +821,12 @@
   			const XalanNode*			sourceNode,
   			const ElemTemplateElement*	styleNode) const;
   
  +	virtual void
  +	error(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode = 0) const;
  +
   	/**
   	 * Report an error, and throw an exception.
   	 * 
  @@ -1591,6 +1609,13 @@
   			ProblemListener::eClassification	classification,
   			const XalanNode*					sourceNode,
   			const ElemTemplateElement*			styleNode) const;
  +
  +	void
  +	problem(
  +			const XalanDOMString&				msg, 
  +			ProblemListener::eClassification	classification,
  +			const Locator&						locator,
  +			const XalanNode*					sourceNode) const;
   
     //==========================================================
     // SECTION: Function to do with attribute handling
  
  
  
  1.25      +44 -4     xml-xalan/c/src/XSLT/XSLTProcessor.hpp
  
  Index: XSLTProcessor.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTProcessor.hpp,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- XSLTProcessor.hpp	2001/08/13 17:08:54	1.24
  +++ XSLTProcessor.hpp	2001/09/14 20:49:43	1.25
  @@ -75,6 +75,7 @@
   class ElemTemplateElement;
   class FormatterListener;
   class GenerateEvent;
  +class Locator;
   class NodeRefListBase;
   class PrefixResolver;
   class PrintWriter;
  @@ -446,11 +447,24 @@
   			const ElemTemplateElement*	styleNode) const = 0;
   
   	/**
  +	 * Report a message.
  +	 * 
  +	 * @param msg		 text of message to output
  +	 * @param locator  A Locator for error reporting
  +	 * @param sourceNode node in source where message occurred
  +	 */
  +	virtual void
  +	message(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode = 0) const = 0;
  +
  +	/**
   	 * Report a warning.
   	 * 
   	 * @param msg		 text of message to output
  -	 * @param sourceNode node in source where error occurred
  -	 * @param styleNode  node in stylesheet where error occurred
  +	 * @param sourceNode node in source where the warning occurred
  +	 * @param styleNode  node in stylesheet where the warning occurred
   	 */
   	virtual void
   	warn(
  @@ -462,8 +476,8 @@
   	 * Report a warning.
   	 * 
   	 * @param msg		 text of message to output
  -	 * @param sourceNode node in source where error occurred
  -	 * @param styleNode  node in stylesheet where error occurred
  +	 * @param sourceNode node in source where warning occurred
  +	 * @param styleNode  node in stylesheet where warning occurred
   	 */
   	virtual void
   	warn(
  @@ -472,6 +486,19 @@
   			const ElemTemplateElement*	styleNode) const = 0;
   
   	/**
  +	 * Report a warning.
  +	 * 
  +	 * @param msg		 text of message to output
  +	 * @param locator  A Locator for error reporting
  +	 * @param sourceNode node in source where error occurred
  +	 */
  +	virtual void
  +	warn(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode = 0) const = 0;
  +
  +	/**
   	 * Report an error and throw an exception.
   	 * 
   	 * @param msg		 text of message to output
  @@ -496,6 +523,19 @@
   			const XalanDOMString&		msg,
   			const XalanNode*			sourceNode,
   			const ElemTemplateElement*	styleNode) const = 0;
  +
  +	/**
  +	 * Report an error and throw an exception.
  +	 * 
  +	 * @param msg		 text of message to output
  +	 * @param locator  A Locator for error reporting
  +	 * @param sourceNode node in source where error occurred
  +	 */
  +	virtual void
  +	error(
  +			const XalanDOMString&	msg,
  +			const Locator&			locator,
  +			const XalanNode*		sourceNode = 0) const = 0;
   };
   
   
  
  
  
  1.12      +2 -1      xml-xalan/c/src/XSLT/XSLTProcessorEnvSupport.hpp
  
  Index: XSLTProcessorEnvSupport.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTProcessorEnvSupport.hpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XSLTProcessorEnvSupport.hpp	2001/07/18 04:33:15	1.11
  +++ XSLTProcessorEnvSupport.hpp	2001/09/14 20:49:43	1.12
  @@ -122,7 +122,8 @@
   			const XalanDOMString&			theNamespace,
   			const XalanDOMString&			functionName,
   			XalanNode*						context,
  -			const XObjectArgVectorType&		argVec) const = 0;
  +			const XObjectArgVectorType&		argVec,
  +			const Locator*					locator) const = 0;
   
   	virtual bool
   	problem(
  
  
  
  1.24      +9 -6      xml-xalan/c/src/XSLT/XSLTProcessorEnvSupportDefault.cpp
  
  Index: XSLTProcessorEnvSupportDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTProcessorEnvSupportDefault.cpp,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- XSLTProcessorEnvSupportDefault.cpp	2001/07/18 04:33:15	1.23
  +++ XSLTProcessorEnvSupportDefault.cpp	2001/09/14 20:49:43	1.24
  @@ -278,13 +278,16 @@
   			const XalanDOMString&			theNamespace,
   			const XalanDOMString&			functionName,
   			XalanNode*						context,
  -			const XObjectArgVectorType&		argVec) const
  +			const XObjectArgVectorType&		argVec,
  +			const Locator*					locator) const
   {
  -	return m_defaultSupport.extFunction(executionContext,
  -										theNamespace,
  -										functionName,
  -										context,
  -										argVec);
  +	return m_defaultSupport.extFunction(
  +			executionContext,
  +			theNamespace,
  +			functionName,
  +			context,
  +			argVec,
  +			locator);
   }
   
   
  
  
  
  1.19      +2 -1      xml-xalan/c/src/XSLT/XSLTProcessorEnvSupportDefault.hpp
  
  Index: XSLTProcessorEnvSupportDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTProcessorEnvSupportDefault.hpp,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- XSLTProcessorEnvSupportDefault.hpp	2001/07/18 04:33:15	1.18
  +++ XSLTProcessorEnvSupportDefault.hpp	2001/09/14 20:49:43	1.19
  @@ -187,7 +187,8 @@
   			const XalanDOMString&			theNamespace,
   			const XalanDOMString&			functionName,
   			XalanNode*						context,
  -			const XObjectArgVectorType&		argVec) const;
  +			const XObjectArgVectorType&		argVec,
  +			const Locator*					locator) const;
   
   	virtual bool
   	problem(
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org