styles/mmap2vym.xsl
author insilmaril
Tue, 21 Feb 2006 16:18:23 +0000
changeset 217 375be2baa976
child 218 160459d924a1
permissions -rw-r--r--
rudimentary mmap import
insilmaril@217
     1
<?xml version="1.0" encoding="iso-8859-1"?>
insilmaril@217
     2
insilmaril@217
     3
<!--
insilmaril@217
     4
	Document   : mmap2vym.xsl
insilmaril@217
     5
	Created on : 20051120
insilmaril@217
     6
	Modified   : 20051128
insilmaril@217
     7
	Version    : 0.1.2
insilmaril@217
     8
	Author     : Clemens Kraus (http://www.clemens-kraus.de)
insilmaril@217
     9
	
insilmaril@217
    10
	Description: transforms exported MindManager-files (version x5/6) into vym-format.
insilmaril@217
    11
	Bugs       : First Version, work still in progress!
insilmaril@217
    12
	Todo       : - xlinks still to be implemented
insilmaril@217
    13
	             - codes/symbols still to be implemented
insilmaril@217
    14
							 - Multimap links (.mmap) still to be implemented
insilmaril@217
    15
-->
insilmaril@217
    16
insilmaril@217
    17
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
insilmaril@217
    18
	xmlns:xlink="http://www.w3.org/1999/xlink"
insilmaril@217
    19
  xmlns:ap="http://schemas.mindjet.com/MindManager/Application/2003"
insilmaril@217
    20
	xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl math func"
insilmaril@217
    21
	xmlns:math="http://exslt.org/math"
insilmaril@217
    22
	xmlns:func="http://exslt.org/functions"
insilmaril@217
    23
	version="1.0">
insilmaril@217
    24
insilmaril@217
    25
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
insilmaril@217
    26
  <xsl:param name="filenamep" />
insilmaril@217
    27
  <xsl:variable name="filename" select="$filenamep"/>
insilmaril@217
    28
  <!--<xsl:variable name="maxxCoord"><xsl:value-of select="math:max(map//xCoord)" /></xsl:variable>-->
insilmaril@217
    29
  <xsl:variable name="maxxCoord"><xsl:value-of select="600" /></xsl:variable>
insilmaril@217
    30
  <xsl:variable name="maxyCoord"><xsl:value-of select="800" /></xsl:variable>
insilmaril@217
    31
  <xsl:variable name="minxCoord"><xsl:value-of select="0" /></xsl:variable>
insilmaril@217
    32
  <xsl:variable name="minyCoord"><xsl:value-of select="0" /></xsl:variable>
insilmaril@217
    33
insilmaril@217
    34
insilmaril@217
    35
  <!-- root element -->	
insilmaril@217
    36
	<xsl:template match="/">
insilmaril@217
    37
	
insilmaril@217
    38
   	<xsl:element name="vymmap">
insilmaril@217
    39
			<!-- default settings: -->
insilmaril@217
    40
			<xsl:attribute name="comment">Generated with mmap2vym (V0.1.2) - MindManager to vym converter. More infos: www.clemens-kraus.de</xsl:attribute>
insilmaril@217
    41
			<xsl:attribute name="backgroundColor">#ffffff</xsl:attribute>
insilmaril@217
    42
			<xsl:attribute name="linkStyle">StyleLine</xsl:attribute>
insilmaril@217
    43
			<xsl:attribute name="linkColor">#00007f</xsl:attribute>
insilmaril@217
    44
			<xsl:attribute name="linkColorHint">HeadingColor</xsl:attribute>
insilmaril@217
    45
			<xsl:attribute name="defXLinkColor">#e6e6e6</xsl:attribute>
insilmaril@217
    46
			<xsl:attribute name="defXLinkWidth">1</xsl:attribute>
insilmaril@217
    47
insilmaril@217
    48
			<xsl:variable name="author" select="concat(/ap:Map/ap:DocumentGroup/ap:Author/@UserName, ' ', /ap:Map/ap:DocumentGroup/ap:Author/@UserEmail)" />
insilmaril@217
    49
			<xsl:if test="$author">
insilmaril@217
    50
				<xsl:attribute name="author"><xsl:value-of select="$author"/></xsl:attribute>
insilmaril@217
    51
			</xsl:if>
insilmaril@217
    52
			
insilmaril@217
    53
			<xsl:element name="mapcenter">
insilmaril@217
    54
				<!--xsl:attribute name="absPosX"><xsl:value-of select="300"/></xsl:attribute-->
insilmaril@217
    55
				<!--xsl:attribute name="absPosY"><xsl:value-of select="400"/></xsl:attribute-->
insilmaril@217
    56
				<!--xsl:attribute name="absPosX"><xsl:value-of select="- floor($minxCoord * 0.6) - 30"/></xsl:attribute-->
insilmaril@217
    57
				<!--xsl:attribute name="absPosY"><xsl:value-of select="floor($maxyCoord * 0.6)"/></xsl:attribute-->
insilmaril@217
    58
				<!-- xsl:message>absPos: <xsl:value-of select="-
insilmaril@217
    59
				floor($minxCoord * 0.6) - 30"/></xsl:message -->
insilmaril@217
    60
insilmaril@217
    61
					<!-- recurse to map title node ... -->
insilmaril@217
    62
					<xsl:apply-templates select="ap:Map/ap:OneTopic/ap:Topic/ap:Text"/>
insilmaril@217
    63
				
insilmaril@217
    64
				<xsl:apply-templates select="ap:Map/ap:OneTopic/ap:Topic/ap:SubTopics" />
insilmaril@217
    65
				
insilmaril@217
    66
			</xsl:element>
insilmaril@217
    67
	
insilmaril@217
    68
		</xsl:element>
insilmaril@217
    69
	</xsl:template>
insilmaril@217
    70
insilmaril@217
    71
  <xsl:template match="ap:Topic/ap:Text">
insilmaril@217
    72
		<xsl:element name="heading">
insilmaril@217
    73
			<xsl:value-of select="@PlainText" />
insilmaril@217
    74
		</xsl:element>
insilmaril@217
    75
	</xsl:template>
insilmaril@217
    76
insilmaril@217
    77
	
insilmaril@217
    78
  <xsl:template match="ap:Topic">
insilmaril@217
    79
	
insilmaril@217
    80
		<xsl:element name="branch">
insilmaril@217
    81
	  	<xsl:call-template name="position" />
insilmaril@217
    82
insilmaril@217
    83
			<!-- =============================== hyperlink ================================ -->
insilmaril@217
    84
			<xsl:variable name="url" select="ap:Hyperlink" />
insilmaril@217
    85
			<xsl:if test="$url">
insilmaril@217
    86
				<xsl:attribute name="url"><xsl:value-of select="ap:Hyperlink/@Url"/></xsl:attribute>
insilmaril@217
    87
			</xsl:if>
insilmaril@217
    88
			
insilmaril@217
    89
			<xsl:variable name="rect" select="ap:SubTopicShape/@SubTopicShape" />
insilmaril@217
    90
			<xsl:if test="contains($rect, 'Rectangle')">
insilmaril@217
    91
				<xsl:attribute name="frameType">Rectangle</xsl:attribute>
insilmaril@217
    92
				<!--<xsl:message><xsl:text>Rectangle</xsl:text><xsl:value-of select="$rect"/></xsl:message>-->
insilmaril@217
    93
			</xsl:if>
insilmaril@217
    94
			
insilmaril@217
    95
			<!-- =============================== closed ================================ -->
insilmaril@217
    96
			<!-- is branch closed? -->
insilmaril@217
    97
			<xsl:variable name="collapsed" select="ap:TopicViewGroup/Collapsed/@Collapsed" />
insilmaril@217
    98
			<xsl:if test="$collapsed = 'true'">
insilmaril@217
    99
				<xsl:attribute name="scrolled">
insilmaril@217
   100
					<xsl:value-of select="yes"/>
insilmaril@217
   101
				</xsl:attribute>
insilmaril@217
   102
			</xsl:if>
insilmaril@217
   103
insilmaril@217
   104
			<xsl:element name="heading">
insilmaril@217
   105
				 <xsl:if test="ap:Text/ap:Font/@Color">
insilmaril@217
   106
					 <xsl:attribute name="textColor">
insilmaril@217
   107
						 <xsl:value-of select="concat('#', substring(ap:Text/ap:Font/@Color, 3, 6))" />
insilmaril@217
   108
					 </xsl:attribute>
insilmaril@217
   109
				 </xsl:if>
insilmaril@217
   110
				 <xsl:value-of select="ap:Text/@PlainText" />
insilmaril@217
   111
				 
insilmaril@217
   112
				 <!-- <xsl:variable name="OId" select="@OId" />
insilmaril@217
   113
				 <xsl:variable name="relation" select="/ap:Map/ap:Relationships/ap:Relationship[ap:ConnectionGroup[@Index=0]/ap:Connection/ap:ObjectReference/@OIdRef=$OId]" />
insilmaril@217
   114
				 <xsl:if test="$relation">
insilmaril@217
   115
					 <xsl:variable name="toId" select="$relation/ap:ConnectionGroup[@Index=1]/ap:Connection/ap:ObjectReference/@OIdRef" />
insilmaril@217
   116
					 <xsl:element name="arrowlink">
insilmaril@217
   117
						 <xsl:attribute name="ENDARROW">Default</xsl:attribute>
insilmaril@217
   118
						 <xsl:attribute name="DESTINATION">
insilmaril@217
   119
							 <xsl:value-of select="$relation/ap:ConnectionGroup[@Index=1]/ap:Connection/ap:ObjectReference/@OIdRef" />
insilmaril@217
   120
						 </xsl:attribute>
insilmaril@217
   121
						 <xsl:attribute name="STARTARROW">None</xsl:attribute>
insilmaril@217
   122
					 </xsl:element>
insilmaril@217
   123
				 </xsl:if>
insilmaril@217
   124
				 <xsl:variable name="toId" select="/ap:Map/ap:Relationships/ap:Relationship/ap:ConnectionGroup[@Index=1]/ap:Connection/ap:ObjectReference[@OIdRef=$OId]/@OIdRef" />
insilmaril@217
   125
				 <xsl:if test="$toId">
insilmaril@217
   126
					 <xsl:attribute name="ID">
insilmaril@217
   127
						 <xsl:value-of select="$toId" />
insilmaril@217
   128
					 </xsl:attribute>
insilmaril@217
   129
				 </xsl:if> -->
insilmaril@217
   130
				 
insilmaril@217
   131
			 </xsl:element>
insilmaril@217
   132
			 
insilmaril@217
   133
			<!-- =============================== createnote ================================ -->
insilmaril@217
   134
 			<xsl:variable name="note" select="ap:NotesGroup" />
insilmaril@217
   135
			<xsl:if test="$note">
insilmaril@217
   136
				<xsl:element name="htmlnote">
insilmaril@217
   137
					<xsl:attribute name="fonthint">var</xsl:attribute>
insilmaril@217
   138
						<xsl:copy-of select="ap:NotesGroup/ap:NotesXhtmlData/*"/>
insilmaril@217
   139
				</xsl:element>
insilmaril@217
   140
			</xsl:if>
insilmaril@217
   141
			 
insilmaril@217
   142
			 <xsl:apply-templates select="ap:SubTopics"/>
insilmaril@217
   143
			</xsl:element>
insilmaril@217
   144
			
insilmaril@217
   145
   </xsl:template>
insilmaril@217
   146
insilmaril@217
   147
insilmaril@217
   148
  <!-- =============================== position ================================ -->
insilmaril@217
   149
  <!-- for position -->
insilmaril@217
   150
  <xsl:template name="position">
insilmaril@217
   151
	
insilmaril@217
   152
    <xsl:attribute name="absPosX">
insilmaril@217
   153
		<!-- if CX != "" -->
insilmaril@217
   154
      <xsl:value-of select="floor( (ap:Offset/@CX - $minxCoord) * 0.8  + 10 )"/>
insilmaril@217
   155
			<!--xsl:message>absPosX: <xsl:value-of select="floor( (ap:Offset/@CX - $minxCoord) * 0.8  + 10 )"/></xsl:message-->
insilmaril@217
   156
    </xsl:attribute>
insilmaril@217
   157
    <xsl:attribute name="absPosY">
insilmaril@217
   158
      	<xsl:value-of select="floor( (- ap:Offset/@CY + $maxyCoord) * 0.6 + 10 )"/>
insilmaril@217
   159
				<!-- xsl:message>absPosY: <xsl:value-of select="floor( (- ap:Offset/@CY + $maxyCoord) * 0.6 + 10)"/></xsl:message-->
insilmaril@217
   160
    </xsl:attribute>
insilmaril@217
   161
		
insilmaril@217
   162
  </xsl:template>
insilmaril@217
   163
insilmaril@217
   164
insilmaril@217
   165
  <!-- ========================== symbol (floatimage) =========================== -->
insilmaril@217
   166
  <!-- any floatimage? -->
insilmaril@217
   167
  <xsl:template match="symbol">
insilmaril@217
   168
  
insilmaril@217
   169
	<xsl:if test="string-length(./url) &gt; 0">
insilmaril@217
   170
	  <xsl:variable name="imagename" >
insilmaril@217
   171
		<xsl:call-template name="getfn" >
insilmaril@217
   172
			<xsl:with-param name="txt" select="substring-before( translate( normalize-space( current() ), '\', '/' ), '.' )" />
insilmaril@217
   173
		</xsl:call-template>
insilmaril@217
   174
	  </xsl:variable>
insilmaril@217
   175
insilmaril@217
   176
	  <xsl:element name="floatimage">
insilmaril@217
   177
		<xsl:attribute name="relPosX">
insilmaril@217
   178
			<xsl:value-of select="'20'"/>
insilmaril@217
   179
		</xsl:attribute>
insilmaril@217
   180
		<xsl:attribute name="relPosY">
insilmaril@217
   181
			<xsl:value-of select="'-50'"/>
insilmaril@217
   182
		</xsl:attribute>
insilmaril@217
   183
		<xsl:attribute name="useOrientation">
insilmaril@217
   184
			<xsl:text>true</xsl:text>
insilmaril@217
   185
		</xsl:attribute>
insilmaril@217
   186
		<xsl:attribute name="saveInMap">
insilmaril@217
   187
			<xsl:text>true</xsl:text>
insilmaril@217
   188
		</xsl:attribute>
insilmaril@217
   189
		
insilmaril@217
   190
		<xsl:attribute name="href">
insilmaril@217
   191
		  <xsl:value-of select="concat('file:', $filename, '-image-', $imagename, '.png')"/>
insilmaril@217
   192
		</xsl:attribute>
insilmaril@217
   193
	  </xsl:element>
insilmaril@217
   194
	</xsl:if>
insilmaril@217
   195
	
insilmaril@217
   196
  </xsl:template>
insilmaril@217
   197
  
insilmaril@217
   198
  
insilmaril@217
   199
  <!-- =============================== hyperlink ================================ -->
insilmaril@217
   200
  <xsl:template match="xhyperLink">
insilmaril@217
   201
insilmaril@217
   202
  <xsl:choose>
insilmaril@217
   203
	<xsl:when test="substring(., 1, 4)='http'">
insilmaril@217
   204
	  <xsl:attribute name="url">
insilmaril@217
   205
		<xsl:value-of select="."/>
insilmaril@217
   206
	  </xsl:attribute>
insilmaril@217
   207
	</xsl:when>
insilmaril@217
   208
	
insilmaril@217
   209
	<xsl:when test="contains(., '.mmp')">
insilmaril@217
   210
	  <xsl:attribute name="vymLink">
insilmaril@217
   211
	  	<!-- Aus .mmp .vym machen und '\' durch '/' ersetzen -->
insilmaril@217
   212
		<xsl:value-of select="translate( concat(substring-before(current(),'.mmp'), '.vym'), '\', '/')"/>
insilmaril@217
   213
	  </xsl:attribute>
insilmaril@217
   214
	</xsl:when>
insilmaril@217
   215
	
insilmaril@217
   216
	<xsl:otherwise>
insilmaril@217
   217
	 <!-- <xsl:message terminate="yes">Test: <xsl:value-of select="."/></xsl:message> -->
insilmaril@217
   218
	  <xsl:attribute name="url">
insilmaril@217
   219
		<xsl:value-of select="concat( 'file:/', translate(current(), '\', '/') )"/>
insilmaril@217
   220
	  </xsl:attribute>
insilmaril@217
   221
	</xsl:otherwise>
insilmaril@217
   222
  </xsl:choose>
insilmaril@217
   223
  
insilmaril@217
   224
  
insilmaril@217
   225
<!--   	<xsl:if test="substring(., 1, 4)='http'">
insilmaril@217
   226
	  <xsl:attribute name="url">
insilmaril@217
   227
		<xsl:value-of select="."/>
insilmaril@217
   228
	  </xsl:attribute>
insilmaril@217
   229
	 </xsl:if>
insilmaril@217
   230
	 
insilmaril@217
   231
  	<xsl:if test="contains(., '.mmp')">
insilmaril@217
   232
	  <xsl:attribute name="vymLink">
insilmaril@217
   233
		<xsl:value-of select="translate( concat(substring-before(current(),'.mmp'), '.vym'), '\', '/')"/>
insilmaril@217
   234
	  </xsl:attribute>
insilmaril@217
   235
	</xsl:if> -->
insilmaril@217
   236
	
insilmaril@217
   237
  </xsl:template>
insilmaril@217
   238
insilmaril@217
   239
	
insilmaril@217
   240
  <!-- ================================= getfn ================================== -->
insilmaril@217
   241
  <!-- get the filename (without the path) -->
insilmaril@217
   242
  
insilmaril@217
   243
  <xsl:template name="getfn">
insilmaril@217
   244
	  <xsl:param name="txt" select="." />
insilmaril@217
   245
	  
insilmaril@217
   246
	  <xsl:choose>
insilmaril@217
   247
		  <xsl:when test="contains($txt, '/')" >
insilmaril@217
   248
		  	<xsl:variable name="right" select="substring-after($txt, '/')" />
insilmaril@217
   249
			<xsl:if test="string-length($right)>1" >
insilmaril@217
   250
			  <xsl:call-template name="getfn" >
insilmaril@217
   251
				  <xsl:with-param name="txt" select="$right" />
insilmaril@217
   252
			  </xsl:call-template>
insilmaril@217
   253
			</xsl:if>
insilmaril@217
   254
		  </xsl:when>
insilmaril@217
   255
		  <xsl:otherwise>
insilmaril@217
   256
			  <xsl:value-of select="$txt" />
insilmaril@217
   257
		  </xsl:otherwise>
insilmaril@217
   258
	  </xsl:choose>
insilmaril@217
   259
	  
insilmaril@217
   260
  </xsl:template>
insilmaril@217
   261
  
insilmaril@217
   262
insilmaril@217
   263
  <!-- =============================== codes ================================ -->
insilmaril@217
   264
  <xsl:template match="codes">
insilmaril@217
   265
insilmaril@217
   266
  	<!-- file:/home/clemens/CLEMENS/MM/Tools/Open Interface Reference Guide/doc/enum-mmcode.html -->
insilmaril@217
   267
	<xsl:element name="standardFlag">
insilmaril@217
   268
	  <xsl:choose>
insilmaril@217
   269
		<xsl:when test="code = '1'">lamp</xsl:when>
insilmaril@217
   270
		<xsl:when test="code = '2'">arrow-up</xsl:when>
insilmaril@217
   271
		<xsl:when test="code = '3'">arrow-down</xsl:when>
insilmaril@217
   272
		<!-- <xsl:when test="code = ">scrolled-right</xsl:when> -->
insilmaril@217
   273
		<xsl:when test="code = '5'">hook-green</xsl:when>
insilmaril@217
   274
		<xsl:when test="code = '6'">questionmark</xsl:when>
insilmaril@217
   275
		<xsl:when test="code = '7'">smiley-good</xsl:when>
insilmaril@217
   276
		<xsl:when test="code = '8'">smiley-sad</xsl:when>
insilmaril@217
   277
		<xsl:when test="code = '11'">stopsign</xsl:when>
insilmaril@217
   278
		<xsl:when test="code = '13'">clock</xsl:when>
insilmaril@217
   279
		<xsl:when test="code = '15'">clock</xsl:when>
insilmaril@217
   280
		<xsl:when test="code = '17'">cross-red</xsl:when>
insilmaril@217
   281
		<xsl:when test="code = '41'">cross-red</xsl:when>
insilmaril@217
   282
		<xsl:when test="code = '20'">exclamationmark</xsl:when>
insilmaril@217
   283
		<xsl:when test="code = '29'">thumb-up</xsl:when>
insilmaril@217
   284
		<!-- <xsl:when test="code = '9'">note</xsl:when>
insilmaril@217
   285
		<xsl:when test="code = '32'">note</xsl:when> -->
insilmaril@217
   286
		<xsl:otherwise>heart</xsl:otherwise>
insilmaril@217
   287
	  </xsl:choose>
insilmaril@217
   288
	  <!-- Fuer spaetere Erweiterung um eigene Codes: z.B. MindManager-Codes "code-9.png"
insilmaril@217
   289
	  <xsl:value-of select="concat( 'code-', current() )"/> -->
insilmaril@217
   290
	</xsl:element>
insilmaril@217
   291
insilmaril@217
   292
  </xsl:template>
insilmaril@217
   293
insilmaril@217
   294
  
insilmaril@217
   295
  <!-- =============================== color ================================ -->
insilmaril@217
   296
  <xsl:template match="color">
insilmaril@217
   297
    <xsl:attribute name="textColor">
insilmaril@217
   298
      <!-- switch from BBGGRR to #RRGGBB representation -->
insilmaril@217
   299
      <xsl:text>#</xsl:text>
insilmaril@217
   300
      <xsl:value-of select="substring( ., 5, 2 )"/>
insilmaril@217
   301
      <xsl:value-of select="substring( ., 3, 2 )"/>
insilmaril@217
   302
      <xsl:value-of select="substring( ., 1, 2 )"/>
insilmaril@217
   303
    </xsl:attribute>
insilmaril@217
   304
  </xsl:template>
insilmaril@217
   305
insilmaril@217
   306
insilmaril@217
   307
  <!-- =============================== for future use ================================ -->
insilmaril@217
   308
  <xsl:template match="Name">
insilmaril@217
   309
    <xsl:attribute name="NAME">
insilmaril@217
   310
      <xsl:value-of select="."/>
insilmaril@217
   311
    </xsl:attribute>
insilmaril@217
   312
  </xsl:template>
insilmaril@217
   313
insilmaril@217
   314
  <xsl:template match="Size">
insilmaril@217
   315
      <xsl:attribute name="SIZE">
insilmaril@217
   316
        <xsl:value-of select="."/>
insilmaril@217
   317
      </xsl:attribute>
insilmaril@217
   318
  </xsl:template>
insilmaril@217
   319
insilmaril@217
   320
  <xsl:template match="Bold">
insilmaril@217
   321
      <xsl:attribute name="BOLD">
insilmaril@217
   322
        <xsl:value-of select="."/>
insilmaril@217
   323
      </xsl:attribute>
insilmaril@217
   324
  </xsl:template>
insilmaril@217
   325
insilmaril@217
   326
  <xsl:template match="Italic">
insilmaril@217
   327
      <xsl:attribute name="ITALIC">
insilmaril@217
   328
        <xsl:value-of select="."/>
insilmaril@217
   329
      </xsl:attribute>
insilmaril@217
   330
  </xsl:template>
insilmaril@217
   331
insilmaril@217
   332
  <xsl:template match="Underline">
insilmaril@217
   333
      <xsl:attribute name="UNDERLINE">
insilmaril@217
   334
        <xsl:value-of select="."/>
insilmaril@217
   335
      </xsl:attribute>
insilmaril@217
   336
  </xsl:template>
insilmaril@217
   337
insilmaril@217
   338
  <xsl:template match="Strikethrough">
insilmaril@217
   339
      <xsl:attribute name="Strikethrough">
insilmaril@217
   340
        <xsl:value-of select="."/>
insilmaril@217
   341
      </xsl:attribute>
insilmaril@217
   342
  </xsl:template>
insilmaril@217
   343
insilmaril@217
   344
  <!-- template extracting a subset of font attributes -->
insilmaril@217
   345
  <xsl:template match="ap:font">
insilmaril@217
   346
    <xsl:apply-templates select="@Name"/>
insilmaril@217
   347
    <xsl:apply-templates select="@Size"/>
insilmaril@217
   348
    <xsl:apply-templates select="@Bold"/>
insilmaril@217
   349
    <xsl:apply-templates select="@Italic"/>
insilmaril@217
   350
    <xsl:apply-templates select="@Underline"/>
insilmaril@217
   351
    <xsl:apply-templates select="@Strikethrough"/>
insilmaril@217
   352
  </xsl:template>
insilmaril@217
   353
  
insilmaril@217
   354
</xsl:stylesheet>
insilmaril@217
   355
insilmaril@217
   356