<xsl:stylesheet xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0">
    <xsl:import href="common.xsl"/>
    <xsl:import href="scenarioODF.xsl"/>
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>

	<!--
		TEMPLATE PERMETTANT D'AFFICHER UN EXEMPLE DE CONTENU XML PAR TABLEAU
		D'ELEMENT AFFICHE DANS L'ODT
	-->
    <xsl:template name="displayXmlExample">
        <xsl:param name="elementToDisplay"/>
        <xsl:param name="firstLevelChild"/>
        <xsl:param name="lastLevelChild"/>
        <xsl:param name="first"/>
        <xsl:param name="isSimple"/>
        <xsl:param name="isOneLevel"/>
        <xsl:param name="isTwoLevel"/>
        <xsl:call-template name="displayLog">
            <xsl:with-param name="logContent">Génération de l'exemple de contenu XML de l'élément : <xsl:value-of select="$elementToDisplay/@name"/>
            </xsl:with-param>
        </xsl:call-template>

		<!--
			AFFICHER LE CONTENU XML DES ELEMENTS DECRITS DANS CHAQUE TABLEAU
		-->

		<!-- Affichage du chapitre de chaque contenu XML  -->
        <xsl:call-template name="displayXmlExampleChapter">
            <xsl:with-param name="element" select="$elementToDisplay"/>
        </xsl:call-template>
		

		<!-- Calcul de niveau d'indentation de l'élément père -->
        <xsl:variable name="rootLevel" select="count($elementToDisplay/ancestor::*[local-name()='element'])"/>

		<!-- Traitement de l'element passe au template par scenario.xsl -->
        <xsl:call-template name="computeElementForExample">
            <xsl:with-param name="element" select="$elementToDisplay"/>
            <xsl:with-param name="firstLevelChild" select="$firstLevelChild"/>
            <xsl:with-param name="lastLevelChild" select="$lastLevelChild"/>
            <xsl:with-param name="rootLevel" select="$rootLevel"/>
            <xsl:with-param name="first" select="$first"/>
            <xsl:with-param name="isSimple" select="$isSimple"/>
            <xsl:with-param name="isOneLevel" select="$isOneLevel"/>
            <xsl:with-param name="isTwoLevel" select="$isTwoLevel"/>
        </xsl:call-template>
    </xsl:template>


	<!-- 
		TESTE SI UN ELEMENT A DEJA ETE TRAITE
	-->
    <xsl:template name="hasBeenAlreadyComputedForExample">
        <xsl:param name="name"/>
        <xsl:param name="type"/>
        <xsl:param name="level"/>
        <xsl:choose>
            <xsl:when test="//*[local-name()='element'][@name=$name and (not(@type) or @type=$type) and number($level) &gt; count(ancestor::*[local-name()='element'])]">
                <xsl:copy-of select="true()"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy-of select="false()"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>



	<!-- 
		TESTE SI UN ELEMENT A DES FILS DE SECOND NIVEAU
	-->
    <xsl:template name="hasScndLevelElementsForExample">
        <xsl:param name="element"/>
        <xsl:param name="level"/>
        <xsl:choose>
            <xsl:when test="$element/descendant::*[local-name()='element'][count(ancestor::*[local-name()='element']) = $level]">
                <xsl:copy-of select="true()"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy-of select="false()"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

	<!-- 
		TESTE SI IL EXISTE DES ELEMENTS DE NIVEAU DONNE
	-->
    <xsl:template name="newLevelExistForExample">
        <xsl:param name="level"/>
        <xsl:choose>
            <xsl:when test="//*[local-name()='element'][count(ancestor::*[local-name()='element']) = $level]">
                <xsl:copy-of select="true()"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy-of select="false()"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>



	<!--
		TRAITEMENT DES ELEMENTS METIER (NIVEAU >= 1) SAUF ELEMENT SCENARIO
	-->
    <xsl:template name="computeChildElementForExample">
        <xsl:param name="level"/>
        <xsl:param name="rootLevel"/>

		<!-- Parcours des elements du niveau donne -->
        <xsl:for-each select="//*[(local-name()='element') and (@name!='Scenario')][count(ancestor::*[local-name()='element']) = $level]">
            <xsl:variable name="element" select="."/>

			<!-- Teste si l'element peut faire l'objet d'un tableau -->
            <xsl:variable name="isValid">
                <xsl:call-template name="hasScndLevelElementsForExample">
                    <xsl:with-param name="element" select="$element"/>
                    <xsl:with-param name="level" select="$level + 2"/>
					<!--
						+2
					-->
                </xsl:call-template>
            </xsl:variable>

			<!-- Si l'element peut faire l'objet d'un tableau -->
            <xsl:if test="string($isValid)=string(true())">

				<!-- Teste si l'element n'a pas deja fait l'objet d'un tableau -->
                <xsl:variable name="isAlreadyComputed">
                    <xsl:call-template name="hasBeenAlreadyComputedForExample">
                        <xsl:with-param name="name" select="$element/@name"/>
                        <xsl:with-param name="type" select="$element/@type"/>
                        <xsl:with-param name="level" select="$level"/>
                    </xsl:call-template>
                </xsl:variable>

				<!-- Si l'element n'a pas deja ete traite -->
                <xsl:if test="string($isAlreadyComputed)=string(false())">
					<!-- Traitement de l'élément -->
                    <xsl:call-template name="computeElementForExample">
                        <xsl:with-param name="element" select="$element"/>
                        <xsl:with-param name="first" select="true()"/>
                        <xsl:with-param name="firstLevelChild" select="$level + 1"/>
                        <xsl:with-param name="lastLevelChild" select="$level + 3"/>
                        <xsl:with-param name="rootLevel" select="$rootLevel"/>
                    </xsl:call-template>
                </xsl:if>
            </xsl:if>
        </xsl:for-each>

		<!--
			Test d'existence des elements d'un niveau superieur et appel
			recursif le cas echeant
		-->
        <xsl:variable name="newLevelExistForExample">
            <xsl:call-template name="newLevelExistForExample">
                <xsl:with-param name="level" select="$level + 1"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:if test="string($newLevelExistForExample)=string(true())">
            <xsl:call-template name="computeChildElementForExample">
                <xsl:with-param name="level" select="$level + 1"/>
                <xsl:with-param name="rootLevel" select="$rootLevel"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>



	<!--
		TRAITEMENT DES FILS DE LA BALISE RACINE > SEUL L'ELEMENT SCENARIO est
		traite a ce niveau
	-->
    <xsl:template name="computeSubRootElementForExample">
        <xsl:param name="element"/>
        <xsl:param name="rootLevel"/>
        <xsl:call-template name="computeElementForExample">
            <xsl:with-param name="element" select="$element"/>
            <xsl:with-param name="first" select="true()"/>
            <xsl:with-param name="firstLevelChild">
				2
			</xsl:with-param>
            <xsl:with-param name="lastLevelChild">
				4
			</xsl:with-param>
            <xsl:with-param name="rootLevel" select="$rootLevel"/>
        </xsl:call-template>
    </xsl:template>



	<!-- 
		TRAITEMENT D'UN ELEMENT
	-->
    <xsl:template name="computeElementForExample">
        <xsl:param name="element"/>
        <xsl:param name="first"/>
        <xsl:param name="isRoot"/>
        <xsl:param name="firstLevelChild"/>
        <xsl:param name="lastLevelChild"/>
        <xsl:param name="isSimple"/>
        <xsl:param name="isOneLevel"/>
        <xsl:param name="isTwoLevel"/>
        <xsl:param name="mode"/>
        <xsl:param name="rootLevel"/>

		<!-- Determination du type de l'element -->
        <xsl:variable name="type">
            <xsl:variable name="typeNs" select="substring-before($element/@type, ':')"/>
            <xsl:choose>
                <xsl:when test="$typeNs">
                    <xsl:value-of select="$typeNs"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:variable name="tmpTypeNs" select="substring-before($element/child::*[local-name()='complexType']/child::*[local-name()='simpleContent']/child::*[local-name() = 'restriction' or local-name() = 'extension']/@base, ':')"/>
                    <xsl:choose>
                        <xsl:when test="$tmpTypeNs">
                            <xsl:value-of select="$tmpTypeNs"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="$defaultType"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

		<!-- Recuperation de la definition de l'element dans le dictionnaire des donnees -->
        <xsl:variable name="ns" select="//*[local-name()='schema']/namespace::*[local-name()=$type]"/>
        <xsl:variable name="relativeFileName" select="string(//*[local-name()='import'][@namespace=$ns]/@schemaLocation)"/>
        <xsl:variable name="fileName">
            <xsl:call-template name="getFileName">
                <xsl:with-param name="path" select="//*[local-name()='import'][@namespace=$ns]/@schemaLocation"/>
            </xsl:call-template>
        </xsl:variable>
<!-- DEBUG
<xsl:message>parseElement type <xsl:value-of select="$type" /> ns <xsl:value-of select="$ns" /> relativeFileName <xsl:value-of select="$relativeFileName" /></xsl:message>
 -->
        <xsl:variable name="elementDef" select="document(concat($schemaFilePath, $relativeFileName))//*[local-name()='complexType'][@name=$element/@name]"/>
<!-- <xsl:choose>
<xsl:when test="$fileName!=''">
			 <xsl:value-of select="document(concat($ns, '/', $fileName))//*[local-name()='complexType'][@name=$element/@name]" />
</xsl:when>
<xsl:otherwise>

<xsl:message>elementDef undefined</xsl:message>
<xsl:value-of select="''"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
 -->

		<!-- Traitement des attributs non obligatoires -->
        <xsl:variable name="othersAtt">
            <xsl:choose>
                <xsl:when test="string($isRoot) = string(true())">
					<!--
						<xsl:variable name="xsNamespace"
						select="/*[local-name()='schema']/namespace::*[contains(.,
						'XMLSchema')]"/> <xsl:variable name="targetNamespace"
						select="/*[local-name()='schema']/@targetNamespace"/>
						<xsl:variable name="xsNamespaceName"
						select="local-name($xsNamespace)"/> <xsl:value-of select="concat('
						xmlns=', $targetNamespace, ' xmlns:', $xsNamespaceName, '=',
						$xsNamespace)"/>
					-->
                </xsl:when>
                <xsl:otherwise>
                    <xsl:choose>
                        <xsl:when test="$type != $defaultType">
                            <xsl:for-each select="$elementDef/descendant::*[local-name()='attribute'][@fixed and @use!='required']">
                                <xsl:value-of select="concat(' ', @name, '=&#34;', @fixed, '&#34;')"/>
                            </xsl:for-each>
                            <xsl:for-each select="$elementDef/descendant::*[local-name()='attribute'][@use!='required' and descendant::*[local-name()='enumeration']]">
                                <xsl:value-of select="concat(' ', @name, '=&#34;[')"/>
                                <xsl:for-each select="descendant::*[local-name()='enumeration']">
                                    <xsl:choose>
                                        <xsl:when test="position() != last()">
                                            <xsl:value-of select="concat(@value, ';')"/>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:value-of select="@value"/>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:for-each>
                                <xsl:value-of select="']&#34;'"/>
                            </xsl:for-each>
                        </xsl:when>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

		<!-- Traitement des attributs  obligatoires -->
        <xsl:variable name="mndAtt">
            <xsl:choose>
                <xsl:when test="$type != $defaultType">
                    <xsl:for-each select="$elementDef/descendant::*[local-name()='attribute'][@fixed and @use='required']">
                        <xsl:value-of select="concat(' ', @name, '=&#34;', @fixed, '&#34;')"/>
                    </xsl:for-each>
                    <xsl:for-each select="$elementDef/descendant::*[local-name()='attribute'][@use='required' and descendant::*[local-name()='enumeration']]">
                        <xsl:value-of select="concat(' ', @name, '=&#34;[')"/>
                        <xsl:for-each select="descendant::*[local-name()='enumeration']">
                            <xsl:choose>
                                <xsl:when test="position() != last()">
                                    <xsl:value-of select="concat(@value, ';')"/>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:value-of select="@value"/>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:for-each>
                        <xsl:value-of select="']&#34;'"/>
                    </xsl:for-each>
                </xsl:when>
            </xsl:choose>
        </xsl:variable>

		<!-- Traitement de la colonne "Format" -->
        <xsl:variable name="format">
            <xsl:choose>
                <xsl:when test="$type != $defaultType">
                    <xsl:variable name="tmpFmt" select="substring-after($elementDef/child::*[local-name()='simpleContent' or local-name()='complexContent']/child::*[local-name()='restriction' or local-name()='extension']/@base, ':' )"/>
                    <xsl:choose>
                        <xsl:when test="string($tmpFmt) = '' ">
                            <xsl:value-of select="$defaultFormat"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="$tmpFmt"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$defaultFormat"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

		<!-- Test si le code est de type 'CodeType' -->
        <xsl:variable name="code">
            <xsl:if test="$format = 'CodeType' ">
                <xsl:value-of select="$elementDef/child::*[local-name()='simpleContent' or local-name()='complexContent']/child::*[local-name()='restriction']/child::*[local-name()='attribute'][@name='listID']/@fixed"/>
            </xsl:if>
        </xsl:variable>
        <xsl:choose>
			<!-- 
				si l'element est le premier d'un tableau (ie: le parametre isTwoLevel=true() )
			-->
            <xsl:when test="string($first)=string(true())">		
				<!-- balise ouvrante avec attributs ... -->
				<!-- hasChildrenToDisplay  => savoir si enfants ou pas  -->
                <xsl:call-template name="displayXmlExampleElement">
                    <xsl:with-param name="element" select="$element"/>
                    <xsl:with-param name="rootLevel" select="$rootLevel"/>
                    <xsl:with-param name="openingElement" select="true()"/>
                    <xsl:with-param name="closingElement" select="false()"/>
                    <xsl:with-param name="hasChildrenToDisplay" select="true()"/>
                    <xsl:with-param name="mndAtt" select="$mndAtt"/>
                    <xsl:with-param name="othersAtt" select="$othersAtt"/>
                </xsl:call-template>
					
				<!--  traitement des elements fils de la balise ouverte juste au dessus -->
                <xsl:call-template name="computeSubElementsForExample">
                    <xsl:with-param name="parentElement" select="$element"/>
                    <xsl:with-param name="firstLevelChild" select="$firstLevelChild"/>
                    <xsl:with-param name="lastLevelChild" select="$lastLevelChild"/>
                    <xsl:with-param name="rootLevel" select="$rootLevel"/>
                </xsl:call-template>
				
				<!-- balise fermante -->
                <xsl:call-template name="displayXmlExampleElement">
                    <xsl:with-param name="element" select="$element"/>
                    <xsl:with-param name="rootLevel" select="$rootLevel"/>
                    <xsl:with-param name="openingElement" select="false()"/>
                    <xsl:with-param name="closingElement" select="true()"/>
                    <xsl:with-param name="hasChildrenToDisplay" select="true()"/>
                    <xsl:with-param name="mndAtt" select="$mndAtt"/>
                    <xsl:with-param name="othersAtt" select="$othersAtt"/>
                </xsl:call-template>
            </xsl:when>


			<!-- 
				Pour tous les elements d'un tableau sauf le premier
			-->
            <xsl:otherwise>
                <xsl:choose>		
					<!-- 
						Cas d'un element possendant des fils a afficher
					 -->
                    <xsl:when test="string($isOneLevel)=string(true())">
					 
						<!-- balise ouvrante avec attributs -->
                        <xsl:call-template name="displayXmlExampleElement">
                            <xsl:with-param name="element" select="$element"/>
                            <xsl:with-param name="rootLevel" select="$rootLevel"/>
                            <xsl:with-param name="openingElement" select="true()"/>
                            <xsl:with-param name="closingElement" select="false()"/>
                            <xsl:with-param name="hasChildrenToDisplay" select="true()"/>
                            <xsl:with-param name="mndAtt" select="$mndAtt"/>
                            <xsl:with-param name="othersAtt" select="$othersAtt"/>
                        </xsl:call-template>
					
					
					<!--  traitement des elements fils de la balise ouverte juste au dessus -->
                        <xsl:call-template name="computeSubElementsForExample">
                            <xsl:with-param name="parentElement" select="$element"/>
                            <xsl:with-param name="firstLevelChild" select="$firstLevelChild"/>
                            <xsl:with-param name="lastLevelChild" select="$lastLevelChild"/>
                            <xsl:with-param name="rootLevel" select="$rootLevel"/>
                        </xsl:call-template>
			
						<!-- balise fermante -->
                        <xsl:call-template name="displayXmlExampleElement">
                            <xsl:with-param name="element" select="$element"/>
                            <xsl:with-param name="rootLevel" select="$rootLevel"/>
                            <xsl:with-param name="openingElement" select="false()"/>
                            <xsl:with-param name="closingElement" select="true()"/>
                            <xsl:with-param name="hasChildrenToDisplay" select="true()"/>
                            <xsl:with-param name="mndAtt" select="$mndAtt"/>
                            <xsl:with-param name="othersAtt" select="$othersAtt"/>
                        </xsl:call-template>
                    </xsl:when>
					
					<!-- 
						Cas d'un element ne possendant pas de fils a afficher
					 -->
                    <xsl:otherwise>
					 
						<!-- balise ouvrante avec attributs et balise fermante sont traitees en meme temps-->
                        <xsl:call-template name="displayXmlExampleElement">
                            <xsl:with-param name="element" select="$element"/>
                            <xsl:with-param name="rootLevel" select="$rootLevel"/>
                            <xsl:with-param name="hasChildrenToDisplay" select="false()"/>
                            <xsl:with-param name="mndAtt" select="$mndAtt"/>
                            <xsl:with-param name="othersAtt" select="$othersAtt"/>
                        </xsl:call-template>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>


	<!--
		TRAITEMENT DES ELEMENTS FILS D'UN ELEMENT FAISANT L'OBJET D'UN TABLEAU
	-->
    <xsl:template name="computeSubElementsForExample">
        <xsl:param name="parentElement"/>
        <xsl:param name="firstLevelChild"/>
        <xsl:param name="lastLevelChild"/>
        <xsl:param name="rootLevel"/>
		
		<!-- Parcours des elements fils -->
        <xsl:for-each select="$parentElement/descendant::*[local-name()='element'][count(ancestor::*[local-name()='element']) = $firstLevelChild]">
            <xsl:variable name="childElement" select="."/>
            <xsl:choose>
                <xsl:when test="not($childElement/descendant::*[local-name()='element'])">
                    <xsl:call-template name="computeSimpleElementForExample">
                        <xsl:with-param name="element" select="."/>
                        <xsl:with-param name="rootLevel" select="$rootLevel"/>
                    </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:choose>
                        <xsl:when test="not($childElement/descendant::*[local-name()='element'][count(ancestor::*[local-name()='element']) = $lastLevelChild])">
                            <xsl:call-template name="computeOneLevelElementForExample">
                                <xsl:with-param name="element" select="$childElement"/>
                                <xsl:with-param name="level" select="$firstLevelChild"/>
                                <xsl:with-param name="rootLevel" select="$rootLevel"/>
                            </xsl:call-template>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:call-template name="computeTwoLevelElementForExample">
                                <xsl:with-param name="element" select="$childElement"/>
                                <xsl:with-param name="rootLevel" select="$rootLevel"/>
                            </xsl:call-template>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>



	<!-- 
		TRAITEMENT DES ELEMENTS FAISANT L'OBJET D'UN TABLEAU
	-->
    <xsl:template name="computeTwoLevelElementForExample">
        <xsl:param name="element"/>
        <xsl:param name="rootLevel"/>

		<!--twoLevelElement-->
        <xsl:call-template name="computeElementForExample">
            <xsl:with-param name="element" select="$element"/>
            <xsl:with-param name="isTwoLevel" select="true()"/>
            <xsl:with-param name="rootLevel" select="$rootLevel"/>
        </xsl:call-template>
		<!--/twoLevelElement-->
    </xsl:template>



	<!--
		TRAITEMENT DES SOUS ELEMENT DANS LES TABLEAUX DE DESCRIPTION
	-->
    <xsl:template name="computeOneLevelElementForExample">
        <xsl:param name="element"/>
        <xsl:param name="level"/>
        <xsl:param name="rootLevel"/>

		<!--oneLevelElement-->
        <xsl:call-template name="computeElementForExample">
            <xsl:with-param name="element" select="$element"/>
            <xsl:with-param name="isOneLevel" select="true()"/>
            <xsl:with-param name="firstLevelChild" select="$level + 1"/>
            <xsl:with-param name="lastLevelChild" select="$level + 3"/>
            <xsl:with-param name="rootLevel" select="$rootLevel"/>
        </xsl:call-template>
		<!--/oneLevelElement-->
    </xsl:template>



	<!-- 
		TRAITEMENT DES ELEMENTS N'AYANT PAS DE FILS "ELEMENT"
	-->
    <xsl:template name="computeSimpleElementForExample">
        <xsl:param name="element"/>
        <xsl:param name="rootLevel"/>
        <xsl:call-template name="computeElementForExample">
            <xsl:with-param name="element" select="$element"/>
            <xsl:with-param name="isSimple" select="true()"/>
            <xsl:with-param name="rootLevel" select="$rootLevel"/>
        </xsl:call-template>
    </xsl:template>




	<!-- 
		AFFICHAGE DU CHAPITRE D'UN CONTENANT XML 
	-->
    <xsl:template name="displayXmlExampleChapter">
        <xsl:param name="element"/>
        <xsl:param name="level" select="4"/>
        <text:p text:style-name="P68"/>
        <text:h text:style-name="{$chapterStyleName}{$level}" text:outline-level="{$level}">
            <text:span>.Contenu
				XML de l'élément : &lt;
				<xsl:value-of select="$element/@name"/>
				&gt;
			</text:span>
        </text:h>
    </xsl:template>

	<!--
		AFFICHAGE DU CONTENU XML D'UN ELEMENT DE CHAQUE TABLEAU AFFICHE
	-->
    <xsl:template name="displayXmlExampleElement">
        <xsl:param name="element"/>
        <xsl:param name="rootLevel"/>
        <xsl:param name="openingElement"/>
        <xsl:param name="closingElement"/>
        <xsl:param name="hasChildrenToDisplay"/>
        <xsl:param name="mndAtt"/>
        <xsl:param name="othersAtt"/>
        <xsl:variable name="indentation" select="count($element/ancestor::*[local-name()='element']) - number($rootLevel)"/>
        <xsl:choose>
			<!-- Si l'élément à des fils à afficher dans l'exemple -->
            <xsl:when test="$hasChildrenToDisplay=true()">
                <xsl:choose>
					<!-- pour afficher une balise ouvrante -->
                    <xsl:when test="$openingElement=true()">
                        <xsl:choose>
                            <xsl:when test="$indentation=0">
                                <text:p text:style-name="P47">
									&lt;
									<xsl:value-of select="$element/@name"/>
                                    <xsl:value-of select="$mndAtt"/>
                                    <xsl:value-of select="$othersAtt"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=1">
                                <text:p text:style-name="P47">
                                    <text:tab/>
									&lt;
									<xsl:value-of select="$element/@name"/>
                                    <xsl:value-of select="$mndAtt"/>
                                    <xsl:value-of select="$othersAtt"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=2">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
									&lt;
									<xsl:value-of select="$element/@name"/>
                                    <xsl:value-of select="$mndAtt"/>
                                    <xsl:value-of select="$othersAtt"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=3">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
									&lt;
									<xsl:value-of select="$element/@name"/>
                                    <xsl:value-of select="$mndAtt"/>
                                    <xsl:value-of select="$othersAtt"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=4">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
									&lt;
									<xsl:value-of select="$element/@name"/>
                                    <xsl:value-of select="$mndAtt"/>
                                    <xsl:value-of select="$othersAtt"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=5">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
									&lt;
									<xsl:value-of select="$element/@name"/>
                                    <xsl:value-of select="$mndAtt"/>
                                    <xsl:value-of select="$othersAtt"/>
									&gt;
								</text:p>
                            </xsl:when>
                        </xsl:choose>
                    </xsl:when>

					<!-- pour afficher une balise fermante -->
                    <xsl:when test="$closingElement=true()">
                        <xsl:choose>
                            <xsl:when test="$indentation=0">
                                <text:p text:style-name="P47">
									&lt;/
									<xsl:value-of select="$element/@name"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=1">
                                <text:p text:style-name="P47">
                                    <text:tab/>
									&lt;/
									<xsl:value-of select="$element/@name"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=2">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
									&lt;/
									<xsl:value-of select="$element/@name"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=3">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
									&lt;/
									<xsl:value-of select="$element/@name"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=4">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
									&lt;/
									<xsl:value-of select="$element/@name"/>
									&gt;
								</text:p>
                            </xsl:when>
                            <xsl:when test="$indentation=5">
                                <text:p text:style-name="P47">
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
                                    <text:tab/>
									&lt;/
									<xsl:value-of select="$element/@name"/>
									&gt;
								</text:p>
                            </xsl:when>
                        </xsl:choose>
                    </xsl:when>
                </xsl:choose>
            </xsl:when>

			<!--
				si l'élément n'a pas de fils ou s'ils ne sont pas à afficher dans
				l'exemple on affiche la balise ouvrante et fermante sur la même
				ligne
			-->
            <xsl:when test="$hasChildrenToDisplay=false()">
                <xsl:choose>
                    <xsl:when test="$indentation=0">
                        <text:p text:style-name="P47">
								&lt;
								<xsl:value-of select="$element/@name"/>
                            <xsl:value-of select="$mndAtt"/>
                            <xsl:value-of select="$othersAtt"/>
								&gt;
								&lt;/
								<xsl:value-of select="$element/@name"/>
								&gt;
							</text:p>
                    </xsl:when>
                    <xsl:when test="$indentation=1">
                        <text:p text:style-name="P47">
                            <text:tab/>
							&lt;
							<xsl:value-of select="$element/@name"/>
                            <xsl:value-of select="$mndAtt"/>
                            <xsl:value-of select="$othersAtt"/>
							&gt;
							&lt;/
							<xsl:value-of select="$element/@name"/>
							&gt;
						</text:p>
                    </xsl:when>
                    <xsl:when test="$indentation=2">
                        <text:p text:style-name="P47">
                            <text:tab/>
                            <text:tab/>
							&lt;
							<xsl:value-of select="$element/@name"/>
                            <xsl:value-of select="$mndAtt"/>
                            <xsl:value-of select="$othersAtt"/>
							&gt;
							&lt;/
							<xsl:value-of select="$element/@name"/>
							&gt;
						</text:p>
                    </xsl:when>
                    <xsl:when test="$indentation=3">
                        <text:p text:style-name="P47">
                            <text:tab/>
                            <text:tab/>
                            <text:tab/>
							&lt;
							<xsl:value-of select="$element/@name"/>
                            <xsl:value-of select="$mndAtt"/>
                            <xsl:value-of select="$othersAtt"/>
							&gt;
							&lt;/
							<xsl:value-of select="$element/@name"/>
							&gt;
						</text:p>
                    </xsl:when>
                    <xsl:when test="$indentation=4">
                        <text:p text:style-name="P47">
                            <text:tab/>
                            <text:tab/>
                            <text:tab/>
                            <text:tab/>
							&lt;
							<xsl:value-of select="$element/@name"/>
                            <xsl:value-of select="$mndAtt"/>
                            <xsl:value-of select="$othersAtt"/>
							&gt;
							&lt;/
							<xsl:value-of select="$element/@name"/>
							&gt;
						</text:p>
                    </xsl:when>
                    <xsl:when test="$indentation=5">
                        <text:p text:style-name="P47">
                            <text:tab/>
                            <text:tab/>
                            <text:tab/>
                            <text:tab/>
                            <text:tab/>
							&lt;
							<xsl:value-of select="$element/@name"/>
                            <xsl:value-of select="$mndAtt"/>
                            <xsl:value-of select="$othersAtt"/>
							&gt;
							&lt;/
							<xsl:value-of select="$element/@name"/>
							&gt;
						</text:p>
                    </xsl:when>
                </xsl:choose>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>