styles/cm.xsl
author insilmaril
Wed, 27 Jul 2005 18:56:32 +0000
changeset 138 9079931da6c3
parent 37 df767ed748f3
permissions -rw-r--r--
1.7.2 fixed undo to select the right object before undoCommand
insilmaril@37
     1
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
insilmaril@37
     2
<xsl:stylesheet 
insilmaril@37
     3
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
insilmaril@37
     4
	xmlns:exsl="http://exslt.org/common"
insilmaril@37
     5
	extension-element-prefixes="exsl" version="1.0">
insilmaril@37
     6
	
insilmaril@37
     7
<xsl:variable name="controlCharacter" select="'¤'" />
insilmaril@37
     8
<xsl:variable name="crlf" select="'&#10;'" />
insilmaril@37
     9
<!-- <xsl:variable name="wikistyle" select="false()" /> -->
insilmaril@37
    10
insilmaril@37
    11
<xsl:variable name="supportMenu" select="'true'" />
insilmaril@37
    12
<xsl:variable name="supportShowme" select="'true'" />
insilmaril@37
    13
<xsl:variable name="supportSource" select="'true'" />
insilmaril@37
    14
<xsl:variable name="supportImage" select="'true'" />
insilmaril@37
    15
insilmaril@37
    16
<xsl:template name="findNext">
insilmaril@37
    17
	<xsl:param name="content" />
insilmaril@37
    18
	<xsl:variable name="escaped" select="substring-after( $content, '\{' )" />
insilmaril@37
    19
	<xsl:variable name="item-start" select="substring-after( $content, '{' )" />
insilmaril@37
    20
	<xsl:variable name="item-end" select="substring-before( $item-start, '}' )" />
insilmaril@37
    21
	<xsl:if test="normalize-space($escaped) != normalize-space($item-start)">
insilmaril@37
    22
		<xsl:copy-of select="normalize-space($item-end)" />
insilmaril@37
    23
	</xsl:if>
insilmaril@37
    24
</xsl:template>
insilmaril@37
    25
insilmaril@37
    26
<xsl:template name="findNextTag">
insilmaril@37
    27
	<xsl:param name="content" />
insilmaril@37
    28
	<xsl:variable name="item-start" select="substring-after( $content, '|' )" />
insilmaril@37
    29
	<xsl:variable name="item-end" select="substring-before( $item-start, '|' )" />
insilmaril@37
    30
	<xsl:variable name="name-start" select="substring-after( $item-start, '(' )" />
insilmaril@37
    31
	<xsl:variable name="name-end" select="substring-before( $name-start, ')' )" />
insilmaril@37
    32
	<!-- <xsl:copy-of select="normalize-space($item-end)" /> -->
insilmaril@37
    33
	<xsl:variable name="w" select="substring-after( $item-end, ') ')" />
insilmaril@37
    34
	<xsl:if test="string($w)">
insilmaril@37
    35
		<xsl:element name="{$w}">
insilmaril@37
    36
			<xsl:value-of select="$name-end" />
insilmaril@37
    37
		</xsl:element>
insilmaril@37
    38
	</xsl:if>
insilmaril@37
    39
</xsl:template>
insilmaril@37
    40
insilmaril@37
    41
<xsl:template name="lastCall">
insilmaril@37
    42
	<xsl:param name="content" />
insilmaril@37
    43
insilmaril@37
    44
	<xsl:variable name="inTheBeginning"   select="substring-before( $content, '|' )" />
insilmaril@37
    45
	<xsl:variable name="markup-start"     select="substring-after( $content, '|' )" />
insilmaril@37
    46
	<xsl:variable name="markup-end"       select="substring-before( $markup-start, '|' )" />
insilmaril@37
    47
	<xsl:variable name="markup-after"     select="substring-after( $markup-start, concat( $markup-end, '|') )" />
insilmaril@37
    48
	
insilmaril@37
    49
	<xsl:variable name="cmd"              select="substring-before( $markup-end, ';' )" />
insilmaril@37
    50
	
insilmaril@37
    51
	<xsl:copy-of select="$inTheBeginning" />
insilmaril@37
    52
	
insilmaril@37
    53
	<xsl:choose>
insilmaril@37
    54
		<xsl:when test="string($markup-end)">
insilmaril@37
    55
			<xsl:choose>
insilmaril@37
    56
				<xsl:when test="starts-with( $markup-end, '!' )">
insilmaril@37
    57
					<span class="note"><xsl:copy-of select="substring-after( $markup-end, '!')" /></span>
insilmaril@37
    58
				</xsl:when>
insilmaril@37
    59
				<xsl:when test="starts-with( $markup-end, '/' )">
insilmaril@37
    60
					<em><xsl:copy-of select="substring-after( $markup-end, '/')" /></em>
insilmaril@37
    61
				</xsl:when>
insilmaril@37
    62
				<xsl:when test="starts-with( $markup-end, '*' )">
insilmaril@37
    63
					<pre><xsl:copy-of select="substring-after( $markup-end, '*')" /></pre>
insilmaril@37
    64
				</xsl:when>
insilmaril@37
    65
				<xsl:otherwise>
insilmaril@37
    66
					<strong><xsl:copy-of select="$markup-end" /></strong>
insilmaril@37
    67
				</xsl:otherwise>
insilmaril@37
    68
			</xsl:choose>
insilmaril@37
    69
			<xsl:call-template name="lastCall">
insilmaril@37
    70
				<xsl:with-param name="content" select="$markup-after" />
insilmaril@37
    71
			</xsl:call-template>
insilmaril@37
    72
			<!-- [<xsl:copy-of select="$markup-after" />] -->
insilmaril@37
    73
		</xsl:when>
insilmaril@37
    74
		<xsl:otherwise>
insilmaril@37
    75
			<xsl:copy-of select="$content" />
insilmaril@37
    76
		</xsl:otherwise>
insilmaril@37
    77
	</xsl:choose>
insilmaril@37
    78
	
insilmaril@37
    79
</xsl:template>
insilmaril@37
    80
insilmaril@37
    81
<xsl:template name="replace-tags">
insilmaril@37
    82
	<xsl:param name="content" />
insilmaril@37
    83
	<xsl:param name="currentID" />
insilmaril@37
    84
	<xsl:variable name="topic"><xsl:call-template name="findNext"><xsl:with-param name="content" select="$content" /></xsl:call-template></xsl:variable>
insilmaril@37
    85
	<!-- <xsl:variable name="this" select="$thisDoc/item[@id=$topic]" /> -->
insilmaril@37
    86
	<!-- <xsl:variable name="name" select="$this/@name" /> -->
insilmaril@37
    87
	<xsl:variable name="name"><xsl:call-template name="getTopicName"><xsl:with-param name="id" select="$topic" /></xsl:call-template></xsl:variable>
insilmaril@37
    88
	
insilmaril@37
    89
	<xsl:variable name="escaped-start"    select="substring-after( $content, '\{' )" />
insilmaril@37
    90
	<xsl:variable name="item-start"       select="substring-before( $content, '{' )" />
insilmaril@37
    91
insilmaril@37
    92
	<xsl:variable name="item-end"         select="substring-after( $content, '}' )" />
insilmaril@37
    93
	<xsl:variable name="escaped-end"      select="substring-after( $content, '\}' )" />
insilmaril@37
    94
insilmaril@37
    95
	<xsl:if test="string(normalize-space($item-start))">
insilmaril@37
    96
		<xsl:if test="normalize-space($escaped-start) != normalize-space($item-start)">
insilmaril@37
    97
			<xsl:call-template name="lastCall">
insilmaril@37
    98
				<xsl:with-param name="content" select="$item-start" />
insilmaril@37
    99
			</xsl:call-template>
insilmaril@37
   100
		</xsl:if>
insilmaril@37
   101
		<xsl:if test="normalize-space($escaped-start) = normalize-space($item-start)">
insilmaril@37
   102
			<xsl:call-template name="lastCall">
insilmaril@37
   103
				<xsl:with-param name="content" select="$escaped-start" />
insilmaril@37
   104
			</xsl:call-template>
insilmaril@37
   105
		</xsl:if>
insilmaril@37
   106
	</xsl:if>
insilmaril@37
   107
insilmaril@37
   108
	<xsl:variable name="middle">
insilmaril@37
   109
		<xsl:if test="string(normalize-space($topic))">
insilmaril@37
   110
		
insilmaril@37
   111
			<!-- <xsl:value-of select="$topic" />(<xsl:value-of select="substring($topic, 1)" />) -->
insilmaril@37
   112
			<xsl:choose>
insilmaril@37
   113
				<xsl:when test="substring($topic, 1, 1) = '('">
insilmaril@37
   114
				
insilmaril@37
   115
					<xsl:variable name="tmp"><xsl:value-of select="substring-before( $topic, ')' )" /></xsl:variable>
insilmaril@37
   116
					<xsl:variable name="thisName" select="substring-after( $topic, ') ' )" />
insilmaril@37
   117
					<xsl:variable name="name2">
insilmaril@37
   118
						<xsl:choose>
insilmaril@37
   119
							<xsl:when test="substring($topic, 2, 1) = '%'"><img src="{substring( $tmp, 3 )}" class="image" border="0" alt="" /></xsl:when>
insilmaril@37
   120
							<xsl:otherwise><xsl:value-of select="substring( $tmp, 2 )" /></xsl:otherwise>
insilmaril@37
   121
						</xsl:choose>	
insilmaril@37
   122
					</xsl:variable>
insilmaril@37
   123
					<xsl:choose>
insilmaril@37
   124
						<xsl:when test="starts-with($thisName, 'http')">
insilmaril@37
   125
							<xsl:element name="a">
insilmaril@37
   126
								<xsl:attribute name="href"><xsl:value-of select="$thisName" /></xsl:attribute>
insilmaril@37
   127
								<xsl:if test="substring($topic, 2, 1) != '%'">
insilmaril@37
   128
									<xsl:attribute name="class">extLink</xsl:attribute>
insilmaril@37
   129
								</xsl:if><xsl:copy-of select="$name2" />
insilmaril@37
   130
							</xsl:element>
insilmaril@37
   131
						</xsl:when>
insilmaril@37
   132
						<xsl:when test="starts-with($thisName, 'mailto')">
insilmaril@37
   133
							<xsl:element name="a">
insilmaril@37
   134
								<xsl:attribute name="href"><xsl:value-of select="$thisName" /></xsl:attribute>
insilmaril@37
   135
								<xsl:if test="substring($topic, 2, 1) != '%'">
insilmaril@37
   136
									<xsl:attribute name="class">extLink</xsl:attribute>
insilmaril@37
   137
								</xsl:if><xsl:copy-of select="$name2" />
insilmaril@37
   138
							</xsl:element>
insilmaril@37
   139
						</xsl:when>
insilmaril@37
   140
						<xsl:otherwise>
insilmaril@37
   141
							<xsl:element name="a">
insilmaril@37
   142
								<xsl:attribute name="href"><xsl:value-of select="$thisName" />.html</xsl:attribute>
insilmaril@37
   143
								<xsl:if test="not(substring($topic, 2, 1) = '%')">
insilmaril@37
   144
									<xsl:attribute name="class">topicLink</xsl:attribute>
insilmaril@37
   145
								</xsl:if>
insilmaril@37
   146
								<xsl:copy-of select="$name2" />
insilmaril@37
   147
							</xsl:element>
insilmaril@37
   148
						</xsl:otherwise>
insilmaril@37
   149
					</xsl:choose>
insilmaril@37
   150
	
insilmaril@37
   151
				</xsl:when>
insilmaril@37
   152
				<xsl:when test="substring($topic, 1, 1) = '!' and string($supportMenu)">
insilmaril@37
   153
					<menu style="{substring-after($topic, '!')}"/>
insilmaril@37
   154
				</xsl:when>
insilmaril@37
   155
				<xsl:when test="substring($topic, 1, 1) = '#' and string($supportShowme)">
insilmaril@37
   156
					<show-me what="{substring-after($topic, '#')}" id="{$currentID}" />
insilmaril@37
   157
				</xsl:when>
insilmaril@37
   158
				<xsl:when test="substring($topic, 1, 1) = '+' and string($supportSource)">
insilmaril@37
   159
					<div class="viewSource"><a href="content/{$currentID}.orig" class="viewSource">view content source file</a></div>
insilmaril@37
   160
				</xsl:when>
insilmaril@37
   161
				<xsl:when test="substring($topic, 1, 1) = '%' and string($supportImage)">
insilmaril@37
   162
					<image href="{substring-after($topic, '%')}" id="{$currentID}" />
insilmaril@37
   163
				</xsl:when>
insilmaril@37
   164
				<xsl:when test="starts-with($topic, 'http')">
insilmaril@37
   165
					<xsl:element name="a">
insilmaril@37
   166
						<xsl:attribute name="href"><xsl:value-of select="$topic" /></xsl:attribute>
insilmaril@37
   167
						<xsl:attribute name="class">extLink</xsl:attribute><xsl:value-of select="$topic" />
insilmaril@37
   168
					</xsl:element>
insilmaril@37
   169
				</xsl:when>
insilmaril@37
   170
				<xsl:otherwise>
insilmaril@37
   171
					<xsl:element name="a">
insilmaril@37
   172
						<xsl:attribute name="href"><xsl:value-of select="$topic" />.html</xsl:attribute>
insilmaril@37
   173
						<xsl:attribute name="class">topicLink</xsl:attribute><xsl:value-of select="$name" />
insilmaril@37
   174
					</xsl:element>
insilmaril@37
   175
				</xsl:otherwise>
insilmaril@37
   176
			</xsl:choose>
insilmaril@37
   177
			
insilmaril@37
   178
		</xsl:if>
insilmaril@37
   179
	</xsl:variable>
insilmaril@37
   180
insilmaril@37
   181
			<xsl:call-template name="lastCall">
insilmaril@37
   182
				<xsl:with-param name="content" select="$middle" />
insilmaril@37
   183
			</xsl:call-template>
insilmaril@37
   184
<!-- 	<xsl:copy-of select="$middle" />
insilmaril@37
   185
 -->
insilmaril@37
   186
	<xsl:variable name="more">
insilmaril@37
   187
		<xsl:call-template name="findNext">
insilmaril@37
   188
			<xsl:with-param name="content" select="$item-end" />
insilmaril@37
   189
		</xsl:call-template>
insilmaril@37
   190
	</xsl:variable>
insilmaril@37
   191
	
insilmaril@37
   192
	<xsl:choose>
insilmaril@37
   193
		<xsl:when test="string(normalize-space($more))">
insilmaril@37
   194
			<xsl:call-template name="replace-tags"><xsl:with-param name="content" select="$item-end" /><xsl:with-param name="currentID" select="$currentID" /></xsl:call-template>
insilmaril@37
   195
		</xsl:when>
insilmaril@37
   196
		<xsl:otherwise>
insilmaril@37
   197
			<xsl:if test="string(normalize-space($item-end))">
insilmaril@37
   198
				<xsl:call-template name="lastCall">
insilmaril@37
   199
					<xsl:with-param name="content" select="$item-end" />
insilmaril@37
   200
				</xsl:call-template>
insilmaril@37
   201
<!-- 				<xsl:copy-of select="$item-end" />
insilmaril@37
   202
 -->			</xsl:if>
insilmaril@37
   203
		</xsl:otherwise>
insilmaril@37
   204
	</xsl:choose>
insilmaril@37
   205
insilmaril@37
   206
	<xsl:if test="not(string(normalize-space($item-start))) and not(string(normalize-space($item-end))) and not(string(normalize-space($topic)))">
insilmaril@37
   207
			<xsl:call-template name="lastCall">
insilmaril@37
   208
				<xsl:with-param name="content" select="$content" />
insilmaril@37
   209
			</xsl:call-template>
insilmaril@37
   210
<!-- 		<xsl:copy-of select="$content" /> -->
insilmaril@37
   211
	</xsl:if>
insilmaril@37
   212
insilmaril@37
   213
</xsl:template>
insilmaril@37
   214
insilmaril@37
   215
<xsl:template name="markupLine">
insilmaril@37
   216
	<xsl:param name="content" />
insilmaril@37
   217
	<xsl:param name="currentID" />
insilmaril@37
   218
	<xsl:variable name="first" select="substring($content, 1, 1)" />
insilmaril@37
   219
	<xsl:variable name="c">
insilmaril@37
   220
		<xsl:if test="$wikistyle">
insilmaril@37
   221
		  <xsl:if test="string($first) = '?'">question</xsl:if>
insilmaril@37
   222
		  <xsl:if test="string($first) = '='">answer</xsl:if>
insilmaril@37
   223
		  <xsl:if test="string($first) = '!'">note</xsl:if>
insilmaril@37
   224
		  <xsl:if test="string($first) = '*'">point</xsl:if>
insilmaril@37
   225
		  <xsl:if test="string($first) = '.'">indent</xsl:if>
insilmaril@37
   226
		  <xsl:if test="string($first) = '|'">code</xsl:if>
insilmaril@37
   227
		  <xsl:if test="string($first) = ':'">blank</xsl:if>
insilmaril@37
   228
		  <xsl:if test="string($first) = '-'">headerSmall</xsl:if>
insilmaril@37
   229
		  <xsl:if test="string($first) = '+'">headerLarge</xsl:if>
insilmaril@37
   230
		  <xsl:if test="string($first) = '#'">meta</xsl:if>
insilmaril@37
   231
		</xsl:if>
insilmaril@37
   232
		<xsl:if test="not($wikistyle)"></xsl:if>
insilmaril@37
   233
	</xsl:variable>
insilmaril@37
   234
insilmaril@37
   235
	<!-- <xsl:message>
insilmaril@37
   236
		<xsl:text>c: </xsl:text><xsl:value-of select="$c"/>
insilmaril@37
   237
		<xsl:text> wikistyle: </xsl:text><xsl:value-of select="$wikistyle"/>
insilmaril@37
   238
	</xsl:message> -->
insilmaril@37
   239
	
insilmaril@37
   240
	<xsl:variable name="cont">
insilmaril@37
   241
		<xsl:if test="string($c) and $wikistyle">
insilmaril@37
   242
			<xsl:copy-of select="substring($content, 2)" /></xsl:if>
insilmaril@37
   243
		<xsl:if test="not(string($c))">
insilmaril@37
   244
			<xsl:copy-of select="$content" /></xsl:if>
insilmaril@37
   245
	</xsl:variable>
insilmaril@37
   246
	
insilmaril@37
   247
	<xsl:variable name="class">
insilmaril@37
   248
		<xsl:if test="string($c)">
insilmaril@37
   249
			<xsl:copy-of select="$c" /></xsl:if>
insilmaril@37
   250
		<xsl:if test="not(string($c))">normal</xsl:if>
insilmaril@37
   251
	</xsl:variable>
insilmaril@37
   252
	
insilmaril@37
   253
	<xsl:choose>
insilmaril@37
   254
		<xsl:when test="$c = 'meta'">
insilmaril@37
   255
			<xsl:variable name="what" select="$cont" />
insilmaril@37
   256
			<xsl:variable name="before" select="substring-before($what, '=')" />
insilmaril@37
   257
			<xsl:variable name="after" select="substring-after($what, '=')" />
insilmaril@37
   258
			<xsl:if test="string($before)">
insilmaril@37
   259
				<xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text><xsl:copy-of select="normalize-space($before)" /><xsl:text disable-output-escaping="yes"><![CDATA[>]]></xsl:text>
insilmaril@37
   260
					<xsl:copy-of select="$after" />
insilmaril@37
   261
				<xsl:text disable-output-escaping="yes"><![CDATA[</]]></xsl:text><xsl:copy-of select="normalize-space($before)" /><xsl:text disable-output-escaping="yes"><![CDATA[>]]></xsl:text>
insilmaril@37
   262
			</xsl:if>
insilmaril@37
   263
		</xsl:when>
insilmaril@37
   264
		<xsl:when test="$c = 'code'">
insilmaril@37
   265
			<p class="{$class}"><xsl:copy-of select="$cont" /></p>
insilmaril@37
   266
		</xsl:when>
insilmaril@37
   267
		<xsl:when test="not($wikistyle)">
insilmaril@37
   268
			<p class="{$class}"><xsl:copy-of select="$cont" /></p>
insilmaril@37
   269
			<!-- <xsl:message terminate="yes" /> -->
insilmaril@37
   270
		</xsl:when>
insilmaril@37
   271
		<xsl:otherwise>
insilmaril@37
   272
			<p class="{$class}"><xsl:call-template name="replace-tags"><xsl:with-param name="content" select="$cont" /><xsl:with-param name="currentID" select="$currentID" /></xsl:call-template></p>
insilmaril@37
   273
		</xsl:otherwise>
insilmaril@37
   274
	</xsl:choose>
insilmaril@37
   275
</xsl:template>
insilmaril@37
   276
insilmaril@37
   277
<xsl:template name="doLine">
insilmaril@37
   278
	<xsl:param name="content" />
insilmaril@37
   279
	<xsl:param name="currentID" />
insilmaril@37
   280
	<xsl:variable name="line" select="normalize-space(concat( substring-before( $content, $controlCharacter ), $controlCharacter))" />
insilmaril@37
   281
	<xsl:variable name="lineClear" select="normalize-space(translate( $line,  $controlCharacter, ' ' ))" />
insilmaril@37
   282
	<xsl:variable name="next" select="normalize-space(substring-after( $content, $line ))" />
insilmaril@37
   283
<!-- 	[<xsl:value-of select="$content" />]<br/>
insilmaril@37
   284
	[<xsl:value-of select="$line" />]<br/>
insilmaril@37
   285
	[<xsl:value-of select="$lineClear" />]<br/>
insilmaril@37
   286
	[<xsl:value-of select="$next" />]<br/> -->
insilmaril@37
   287
	<xsl:if test="string(normalize-space($lineClear))">
insilmaril@37
   288
		<xsl:call-template name="markupLine"><xsl:with-param name="content"><xsl:copy-of select="$lineClear" /></xsl:with-param><xsl:with-param name="currentID" select="$currentID" /></xsl:call-template>
insilmaril@37
   289
	</xsl:if>
insilmaril@37
   290
	<xsl:if test="string(normalize-space($next))">
insilmaril@37
   291
		<xsl:call-template name="doLine"><xsl:with-param name="content"><xsl:copy-of select="$next" /></xsl:with-param><xsl:with-param name="currentID" select="$currentID" /></xsl:call-template>
insilmaril@37
   292
	</xsl:if>
insilmaril@37
   293
</xsl:template>
insilmaril@37
   294
insilmaril@37
   295
</xsl:stylesheet>