styles/vym2html.xsl
changeset 638 3436b8eb3d9b
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/styles/vym2html.xsl	Mon Jan 07 14:52:49 2008 +0000
     1.3 @@ -0,0 +1,439 @@
     1.4 +<?xml version="1.0" encoding="UTF-8" ?>
     1.5 +
     1.6 +<!--
     1.7 +    Document   : vym2html.xsl
     1.8 +    Created on : 20040313
     1.9 +	Modified   : 20040512,20040622	Uwe Drechsel
    1.10 +	Version    : 0.7
    1.11 +    Author     : Clemens Kraus (http://www.clemens-kraus.de)
    1.12 +    Description: transforms vym-files into html format.
    1.13 +    
    1.14 +	Hint:
    1.15 +	tm.xsl and cm.xsl were taken from Alexander Johannesen's 
    1.16 +	beautiful xSiteable content management system: 
    1.17 +		http://xsiteable.org
    1.18 +	and are used with kind permission
    1.19 +-->
    1.20 +
    1.21 +	
    1.22 +
    1.23 +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    1.24 +
    1.25 +	<!-- Include external stylesheets -->
    1.26 +	<xsl:include href="tm.xsl" />
    1.27 +	<xsl:include href="cm.xsl" />
    1.28 +  
    1.29 +	<!-- Settings and parameters -->
    1.30 +	<xsl:output method="html" indent="no" encoding="UTF-8"/> 
    1.31 +	<xsl:param name="filenamep" />
    1.32 +	<xsl:param name="wikistylep" />
    1.33 +	<xsl:param name="genimagep" />
    1.34 +	<xsl:param name="imageonlyp" />
    1.35 +	<xsl:param name="stylesheetp" />
    1.36 +	<xsl:param name="urlHeadingp" />
    1.37 +	<xsl:param name="urlImagep" />
    1.38 +	<xsl:variable name="filename" select="$filenamep"/>
    1.39 +	<xsl:variable name="wikistyle" select="$wikistylep"/>
    1.40 +	<xsl:variable name="genimage" select="$genimagep"/>
    1.41 +	<xsl:variable name="imageonly" select="$imageonlyp"/>	
    1.42 +	<xsl:variable name="stylesheet" select="$stylesheetp"/>
    1.43 +	<xsl:variable name="topics" select="//item" /> 
    1.44 +	<xsl:variable name="urlHeading" select="$urlHeadingp"/> 
    1.45 +	<xsl:variable name="urlImage" select="$urlImagep"/> 
    1.46 +
    1.47 +	<xsl:variable name="level" select="'0'"/>			
    1.48 +	<xsl:variable name="contentlist" select="false()"/> 
    1.49 +
    1.50 +  
    1.51 +	<xsl:variable name="fn" >
    1.52 +		<xsl:call-template name="getfn" >
    1.53 +			<xsl:with-param name="txt" select="$filename" />
    1.54 +		</xsl:call-template>
    1.55 +	</xsl:variable>
    1.56 +
    1.57 +	<xsl:variable name="path" >
    1.58 +	  <xsl:value-of select="normalize-space( substring($filename, 1, number(string-length($filename)-string-length($fn))) )" />
    1.59 +	</xsl:variable>
    1.60 +
    1.61 +	<xsl:variable name="stylesheetn" >
    1.62 +	<xsl:call-template name="getfn" >
    1.63 +		<xsl:with-param name="txt" select="$stylesheet" />
    1.64 +	</xsl:call-template>
    1.65 +	</xsl:variable><!-- path -->
    1.66 +
    1.67 +
    1.68 +
    1.69 +	<!-- Beginning of transformation here -->
    1.70 +	<xsl:template match="/">
    1.71 +	<xsl:variable name="mapversion" select="vymmap/@version"/>
    1.72 +	<xsl:variable name="header" >
    1.73 +		<xsl:call-template name="getheading" >
    1.74 +			<xsl:with-param name="txt" select="vymmap/mapcenter/heading" />
    1.75 +		</xsl:call-template>
    1.76 +	</xsl:variable><!-- header -->
    1.77 +		
    1.78 +	<!-- Write head of HTML document -->  
    1.79 +	<xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">]]>&#xA;</xsl:text>
    1.80 +	<html><xsl:text>&#xA;</xsl:text>
    1.81 +		<head><xsl:text>&#xA;</xsl:text>
    1.82 +			<title><xsl:value-of select="$header"/></title>
    1.83 +			<xsl:text disable-output-escaping="yes">&#xA;<![CDATA[<link href="]]></xsl:text>
    1.84 +			<xsl:value-of select="$stylesheetn"/>
    1.85 +			<xsl:text disable-output-escaping="yes"><![CDATA[" rel="stylesheet" id="]]></xsl:text>
    1.86 +			<xsl:value-of select="$stylesheetn"/>
    1.87 +			<xsl:text disable-output-escaping="yes"><![CDATA[">]]>&#xA;</xsl:text>
    1.88 +			<meta name="generator" content="vym (http://www.insilmaril.de/vym/) and vym2html.xsl (http://www.clemens-kraus.de)"/><xsl:text>&#xA;</xsl:text>
    1.89 +		</head>
    1.90 +		<xsl:text>&#xA;</xsl:text>
    1.91 +
    1.92 +		<!-- Write body of HTML document -->  
    1.93 +		<body>
    1.94 +			<!-- vym title box at top of page -->
    1.95 +			<xsl:text>&#xA;</xsl:text>
    1.96 +			<div class="vymTitleBox">
    1.97 +				<xsl:value-of select="$header"/>
    1.98 +			</div>
    1.99 +
   1.100 +			<!-- Include image of map, if wanted -->
   1.101 +			<xsl:if test="$genimage != ''">
   1.102 +				<xsl:variable name="image" select="concat($fn, '.png')" />
   1.103 +
   1.104 +				<div class="vymImageMap">
   1.105 +					<img src="images/{$image}" 
   1.106 +						border="0" 
   1.107 +						usemap="#vymmap"
   1.108 +						alt="vymmap">
   1.109 +					</img>
   1.110 +				</div>
   1.111 +				<xsl:text>&#xA;</xsl:text>
   1.112 +
   1.113 +				<!-- Generate image map by a first walk through all branches -->
   1.114 +				<map name="vymmap">
   1.115 +					<xsl:apply-templates select="vymmap/mapcenter/branch">
   1.116 +						<xsl:with-param name="genarea" select="true()"/>
   1.117 +						<xsl:with-param name="imageonly" select="$imageonly"/>
   1.118 +					</xsl:apply-templates>
   1.119 +				</map>
   1.120 +
   1.121 +				<xsl:text>&#xA;</xsl:text>
   1.122 +			</xsl:if>
   1.123 +
   1.124 +			<!-- Include note of mapcenter here -->
   1.125 +			<xsl:apply-templates select="vymmap/mapcenter/note/@href"/>
   1.126 +
   1.127 +
   1.128 +			<!-- Include all the branches, if not only image is wanted-->
   1.129 +			<xsl:if test="$imageonly = ''">
   1.130 +				<xsl:apply-templates select="vymmap/mapcenter/branch">
   1.131 +					<xsl:with-param name="genarea" select="false()"/>
   1.132 +					<xsl:with-param name="imageonly" select="$imageonly"/>
   1.133 +					<xsl:with-param name="depth" select="0"/>
   1.134 +				</xsl:apply-templates>
   1.135 +			</xsl:if>
   1.136 +
   1.137 +			<!-- Box at bottom of page, containing comment and author -->
   1.138 +			<div class="vymBoxBottom">
   1.139 +				<xsl:value-of select="vymmap/@comment"/>
   1.140 +				<div class="vymBoxBottomR">
   1.141 +					<xsl:value-of select="vymmap/@author"/>
   1.142 +				</div>
   1.143 +			</div>
   1.144 +
   1.145 +			<!-- Footer containing filename, date, selfpromotion -->
   1.146 +			<table class="vymFooter">
   1.147 +				<tr>
   1.148 +					<td class="vymFooterL">
   1.149 +						<xsl:value-of select="$fn"/>.vym
   1.150 +					</td>
   1.151 +					<td class="vymFooterC">
   1.152 +						<xsl:value-of select="vymmap/@date"/>
   1.153 +					</td>
   1.154 +					<td class="vymFooterR">
   1.155 +						vym <xsl:value-of select="$mapversion"/> 
   1.156 +					</td>  
   1.157 +				</tr>
   1.158 +			</table>
   1.159 +
   1.160 +		</body>&#xA;
   1.161 +	</html>&#xA;
   1.162 +	</xsl:template><!-- Beginning of tranformation, "/" template -->
   1.163 +
   1.164 +	
   1.165 +	<!-- Main Function generating a branch  -->
   1.166 +	<xsl:template match="branch">
   1.167 +		<!-- Work a branch twice: a) make id for anchors, b) make output -->
   1.168 +		<xsl:param name="genarea"/>
   1.169 +		<xsl:param name="imageonly"/>
   1.170 +		<xsl:param name="depth"/>
   1.171 +		<xsl:if test="$genarea">
   1.172 +			<!-- Generate id's and anchors, no output yet -->
   1.173 +			<xsl:if test="(@x1 != '' and @y1 != '' and @x2 != '' and @y2 != '') and not(../@scrolled = 'yes')">
   1.174 +				<!-- Heading is used in ALT field of anchor -->
   1.175 +				<xsl:variable name="header">
   1.176 +					<xsl:call-template name="getheading" >
   1.177 +						<xsl:with-param name="txt" select="heading" />
   1.178 +					</xsl:call-template>
   1.179 +				</xsl:variable>
   1.180 +
   1.181 +				<xsl:if test="($imageonly and @url) or ($imageonly and @vymLink) or $imageonly=''">
   1.182 +					<area>
   1.183 +					<xsl:attribute name="shape">
   1.184 +						<xsl:text>rect</xsl:text>
   1.185 +					</xsl:attribute>
   1.186 +					<xsl:attribute name="coords">
   1.187 +						<xsl:value-of select="@x1"/>
   1.188 +						<xsl:text>,</xsl:text>
   1.189 +						<xsl:value-of select="@y1"/>
   1.190 +						<xsl:text>,</xsl:text>
   1.191 +						<xsl:value-of select="@x2"/>
   1.192 +						<xsl:text>,</xsl:text>
   1.193 +						<xsl:value-of select="@y2"/>
   1.194 +					</xsl:attribute>
   1.195 +					<xsl:attribute name="href">
   1.196 +						<xsl:if test="$imageonly = ''">
   1.197 +							<xsl:text>#</xsl:text>
   1.198 +							<xsl:value-of select="generate-id(.)"/>
   1.199 +						</xsl:if>
   1.200 +						<xsl:if test="$imageonly and @url">
   1.201 +							<xsl:value-of select="@url"/>
   1.202 +						</xsl:if>
   1.203 +						<xsl:if test="$imageonly and @vymLink">
   1.204 +							<xsl:value-of select="concat( substring-before(@vymLink, '.vym'), '.html')"/>
   1.205 +						</xsl:if>
   1.206 +					</xsl:attribute>
   1.207 +					<xsl:attribute name="alt">
   1.208 +						<xsl:value-of select="$header"/>
   1.209 +					</xsl:attribute>
   1.210 +					<xsl:attribute name="title">
   1.211 +						<xsl:value-of select="$header"/>
   1.212 +					</xsl:attribute>
   1.213 +					</area>
   1.214 +					<xsl:text>&#xA;</xsl:text>
   1.215 +				</xsl:if>
   1.216 +			</xsl:if> <!--generating id's and anchors -->
   1.217 +
   1.218 +			<xsl:apply-templates select="branch">
   1.219 +				<xsl:with-param name="genarea" select="true()"/>
   1.220 +				<xsl:with-param name="imageonly" select="$imageonly"/>
   1.221 +				<xsl:with-param name="depth" select="$depth +1"/>
   1.222 +			</xsl:apply-templates>
   1.223 +		</xsl:if><!--genarea-->
   1.224 +
   1.225 +		
   1.226 +		<xsl:if test="$imageonly = ''">
   1.227 +			<xsl:if test="not($genarea)">
   1.228 +				<xsl:call-template name="anchor">
   1.229 +					<xsl:with-param name="depth" select="$depth"/>
   1.230 +				</xsl:call-template>
   1.231 +				<xsl:text>&#xA;</xsl:text>
   1.232 +			</xsl:if>
   1.233 +		</xsl:if>
   1.234 +	</xsl:template><!--branch-->
   1.235 +
   1.236 +
   1.237 +
   1.238 +	<xsl:template name="anchor">
   1.239 +		<xsl:param name="depth"/>
   1.240 +		<xsl:if test="$depth=0"> 
   1.241 +			<hr />
   1.242 +			<xsl:call-template name="gen-anchor-tag">
   1.243 +				<xsl:with-param name="depth" select="$depth"/>
   1.244 +			</xsl:call-template>
   1.245 +				<xsl:if test="count(descendant::branch)">
   1.246 +					<ul>
   1.247 +					<xsl:apply-templates select="branch">
   1.248 +						<xsl:with-param name="genarea" select="false()"/>
   1.249 +						<xsl:with-param name="depth" select="$depth+1"/>
   1.250 +					</xsl:apply-templates>
   1.251 +					</ul>
   1.252 +				</xsl:if>	
   1.253 +		</xsl:if>
   1.254 +
   1.255 +	<xsl:if test="$depth > 0">
   1.256 +			<li>
   1.257 +				<xsl:call-template name="gen-anchor-tag">
   1.258 +					<xsl:with-param name="depth" select="$depth"/>
   1.259 +				</xsl:call-template>
   1.260 +				<xsl:if test="count(descendant::branch)">
   1.261 +					<ul>
   1.262 +					<xsl:apply-templates select="branch">
   1.263 +						<xsl:with-param name="genarea" select="false()"/>
   1.264 +						<xsl:with-param name="depth" select="$depth+1"/>
   1.265 +					</xsl:apply-templates>
   1.266 +					</ul>
   1.267 +				</xsl:if>	
   1.268 +			</li>
   1.269 +		</xsl:if>
   1.270 +	</xsl:template><!--anchor-->
   1.271 +
   1.272 +
   1.273 +	<xsl:template name="gen-anchor-tag">
   1.274 +		<xsl:param name="depth"/>
   1.275 +
   1.276 +		<xsl:variable name="header">
   1.277 +			<xsl:call-template name="getheading" >
   1.278 +			<xsl:with-param name="txt" select="heading" />
   1.279 +			</xsl:call-template>
   1.280 +		</xsl:variable><!--header-->
   1.281 +
   1.282 +		<div class="vymBranch{$depth}">
   1.283 +			<xsl:if test="not($genimage = '')">
   1.284 +				<a name="{generate-id(.)}"></a>
   1.285 +			</xsl:if>
   1.286 +
   1.287 +			<!-- start header -->
   1.288 +			<xsl:value-of select="$header"/>
   1.289 +
   1.290 +			<!-- Include flags -->
   1.291 +			<xsl:apply-templates select="./standardFlag" />
   1.292 +
   1.293 +			<!-- URL to external document  -->
   1.294 +			<xsl:if test="@url != ''">
   1.295 +				<p class="vymURL">
   1.296 +				<xsl:element name="a">
   1.297 +					<xsl:attribute name="href">
   1.298 +						<xsl:value-of select="@url"/>
   1.299 +					</xsl:attribute>
   1.300 +					<xsl:if test="$urlImage= 'yes'">
   1.301 +						<img src="flags/url.png" 
   1.302 +							border="0" 
   1.303 +							valign="middle"
   1.304 +							alt="URL">
   1.305 +						</img>
   1.306 +					</xsl:if>
   1.307 +					<xsl:if test="$urlImage!= 'yes'">
   1.308 +						<xsl:text>&gt; </xsl:text>
   1.309 +					</xsl:if>
   1.310 +					<xsl:if test="$urlHeading = 'yes'">
   1.311 +						<xsl:value-of select="$header"/>
   1.312 +					</xsl:if>
   1.313 +					<xsl:if test="$urlHeading != 'yes'">
   1.314 +						<xsl:value-of select="@url"/>
   1.315 +					</xsl:if>
   1.316 +				</xsl:element>
   1.317 +				</p>
   1.318 +			</xsl:if><!-- URL to ext. doc -->
   1.319 +			<xsl:text>&#xA;</xsl:text>
   1.320 +		</div>
   1.321 +
   1.322 +		<xsl:apply-templates select="note/@href"/>
   1.323 +
   1.324 +		<xsl:text>&#xA;</xsl:text>
   1.325 +	</xsl:template><!--gen-anchor-tag-->
   1.326 +
   1.327 +
   1.328 +	<xsl:template match="standardFlag">
   1.329 +		<xsl:variable name="flag" select="concat(., '.png')" />
   1.330 +		<img src="flags/{$flag}" valign="middle" border="0" alt="{$flag}">
   1.331 +		</img>
   1.332 +
   1.333 +	</xsl:template><!--standardFlag-->
   1.334 +
   1.335 +
   1.336 +	<xsl:template match="note/@href">
   1.337 +		<div class="vymNote">
   1.338 +		<xsl:variable name="actualnotename">
   1.339 +			<xsl:value-of select="substring-after(current(),':')"/>
   1.340 +		</xsl:variable>
   1.341 +
   1.342 +		<xsl:variable name="note-name">
   1.343 +			<xsl:if test="$path = ''">
   1.344 +				<xsl:value-of select="$actualnotename"/>
   1.345 +			</xsl:if>
   1.346 +			<xsl:if test="not($path = '')">
   1.347 +				<xsl:value-of select="concat($path, '/', $actualnotename)"/>
   1.348 +			</xsl:if>
   1.349 +		</xsl:variable><!--note-name-->
   1.350 +
   1.351 +
   1.352 +		<xsl:if test="../@fonthint = 'fixed'">
   1.353 +			<xsl:text disable-output-escaping="yes">&lt;pre></xsl:text>
   1.354 +		</xsl:if>
   1.355 +
   1.356 +		<xsl:variable name="currentID" select="@id" />
   1.357 +
   1.358 +		<xsl:apply-templates select="document($note-name)/note">
   1.359 +			<xsl:with-param name="currentID" select="$currentID" />
   1.360 +		</xsl:apply-templates>
   1.361 +
   1.362 +		<xsl:if test="../@fonthint = 'fixed'">
   1.363 +			<xsl:text disable-output-escaping="yes">&lt;/pre></xsl:text>
   1.364 +		</xsl:if>
   1.365 +
   1.366 +		</div>
   1.367 +	</xsl:template><!--note/@href-->
   1.368 +
   1.369 +
   1.370 +  
   1.371 +<!--	Wiki-style notation overview:
   1.372 +  		Lines:
   1.373 +		+ Big headlines start with the '+' character.
   1.374 +		- Small headlines start with the '-' character.
   1.375 +		Normal text doesn't have any starting notation.
   1.376 +		! Notes start with an exclamation.
   1.377 +		. Indented text starts with a dot.
   1.378 +		? Questions start with a question-mark, and
   1.379 +		= Answers starts with the equal-sign.
   1.380 +		* Points for a item-list
   1.381 +		# clues
   1.382 +		
   1.383 +		Links:
   1.384 +		use "{...}" or {(Clemens homepage) http://www.clemens-kraus.de/} for external links.
   1.385 +		
   1.386 +		Markup:
   1.387 +		|This is bold| text, while |/this text is italic|, |*this is pre-formatted|, and |!this is a note|
   1.388 +	-->
   1.389 +  
   1.390 +	<xsl:template match="note">
   1.391 +		<xsl:param name="currentID"/>
   1.392 +
   1.393 +
   1.394 +		<xsl:call-template name="doLine">
   1.395 +			<xsl:with-param name="content" select="concat(translate(.,$crlf,$controlCharacter), $controlCharacter)"/>
   1.396 +			<xsl:with-param name="currentID" select="$currentID"/>
   1.397 +		</xsl:call-template>
   1.398 +	</xsl:template><!--note-->
   1.399 +
   1.400 +	  
   1.401 +  
   1.402 +  
   1.403 +  
   1.404 +	<xsl:template name="getfn">
   1.405 +		<xsl:param name="txt" select="." />
   1.406 +
   1.407 +		<xsl:choose>
   1.408 +			<xsl:when test="contains($txt, '/')" >
   1.409 +				<xsl:variable name="right" select="substring-after($txt, '/')" />
   1.410 +				<xsl:if test="string-length($right)>1" >
   1.411 +					<xsl:call-template name="getfn" >
   1.412 +						<xsl:with-param name="txt" select="$right" />
   1.413 +					</xsl:call-template>
   1.414 +				</xsl:if>
   1.415 +			</xsl:when>
   1.416 +			<xsl:otherwise>
   1.417 +				<xsl:value-of select="$txt" />
   1.418 +			</xsl:otherwise>
   1.419 +		</xsl:choose>
   1.420 +	</xsl:template><!--getfn-->
   1.421 +
   1.422 +  
   1.423 +	<!-- Take care of br's  (WHY?)  --> 
   1.424 +	<xsl:template name="getheading">
   1.425 +		<xsl:param name="txt" select="." />
   1.426 +		<xsl:variable name="br">
   1.427 +			<xsl:text disable-output-escaping="yes">&lt;br&gt;</xsl:text>
   1.428 +		</xsl:variable>
   1.429 +		<xsl:choose>
   1.430 +			<xsl:when test="contains($txt, $br)" >
   1.431 +				<xsl:variable name="right" select="substring-after($txt, $br)" />
   1.432 +				<xsl:variable name="left" select="substring-before($txt, $br)" />
   1.433 +				<xsl:value-of select="concat( $left, ' ', $right )" />
   1.434 +			</xsl:when>
   1.435 +			<xsl:otherwise>
   1.436 +				<xsl:value-of select="$txt" />
   1.437 +			</xsl:otherwise>
   1.438 +		</xsl:choose>
   1.439 +	</xsl:template><!--getheading-->
   1.440 +  
   1.441 +</xsl:stylesheet>
   1.442 +