<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fm="http://www.itp-x.co.uk/xslt">

<!--
****************************************************************
* ADOBE SYSTEMS INCORPORATED                                   *
* Copyright 2006 © 2006 Adobe Systems Incorporated             *
* All Rights Reserved                                          *
*                                                              *
* NOTICE:  Adobe permits you to use, modify, and distribute    *
* this file in accordance with the terms of the Adobe license  *
* agreement accompanying it.  If you have received this file   *
* from a source other than Adobe, then your use, modification, *
* or distribution of it requires the prior written permission  *
* of Adobe.                                                    *
* _____________________________________________________________*
* Adobe FrameMaker 7.2 Application Pack for S1000D             *
*                                                              *
* TOC generation import transform                              *
* Version   Date         By                                    *
* 0.2b      2006-08-21   Ian Proudfoot, iTP-X                  *
*                                                              *
****************************************************************
-->
	<xsl:template match="para0">
		<xsl:element name="para0">
			<xsl:call-template name="setid"/>
		</xsl:element>
	</xsl:template>

	<xsl:template match="subpara1">
		<xsl:element name="subpara1">
			<xsl:call-template name="setid"/>
		</xsl:element>
	</xsl:template>

	<xsl:template match="subpara2">
		<xsl:element name="subpara2">
			<xsl:call-template name="setid"/>
		</xsl:element>
	</xsl:template>

	<xsl:template match="prelreqs">
		<xsl:element name="prelreqs">
			<xsl:call-template name="setid"/>
		</xsl:element>
	</xsl:template>

	<xsl:template match="mainfunc">
		<xsl:element name="mainfunc">
			<xsl:call-template name="setid"/>
		</xsl:element>
	</xsl:template>

	<xsl:template match="closereqs">
		<xsl:element name="closereqs">
			<xsl:call-template name="setid"/>
		</xsl:element>
	</xsl:template>

	<xsl:template name="setid">
		<xsl:attribute name="id">
			<xsl:choose>
				<xsl:when test="@id">
					<xsl:value-of select="@id"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="generate-id()"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:attribute>
		<xsl:apply-templates/>
	</xsl:template>

	<xsl:template match="content">
		<xsl:element name="content">
			<xsl:element name="fm:tocs">
				<xsl:element name="fm:toc">
					<xsl:choose>
						<xsl:when test="//proced">
							<xsl:element name="fm:tocline">
								<xsl:element name="fm:tocref">
									<xsl:attribute name="fm:idref">
										<xsl:for-each select="//prelreqs">
											<xsl:choose>
												<xsl:when test="@id">
													<xsl:value-of select="@id"/>
												</xsl:when>
												<xsl:otherwise>
													<xsl:value-of select="generate-id()"/>
												</xsl:otherwise>
											</xsl:choose>
										</xsl:for-each>
									</xsl:attribute>
								</xsl:element>
							</xsl:element>
							<xsl:element name="fm:tocline">
								<xsl:element name="fm:tocref">
									<xsl:attribute name="fm:idref">
										<xsl:for-each select="//mainfunc">
											<xsl:choose>
												<xsl:when test="@id">
													<xsl:value-of select="@id"/>
												</xsl:when>
												<xsl:otherwise>
													<xsl:value-of select="generate-id()"/>
												</xsl:otherwise>
											</xsl:choose>
										</xsl:for-each>
									</xsl:attribute>
								</xsl:element>
							</xsl:element>
							<xsl:element name="fm:tocline">
								<xsl:element name="fm:tocref">
									<xsl:attribute name="fm:idref">
										<xsl:for-each select="//closereqs">
											<xsl:choose>
												<xsl:when test="@id">
													<xsl:value-of select="@id"/>
												</xsl:when>
												<xsl:otherwise>
													<xsl:value-of select="generate-id()"/>
												</xsl:otherwise>
											</xsl:choose>
										</xsl:for-each>
									</xsl:attribute>
								</xsl:element>
							</xsl:element>
						</xsl:when>
						<xsl:when test="//descript">
							<xsl:for-each select="//para0 | //subpara1 | //subpara2">
								<xsl:choose>
									<xsl:when test="@id=''">
										<xsl:element name="fm:tocline">
											<xsl:element name="fm:tocref">
												<xsl:attribute name="fm:idref">
													<xsl:value-of select="generate-id()"/>
												</xsl:attribute>
											</xsl:element>
										</xsl:element>
									</xsl:when>
									<xsl:when test="not(@id)">
										<xsl:element name="fm:tocline">
											<xsl:element name="fm:tocref">
												<xsl:attribute name="fm:idref">
													<xsl:value-of select="generate-id()"/>
												</xsl:attribute>
											</xsl:element>
										</xsl:element>
									</xsl:when>
									<xsl:otherwise>
										<xsl:element name="fm:tocline">
											<xsl:element name="fm:tocref">
												<xsl:attribute name="fm:idref">
													<xsl:value-of select="@id"/>
												</xsl:attribute>
											</xsl:element>
										</xsl:element>
									</xsl:otherwise>
								</xsl:choose>
							</xsl:for-each>
						</xsl:when>
					</xsl:choose>
				</xsl:element>
				<xsl:if test="//content//refdm | //table[@tocentry='1' or @tocentry='']/title |//reqconds | //reqpers | //supequip | //supplies | //spares">
					<xsl:element name="fm:lot">
						<xsl:if test="//content//refdm">
							<xsl:element name="fm:tocline">
								<xsl:element name="fm:tocref">
									<xsl:attribute name="fm:idref">refs</xsl:attribute>
								</xsl:element>
							</xsl:element>
						</xsl:if>
						<xsl:for-each select="//table[@tocentry='1' or @tocentry='']/title |//reqconds | //reqpers | //supequip | //supplies | //spares">
							<xsl:choose>
								<!--choose if the table's id attribute already has a value-->
								<xsl:when test="parent::table/@id">
									<xsl:element name="fm:tocline">
										<xsl:element name="fm:tocref">
											<xsl:attribute name="fm:idref">
												<xsl:value-of select="parent::table/@id"/>
											</xsl:attribute>
										</xsl:element>
									</xsl:element>
								</xsl:when>
								<xsl:otherwise>
									<xsl:element name="fm:tocline">
										<xsl:element name="fm:tocref">
											<xsl:attribute name="fm:idref">
												<xsl:choose>
													<xsl:when test="parent::table">
														<xsl:value-of select="generate-id(parent::table)"/>
													</xsl:when>
													<xsl:otherwise>
														<xsl:value-of select="generate-id()"/>
													</xsl:otherwise>
												</xsl:choose>
											</xsl:attribute>
										</xsl:element>
									</xsl:element>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:for-each>
					</xsl:element>
				</xsl:if>
				<xsl:if test="//figure">
					<xsl:element name="fm:lof">

						<xsl:for-each select="//figure">
							<xsl:choose>
								<xsl:when test="@id">
									<xsl:element name="fm:tocline">
										<xsl:element name="fm:tocref">
											<xsl:attribute name="fm:idref">
												<xsl:value-of select="@id"/>
											</xsl:attribute>
										</xsl:element>
									</xsl:element>
								</xsl:when>
								<xsl:otherwise>
									<xsl:element name="fm:tocline">
										<xsl:element name="fm:tocref">
											<xsl:attribute name="fm:idref">
												<xsl:value-of select="generate-id()"/>
											</xsl:attribute>
										</xsl:element>
									</xsl:element>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:for-each>
					</xsl:element>
				</xsl:if>
			</xsl:element>
			<xsl:call-template name="refs"/>
			<xsl:apply-templates/>
		</xsl:element>
	</xsl:template>
</xsl:stylesheet><!-- Stylus Studio meta-information - (c) 2004-2006. Progress Software Corporation. All rights reserved.
<metaInformation>
<scenarios ><scenario default="yes" name="ipd2" userelativepaths="yes" externalpreview="no" url="..\Examples\DMC&#x2D;S1000DBIKE&#x2D;AAA&#x2D;DA2&#x2D;10&#x2D;00&#x2D;0000&#x2D;520A&#x2D;A_001&#x2D;02.XML" htmlbaseurl="" outputurl="..\..\FrameMaker\IPD\Prod2Frame.xml" processortype="xalan" useresolver="no" profilemode="0" profiledepth="" profilelength="" urlprofilexml="" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext="" validateoutput="no" validator="internal" customvalidator="" ><parameterValue name="mifpath" value="'C:\blah'"/></scenario></scenarios><MapperMetaTag><MapperInfo srcSchemaPathIsRelative="yes" srcSchemaInterpretAsXML="no" destSchemaPath="" destSchemaRoot="" destSchemaPathIsRelative="yes" destSchemaInterpretAsXML="no" ><SourceSchema srcSchemaPath="..\Examples\DMC&#x2D;S1000DBIKE&#x2D;AAA&#x2D;DA2&#x2D;10&#x2D;00&#x2D;0000&#x2D;520A&#x2D;A_001&#x2D;02.XML" srcSchemaRoot="dmodule" AssociatedInstance="" loaderFunction="document" loaderFunctionUsesURI="no"/></MapperInfo><MapperBlockPosition><template match="/"></template><template match="rdf:Description"></template><template match="dmodule[1]"></template><template match="dmodule"></template><template match="csn"><block path="xsl:if" x="404" y="144"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each" x="404" y="252"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element/xsl:element/xsl:attribute/xsl:value&#x2D;of" x="404" y="324"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if" x="444" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if/xsl:element/xsl:attribute/xsl:value&#x2D;of" x="324" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if/xsl:element/xsl:attribute[1]/xsl:value&#x2D;of" x="284" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if/xsl:element/xsl:attribute[2]/xsl:value&#x2D;of" x="244" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if/xsl:element/xsl:if" x="164" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if/xsl:element/xsl:if/xsl:attribute/xsl:value&#x2D;of" x="204" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if/xsl:element/xsl:attribute[3]/xsl:value&#x2D;of" x="124" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if[1]" x="364" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if[1]/xsl:element/xsl:attribute[1]/xsl:value&#x2D;of" x="84" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if[1]/xsl:element/xsl:attribute[2]/xsl:value&#x2D;of" x="44" y="261"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if[1]/xsl:element/xsl:if" x="364" y="221"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if[1]/xsl:element/xsl:if/xsl:attribute/xsl:value&#x2D;of" x="444" y="221"/><block path="xsl:element/xsl:element/xsl:for&#x2D;each/xsl:element/xsl:element[4]/xsl:if[1]/xsl:element/xsl:attribute[3]/xsl:value&#x2D;of" x="324" y="221"/></template><template match="proced"><block path="xsl:element/xsl:for&#x2D;each" x="417" y="162"/><block path="xsl:element/xsl:for&#x2D;each/xsl:element/xsl:for&#x2D;each" x="457" y="180"/></template></MapperBlockPosition><TemplateContext></TemplateContext><MapperFilter side="source"></MapperFilter></MapperMetaTag>
</metaInformation>
-->