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 2003/08/22 02:47:48 UTC

cvs commit: xml-xalan/c/src/xalanc/XPath XalanQName.cpp XalanQName.hpp XalanQNameByValue.cpp XalanQNameByValue.hpp

dbertoni    2003/08/21 17:47:48

  Modified:    c/src/xalanc/XPath XalanQName.cpp XalanQName.hpp
                        XalanQNameByValue.cpp XalanQNameByValue.hpp
  Log:
  Cleaned up glitches.
  
  Revision  Changes    Path
  1.2       +53 -1     xml-xalan/c/src/xalanc/XPath/XalanQName.cpp
  
  Index: XalanQName.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XalanQName.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanQName.cpp	29 Jun 2003 03:58:01 -0000	1.1
  +++ XalanQName.cpp	22 Aug 2003 00:47:48 -0000	1.2
  @@ -2,7 +2,7 @@
    * The Apache Software License, Version 1.1
    *
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights 
  + * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights 
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -354,6 +354,58 @@
   		return XalanQName::isValidNCName(thePrefix, theIndex) &&
   			   XalanQName::isValidNCName(theLocalName, theLength - theIndex - 1);
   	}
  +}
  +
  +
  +
  +XalanQName::InvalidQNameException::InvalidQNameException(
  +			const XalanDOMChar*			theQName,
  +			XalanDOMString::size_type	theQNameLength,
  +			const XalanDOMString&		theURI,
  +			int							theLineNumber,
  +			int							theColumnNumber) :
  +	XSLException(format(theQName, theQNameLength), theURI, theLineNumber, theColumnNumber, XalanDOMString("InvalidQNameException"))
  +{
  +}
  +
  +
  +
  +XalanQName::InvalidQNameException::InvalidQNameException(
  +			const LocatorType&			theLocator,
  +			const XalanDOMChar*			theQName,
  +			XalanDOMString::size_type	theQNameLength) :
  +	XSLException(theLocator, format(theQName, theQNameLength), XalanDOMString("InvalidQNameException"))
  +{
  +}
  +
  +
  +
  +XalanQName::InvalidQNameException::InvalidQNameException(
  +			const XalanDOMChar*			theQName,
  +			XalanDOMString::size_type	theQNameLength) :
  +	XSLException(format(theQName, theQNameLength), XalanDOMString("InvalidQNameException"))
  +{
  +}
  +
  +
  +
  +XalanQName::InvalidQNameException::~InvalidQNameException()
  +{
  +}
  +
  +
  +
  +const XalanDOMString
  +XalanQName::InvalidQNameException::format(
  +			const XalanDOMChar*			theQName,
  +			XalanDOMString::size_type	theQNameLength)
  +{
  +	XalanDOMString	theResult("'");
  +
  +	theResult.append(theQName, theQNameLength);
  +	theResult += XalanDOMString("' is not a valid QName");
  +
  +	return theResult;
   }
   
   
  
  
  
  1.2       +58 -1     xml-xalan/c/src/xalanc/XPath/XalanQName.hpp
  
  Index: XalanQName.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XalanQName.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanQName.hpp	29 Jun 2003 03:58:01 -0000	1.1
  +++ XalanQName.hpp	22 Aug 2003 00:47:48 -0000	1.2
  @@ -2,7 +2,7 @@
    * The Apache Software License, Version 1.1
    *
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights 
  + * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights 
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -74,6 +74,7 @@
   
   #include <xalanc/PlatformSupport/DOMStringHelper.hpp>
   #include <xalanc/PlatformSupport/PrefixResolver.hpp>
  +#include <xalanc/PlatformSupport/XSLException.hpp>
   
   
   
  @@ -350,6 +351,62 @@
   	isValidQName(
   			const XalanDOMChar*			theQName,
   			XalanDOMString::size_type	theLength = XalanDOMString::npos);
  +
  +	class InvalidQNameException : public XSLException
  +	{
  +	public:
  +
  +		/**
  +		 * Constructor
  +		 * 
  +		 * @param theQName The QName string that is not valid.
  +		 * @param theQNameLength The length of the string.
  +		 * @param theURI the URI of the related document, if known
  +		 * @param theLineNumber the line number of the related document.
  +		 * @param theColumnNumber the column number of the related document.
  +		 * @param theType type of exception, default is "XSLException"
  +		 */
  +		InvalidQNameException(
  +				const XalanDOMChar*			theQName,
  +				XalanDOMString::size_type	theQNameLength,
  +				const XalanDOMString&		theURI,
  +				int							theLineNumber,
  +				int							theColumnNumber);
  +
  +		/**
  +		 * Constructor
  +		 * 
  +		 * @param theLocator The locator instance for error reporting.
  +		 * @param theQName The QName string that is not valid.
  +		 * @param theQNameLength The length of the string.
  +		 * @param theType type of exception, default is "XSLException"
  +		 */
  +		InvalidQNameException(
  +				const LocatorType&			theLocator,
  +				const XalanDOMChar*			theQName,
  +				XalanDOMString::size_type	theQNameLength);
  +
  +		/**
  +		 * Constructor
  +		 * 
  +		 * @param theQName The QName string that is not valid.
  +		 * @param theQNameLength The length of the string.
  +		 * @param theType type of exception, default is "XSLException"
  +		 */
  +		InvalidQNameException(
  +				const XalanDOMChar*			theQName,
  +				XalanDOMString::size_type	theQNameLength);
  +
  +		virtual
  +		~InvalidQNameException();
  +
  +	private:
  +
  +		static const XalanDOMString
  +		format(
  +				const XalanDOMChar*			theQName,
  +				XalanDOMString::size_type	theQNameLength);
  +	};
   
   protected:
   
  
  
  
  1.2       +44 -10    xml-xalan/c/src/xalanc/XPath/XalanQNameByValue.cpp
  
  Index: XalanQNameByValue.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XalanQNameByValue.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanQNameByValue.cpp	29 Jun 2003 03:58:01 -0000	1.1
  +++ XalanQNameByValue.cpp	22 Aug 2003 00:47:48 -0000	1.2
  @@ -2,7 +2,7 @@
    * The Apache Software License, Version 1.1
    *
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights 
  + * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights 
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -319,9 +319,15 @@
   
   		m_localpart.assign(qname, indexOfNSSep);
   
  -		if(m_localpart == DOMServices::s_XMLNamespace)
  +		if(m_localpart == DOMServices::s_XMLString)
  +		{
  +			m_namespace = DOMServices::s_XMLNamespaceURI;
  +		}
  +		else if(m_localpart == DOMServices::s_XMLNamespace)
   		{
  -			m_localpart.clear();
  +			// The xmlns prefix is not normally bound to a namespace URI, but we're really trying
  +			// to form a QName, so we'll do what the DOM does...
  +			m_namespace = DOMServices::s_XMLNamespacePrefixURI;
   		}
   		else
   		{
  @@ -338,9 +344,9 @@
   			{
   				m_namespace = *theNamespace;
   			}
  -
  -			m_localpart.assign(qname + indexOfNSSep + 1);
   		}
  +
  +		m_localpart.assign(qname + indexOfNSSep + 1, len - (indexOfNSSep + 1));
   	}
   	else
   	{
  @@ -361,6 +367,8 @@
   
   		m_localpart = qname;
   	}
  +
  +	validate(qname, len, locator);
   }
   
   
  @@ -374,7 +382,11 @@
   {
   	const XalanDOMString::size_type		indexOfNSSep = indexOf(qname, XalanUnicode::charColon);
   
  -	if(indexOfNSSep >= theLength)
  +	if (indexOfNSSep == 0)
  +	{
  +		throwException(TranscodeFromLocalCodePage("A prefix of length 0 was detected"), locator);
  +	}
  +	else if(indexOfNSSep >= theLength)
   	{
   		m_localpart.assign(qname, theLength);
   
  @@ -392,12 +404,11 @@
   		{
   			m_namespace = DOMServices::s_XMLNamespaceURI;
   		}
  -		// The default namespace is not resolved.
   		else if(m_localpart == DOMServices::s_XMLNamespace)
   		{
  -			m_localpart.clear();
  -
  -			return;
  +			// The xmlns prefix is not normally bound to a namespace URI, but we're really trying
  +			// to form a QName, so we'll do what the DOM does...
  +			m_namespace = DOMServices::s_XMLNamespacePrefixURI;
   		}
   		else if (theResolver == 0)
   		{
  @@ -429,8 +440,31 @@
   
   		m_localpart.assign(qname + indexOfNSSep + 1, theLength - (indexOfNSSep + 1));
   	}
  +
  +	validate(qname, theLength, locator);
   }
   
   
   
  +void
  +XalanQNameByValue::validate(
  +			const XalanDOMChar*			qname,
  +			XalanDOMString::size_type	theLength,
  +			const LocatorType*			locator)
  +{
  +	if (isValid() == false)
  +	{
  +		if (locator != 0)
  +		{
  +			throw InvalidQNameException(*locator, qname, theLength);
  +		}
  +		else
  +		{
  +			throw InvalidQNameException(qname, theLength);
  +		}
  +	}
  +}
  +
  +
  +	
   XALAN_CPP_NAMESPACE_END
  
  
  
  1.2       +5 -0      xml-xalan/c/src/xalanc/XPath/XalanQNameByValue.hpp
  
  Index: XalanQNameByValue.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XalanQNameByValue.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanQNameByValue.hpp	29 Jun 2003 03:58:01 -0000	1.1
  +++ XalanQNameByValue.hpp	22 Aug 2003 00:47:48 -0000	1.2
  @@ -327,6 +327,11 @@
   			const PrefixResolver*		theResolver,
   			const LocatorType*			locator);
   
  +	void
  +	validate(
  +			const XalanDOMChar*			qname,
  +			XalanDOMString::size_type	theLength,
  +			const LocatorType*			locator);
   
   	// Data members...
   	XalanDOMString	m_namespace;
  
  
  

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