source: project/release/3/selenium/trunk/iedoc2scm.xml @ 9597

Last change on this file since 9597 was 9597, checked in by rlpowell, 12 years ago

Now with:

  1. Less debugging statements.
  1. More working with unpatched http egg.
  • Property svn:keywords set to Id
File size: 23.5 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE xslt [
3  <!--Used to control code intenting -->
4  <!ENTITY nl "&#xa;">
5  <!ENTITY tab "    ">
6]>
7<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
8   
9<xsl:output method="html"/>
10<xsl:strip-space elements="*"/>
11<xsl:param name="mode" />
12
13<xsl:template match="/">
14       
15        <xsl:apply-templates select="//top" />
16        <xsl:apply-templates select="//function" />
17        <xsl:text disable-output-escaping="yes">
18<!-- Everything in here gets put at the end, apparently. -->
19<!-- There is nothing to say at the end, however. -->
20</xsl:text>
21</xsl:template>
22
23<!--********************
24TOP
25***************-->
26
27<xsl:template match="top">
28        <xsl:text disable-output-escaping="yes">
29(define-extension "selenium")
30
31(use http-client)
32(use uri)
33(use srfi-1)
34(use srfi-18)
35(use extras)
36
37;=====
38; Introduction And Copyright
39;
40; This file is autogenerated by the iedoc2scm.xml XSLT stylesheet,
41; using iedoc.xml as the source.  See
42; http://wiki.openqa.org/display/SRC/Developer%27s+Guide#Developer%27sGuide-IEDoc.js%2CIEDoc.xmlandXSLT
43; for how to get iedoc.xml
44;
45; The specification this works from is at
46; http://wiki.openqa.org/display/SRC/Specifications+for+Selenium+Remote+Control+Client+Driver+Protocol
47;
48; Copyright 2008 Robin Lee Powell, sort of.
49;
50; The XSLT is almost entirely copied from the Ruby Selenium RC
51; XSLT, which was created by ThoughtWorks, Inc., and licensed
52; under the Apache License, Version 2.0 (the "License").  All the
53; Scheme and all my modifications are placed into the public domain
54; as much as that license allows.
55;
56;      http://www.apache.org/licenses/LICENSE-2.0
57;
58; -----------------
59; Original code by Aslak Hellesoy and Darren Hobbs
60; This file has been automatically generated via XSL
61; -----------------
62
63;-----
64; Explanation And Examples
65;
66; </xsl:text>
67        <xsl:apply-templates>
68                <xsl:with-param name="replace-string">&nl;; </xsl:with-param>
69        </xsl:apply-templates>
70        <xsl:text disable-output-escaping="yes"><![CDATA[
71
72;-----
73; Selenium Session
74;
75; The selenium-session record.  Nothing fancy.  All of the values
76; are start-time options except session-id, which is gotten from the
77; server at start time.
78;
79(define-record
80    selenium-session
81    server-host
82    server-port
83    browser-start-command
84    browser-url
85    timeout
86    session-id)
87
88; This is so we can allow defaults and not force the session id to
89; be defined.  Timeout is in seconds, and defaults to 30.
90(define (new-selenium-session
91          server-host
92          server-port
93          browser-start-command
94          browser-url
95          #!optional timeout)
96  (make-selenium-session
97    server-host
98    server-port
99    browser-start-command
100    browser-url
101    (or timeout 30)
102    #f))
103
104;-----
105; Internal commands
106;
107(define (selenium::do-command sel-sess verb . args)
108  ;(format #t "d-c args: ~A\n" args)
109  (let*
110    (
111     [url
112       (uri->string
113         (make-uri
114           scheme: 'http
115           ; List of authority, path, query.  Authority is in turn
116           ; userinfo, host, port.
117           specific: (list
118                       (list
119                         #f
120                         (selenium-session-server-host sel-sess)
121                         (selenium-session-server-port sel-sess))
122                       "/selenium-server/driver/"
123                       ; Create an alist of the arguments.  The
124                       ; session-id we may or may not want to
125                       ; populate, depending on whether we have one
126                       ; yet.
127                       (let
128                         ([main-list
129                            (cons
130                              (cons "cmd" verb)
131                              (cond
132                                [(null? args) '()]
133                                [(and (null? (car args)) (null? (cdr args))) '()]
134                                [else (map
135                                        (lambda (a b) (cons a b))
136                                        (iota (length args) 1)
137                                        args)]))])
138                         ; Add the session ID, or not.
139                         (cond
140                           [(selenium-session-session-id sel-sess)
141                            (append
142                              main-list
143                              (list (cons "sessionId" (selenium-session-session-id sel-sess))))]
144                           [else main-list])))))]
145     [http-thread (make-thread (lambda ()
146                                 (http:GET (http:make-request
147                                             'GET url
148                                             '(("Connection" . "close"))
149                                             '() "" 'HTTP/1.1))))]
150     [result (begin
151               (thread-start! http-thread)
152               ;(format #t "start done.\n")
153               (thread-join! http-thread (selenium-session-timeout sel-sess) #f))])
154    ;(format #t "do-command verb: ~A.\n" verb)
155    ;(format #t "do-command args: ~A.\n" args)
156    ;(format #t "do-command url: ~A.\n" url)
157    ;(format #t "do-command output: ~A.\n" result)
158    result))
159
160; Selenium strings start with "OK,".  The rest is the string.
161(define (selenium::get-string sel-sess verb . args)
162  (string-drop (apply selenium::do-command (cons* sel-sess verb args)) 3))
163
164; Just turn the Selenium string into a number
165(define (selenium::get-number sel-sess verb . args)
166  (string->number (selenium::get-string sel-sess verb args)))
167
168; Selenium booleans are one of the literal strings "true" and
169; "false"
170(define (selenium::get-boolean sel-sess verb . args)
171  (let
172    ([str (selenium::get-string sel-sess verb args)])
173    ; We let cond throw an exception if neither string matches
174    (cond
175      [(string=? "true" str) #t]
176      [(string=? "false" str) #f])))
177
178; Selenium arrays are comma-seperated strings, with \ escapes
179(define (selenium::get-string-array sel-sess verb . args)
180  (map
181    (lambda (str)
182      (string-substitute "(?<!\\\\)\\\\" "" str #t))
183    (string-split-fields
184      "(?<!\\\\),"
185      (selenium::get-string sel-sess verb args)
186      #:infix)))
187
188; Just turn the array bits into numbers
189(define (selenium::get-number-array sel-sess verb . args)
190  (map
191    string->number
192    (selenium::get-string-array sel-sess verb args)))
193
194; Selenium booleans are one of the literal strings "true" and
195; "false"; convert all the bits
196(define (selenium::get-number-array sel-sess verb . args)
197  (map
198    (lambda (str)
199      (cond
200        [(string=? "true" str) #t]
201        [(string=? "false" str) #f]))
202    (selenium::get-string-array sel-sess verb args)))
203
204;-----
205; Starting and Stopping
206
207; Start a Selenium session (that is, launch the browser)
208(define (selenium::start sel-sess)
209  (selenium-session-session-id-set!
210    sel-sess
211    (selenium::get-string
212      sel-sess
213      "getNewBrowserSession"
214      (selenium-session-browser-start-command sel-sess)
215      (selenium-session-browser-url sel-sess))))
216
217; Stop a Selenium session (that is, close the browser)
218(define (selenium::stop sel-sess)
219  (selenium::do-command sel-sess "testComplete" '())
220  (selenium-session-session-id-set! sel-sess #f))
221
222;-----
223; Generated Commands
224]]>
225</xsl:text>
226</xsl:template>
227
228<xsl:template match="comment">
229        <xsl:text>&nl;; </xsl:text>
230        <xsl:apply-templates>
231                <xsl:with-param name="replace-string">&nl;; </xsl:with-param>
232        </xsl:apply-templates>
233</xsl:template>
234
235<xsl:template match="node()|@*" >
236        <xsl:param name="replace-string" />
237        <!-- <xsl:copy> -->
238                <xsl:apply-templates select="node()|@*">
239                        <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
240                </xsl:apply-templates>
241        <!-- </xsl:copy> -->
242</xsl:template>
243
244<xsl:template match="text()">
245        <xsl:param name="replace-string" />
246        <xsl:call-template name="search-and-replace">
247                <xsl:with-param name="input"><xsl:value-of select='.' /></xsl:with-param>
248                <xsl:with-param name="search-string"><xsl:text>&nl;</xsl:text></xsl:with-param>
249                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
250        </xsl:call-template>
251</xsl:template>
252
253<xsl:template match="b|strong">
254        <xsl:param name="replace-string" />
255        <xsl:element name="b">
256                <xsl:apply-templates select="node()|@*">
257                        <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
258                </xsl:apply-templates>
259        </xsl:element>
260</xsl:template>
261
262<xsl:template match="code|tt">
263        <xsl:param name="replace-string" />
264        <xsl:element name="tt">
265                <xsl:apply-templates select="node()|@*">
266                        <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
267                </xsl:apply-templates>
268        </xsl:element>
269</xsl:template>
270
271<xsl:template match="em|i">
272        <xsl:param name="replace-string" />
273        <xsl:element name="em">
274                <xsl:apply-templates select="node()|@*">
275                        <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
276                </xsl:apply-templates>
277        </xsl:element>
278</xsl:template>
279
280<!--
281<xsl:template match="h3">
282        <xsl:param name="replace-string" />
283        <xsl:text>===</xsl:text>
284        <xsl:apply-templates select="node()|@*">
285                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
286        </xsl:apply-templates>
287</xsl:template>
288
289<xsl:template match="li">
290        <xsl:param name="replace-string" />
291        <xsl:choose>
292                <xsl:when test="local-name(..) = 'ul'">
293                        <xsl:text>*&tab;</xsl:text>
294                </xsl:when>
295                <xsl:when test="local-name(..) = 'ol'">
296                        <xsl:value-of select="position()"/><xsl:text>. </xsl:text>
297                </xsl:when>
298        </xsl:choose>
299        <xsl:apply-templates select="node()|@*">
300                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
301        </xsl:apply-templates>
302        <xsl:value-of select="$replace-string" />
303</xsl:template>
304-->
305
306<xsl:template match="ul|ol|dl">
307        <xsl:param name="replace-string" />
308        <xsl:apply-templates select="node()|@*">
309                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /><!--<xsl:text>&tab;</xsl:text>--></xsl:with-param>
310        </xsl:apply-templates>
311        <xsl:value-of select="$replace-string" />
312</xsl:template>
313
314<xsl:template match="p">
315        <xsl:param name="replace-string" />
316        <xsl:apply-templates select="node()|@*">
317                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
318        </xsl:apply-templates>
319        <xsl:value-of select="$replace-string" />
320</xsl:template>
321
322<xsl:template match="a|blockquote">
323        <xsl:param name="replace-string" />
324        <xsl:apply-templates select="node()|@*">
325                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
326        </xsl:apply-templates>
327</xsl:template>
328
329<xsl:template match="dt">
330        <xsl:param name="replace-string" />
331        <xsl:text>*&tab;</xsl:text>
332        <xsl:apply-templates select="node()|@*">
333                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /></xsl:with-param>
334        </xsl:apply-templates>
335        <xsl:text>::</xsl:text>
336</xsl:template>
337
338<xsl:template match="dd">
339        <xsl:param name="replace-string" />
340        <xsl:value-of select="$replace-string" />
341        <xsl:text>&tab;</xsl:text>
342        <xsl:apply-templates select="node()|@*">
343                <xsl:with-param name="replace-string"><xsl:value-of select="$replace-string" /><xsl:text>&tab;</xsl:text></xsl:with-param>
344        </xsl:apply-templates>
345        <xsl:value-of select="$replace-string" />
346</xsl:template>
347
348<!--****************
349FUNCTION
350******************-->
351
352<xsl:template match="function">
353        <!-- Doc -->
354        <xsl:apply-templates select="comment" />
355        <xsl:text>&nl;;</xsl:text>
356        <xsl:apply-templates select="param" mode="comment" />
357        <xsl:text>&nl;(define (selenium::</xsl:text>
358        <xsl:call-template name="underscorify">
359                <xsl:with-param name="input"><xsl:value-of select="@name" /></xsl:with-param>
360        </xsl:call-template>
361        <xsl:text> sel-sess </xsl:text>
362       
363        <!-- Params -->
364        <xsl:apply-templates select="param" mode="declaration" />
365        <xsl:text>)&nl;&tab;&tab;&tab;</xsl:text>
366       
367        <xsl:text>(</xsl:text>
368        <xsl:if test="count(./return) = 0">
369                <xsl:text>selenium::do-command sel-sess </xsl:text>
370        </xsl:if>
371        <xsl:apply-templates select="return" mode="implementation" />
372        <xsl:text>"</xsl:text>
373        <xsl:value-of select="@name" />
374        <xsl:text>" </xsl:text>
375        <xsl:apply-templates select="param" mode="implementation" />
376        <xsl:text>))&nl;&nl;</xsl:text>
377</xsl:template>
378
379<!--*****************
380RETURN
381*******************-->
382
383<xsl:template name="procMethod">
384        <xsl:param name="type" />
385        <xsl:choose>
386                <xsl:when test="$type='string'">
387                        <xsl:text>selenium::get-string sel-sess </xsl:text>
388                </xsl:when>
389                <xsl:when test="$type='number'">
390                        <xsl:text>selenium::get-number sel-sess </xsl:text>
391                </xsl:when>
392                <xsl:when test="$type='boolean'">
393                        <xsl:text>selenium::get-boolean sel-sess </xsl:text>
394                </xsl:when>
395                <xsl:when test="$type='string[]'">
396                        <xsl:text>selenium::get-string-array sel-sess </xsl:text>
397                </xsl:when>
398                <xsl:when test="$type='number[]'">
399                        <xsl:text>selenium::get-number-array sel-sess </xsl:text>
400                </xsl:when>
401                <xsl:when test="$type='boolean[]'">
402                        <xsl:text>selenium::get-boolean-array sel-sess </xsl:text>
403                </xsl:when>
404                <xsl:otherwise>
405                        <xsl:message terminate="yes">returntype is invalid: <xsl:value-of select="$type"/></xsl:message>
406                </xsl:otherwise>
407        </xsl:choose>
408</xsl:template>
409
410<!-- In the function implementation, add "return" keyword, casting to correct type -->
411<xsl:template match="return" mode="implementation">
412        <xsl:text></xsl:text>
413        <xsl:call-template name="procMethod">
414                <xsl:with-param name="type"><xsl:value-of select="@type" /></xsl:with-param>
415        </xsl:call-template>
416</xsl:template>
417
418<!-- In the RDoc, add the <returns> tag -->
419<xsl:template match="return" mode="comment">
420        <xsl:text>&nl;&tab;&tab;/// &lt;returns&gt;</xsl:text>
421        <xsl:call-template name="search-and-replace">
422                <xsl:with-param name="input"><xsl:value-of select="."/></xsl:with-param>
423                <xsl:with-param name="search-string"><xsl:text>&nl;</xsl:text></xsl:with-param>
424                <xsl:with-param name="replace-string">&nl;&tab;&tab;/// </xsl:with-param>
425        </xsl:call-template>
426        <xsl:text>&lt;/returns&gt;</xsl:text>
427</xsl:template>
428
429<!-- In the RDoc, add the <param> tag -->
430<xsl:template match="param" mode="comment">
431        <xsl:text>&nl;; '</xsl:text>
432        <xsl:value-of select="@name" />
433        <xsl:text>' is </xsl:text>
434        <xsl:apply-templates />
435</xsl:template>
436
437<!-- In the function declaration, specify all String parameters -->
438<xsl:template match="param" mode="declaration">
439        <xsl:value-of select="@name" />
440        <xsl:if test="position() != last()">
441                <xsl:text> </xsl:text>
442        </xsl:if>
443</xsl:template>
444
445<!-- In the function implementation, add String parameters to array -->
446<xsl:template match="param" mode="implementation">
447        <xsl:value-of select="@name" />
448        <xsl:text> </xsl:text>
449</xsl:template>
450
451<xsl:template name="search-and-replace">
452     <xsl:param name="input"/>
453     <xsl:param name="search-string"/>
454     <xsl:param name="replace-string"/>
455     <xsl:choose>
456          <!-- See if the input contains the search string -->
457          <xsl:when test="$search-string and
458                           contains($input,$search-string)">
459          <!-- If so, then concatenate the substring before the search
460          string to the replacement string and to the result of
461          recursively applying this template to the remaining substring.
462          -->
463               <xsl:value-of 
464                    select="substring-before($input,$search-string)"/>
465               <xsl:value-of select="$replace-string"/>
466               <xsl:call-template name="search-and-replace">
467                    <xsl:with-param name="input"
468                    select="substring-after($input,$search-string)"/>
469                    <xsl:with-param name="search-string" 
470                    select="$search-string"/>
471                    <xsl:with-param name="replace-string" 
472                        select="$replace-string"/>
473               </xsl:call-template>
474          </xsl:when>
475          <xsl:otherwise>
476               <!-- There are no more occurrences of the search string so
477               just return the current input string -->
478               <xsl:value-of select="$input"/>
479          </xsl:otherwise>
480     </xsl:choose>
481</xsl:template>
482
483<xsl:template name="underscorify">
484        <xsl:param name="input" />
485        <xsl:variable name="output"><xsl:value-of select="$input" /></xsl:variable>
486        <!-- for-each can't handle arbitrary sequences! 
487                variables can't be changed once defined!
488                Welcome to copy-and-paste land! -->
489        <xsl:variable name="outputa">
490                <xsl:call-template name="search-and-replace">
491                        <xsl:with-param name="input"><xsl:value-of select='$output' /></xsl:with-param>
492                        <xsl:with-param name="search-string">A</xsl:with-param>
493                        <xsl:with-param name="replace-string">_a</xsl:with-param>
494                </xsl:call-template>
495        </xsl:variable>
496        <xsl:variable name="outputb">
497                <xsl:call-template name="search-and-replace">
498                        <xsl:with-param name="input"><xsl:value-of select='$outputa' /></xsl:with-param>
499                        <xsl:with-param name="search-string">B</xsl:with-param>
500                        <xsl:with-param name="replace-string">_b</xsl:with-param>
501                </xsl:call-template>
502        </xsl:variable>
503        <xsl:variable name="outputc">
504                <xsl:call-template name="search-and-replace">
505                        <xsl:with-param name="input"><xsl:value-of select='$outputb' /></xsl:with-param>
506                        <xsl:with-param name="search-string">C</xsl:with-param>
507                        <xsl:with-param name="replace-string">_c</xsl:with-param>
508                </xsl:call-template>
509        </xsl:variable>
510        <xsl:variable name="outputd">
511                <xsl:call-template name="search-and-replace">
512                        <xsl:with-param name="input"><xsl:value-of select='$outputc' /></xsl:with-param>
513                        <xsl:with-param name="search-string">D</xsl:with-param>
514                        <xsl:with-param name="replace-string">_d</xsl:with-param>
515                </xsl:call-template>
516        </xsl:variable>
517        <xsl:variable name="outpute">
518                <xsl:call-template name="search-and-replace">
519                        <xsl:with-param name="input"><xsl:value-of select='$outputd' /></xsl:with-param>
520                        <xsl:with-param name="search-string">E</xsl:with-param>
521                        <xsl:with-param name="replace-string">_e</xsl:with-param>
522                </xsl:call-template>
523        </xsl:variable>
524        <xsl:variable name="outputf">
525                <xsl:call-template name="search-and-replace">
526                        <xsl:with-param name="input"><xsl:value-of select='$outpute' /></xsl:with-param>
527                        <xsl:with-param name="search-string">F</xsl:with-param>
528                        <xsl:with-param name="replace-string">_f</xsl:with-param>
529                </xsl:call-template>
530        </xsl:variable>
531        <xsl:variable name="outputg">
532                <xsl:call-template name="search-and-replace">
533                        <xsl:with-param name="input"><xsl:value-of select='$outputf' /></xsl:with-param>
534                        <xsl:with-param name="search-string">G</xsl:with-param>
535                        <xsl:with-param name="replace-string">_g</xsl:with-param>
536                </xsl:call-template>
537        </xsl:variable>
538        <xsl:variable name="outputh">
539                <xsl:call-template name="search-and-replace">
540                        <xsl:with-param name="input"><xsl:value-of select='$outputg' /></xsl:with-param>
541                        <xsl:with-param name="search-string">H</xsl:with-param>
542                        <xsl:with-param name="replace-string">_h</xsl:with-param>
543                </xsl:call-template>
544        </xsl:variable>
545        <xsl:variable name="outputi">
546                <xsl:call-template name="search-and-replace">
547                        <xsl:with-param name="input"><xsl:value-of select='$outputh' /></xsl:with-param>
548                        <xsl:with-param name="search-string">I</xsl:with-param>
549                        <xsl:with-param name="replace-string">_i</xsl:with-param>
550                </xsl:call-template>
551        </xsl:variable>
552        <xsl:variable name="outputj">
553                <xsl:call-template name="search-and-replace">
554                        <xsl:with-param name="input"><xsl:value-of select='$outputi' /></xsl:with-param>
555                        <xsl:with-param name="search-string">J</xsl:with-param>
556                        <xsl:with-param name="replace-string">_j</xsl:with-param>
557                </xsl:call-template>
558        </xsl:variable>
559        <xsl:variable name="outputk">
560                <xsl:call-template name="search-and-replace">
561                        <xsl:with-param name="input"><xsl:value-of select='$outputj' /></xsl:with-param>
562                        <xsl:with-param name="search-string">K</xsl:with-param>
563                        <xsl:with-param name="replace-string">_k</xsl:with-param>
564                </xsl:call-template>
565        </xsl:variable>
566        <xsl:variable name="outputl">
567                <xsl:call-template name="search-and-replace">
568                        <xsl:with-param name="input"><xsl:value-of select='$outputk' /></xsl:with-param>
569                        <xsl:with-param name="search-string">L</xsl:with-param>
570                        <xsl:with-param name="replace-string">_l</xsl:with-param>
571                </xsl:call-template>
572        </xsl:variable>
573        <xsl:variable name="outputm">
574                <xsl:call-template name="search-and-replace">
575                        <xsl:with-param name="input"><xsl:value-of select='$outputl' /></xsl:with-param>
576                        <xsl:with-param name="search-string">M</xsl:with-param>
577                        <xsl:with-param name="replace-string">_m</xsl:with-param>
578                </xsl:call-template>
579        </xsl:variable>
580        <xsl:variable name="outputn">
581                <xsl:call-template name="search-and-replace">
582                        <xsl:with-param name="input"><xsl:value-of select='$outputm' /></xsl:with-param>
583                        <xsl:with-param name="search-string">N</xsl:with-param>
584                        <xsl:with-param name="replace-string">_n</xsl:with-param>
585                </xsl:call-template>
586        </xsl:variable>
587        <xsl:variable name="outputo">
588                <xsl:call-template name="search-and-replace">
589                        <xsl:with-param name="input"><xsl:value-of select='$outputn' /></xsl:with-param>
590                        <xsl:with-param name="search-string">O</xsl:with-param>
591                        <xsl:with-param name="replace-string">_o</xsl:with-param>
592                </xsl:call-template>
593        </xsl:variable>
594        <xsl:variable name="outputp">
595                <xsl:call-template name="search-and-replace">
596                        <xsl:with-param name="input"><xsl:value-of select='$outputo' /></xsl:with-param>
597                        <xsl:with-param name="search-string">P</xsl:with-param>
598                        <xsl:with-param name="replace-string">_p</xsl:with-param>
599                </xsl:call-template>
600        </xsl:variable>
601        <xsl:variable name="outputq">
602                <xsl:call-template name="search-and-replace">
603                        <xsl:with-param name="input"><xsl:value-of select='$outputp' /></xsl:with-param>
604                        <xsl:with-param name="search-string">Q</xsl:with-param>
605                        <xsl:with-param name="replace-string">_q</xsl:with-param>
606                </xsl:call-template>
607        </xsl:variable>
608        <xsl:variable name="outputr">
609                <xsl:call-template name="search-and-replace">
610                        <xsl:with-param name="input"><xsl:value-of select='$outputq' /></xsl:with-param>
611                        <xsl:with-param name="search-string">R</xsl:with-param>
612                        <xsl:with-param name="replace-string">_r</xsl:with-param>
613                </xsl:call-template>
614        </xsl:variable>
615        <xsl:variable name="outputs">
616                <xsl:call-template name="search-and-replace">
617                        <xsl:with-param name="input"><xsl:value-of select='$outputr' /></xsl:with-param>
618                        <xsl:with-param name="search-string">S</xsl:with-param>
619                        <xsl:with-param name="replace-string">_s</xsl:with-param>
620                </xsl:call-template>
621        </xsl:variable>
622        <xsl:variable name="outputt">
623                <xsl:call-template name="search-and-replace">
624                        <xsl:with-param name="input"><xsl:value-of select='$outputs' /></xsl:with-param>
625                        <xsl:with-param name="search-string">T</xsl:with-param>
626                        <xsl:with-param name="replace-string">_t</xsl:with-param>
627                </xsl:call-template>
628        </xsl:variable>
629        <xsl:variable name="outputu">
630                <xsl:call-template name="search-and-replace">
631                        <xsl:with-param name="input"><xsl:value-of select='$outputt' /></xsl:with-param>
632                        <xsl:with-param name="search-string">U</xsl:with-param>
633                        <xsl:with-param name="replace-string">_u</xsl:with-param>
634                </xsl:call-template>
635        </xsl:variable>
636        <xsl:variable name="outputv">
637                <xsl:call-template name="search-and-replace">
638                        <xsl:with-param name="input"><xsl:value-of select='$outputu' /></xsl:with-param>
639                        <xsl:with-param name="search-string">V</xsl:with-param>
640                        <xsl:with-param name="replace-string">_v</xsl:with-param>
641                </xsl:call-template>
642        </xsl:variable>
643        <xsl:variable name="outputw">
644                <xsl:call-template name="search-and-replace">
645                        <xsl:with-param name="input"><xsl:value-of select='$outputv' /></xsl:with-param>
646                        <xsl:with-param name="search-string">W</xsl:with-param>
647                        <xsl:with-param name="replace-string">_w</xsl:with-param>
648                </xsl:call-template>
649        </xsl:variable>
650        <xsl:variable name="outputx">
651                <xsl:call-template name="search-and-replace">
652                        <xsl:with-param name="input"><xsl:value-of select='$outputw' /></xsl:with-param>
653                        <xsl:with-param name="search-string">X</xsl:with-param>
654                        <xsl:with-param name="replace-string">_x</xsl:with-param>
655                </xsl:call-template>
656        </xsl:variable>
657        <xsl:variable name="outputy">
658                <xsl:call-template name="search-and-replace">
659                        <xsl:with-param name="input"><xsl:value-of select='$outputx' /></xsl:with-param>
660                        <xsl:with-param name="search-string">Y</xsl:with-param>
661                        <xsl:with-param name="replace-string">_y</xsl:with-param>
662                </xsl:call-template>
663        </xsl:variable>
664        <xsl:variable name="outputz">
665                <xsl:call-template name="search-and-replace">
666                        <xsl:with-param name="input"><xsl:value-of select='$outputy' /></xsl:with-param>
667                        <xsl:with-param name="search-string">Z</xsl:with-param>
668                        <xsl:with-param name="replace-string">_z</xsl:with-param>
669                </xsl:call-template>
670        </xsl:variable>
671        <xsl:value-of select="$outputz" />
672</xsl:template>
673
674
675</xsl:stylesheet>
676
Note: See TracBrowser for help on using the repository browser.