1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
3
4<xsl:output indent="yes"/>
5
6<!--
7     Extract all the parameters from the XSL stylesheets.
8     Example of use:
9
10     xsltproc extractparam.xsl docbook.xsl > paramgroup.xml
11     xsltproc -.-param chunk 1 extractparam.xsl docbook.xsl
12-->
13<xsl:param name="chunk" select="0"/>
14<xsl:param name="chunk.prefix" select="''"/>
15<xsl:param name="chunk.suffix" select="'sxml'"/>
16
17<xsl:include href="../xsl/chunker.xsl"/>
18
19<xsl:template match="/">
20  <xsl:choose>
21  <xsl:when test="$chunk = 0">
22    <xsl:element name="xsl:paramgroup">
23      <xsl:apply-templates select="xsl:stylesheet"/>
24    </xsl:element>
25  </xsl:when>
26  <xsl:otherwise>
27    <xsl:apply-templates select="xsl:stylesheet"/>
28  </xsl:otherwise>
29  </xsl:choose>
30</xsl:template>
31
32<xsl:template match="@*|node()">
33  <xsl:copy>
34    <xsl:apply-templates select="@*|node()"/>
35  </xsl:copy>
36</xsl:template>
37
38<xsl:template match="xsl:param">
39
40  <xsl:message>
41    <xsl:value-of select="@name"/>
42    <xsl:text> = </xsl:text>
43    <xsl:choose>
44    <xsl:when test=". != ''">
45      <xsl:value-of select="."/>
46      <xsl:text> (string)</xsl:text>
47    </xsl:when>
48    <xsl:when test="@select">
49      <xsl:value-of select="@select"/>
50      <xsl:text> (select) </xsl:text>
51      <xsl:choose>
52      <xsl:when test="@select = number(@select)">
53        <xsl:text> (number) </xsl:text>
54      </xsl:when>
55      <xsl:otherwise>
56        <xsl:text> (string) </xsl:text>
57      </xsl:otherwise>
58      </xsl:choose>
59    </xsl:when>
60    <xsl:otherwise>
61      <xsl:text> (empty) </xsl:text>
62    </xsl:otherwise>
63    </xsl:choose>
64  </xsl:message>
65
66  <!-- copy the parameter -->
67  <xsl:variable name="param">
68    <xsl:element name="xsl:param">
69      <xsl:apply-templates select="@*|node()" />
70    </xsl:element>
71  </xsl:variable>
72
73  <!-- put it in the main stream, or chunk as a new file -->
74  <xsl:choose>
75  <xsl:when test="$chunk = 0">
76    <xsl:copy-of select="$param"/>
77  </xsl:when>
78  <xsl:otherwise>
79    <xsl:call-template name="write.chunk">
80      <xsl:with-param name="filename">
81        <xsl:value-of select="$chunk.prefix"/>
82        <xsl:value-of select="@name"/>
83        <xsl:text>.</xsl:text>
84        <xsl:value-of select="$chunk.suffix"/>
85      </xsl:with-param>
86      <xsl:with-param name="omit-xml-declaration" select="'yes'"/>
87      <xsl:with-param name="method" select="'xml'"/>
88      <xsl:with-param name="content" select="$param"/>
89      <xsl:with-param name="indent" select="'yes'"/>
90    </xsl:call-template>
91  </xsl:otherwise>
92  </xsl:choose>
93
94</xsl:template>
95
96
97<xsl:template match="xsl:stylesheet">
98  <xsl:apply-templates select="xsl:param"/>
99  <xsl:apply-templates select="xsl:include"/>
100</xsl:template>
101
102
103<xsl:template match="xsl:include">
104  <xsl:variable name="doc" select="document(@href)"/>
105
106  <xsl:message>Params defined in <xsl:value-of select="@href"/></xsl:message>
107
108  <xsl:apply-templates select="$doc/xsl:stylesheet"/>
109</xsl:template>
110
111</xsl:stylesheet>
112