aboutsummaryrefslogtreecommitdiff
path: root/x2s.xsl
blob: a1633c69e921da4d6f0382353df3e7b458c069b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:regexp="http://exslt.org/regular-expressions"
 extension-element-prefixes="regexp"
>
 <xsl:output method="xml" indent="yes"/>
 
 <xsl:template match="/website">
  <sitemap src="{@sourceDir}" dest="{@targetDir}">
   <xsl:apply-templates select="structure/section/*"/>
   <xsl:apply-templates select="layout/documentStyle"/>
  </sitemap>
 </xsl:template>
 
 <xsl:template match="section">
  <section name="{@name}">
   <xsl:if test="@title"><xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute></xsl:if>
   <xsl:if test="@sourceDir"><xsl:attribute name="src"><xsl:value-of select="@sourceDir"/></xsl:attribute></xsl:if>
   <xsl:if test="@targetDir"><xsl:attribute name="dest"><xsl:value-of select="@targetDir"/></xsl:attribute></xsl:if>
   <xsl:apply-templates select="*"/>
  </section>
 </xsl:template>
 
 <xsl:template match="directory">
  <section name="{@id}">
   <xsl:if test="@title"><xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute></xsl:if>
   <xsl:if test="@sourceDir"><xsl:attribute name="src"><xsl:value-of select="@sourceDir"/></xsl:attribute></xsl:if>
   <xsl:if test="@targetDir"><xsl:attribute name="dest"><xsl:value-of select="@targetDir"/></xsl:attribute></xsl:if>
   <xsl:apply-templates select="*"/>
  </section>
 </xsl:template>
 
 <xsl:template match="homepage">
  <main name="{@name}" src="{@sourceFile}" dest="{@targetFile}" type="{@type}" />
 </xsl:template>
 <xsl:template match="entry">
  <page name="{@name}" src="{@sourceFile}" dest="{@targetFile}" type="{@type}" />
 </xsl:template>
 <xsl:template match="file">
  <page name="{@id}" src="{@sourceFile}" dest="{@targetFile}" type="{@type}" visible="no"/>
 </xsl:template>
 
 <xsl:template match="documentStyle[child::xsl]">
  <type name="{@type}">
   <xsl:apply-templates select="xsl"/>
  </type>
 </xsl:template>
 <xsl:template match="xsl">
  <xsl:apply-templates select="child::xsl"/>
  <xslt href="{@stylesheet}">
   <xsl:for-each select="parameter"><param name="{@name}"><xsl:value-of select="@value"/></param></xsl:for-each>
  </xslt>
 </xsl:template>
 
 <xsl:template match="documentStyle[child::copy]">
  <type name="{@type}">
   <command>mkdir -p `dirname $@`;cp $^ $@</command>
  </type>
 </xsl:template>
 
  <xsl:template name="str-subst">
    <xsl:param name="text"/>
    <xsl:param name="replace"/>
    <xsl:param name="with"/>
 
    <xsl:choose>
      <xsl:when test="string-length($replace) = 0">
        <xsl:value-of select="$text"/>
      </xsl:when>
      <xsl:when test="contains($text, $replace)">
 
<xsl:variable name="before" select="substring-before($text, $replace)"/>
<xsl:variable name="after" select="substring-after($text, $replace)"/>
 
<xsl:value-of select="$before"/>
<xsl:value-of select="$with"/>
        <xsl:call-template name="str-subst">
  <xsl:with-param name="text" select="$after"/>
  <xsl:with-param name="replace" select="$replace"/>
  <xsl:with-param name="with" select="$with"/>
</xsl:call-template>
      </xsl:when> 
      <xsl:otherwise>
        <xsl:value-of select="$text"/>  
      </xsl:otherwise>
    </xsl:choose>            
  </xsl:template>
 
 <xsl:template match="documentStyle[child::programCall]">
  <type name="{@type}">
   <xsl:for-each select="programCall"><command><xsl:call-template name="str-subst"><xsl:with-param name="text"><xsl:call-template name="str-subst"><xsl:with-param name="text" select="@command"/><xsl:with-param name="replace" select="'%s'"/><xsl:with-param name="with" select="'$^'"/></xsl:call-template></xsl:with-param><xsl:with-param name="replace" select="'%d'"/><xsl:with-param name="with" select="'$@'"/></xsl:call-template></command></xsl:for-each>
  </type>
 </xsl:template>
 
</xsl:stylesheet>