void XslCopyVisitor::visit(const CompositeMarkupNode& templte)
{
#ifdef XSL_TRANSFORM_TRACE
	clog << "XslCopy on CompositeMarkupNode" << endl;
#endif
	MarkupNode::Attributes copiedAttributes(templte.MarkupNode::begin(),
			templte.MarkupNode::end());
	CompositeMarkupNode::Children children;
	CompositeMarkupNode ** myParent = _parentProxy;

	_parentProxy = new CompositeMarkupNode*;

	for (CompositeMarkupNode::ChildrenIterator it = templte.begin(); it
			!= templte.end(); ++it)
	{
		(*it)->accept(*this);
		copy(_result.begin(), _result.end(), back_inserter(children));
	}

	_result.assign(
			1,
			new CompositeMarkupNode(myParent, templte.ns(), templte.name(),
					copiedAttributes, *_parentProxy, children));

	_parentProxy = myParent;
}
void SimpleCopyVisitor::visit(const CompositeMarkupNode& node)
{
#ifdef XSL_TRANSFORM_TRACE
	clog << "SimpleCopy on CompositeMarkupNode" << endl;
#endif
	MarkupNode::Attributes list(node.MarkupNode::begin(),
			node.MarkupNode::end());
	CompositeMarkupNode::Children * newChildren = 0;
	CompositeMarkupNode ** myParent = _parentProxy;
	_parentProxy = new CompositeMarkupNode*;

	// Applique les templates sur les noeuds fils
	newChildren = _transformer.transform(_parentProxy, node);
	assert(newChildren != 0); // Ne devrait jamais arriver puisque "node" est composite

	_copiedNode = new CompositeMarkupNode(myParent, node.ns(), node.name(),
			list, *_parentProxy, *newChildren);
	delete newChildren;
	_parentProxy = myParent;
}
void OutputVisitor::visit(const CompositeMarkupNode& node)
{
	doIndent();

	writeMarkupOpening(node);
	_out << CLOSE_MARKUP_STR << endl;

	_indent += _indentUnit;
	int count = 0;
	for (CompositeMarkupNode::ChildrenIterator it = node.begin(); it
			!= node.end(); ++it)
	{
		(*it)->accept(*this);
	}
	_indent -= _indentUnit;

	doIndent();
	_out << OPEN_MARKUP_STR << CLOSING_MARKUP_STR;
	if (!node.ns().empty())
	{
		_out << node.ns() << NS_SEPARATOR_STR;
	}
	_out << node.name() << CLOSE_MARKUP_STR << endl;
}
void TransformerVisitor::visit(const CompositeMarkupNode& node)
{
	// On récupère l'index du noeud dans la template map
	resultatMap = templatesMap->find(node.name());
}
void ElementReference::visit(const CompositeMarkupNode& node)
{
	_matchResult = (node.ns() == _namespace && node.name() == _name);
}