geo_combine 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,267 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
+
4
+
5
+ <!--
6
+ Print the text of an XML element as preformatted text or wrapped paragraphs,
7
+ as appropriate. Makes the text readable on screen, and preserves the author's
8
+ intended formatting.
9
+
10
+ Created 6/20/06 Richard.Fozzard@noaa.gov
11
+
12
+ @version $Id$
13
+
14
+ The stylesheet that imports this file needs to define two callback templates:
15
+ printFormattedLine Output a line, preserving all formatting (whitespace)
16
+ printParagraphLine Output a line as a continuous paragraph (word-wrapped)
17
+ both with the param "line", the one line string to print.
18
+
19
+ Each callback template then outputs the "line" string as desired (e.g. HTML,
20
+ text, XML). These templates can have some optional params which printFormatted
21
+ will pass through as needed:
22
+ "restOfString" Useful for doing something different at the end, e.g. no <P>
23
+ "optional-param-1" Useful for passing indent values
24
+ "optional-param-2" or word wrap widths...
25
+ "optional-param-3" or whatever...
26
+
27
+ Then, whenever a string of one or more lines needs to be output, call the
28
+ printFormatted template with the params:
29
+ "elementContent" a one or more line string to print
30
+ "formattedSectionElement" Name of element to wrap a sequence of formatted lines
31
+ defaults to 'PRE', can be none, i.e. ''
32
+ plus any of the desired optional params for the callbacks
33
+ -->
34
+
35
+
36
+ <!--
37
+ g-fold-width
38
+ This parameter specifies the maximum length of a line when the
39
+ formattedSectionElement (<pre> by default) is used. The browser
40
+ may wrap PRE text at this width.
41
+ [only works in Firefox 1+]
42
+ -->
43
+ <!-- xsl:param name="g-fold-width" select="'80'"/ -->
44
+
45
+
46
+ <!-- Whitespace characters -->
47
+ <xsl:variable name="newline">
48
+ <xsl:text>&#10;</xsl:text>
49
+ </xsl:variable>
50
+
51
+ <xsl:variable name="tab">
52
+ <xsl:text>&#9;</xsl:text>
53
+ </xsl:variable>
54
+
55
+
56
+ <xsl:template name="printFormatted">
57
+ <!-- string to print out -->
58
+ <xsl:param name="elementContent"/>
59
+ <!-- Name of element to wrap a sequence of formatted lines.
60
+ Set to empty string for no element, i.e. plain text output. -->
61
+ <xsl:param name="formattedSectionElement" select="'PRE'"/>
62
+ <!-- used internally to skip 1 or more formatted lines -->
63
+ <xsl:param name="skipFormattedLines" select="false()"/>
64
+ <!-- if needed by callback template: -->
65
+ <xsl:param name="optional-param-1"/>
66
+ <xsl:param name="optional-param-2"/>
67
+ <xsl:param name="optional-param-3"/>
68
+
69
+ <xsl:if test="$elementContent"><!-- if not at end of string -->
70
+ <xsl:variable name="containsNewline" select="contains($elementContent,$newline)"/>
71
+ <xsl:variable name="firstLine">
72
+ <xsl:call-template name="strip-trailing-whitespace">
73
+ <xsl:with-param name="content">
74
+ <xsl:choose>
75
+ <xsl:when test="$containsNewline">
76
+ <xsl:value-of select="substring-before($elementContent,$newline)"/>
77
+ </xsl:when>
78
+ <xsl:otherwise>
79
+ <xsl:value-of select="$elementContent"/>
80
+ </xsl:otherwise>
81
+ </xsl:choose>
82
+ </xsl:with-param>
83
+ </xsl:call-template>
84
+ </xsl:variable>
85
+
86
+ <xsl:variable name="restOfString" select="substring-after($elementContent,$newline)"/>
87
+
88
+ <!-- This line is formatted if it has 3 spaces or a tab or empty line -->
89
+ <xsl:variable name="thisLineFormatted"
90
+ select="$firstLine = '' or contains($firstLine,' ') or contains($firstLine,$tab)"/>
91
+
92
+
93
+ <xsl:choose>
94
+ <!-- if a formatted line -->
95
+ <xsl:when test="$thisLineFormatted = true()">
96
+
97
+ <!-- if at start of a formatted section, and it's a non-empty line before the end of the element, print it -->
98
+ <xsl:if test="not($skipFormattedLines) and (normalize-space($firstLine) or normalize-space($restOfString))">
99
+ <xsl:choose>
100
+ <!-- if specified, wrap a formatted section (1 or more lines) in an element -->
101
+ <xsl:when test="$formattedSectionElement">
102
+ <xsl:element name="{$formattedSectionElement}">
103
+ <xsl:attribute name="wrap"/><!-- works on Firefox 1.5+, not on IE 6/7, Safari 2 -->
104
+ <!-- xsl:attribute name="width"><xsl:value-of select="$g-fold-width"/></xsl:attribute -->
105
+ <xsl:call-template name="printFormattedSection">
106
+ <xsl:with-param name="elementContent" select="$elementContent"/>
107
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
108
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
109
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
110
+ </xsl:call-template>
111
+ </xsl:element>
112
+ </xsl:when>
113
+
114
+ <!-- else if no element specified,
115
+ output a formatted section (1 or more lines) directly -->
116
+ <xsl:otherwise>
117
+ <xsl:call-template name="printFormattedSection">
118
+ <xsl:with-param name="elementContent" select="$elementContent"/>
119
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
120
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
121
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
122
+ </xsl:call-template>
123
+ </xsl:otherwise>
124
+ </xsl:choose>
125
+ </xsl:if>
126
+
127
+ <!-- go to next line, recursively until next non-formatted line or end of string -->
128
+ <xsl:call-template name="printFormatted">
129
+ <xsl:with-param name="elementContent" select="$restOfString"/>
130
+ <xsl:with-param name="formattedSectionElement" select="$formattedSectionElement"/>
131
+ <xsl:with-param name="skipFormattedLines" select="true()"/>
132
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
133
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
134
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
135
+ </xsl:call-template>
136
+
137
+ </xsl:when>
138
+
139
+ <!-- else not a formatted line; treat as paragraph -->
140
+ <xsl:otherwise>
141
+
142
+ <!-- make callback to importing stylesheet to print the paragraph -->
143
+ <xsl:call-template name="printParagraphLine">
144
+ <xsl:with-param name="line" select="$firstLine"/>
145
+ <xsl:with-param name="restOfString" select="$restOfString"/>
146
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
147
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
148
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
149
+ </xsl:call-template>
150
+
151
+ <!-- go to next line, recursively until non-formatted line or end of string -->
152
+ <xsl:call-template name="printFormatted">
153
+ <xsl:with-param name="elementContent" select="$restOfString"/>
154
+ <xsl:with-param name="formattedSectionElement" select="$formattedSectionElement"/>
155
+ <xsl:with-param name="skipFormattedLines" select="false()"/>
156
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
157
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
158
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
159
+ </xsl:call-template>
160
+
161
+ </xsl:otherwise>
162
+ </xsl:choose>
163
+
164
+ </xsl:if>
165
+ </xsl:template>
166
+
167
+
168
+
169
+ <xsl:template name="printFormattedSection">
170
+ <xsl:param name="elementContent"/><!-- string to print out -->
171
+ <!-- if needed by callback template: -->
172
+ <xsl:param name="optional-param-1"/>
173
+ <xsl:param name="optional-param-2"/>
174
+ <xsl:param name="optional-param-3"/>
175
+
176
+ <xsl:if test="$elementContent"><!-- if not at end of string -->
177
+ <xsl:variable name="firstLine">
178
+ <xsl:call-template name="strip-trailing-whitespace">
179
+ <xsl:with-param name="content" select="substring-before($elementContent,$newline)"/>
180
+ </xsl:call-template>
181
+ </xsl:variable>
182
+
183
+ <xsl:variable name="restOfString" select="substring-after($elementContent,$newline)"/>
184
+
185
+ <!-- This line is formatted if it has 3 spaces or a tab or empty line -->
186
+ <xsl:variable name="thisLineFormatted"
187
+ select="$firstLine = '' or contains($firstLine,' ') or contains($firstLine,$tab)"/>
188
+
189
+
190
+ <xsl:if test="$thisLineFormatted = true()"><!-- if a formatted line -->
191
+ <!-- make callback to importing stylesheet to print the formatted line -->
192
+ <xsl:call-template name="printFormattedLine">
193
+ <xsl:with-param name="line" select="$firstLine"/>
194
+ <xsl:with-param name="restOfString" select="$restOfString"/>
195
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
196
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
197
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
198
+ </xsl:call-template>
199
+
200
+ <!-- recursively call self until all formatted lines written -->
201
+ <xsl:call-template name="printFormattedSection">
202
+ <xsl:with-param name="elementContent" select="$restOfString"/>
203
+ <xsl:with-param name="optional-param-1" select="$optional-param-1"/>
204
+ <xsl:with-param name="optional-param-2" select="$optional-param-2"/>
205
+ <xsl:with-param name="optional-param-3" select="$optional-param-3"/>
206
+ </xsl:call-template>
207
+ </xsl:if>
208
+ <!-- do nothing and end recursion if we find a non-formatted, plain line -->
209
+ </xsl:if>
210
+
211
+ </xsl:template>
212
+
213
+
214
+
215
+
216
+
217
+ <!--
218
+ Strip the leading white space (including newlines or other characters
219
+ that get translated to white space by normalize-space) from a block
220
+ of text.
221
+
222
+ [Stolen from somewhere on the web using Google.]
223
+ -->
224
+
225
+ <xsl:template name="strip-leading-whitespace">
226
+ <xsl:param name="content"/>
227
+ <xsl:variable name="normalized-text" select="normalize-space($content)"/>
228
+ <xsl:variable name="first-char" select="substring($normalized-text,1,1)"/>
229
+ <xsl:variable name="leading-spaces" select="substring-before($content,$first-char)"/>
230
+ <xsl:choose>
231
+ <xsl:when test="string-length($leading-spaces) &gt; 0">
232
+ <xsl:value-of select="substring-after($content,$leading-spaces)"/>
233
+ </xsl:when>
234
+ <xsl:otherwise>
235
+ <xsl:value-of select="$content"/>
236
+ </xsl:otherwise>
237
+ </xsl:choose>
238
+ </xsl:template>
239
+
240
+
241
+ <!--
242
+ Strip the trailing white space (including newlines or other characters
243
+ that get translated to white space by normalize-space) from a block
244
+ of text.
245
+
246
+ [Stolen from somewhere on the web using Google.]
247
+ -->
248
+
249
+ <xsl:template name="strip-trailing-whitespace">
250
+ <xsl:param name="content"/>
251
+ <xsl:param name="i" select="string-length($content)"/>
252
+ <xsl:choose>
253
+ <xsl:when test="translate(substring($content, $i, 1), ' &#9;&#10;&#13;', '')">
254
+ <xsl:value-of select="substring($content,1,$i)"/>
255
+ </xsl:when>
256
+ <xsl:when test="$i &lt; 2"/><!-- done! -->
257
+ <xsl:otherwise>
258
+ <xsl:call-template name="strip-trailing-whitespace">
259
+ <xsl:with-param name="content" select="$content"/>
260
+ <xsl:with-param name="i" select="$i - 1"/>
261
+ </xsl:call-template>
262
+ </xsl:otherwise>
263
+ </xsl:choose>
264
+
265
+ </xsl:template>
266
+
267
+ </xsl:stylesheet>
@@ -0,0 +1,192 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
+
4
+
5
+ <!--
6
+ Print an XML element as plain formatted text or wrapped paragraphs,
7
+ as appropriate. Makes the text readable on screen, and preserves the author's
8
+ intended formatting.
9
+
10
+ [The 'fold' and 'chop' templates come from original xml-to-text.xsl by Joe
11
+ Shirley.]
12
+
13
+ Created 6/20/06 Richard.Fozzard@noaa.gov
14
+
15
+ @version $Id$
16
+
17
+ This file defines two callback templates used by printFormatted.xsl:
18
+ printFormattedLine Output a line, preserving all formatting (whitespace)
19
+ printParagraphLine Output a line as a continuous paragraph (word-wrapped)
20
+
21
+ -->
22
+
23
+ <!--
24
+ g-fold-width
25
+ This parameter specifies the maximum length of a line when the
26
+ 'fold' text formatting option is chosen. This parameter is ignored
27
+ for other text formatting options.
28
+ -->
29
+ <xsl:param name="g-fold-width" select="'80'"/>
30
+
31
+ <!--
32
+ g-fold-character
33
+ This parameter specifies where a line may be broken when the
34
+ 'fold' text formatting option is chosen. This parameter is ignored
35
+ for other text formatting options.
36
+ -->
37
+ <xsl:param name="g-fold-character" select="' '"/>
38
+
39
+ <xsl:variable name="newline">
40
+ <xsl:text>&#10;</xsl:text>
41
+ </xsl:variable>
42
+
43
+ <xsl:variable name="tab">
44
+ <xsl:text>&#9;</xsl:text>
45
+ </xsl:variable>
46
+
47
+ <!-- Output a single line formatted with all white space preserved. Indent each line
48
+ to the current indent level.
49
+ -->
50
+ <xsl:template name="printFormattedLine">
51
+ <xsl:param name="line"/>
52
+ <xsl:param name="restOfString"/>
53
+ <xsl:param name="optional-param-1"/>
54
+
55
+ <xsl:variable name="indent" select="$optional-param-1"/>
56
+
57
+ <!-- Print next line, unless it's a blank line after final text line. -->
58
+ <xsl:if test="(string-length($line) &gt; 0) or (string-length(normalize-space($restOfString)) &gt; 0)">
59
+ <xsl:value-of select="$indent"/>
60
+ <xsl:value-of select="$line"/>
61
+ <xsl:value-of select="$newline"/>
62
+ </xsl:if>
63
+
64
+ </xsl:template>
65
+
66
+
67
+ <!-- Output a single line formatted as a word-wrapped paragraph. Indent each line
68
+ to the current indent level. Use 'fold' template to do the word-wrapping.
69
+ -->
70
+ <xsl:template name="printParagraphLine">
71
+ <xsl:param name="line"/>
72
+ <xsl:param name="restOfString"/>
73
+ <xsl:param name="optional-param-1"/>
74
+ <xsl:param name="optional-param-2"/>
75
+
76
+ <xsl:variable name="indent" select="$optional-param-1"/>
77
+ <xsl:variable name="length" select="$optional-param-2"/>
78
+
79
+ <!-- Print line with 'fold', unless it's a blank line after final text line. -->
80
+ <xsl:if test="(string-length($line) &gt; 0) or (string-length(normalize-space($restOfString)) &gt; 0)">
81
+ <xsl:value-of select="$indent"/><!-- fold doesn't indent first line -->
82
+ <xsl:call-template name="fold">
83
+ <xsl:with-param name="original-string" select="normalize-space($line)"/>
84
+ <xsl:with-param name="length" select="$length"/>
85
+ <xsl:with-param name="indent" select="$indent"/>
86
+ </xsl:call-template>
87
+ </xsl:if>
88
+
89
+ </xsl:template>
90
+
91
+ <!--
92
+ Text formatting template. Create line breaks. Indent each line to
93
+ the current indent level. Return the next line each time the
94
+ template is called.
95
+ -->
96
+
97
+ <xsl:template name="fold">
98
+ <xsl:param name="original-string"/>
99
+ <xsl:param name="length"/>
100
+ <xsl:param name="indent"/>
101
+ <xsl:param name="fold-width" select="$g-fold-width"/>
102
+ <xsl:variable name="printstring">
103
+ <xsl:choose>
104
+ <xsl:when test="string-length($original-string) &gt; number($length)">
105
+ <!-- Text is longer than max, chop it down and print next line. -->
106
+ <xsl:call-template name="chop">
107
+ <xsl:with-param name="newstring" select="''"/>
108
+ <xsl:with-param name="original-string" select="$original-string"/>
109
+ <xsl:with-param name="length" select="$length"/>
110
+ </xsl:call-template>
111
+ </xsl:when>
112
+ <xsl:otherwise>
113
+ <xsl:value-of select="$original-string"/>
114
+ </xsl:otherwise>
115
+ </xsl:choose>
116
+ </xsl:variable>
117
+ <xsl:value-of select="$printstring"/>
118
+ <xsl:value-of select="$newline"/>
119
+ <xsl:variable name="str" select="substring-after($original-string, $printstring)"/>
120
+ <xsl:if test="string-length($str)">
121
+ <!-- More text, call fold recursively. -->
122
+ <xsl:value-of select="$indent"/>
123
+ <xsl:call-template name="fold">
124
+ <xsl:with-param name="original-string" select="$str"/>
125
+ <xsl:with-param name="length" select="number($fold-width) - string-length($indent)"/>
126
+ <xsl:with-param name="indent" select="$indent"/>
127
+ </xsl:call-template>
128
+ </xsl:if>
129
+ </xsl:template>
130
+
131
+
132
+ <!--
133
+ Create line breaks. Break only at specified line break
134
+ character. If possible keep lines less than a specified maximum
135
+ length, otherwise break at first acceptable character after
136
+ maximum length. Return one line each time the template is called.
137
+ -->
138
+
139
+ <xsl:template name="chop">
140
+ <xsl:param name="newstring"/>
141
+ <xsl:param name="original-string"/>
142
+ <xsl:param name="char" select="$g-fold-character"/>
143
+ <xsl:param name="length"/>
144
+ <xsl:variable name="str1">
145
+ <!-- str1 is the part before the break. -->
146
+ <xsl:choose>
147
+ <xsl:when test="contains($original-string, $char)">
148
+ <!-- The text contains a break character, chop it off. -->
149
+ <xsl:value-of select="concat($newstring, substring-before($original-string, $char), $char)"/>
150
+ </xsl:when>
151
+ <xsl:otherwise>
152
+ <!-- The text contains no break character, use it all. -->
153
+ <xsl:value-of select="concat($newstring, $original-string)"/>
154
+ </xsl:otherwise>
155
+ </xsl:choose>
156
+ </xsl:variable>
157
+ <xsl:variable name="str2">
158
+ <!-- str2 is the part after the break. -->
159
+ <xsl:choose>
160
+ <xsl:when test="contains($original-string, $char)">
161
+ <!-- The text contains a break character, take what is after that. -->
162
+ <xsl:value-of select="substring-after($original-string, $char)"/>
163
+ </xsl:when>
164
+ <xsl:otherwise>
165
+ <!-- The text contains no break character, use an empty string. -->
166
+ <xsl:value-of select="''"/>
167
+ </xsl:otherwise>
168
+ </xsl:choose>
169
+ </xsl:variable>
170
+ <xsl:choose>
171
+ <xsl:when test="(string-length($str1) &lt; number($length)) and $str2">
172
+ <xsl:variable name="return-value">
173
+ <xsl:call-template name="chop">
174
+ <xsl:with-param name="newstring" select="$str1"/>
175
+ <xsl:with-param name="original-string" select="$str2"/>
176
+ <xsl:with-param name="char" select="$char"/>
177
+ <xsl:with-param name="length" select="$length"/>
178
+ </xsl:call-template>
179
+ </xsl:variable>
180
+ <xsl:value-of select="$return-value"/>
181
+ </xsl:when>
182
+ <xsl:when test="$newstring">
183
+ <xsl:value-of select="$newstring"/>
184
+ </xsl:when>
185
+ <xsl:otherwise>
186
+ <xsl:value-of select="$str1"/>
187
+ </xsl:otherwise>
188
+ </xsl:choose>
189
+ </xsl:template>
190
+
191
+
192
+ </xsl:stylesheet>
@@ -0,0 +1,97 @@
1
+ <!--
2
+
3
+ replace-newlines.xsl
4
+
5
+ Author: John Maurer (jmaurer@hawaii.edu)
6
+ Date: June 2007 (when I was at National Snow and Ice Data Center)
7
+
8
+ This Extensible Stylesheet Language for Transformations (XSLT) document takes
9
+ an input string and outputs it with all newline characters substituted with
10
+ HTML <br/> elements. This helps maintain paragraph and text structures when
11
+ using them to output to an HTML document. You can import this XSLT in other
12
+ XSLT files to call the "replace-newlines" template for accomplishing this.
13
+ Here is an example import statement:
14
+
15
+ <xsl:import href="replace-newlines.xsl"/>
16
+
17
+ For more information on XSLT see:
18
+
19
+ http://en.wikipedia.org/wiki/XSLT
20
+ http://www.w3.org/TR/xslt
21
+
22
+ -->
23
+
24
+ <xsl:stylesheet
25
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
26
+ version="1.0">
27
+
28
+ <xsl:output method="text"/>
29
+
30
+ <!-- Define a variable for creating a newline: -->
31
+
32
+ <xsl:variable name="newline">
33
+ <xsl:text>
34
+ </xsl:text>
35
+ </xsl:variable>
36
+
37
+ <!-- Define a variable for creating an HTML <br/> element: -->
38
+
39
+ <xsl:variable name="break">
40
+ <xsl:text disable-output-escaping="yes">&lt;br/&gt;</xsl:text>
41
+ </xsl:variable>
42
+
43
+ <!-- Template to replace newlines with <br/>'s; note the use
44
+ of "disable-output-escaping" to presever the <br/> in an
45
+ output HTML document without it being converted to
46
+ &lt;br/&gt;, which ends up displaying the characters "<br/>"
47
+ in the output rather than an actual HTML element: -->
48
+
49
+ <xsl:template name="replace-newlines">
50
+ <xsl:param name="element"/>
51
+ <xsl:variable name="first">
52
+ <xsl:choose>
53
+ <xsl:when test="contains( $element, $newline )">
54
+ <xsl:value-of select="substring-before( $element, $newline )"/>
55
+ </xsl:when>
56
+ <xsl:otherwise>
57
+ <xsl:value-of select="$element"/>
58
+ </xsl:otherwise>
59
+ </xsl:choose>
60
+ </xsl:variable>
61
+ <xsl:variable name="middle">
62
+ <xsl:choose>
63
+ <xsl:when test="contains( $element, $newline )">
64
+ <xsl:value-of select="$break"/>
65
+ </xsl:when>
66
+ <xsl:otherwise>
67
+ <xsl:text></xsl:text>
68
+ </xsl:otherwise>
69
+ </xsl:choose>
70
+ </xsl:variable>
71
+ <xsl:variable name="last">
72
+ <xsl:choose>
73
+ <xsl:when test="contains( $element, $newline )">
74
+ <xsl:choose>
75
+ <xsl:when test="contains( substring-after( $element, $newline ), $newline )">
76
+ <xsl:call-template name="replace-newlines">
77
+ <xsl:with-param name="element">
78
+ <xsl:value-of select="substring-after( $element, $newline )"/>
79
+ </xsl:with-param>
80
+ </xsl:call-template>
81
+ </xsl:when>
82
+ <xsl:otherwise>
83
+ <xsl:value-of select="substring-after( $element, $newline )"/>
84
+ </xsl:otherwise>
85
+ </xsl:choose>
86
+ </xsl:when>
87
+ <xsl:otherwise>
88
+ <xsl:text></xsl:text>
89
+ </xsl:otherwise>
90
+ </xsl:choose>
91
+ </xsl:variable>
92
+ <xsl:value-of select="$first" disable-output-escaping="yes"/>
93
+ <xsl:value-of select="$middle" disable-output-escaping="yes"/>
94
+ <xsl:value-of select="$last" disable-output-escaping="yes"/>
95
+ </xsl:template>
96
+
97
+ </xsl:stylesheet>
@@ -0,0 +1,80 @@
1
+ <!--
2
+
3
+ replace-string.xsl
4
+
5
+ Author: John Maurer (jmaurer@hawaii.edu)
6
+ Date: July 2007 (when I was at National Snow and Ice Data Center)
7
+
8
+ This Extensible Stylesheet Language for Transformations (XSLT) document takes
9
+ an input string and outputs it with all $old-string's substituted with the
10
+ specified $new-string. You can import this XSLT in other XSLT files to call
11
+ the "replace-string" template for accomplishing this. Here is an example
12
+ import statement:
13
+
14
+ <xsl:import href="replace-string.xsl"/>
15
+
16
+ For more information on XSLT see:
17
+
18
+ http://en.wikipedia.org/wiki/XSLT
19
+ http://www.w3.org/TR/xslt
20
+
21
+ -->
22
+
23
+ <xsl:stylesheet
24
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
25
+ version="1.0">
26
+
27
+ <xsl:output method="text"/>
28
+
29
+ <xsl:template name="replace-string">
30
+ <xsl:param name="element"/>
31
+ <xsl:param name="old-string"/>
32
+ <xsl:param name="new-string"/>
33
+ <xsl:variable name="first">
34
+ <xsl:choose>
35
+ <xsl:when test="contains( $element, $old-string )">
36
+ <xsl:value-of select="substring-before( $element, $old-string )"/>
37
+ </xsl:when>
38
+ <xsl:otherwise>
39
+ <xsl:value-of select="$element"/>
40
+ </xsl:otherwise>
41
+ </xsl:choose>
42
+ </xsl:variable>
43
+ <xsl:variable name="middle">
44
+ <xsl:choose>
45
+ <xsl:when test="contains( $element, $old-string )">
46
+ <xsl:value-of select="$new-string"/>
47
+ </xsl:when>
48
+ <xsl:otherwise>
49
+ <xsl:text></xsl:text>
50
+ </xsl:otherwise>
51
+ </xsl:choose>
52
+ </xsl:variable>
53
+ <xsl:variable name="last">
54
+ <xsl:choose>
55
+ <xsl:when test="contains( $element, $old-string )">
56
+ <xsl:choose>
57
+ <xsl:when test="contains( substring-after( $element, $old-string ), $old-string )">
58
+ <xsl:call-template name="replace-string">
59
+ <xsl:with-param name="element" select="substring-after( $element, $old-string )"/>
60
+ <xsl:with-param name="old-string" select="$old-string"/>
61
+ <xsl:with-param name="new-string" select="$new-string"/>
62
+ </xsl:call-template>
63
+ </xsl:when>
64
+ <xsl:otherwise>
65
+ <xsl:value-of select="substring-after( $element, $old-string )"/>
66
+ </xsl:otherwise>
67
+ </xsl:choose>
68
+ </xsl:when>
69
+ <xsl:otherwise>
70
+ <xsl:text></xsl:text>
71
+ </xsl:otherwise>
72
+ </xsl:choose>
73
+ </xsl:variable>
74
+ <!-- Disable output escaping to allow HTML tags to be interpreted: -->
75
+ <xsl:value-of select="$first" disable-output-escaping="yes"/>
76
+ <xsl:value-of select="$middle" disable-output-escaping="yes"/>
77
+ <xsl:value-of select="$last" disable-output-escaping="yes"/>
78
+ </xsl:template>
79
+
80
+ </xsl:stylesheet>