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/08/13 19:08:02 UTC

cvs commit: xml-xalan/c/src/XPath XalanQName.cpp XalanQName.hpp XalanQNameByReference.cpp XalanQNameByReference.hpp XalanQNameByValue.cpp XalanQNameByValue.hpp XPath.cpp XPathEnvSupport.hpp XPathExecutionContext.hpp XPathExecutionContextDefault.cpp XPathExecutionContextDefault.hpp

dbertoni    01/08/13 10:08:02

  Modified:    c/src/XPath XPath.cpp XPathEnvSupport.hpp
                        XPathExecutionContext.hpp
                        XPathExecutionContextDefault.cpp
                        XPathExecutionContextDefault.hpp
  Added:       c/src/XPath XalanQName.cpp XalanQName.hpp
                        XalanQNameByReference.cpp XalanQNameByReference.hpp
                        XalanQNameByValue.cpp XalanQNameByValue.hpp
  Log:
  Fixed QName collisions with Xerces.
  
  Revision  Changes    Path
  1.61      +2 -5      xml-xalan/c/src/XPath/XPath.cpp
  
  Index: XPath.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- XPath.cpp	2001/07/21 05:35:15	1.60
  +++ XPath.cpp	2001/08/13 17:08:01	1.61
  @@ -78,7 +78,7 @@
   
   #include "FoundIndex.hpp"
   #include "MutableNodeRefList.hpp"
  -#include "QNameByReference.hpp"
  +#include "XalanQNameByReference.hpp"
   #include "SimpleNodeLocator.hpp"
   #include "XLocator.hpp"
   #include "XPathException.hpp"
  @@ -914,10 +914,7 @@
   
   	const XObject&	varName = m_expression.m_tokenQueue[m_expression.m_opMap[opPos + 3]];
   
  -	const QNameByReference	qname(ns.str(),
  -								  varName.str());	
  -
  -	return executionContext.getVariable(qname);
  +	return executionContext.getVariable(XalanQNameByReference(ns.str(), varName.str()));
   }
   
   
  
  
  
  1.16      +1 -1      xml-xalan/c/src/XPath/XPathEnvSupport.hpp
  
  Index: XPathEnvSupport.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathEnvSupport.hpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XPathEnvSupport.hpp	2001/07/18 04:26:54	1.15
  +++ XPathEnvSupport.hpp	2001/08/13 17:08:01	1.16
  @@ -94,7 +94,7 @@
   class XalanDocument;
   class XalanElement;
   class XalanNode;
  -class QName;
  +class XalanQName;
   
   
   
  
  
  
  1.42      +2 -2      xml-xalan/c/src/XPath/XPathExecutionContext.hpp
  
  Index: XPathExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContext.hpp,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- XPathExecutionContext.hpp	2001/07/18 04:26:54	1.41
  +++ XPathExecutionContext.hpp	2001/08/13 17:08:01	1.42
  @@ -87,7 +87,7 @@
   
   class XalanDecimalFormatSymbols;
   class PrefixResolver;
  -class QName;
  +class XalanQName;
   class XLocator;
   class XMLURL;
   class XObject;
  @@ -640,7 +640,7 @@
   	 * @return pointer to an XObject if the variable was found, 0 if it was not
   	 */
   	virtual const XObjectPtr
  -	getVariable(const QName&	name) = 0;
  +	getVariable(const XalanQName&	name) = 0;
   
   	/**
   	 * Retrieve the resolver for namespaces.
  
  
  
  1.41      +2 -2      xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp
  
  Index: XPathExecutionContextDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- XPathExecutionContextDefault.cpp	2001/07/18 04:26:54	1.40
  +++ XPathExecutionContextDefault.cpp	2001/08/13 17:08:01	1.41
  @@ -81,7 +81,7 @@
   #include "FoundIndex.hpp"
   #include "XObjectFactory.hpp"
   #include "ResultTreeFrag.hpp"
  -#include "QName.hpp"
  +#include "XalanQName.hpp"
   #include "XPathEnvSupport.hpp"
   
   
  @@ -388,7 +388,7 @@
   
   
   const XObjectPtr
  -XPathExecutionContextDefault::getVariable(const QName&	name)
  +XPathExecutionContextDefault::getVariable(const XalanQName&		name)
   {
   	assert(m_xobjectFactory != 0);
   
  
  
  
  1.37      +1 -1      xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp
  
  Index: XPathExecutionContextDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- XPathExecutionContextDefault.hpp	2001/07/18 04:26:54	1.36
  +++ XPathExecutionContextDefault.hpp	2001/08/13 17:08:01	1.37
  @@ -264,7 +264,7 @@
   			MutableNodeRefList&		nodelist);
   
   	virtual const XObjectPtr
  -	getVariable(const QName&	name);
  +	getVariable(const XalanQName&	name);
   
   	virtual const PrefixResolver*
   	getPrefixResolver() const;
  
  
  
  1.1                  xml-xalan/c/src/XPath/XalanQName.cpp
  
  Index: XalanQName.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file...
  #include "XalanQName.hpp"
  
  
  
  #include <Include/STLHelper.hpp>
  
  
  
  #include <PlatformSupport/DOMStringHelper.hpp>
  #include <PlatformSupport/XalanUnicode.hpp>
  
  
  
  #include <DOMSupport/DOMServices.hpp>
  
  
  
  const XalanDOMString	XalanQName::s_emptyString;
  
  
  
  const XalanDOMString*
  XalanQName::getNamespaceForPrefix(
  			const NamespaceVectorType&	namespaces,
  			const XalanDOMString&		prefix,
  			bool						reverse)
  {
  	const XalanDOMString*	nsURI = 0;
  
  	if(::equals(prefix, DOMServices::s_XMLString))
  	{
  		nsURI = &DOMServices::s_XMLNamespaceURI;
  	}
  	else if (::equals(prefix, DOMServices::s_XMLNamespace))
  	{
  		nsURI = &DOMServices::s_XMLNamespacePrefixURI;
  	}
  	else
  	{
  		if (reverse)
  		{
  			for(int j = namespaces.size()-1; j >= 0; j--)
  			{
  				const NameSpace&	ns = namespaces[j];
  
  				const XalanDOMString&	thisPrefix = ns.getPrefix();
  
  				if(::equals(prefix, thisPrefix))
  				{
  					nsURI = &ns.getURI();
  
  					break;
  				}
  			}
  		}
  		else
  		{
  			for(unsigned int j = 0; j < namespaces.size(); j++)
  			{
  				const NameSpace&	ns = namespaces[j];
  
  				const XalanDOMString&	thisPrefix = ns.getPrefix();
  
  				if(::equals(prefix, thisPrefix))
  				{
  					nsURI = &ns.getURI();
  
  					break;
  				}
  			}
  		}
  	}
  
  	return nsURI;
  }
  
  
  
  const XalanDOMString*
  XalanQName::getNamespaceForPrefix(
  			const NamespacesStackType&	nsStack,
  			const XalanDOMString&		prefix,
  			bool						reverse)
  {
  	const XalanDOMString*	nsURI = 0;
  
  	const int depth = nsStack.size();
  
  	for(int i = depth-1; i >= 0; i--)
  	{
  		const NamespaceVectorType&	namespaces = nsStack[i];
  
  		nsURI = getNamespaceForPrefix(namespaces, prefix, reverse);
  
  		if (nsURI != 0)
  			break;
  	}
  
  	return nsURI;
  }
  
  
  
  const XalanDOMString*
  XalanQName::getPrefixForNamespace(
  			const NamespaceVectorType&	namespaces,
  			const XalanDOMString&		uri,
  			bool						/* reverse */)
  {
  	const XalanDOMString*	thePrefix = 0;
  
  	for(int j = namespaces.size()-1; j >= 0; j--)
  	{
  		const NameSpace&		ns = namespaces[j];
  		const XalanDOMString&	thisURI = ns.getURI();
  
  		if(::equals(uri, thisURI))
  		{
  			thePrefix = &ns.getPrefix();
  
  			break;
  		}
  	}
  
  	return thePrefix;
  }		
  
  
  
  const XalanDOMString*
  XalanQName::getPrefixForNamespace(
  			const NamespacesStackType&	nsStack,
  			const XalanDOMString&		uri,
  			bool						reverse)
  {
  	const XalanDOMString*	thePrefix = 0;
  
  	const int		depth = nsStack.size();
  
  	if (reverse)
  	{
  		for(int i = depth-1; i >= 0; i--)
  		{
  			const NamespaceVectorType&	namespaces = nsStack[i];
  
  			thePrefix = getPrefixForNamespace(namespaces, uri, reverse);
  
  			if (thePrefix != 0)
  				break;
  		}
  	}
  	else
  	{
  		for(int i = 0; i < depth; i++)
  		{
  			const NamespaceVectorType&	namespaces = nsStack[i];
  
  			thePrefix = getPrefixForNamespace(namespaces, uri, reverse);
  
  			if (thePrefix != 0)
  				break;
  		}
  	}
  
  	return thePrefix;
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XalanQName.hpp
  
  Index: XalanQName.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XALANQNAME_HEADER_GUARD_1357924680)
  #define XALANQNAME_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  #include <deque>
  
  
  
  #include <XalanDOM/XalanDOMString.hpp>
  
  
  
  #include <PlatformSupport/DOMStringHelper.hpp>
  
  
  
  #include <XPath/NameSpace.hpp>
  
  
  
  class XalanElement;
  class PrefixResolver;
  class XPathEnvSupport;
  
  
  
  /**
   * Class to represent a qualified name: "The name of an internal XSLT object, 
   * specifically a named template (see [7 Named Templates]), a mode (see [6.7 Modes]), 
   * an attribute set (see [8.1.4 Named Attribute Sets]), a key (see [14.2 Keys]), 
   * a locale (see [14.3 Number Formatting]), a variable or a parameter (see 
   * [12 Variables and Parameters]) is specified as a QName. If it has a prefix, 
   * then the prefix is expanded into a URI reference using the namespace declarations 
   * in effect on the attribute in which the name occurs. The expanded name 
   * consisting of the local part of the name and the possibly null URI reference 
   * is used as the name of the object. The default namespace is not used for 
   * unprefixed names."
   */
  class XALAN_XPATH_EXPORT XalanQName
  {
  public:
  
  #if defined(XALAN_NO_NAMESPACES)
  	typedef	deque<NameSpace>					NamespaceVectorType;
  	typedef	deque<NamespaceVectorType>			NamespacesStackType;
  #else
  	typedef	std::deque<NameSpace>				NamespaceVectorType;
  	typedef	std::deque<NamespaceVectorType>		NamespacesStackType;
  #endif
  
  	/**
  	 * Construct an empty XalanQName.
  	 *
  	 */
  	explicit
  	XalanQName()
  	{
  	}
  
  	virtual
  	~XalanQName()
  	{
  	}
  
  	/**
  	 * Retrieve the local part of qualified name.
  	 * 
  	 * @return local part string
  	 */
  	virtual const XalanDOMString&
  	getLocalPart() const = 0;
  
  	/**
  	 * Retrieve the namespace of qualified name.
  	 * 
  	 * @return namespace string
  	 */
  	virtual const XalanDOMString&
  	getNamespace() const = 0;
  
  	/**
  	 * Whether the qualified name is empty.
  	 * 
  	 * @return true if namespace and local part are both empty
  	 */
  	bool
  	isEmpty() const
  	{
  		return ::isEmpty(getNamespace()) && ::isEmpty(getLocalPart());
  	}
  
  	/**
  	 * Override equals and agree that we're equal if the passed object is a
  	 * string and it matches the name of the arg.
  	 * 
  	 * @param theRHS namespace to compare
  	 * @return true if namespace and local part are both empty
  	 */
  	bool
  	equals(const XalanQName&		theRHS) const
  	{
  		// Note that we do not use our member variables here.  See
  		// class QNameReference for details...
  		return ::equals(getLocalPart(), theRHS.getLocalPart()) &&
  			   ::equals(getNamespace(), theRHS.getNamespace());
  	}
  
  	/**
  	 * Get the namespace from a prefix by searching a vector of namespaces.
  	 *
  	 * @param namespaces vector of namespaces to search
  	 * @param prefix     namespace prefix to find
  	 * @param reverse    true to search vector from last to first, default true
  	 * @return pointer to the string value if found, otherwise null.
  	 */
  	static const XalanDOMString*
  	getNamespaceForPrefix(
  			const NamespaceVectorType&	namespaces,
  			const XalanDOMString&		prefix,
  			bool						reverse = true);
  
  	/**
  	 * Get the namespace from a prefix by searching a stack of namespace
  	 * vectors.
  	 *
  	 * @param nsStack stack of namespace vectors to search
  	 * @param prefix  namespace prefix to find
  	 * @param reverse true to search vector from last to first, default true
  	 * @return pointer to the string value if found, otherwise null.
  	 */
  	static const XalanDOMString*
  	getNamespaceForPrefix(
  			const NamespacesStackType&	nsStack,
  			const XalanDOMString&		prefix,
  			bool						reverse = true);
  
  	/**
  	 * Get the prefix for a namespace by searching a vector of namespaces.
  	 *
  	 * @param namespaces vector of namespaces to search
  	 * @param uri        URI string for namespace to find
  	 * @param reverse    true to search vector from last to first, default true
  	 * @return pointer to the string value if found, otherwise null.
  	 */
  	static const XalanDOMString*
  	getPrefixForNamespace(
  			const NamespaceVectorType&	namespaces,
  			const XalanDOMString&		uri,
  			bool						reverse = true);
  
  	/**
  	 * Get the prefix for a namespace by searching a stack of namespace
  	 * vectors.
  	 *
  	 * @param nsStack stack of namespace vectors to search
  	 * @param uri     URI string for namespace to find
  	 * @param reverse true to search vector from last to first, default true
  	 * @return pointer to the string value if found, otherwise null.
  	 */
  	static const XalanDOMString*
  	getPrefixForNamespace(
  			const NamespacesStackType&	nsStack,
  			const XalanDOMString&		uri,
  			bool						reverse = true);
  
  protected:
  
  	static const XalanDOMString		s_emptyString;
  };
  
  
  
  inline bool
  operator==(
  			const XalanQName&	theLHS,
  			const XalanQName&	theRHS)
  {
  	return theLHS.equals(theRHS);
  }
  
  
  
  inline bool
  operator!=(
  			const XalanQName&	theLHS,
  			const XalanQName&	theRHS)
  {
  	return !(theLHS == theRHS);
  }
  
  
  
  inline bool
  operator<(
  			const XalanQName&	theLHS,
  			const XalanQName&	theRHS)
  {
  	if (theLHS.getNamespace() < theRHS.getNamespace())
  	{
  		return true;
  	}
  	else if (equals(theLHS.getNamespace(), theRHS.getNamespace()))
  	{
  		return theLHS.getLocalPart() < theRHS.getLocalPart();
  	}
  	else
  	{
  		return false;
  	}
  }
  
  
  
  #endif	// XALANQNAME_HEADER_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XalanQNameByReference.cpp
  
  Index: XalanQNameByReference.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file...
  #include "XalanQNameByReference.hpp"
  
  
  
  XalanQNameByReference::XalanQNameByReference() :
  	XalanQName(),
  	m_namespace(&s_emptyString),
  	m_localpart(&s_emptyString)
  {
  }
  
  
  
  XalanQNameByReference::XalanQNameByReference(
  			const XalanDOMString&	theNamespace,
  			const XalanDOMString&	theLocalPart) :
  	XalanQName(),
  	m_namespace(&theNamespace),
  	m_localpart(&theLocalPart)
  {
  }
  
  
  
  XalanQNameByReference::XalanQNameByReference(const XalanQName&	theQName) :
  	XalanQName(),
  	m_namespace(&theQName.getNamespace()),
  	m_localpart(&theQName.getLocalPart())
  {
  }
  
  
  
  XalanQNameByReference::~XalanQNameByReference()
  {
  }
  
  
  
  const XalanDOMString&
  XalanQNameByReference::getLocalPart() const
  {
  	assert(m_localpart != 0);
  
  	return *m_localpart;
  }
  
  
  
  const XalanDOMString&
  XalanQNameByReference::getNamespace() const
  {
  	assert(m_namespace != 0);
  
  	return *m_namespace;
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XalanQNameByReference.hpp
  
  Index: XalanQNameByReference.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XALANQNAMEBYREFERENCE_HEADER_GUARD_1357924680)
  #define XALANQNAMEBYREFERENCE_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  // Base class header file...
  #include <XPath/XalanQName.hpp>
  
  
  
  class XALAN_XPATH_EXPORT XalanQNameByReference : public XalanQName
  {
  public:
  
  	/**
  	 * Construct an empty XalanQNameByReference.
  	 */
  	explicit
  	XalanQNameByReference();
  
  	/**
  	 * Construct a XalanQNameByReference, with the supplied namespace and local part.
  	 * The instance keeps only a _reference_ to the string, to avoid making a
  	 * copy.
  	 *
  	 * @param theNamespace namespace string
  	 * @param theLocalPart local part string
  	 */
  	XalanQNameByReference(
  			const XalanDOMString&	theNamespace,
  			const XalanDOMString&	theLocalPart);
  
  	/**
  	 * Construct a XalanQNameByReference, from the supplied XalanQName.  The instance
  	 * keeps only a _reference_ to the string, to avoid making a copy.
  	 *
  	 * @param theQName The source QName
  	 */
  	XalanQNameByReference(const XalanQName&		theQName);
  
  	virtual
  	~XalanQNameByReference();
  
  	/**
  	 * Retrieve the local part of qualified name.
  	 * 
  	 * @return local part string
  	 */
  	virtual const XalanDOMString&
  	getLocalPart() const;
  
  	/**
  	 * Retrieve the namespace of qualified name.
  	 * 
  	 * @return namespace string
  	 */
  	virtual const XalanDOMString&
  	getNamespace() const;
  
  private:
  
  	// OK, we said reference, but using pointers
  	// allows for copy and assignment semantics.
  	const XalanDOMString*	m_namespace;
  
  	const XalanDOMString*	m_localpart;
  };
  
  
  
  #endif	// XALANQNAMEBYREFERENCE_HEADER_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XalanQNameByValue.cpp
  
  Index: XalanQNameByValue.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file...
  #include "XalanQNameByValue.hpp"
  
  
  
  #include <PlatformSupport/PrefixResolver.hpp>
  #include <PlatformSupport/XSLException.hpp>
  
  
  
  #include <DOMSupport/DOMServices.hpp>
  #include <DOMSupport/DOMSupport.hpp>
  
  
  
  #include "ElementPrefixResolverProxy.hpp"
  
  
  
  XalanQNameByValue::XalanQNameByValue() :
  	XalanQName(),
  	m_namespace(),
  	m_localpart()
  {
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(const XalanQNameByValue&	theSource) :
  	XalanQName(),
  	m_namespace(theSource.m_namespace),
  	m_localpart(theSource.m_localpart)
  {
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(const XalanQName&	theSource) :
  	XalanQName(),
  	m_namespace(theSource.getNamespace()),
  	m_localpart(theSource.getLocalPart())
  {
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(
  			const XalanDOMString&	theNamespace,
  			const XalanDOMString&	theLocalPart) :
  	XalanQName(),
  	m_namespace(theNamespace),
  	m_localpart(theLocalPart)
  {
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(
  			const XalanDOMString&		qname,
  			const NamespacesStackType&	namespaces) :
  	m_namespace(),
  	m_localpart()
  {
  	initialize(c_wstr(qname), namespaces);
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(
  			const XalanDOMChar*			qname,
  			const NamespacesStackType&	namespaces) :
  	m_namespace(),
  	m_localpart()
  {
  	assert(qname != 0);
  
  	initialize(qname, namespaces);
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(
  			const XalanDOMString&	qname,
  			const XalanElement*		namespaceContext,
  			const XPathEnvSupport&	envSupport,
  			const DOMSupport& 		domSupport) :
  	m_namespace(),
  	m_localpart()
  {
  	ElementPrefixResolverProxy	theProxy(namespaceContext, envSupport, domSupport);
  
  	resolvePrefix(qname, theProxy);
  }
  
  
  
  XalanQNameByValue::XalanQNameByValue(
  			const XalanDOMString&	qname,
  			const PrefixResolver&	theResolver) :
  	m_namespace(),
  	m_localpart()
  {
  	resolvePrefix(qname, theResolver);
  }
  
  
  
  XalanQNameByValue::~XalanQNameByValue()
  {
  }
  
  
  
  const XalanDOMString&
  XalanQNameByValue::getLocalPart() const
  {
  	return m_localpart;
  }
  
  
  
  const XalanDOMString&
  XalanQNameByValue::getNamespace() const
  {
  	return m_namespace;
  }
  
  
  
  void
  XalanQNameByValue::initialize(
  			const XalanDOMChar*			qname,
  			const NamespacesStackType&	namespaces)
  {
  	const unsigned int	indexOfNSSep = indexOf(qname, XalanUnicode::charColon);
  
  	if(indexOfNSSep < length(qname))
  	{
  		const XalanDOMString		prefix = substring(qname, 0, indexOfNSSep);
  
  		if(::equals(prefix, DOMServices::s_XMLNamespace))
  			return;
  
  		const XalanDOMString* const		theNamespace = 
  				getNamespaceForPrefix(namespaces, prefix);
  
  		if(theNamespace == 0 || 0 == length(*theNamespace))
  		{
  			throw XSLException(TranscodeFromLocalCodePage("Prefix must resolve to a namespace: ") + prefix);
  		}
  		else
  		{
  			m_namespace = *theNamespace;
  		}
  
  		m_localpart =  substring(qname, indexOfNSSep + 1);
  	}
  	else
  	{
  		m_localpart = qname;
  	}
  }
  
  
  
  void
  XalanQNameByValue::resolvePrefix(
  			const XalanDOMString&	qname,
  			const PrefixResolver&	theResolver)
  {
  	const unsigned int	indexOfNSSep = indexOf(qname, XalanUnicode::charColon);
  	const unsigned int	theLength = length(qname);
  
  	if(indexOfNSSep < theLength)
  	{
  		const XalanDOMString	prefix = substring(qname, 0, indexOfNSSep);
  
  		if(::equals(prefix, DOMServices::s_XMLString))
  		{
  			m_namespace = DOMServices::s_XMLNamespaceURI;
  		}
  		// The default namespace is not resolved.
  		else if(::equals(prefix, DOMServices::s_XMLNamespace))
  		{
  			return;
  		}
  		else
  		{
  			const XalanDOMString* const		theNamespace =
  				theResolver.getNamespaceForPrefix(prefix);
  
  			if (theNamespace != 0)
  			{
  				m_namespace = *theNamespace;
  			}
  		}  
  
  		if(0 == length(m_namespace))
  		{
  			throw XSLException(TranscodeFromLocalCodePage("Prefix must resolve to a namespace: ") + prefix);
  		}
  	}
  	else
  	{
  		// $$$ ToDo: error or warning...
  	}
  
  	m_localpart = indexOfNSSep == theLength ? qname : substring(qname, indexOfNSSep + 1);
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XalanQNameByValue.hpp
  
  Index: XalanQNameByValue.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XALANQNAMEBYVALUE_HEADER_GUARD_1357924680)
  #define XALANQNAMEBYVALUE_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  // Base class header file...
  #include <XPath/XalanQName.hpp>
  
  
  
  class DOMSupport;
  
  
  
  class XALAN_XPATH_EXPORT XalanQNameByValue : public XalanQName
  {
  public:
  
  	/**
  	 * Construct an empty XalanQNameByValue.
  	 */
  	explicit
  	XalanQNameByValue();
  
  	/**
  	 * Copy constructor.
  	 *
  	 * @param theSource The source of the copy.
  	 */
  	XalanQNameByValue(const XalanQNameByValue&	theSource);
  
  	/**
  	 * Construct an instance from another XalanQName.
  	 *
  	 * @param theSource The source of the copy.
  	 */
  	explicit
  	XalanQNameByValue(const XalanQName&	theSource);
  
  	/**
  	 * Construct a XalanQNameByValue, with the supplied namespace and local part.
  	 *
  	 * @param theNamespace namespace string
  	 * @param theLocalPart local part string
  	 */
  	XalanQNameByValue(
  			const XalanDOMString&	theNamespace,
  			const XalanDOMString&	theLocalPart);
  
  	/**
  	 * Construct a XalanQNameByValue from a string, resolving the prefix using the given
  	 * namespace vector stack. The default namespace is not resolved.
  	 *
  	 * @param qname      XalanQName string
  	 * @param namespaces namespace vector stack to use
  	 */
  	XalanQNameByValue(
  			const XalanDOMString&		qname,
  			const NamespacesStackType&	namespaces);
  
  	/**
  	 * Construct a XalanQNameByValue from a string, resolving the prefix using the given
  	 * namespace vector stack. The default namespace is not resolved.
  	 *
  	 * @param qname      XalanQName string
  	 * @param namespaces namespace vector stack to use
  	 */
  	XalanQNameByValue(
  			const XalanDOMChar*			qname,
  			const NamespacesStackType&	namespaces);
  
  	/**
  	 * Construct a XalanQNameByValue from a string, resolving the prefix using the given
  	 * namespace context. The default namespace is not resolved.
  	 *
  	 * @param qname XalanQName string
  	 * @param namespaceContext context object for namespace resolution
  	 * @param envSupport XPathEnvSupport class instance
  	 * @param domSupport DOMSupport class instance
  	 */
  	XalanQNameByValue(
  			const XalanDOMString&	qname,
  			const XalanElement*		namespaceContext,
  			const XPathEnvSupport&	envSupport,
  			const DOMSupport& 		domSupport);
  
  	/**
  	 * Construct a XalanQNameByValue from a string, resolving the prefix using the given
  	 * prefix resolver. The default namespace is not resolved.
  	 *
  	 * @param qname XalanQName string
  	 * @param theResolver prefix resolver to use
  	 */
  	XalanQNameByValue(
  			const XalanDOMString&	qname,
  			const PrefixResolver&	theResolver);
  
  	virtual
  	~XalanQNameByValue();
  
  	/**
  	 * Retrieve the local part of qualified name.
  	 * 
  	 * @return local part string
  	 */
  	virtual const XalanDOMString&
  	getLocalPart() const;
  
  	/**
  	 * Retrieve the namespace of qualified name.
  	 * 
  	 * @return namespace string
  	 */
  	virtual const XalanDOMString&
  	getNamespace() const;
  
  private:
  
  	void
  	initialize(
  			const XalanDOMChar*			qname,
  			const NamespacesStackType&	namespaces);
  
  	void
  	resolvePrefix(
  			const XalanDOMString&	qname,
  			const PrefixResolver&	theResolver);
  
  	XalanDOMString	m_namespace;
  
  	XalanDOMString	m_localpart;
  };
  
  
  
  #endif	// XALANQNAMEBYVALUE_HEADER_GUARD_1357924680
  
  
  

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