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/01/30 23:05:14 UTC

cvs commit: xml-xalan/c/src/XSLT ElemElement.cpp ElemElement.hpp

dbertoni    01/01/30 14:05:14

  Modified:    c/src/XSLT ElemElement.cpp ElemElement.hpp
  Log:
  Disabled namespace aliases in NamespacesHandler.  Improved warnings.  Added new member function to skip execution of xsl:attribute children.
  
  Revision  Changes    Path
  1.17      +45 -11    xml-xalan/c/src/XSLT/ElemElement.cpp
  
  Index: ElemElement.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemElement.cpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- ElemElement.cpp	2001/01/30 00:38:00	1.16
  +++ ElemElement.cpp	2001/01/30 22:05:11	1.17
  @@ -93,6 +93,10 @@
   						stylesheetTree.getNamespaces(),
   						stylesheetTree.getXSLTNamespaceURI())	
   {
  +	// Namespace aliases are not used for xsl:element, so
  +	// turn them off...
  +	m_namespacesHandler.setProcessNamespaceAliaises(false);
  +
   	const unsigned int	nAttrs = atts.getLength();
   
   	for(unsigned int i = 0; i < nAttrs; i++)
  @@ -194,11 +198,9 @@
   
   	if (isIllegalElement == true)
   	{
  -		executionContext.warn("Illegal element name!", sourceNode, this);
  +		executionContext.warn("Illegal element name: \"" + elemName + "\"", this, sourceNode);
   
   		clear(elemName);
  -
  -		len = 0;
   	}
   	else if (haveNamespace == true)
   	{
  @@ -212,15 +214,17 @@
   
   		if (length(theNamespace) == 0 && length(m_namespacesHandler.getNamespace(prefix)) == 0)
   		{
  -			executionContext.warn("Could not resolve prefix: " + prefix, this);
  +			executionContext.warn("Could not resolve prefix: " + prefix, this, sourceNode);
  +
  +			isIllegalElement = true;
   		}
   	}
   
  -	if (len != 0)
  +	if (isIllegalElement == false)
   	{
   		if(0 == m_namespaceAVT)
   		{
  -			executionContext.startElement(toCharArray(elemName));   
  +			executionContext.startElement(c_wstr(elemName));   
   
   			m_namespacesHandler.outputResultNamespaces(executionContext);
   		}
  @@ -234,13 +238,13 @@
   
   			if(isEmpty(elemNameSpace) == true)
   			{
  -				executionContext.startElement(toCharArray(elemName));   
  +				executionContext.startElement(c_wstr(elemName));   
   
   				m_namespacesHandler.outputResultNamespaces(executionContext);
   			}
   			else
   			{
  -				executionContext.startElement(toCharArray(elemName));
  +				executionContext.startElement(c_wstr(elemName));
   
   				m_namespacesHandler.outputResultNamespaces(executionContext);
   
  @@ -254,10 +258,40 @@
   
   	ElemUse::execute(executionContext, sourceTree, sourceNode, mode);
   
  -	executeChildren(executionContext, sourceTree, sourceNode, mode);
  +	doExecuteChildren(executionContext, sourceTree, sourceNode, mode, isIllegalElement);
   
  -	if (len != 0)
  +	if (isIllegalElement == false)
  +	{
  +		executionContext.endElement(c_wstr(elemName));
  +	}
  +}
  +
  +
  +
  +void
  +ElemElement::doExecuteChildren(
  +			StylesheetExecutionContext&		executionContext,
  +			XalanNode*						sourceTree,
  +			XalanNode*						sourceNode,
  +			const QName&					mode,
  +			bool							skipAttributeChildren) const
  +{
  +	if (skipAttributeChildren == false)
  +	{
  +		// If we should execute all children, then just call
  +		// executeChildren()...
  +		executeChildren(executionContext, sourceTree, sourceNode, mode);
  +	}
  +	else
   	{
  -		executionContext.endElement(toCharArray(elemName));
  +		StylesheetExecutionContext::PushAndPopElementFrame	thePushAndPop(executionContext, this);
  +
  +		for (ElemTemplateElement* node = getFirstChildElem(); node != 0; node = node->getNextSiblingElem()) 
  +		{
  +			if (node->getXSLToken() != Constants::ELEMNAME_ATTRIBUTE)
  +			{
  +				node->execute(executionContext, sourceTree, sourceNode, mode);
  +			}
  +		}
   	}
   }
  
  
  
  1.7       +20 -1     xml-xalan/c/src/XSLT/ElemElement.hpp
  
  Index: ElemElement.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemElement.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ElemElement.hpp	2000/11/02 01:46:23	1.6
  +++ ElemElement.hpp	2001/01/30 22:05:12	1.7
  @@ -58,7 +58,7 @@
   #define XALAN_ELEMELEMENT_HEADER_GUARD 
   
   /**
  - * $Id: ElemElement.hpp,v 1.6 2000/11/02 01:46:23 dbertoni Exp $
  + * $Id: ElemElement.hpp,v 1.7 2001/01/30 22:05:12 dbertoni Exp $
    * 
    * 
    * $State: Exp $
  @@ -123,6 +123,25 @@
   			XalanNode*						sourceTree,
   			XalanNode*						sourceNode,
   			const QName&					mode) const;
  +
  +protected:
  +
  +	/** 
  +	 * Process the children of a template.
  +	 * 
  +	 * @param executionContext The current execution context
  +	 * @param sourceTree input source tree
  +	 * @param sourceNode current context node
  +	 * @param mode current mode
  +	 * @param skipAttributeChildren If true, attribute children will not be executed.
  +	 */
  +	virtual void
  +	doExecuteChildren(
  +			StylesheetExecutionContext&		executionContext,
  +			XalanNode*						sourceTree,
  +			XalanNode*						sourceNode,
  +			const QName&					mode,
  +			bool							skipAttributeChildren) const;
   
   private: