[a6c57de] | 1 | <?xml version="1.0" encoding="ISO-8859-1"?>
|
---|
| 2 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
---|
| 3 | version="1.0">
|
---|
| 4 |
|
---|
| 5 | <xsl:template name="process-prompt">
|
---|
| 6 | <xsl:param name="instructions"/>
|
---|
| 7 | <xsl:param name="root-seen"/>
|
---|
| 8 | <xsl:param name="prompt-seen"/>
|
---|
| 9 |
|
---|
| 10 | <!-- Isolate the current instruction -->
|
---|
| 11 | <xsl:variable name="current-instr" select="$instructions[1]"/>
|
---|
| 12 |
|
---|
| 13 | <xsl:choose>
|
---|
| 14 | <!--============================================================-->
|
---|
| 15 | <!-- First, if we have an empty tree, close everything and exit -->
|
---|
| 16 | <xsl:when test="not($current-instr)">
|
---|
| 17 | <xsl:if test="$prompt-seen">
|
---|
| 18 | <xsl:call-template name="end-prompt"/>
|
---|
| 19 | </xsl:if>
|
---|
| 20 | <xsl:if test="$root-seen">
|
---|
| 21 | <xsl:call-template name="end-root"/>
|
---|
| 22 | </xsl:if>
|
---|
| 23 | </xsl:when><!-- end empty tree -->
|
---|
| 24 | <!--============================================================-->
|
---|
| 25 | <xsl:when test="$current-instr[@role='root']">
|
---|
| 26 | <xsl:choose>
|
---|
| 27 | <xsl:when test="$current-instr//prompt">
|
---|
| 28 | <xsl:if test="not($root-seen)">
|
---|
| 29 | <xsl:call-template name="begin-root"/>
|
---|
| 30 | </xsl:if>
|
---|
| 31 | <xsl:text>
</xsl:text>
|
---|
| 32 | <xsl:if test="not($prompt-seen)">
|
---|
| 33 | <xsl:copy-of
|
---|
| 34 | select="substring-before($current-instr//text()[1],'
')"/>
|
---|
| 35 | <xsl:text> << PROMPT_EOF
|
---|
| 36 | </xsl:text>
|
---|
| 37 | </xsl:if>
|
---|
| 38 | <xsl:apply-templates
|
---|
| 39 | select="$current-instr/userinput/node()[position()>1]"/>
|
---|
| 40 | <xsl:call-template name="process-prompt">
|
---|
| 41 | <xsl:with-param
|
---|
| 42 | name="instructions"
|
---|
| 43 | select="$instructions[position()>1]"/>
|
---|
| 44 | <xsl:with-param name="root-seen" select="boolean(1)"/>
|
---|
| 45 | <xsl:with-param name="prompt-seen" select="boolean(1)"/>
|
---|
| 46 | </xsl:call-template>
|
---|
| 47 | </xsl:when><!-- end prompt as root -->
|
---|
| 48 | <!--____________________________________________________________ -->
|
---|
| 49 | <xsl:otherwise><!-- we have no prompt -->
|
---|
| 50 | <xsl:if test="$prompt-seen">
|
---|
| 51 | <xsl:text>
|
---|
| 52 | quit
|
---|
| 53 | PROMPT_EOF</xsl:text>
|
---|
| 54 | </xsl:if>
|
---|
| 55 | <xsl:apply-templates
|
---|
| 56 | select="$current-instr"
|
---|
| 57 | mode="config"/>
|
---|
| 58 | <!-- the above will call "end-root" if the next screen
|
---|
| 59 | sibling is not role="root". We need to pass root-seen=false
|
---|
| 60 | in this case. Otherwise, we need to pass root-seen=true.
|
---|
| 61 | So create a variable -->
|
---|
| 62 | <xsl:variable name="rs"
|
---|
| 63 | select="$instructions[2][@role='root']"/>
|
---|
| 64 | <xsl:call-template name="process-prompt">
|
---|
| 65 | <xsl:with-param
|
---|
| 66 | name="instructions"
|
---|
| 67 | select="$instructions[position()>1]"/>
|
---|
| 68 | <xsl:with-param name="root-seen" select="boolean($rs)"/>
|
---|
| 69 | <xsl:with-param name="prompt-seen" select="boolean(0)"/>
|
---|
| 70 | </xsl:call-template>
|
---|
| 71 | </xsl:otherwise><!-- end no prompt -->
|
---|
| 72 | <!--____________________________________________________________ -->
|
---|
| 73 | </xsl:choose>
|
---|
| 74 | </xsl:when><!-- role="root" -->
|
---|
| 75 | <!--============================================================-->
|
---|
| 76 | <xsl:otherwise><!-- no role -->
|
---|
| 77 | <xsl:if test="$prompt-seen">
|
---|
| 78 | <xsl:text>
|
---|
| 79 | quit
|
---|
| 80 | PROMPT_EOF</xsl:text>
|
---|
| 81 | </xsl:if>
|
---|
| 82 | <xsl:if test="$root-seen">
|
---|
| 83 | <xsl:call-template name="end-root"/>
|
---|
| 84 | </xsl:if>
|
---|
| 85 | <xsl:apply-templates select="$current-instr/userinput"/>
|
---|
| 86 | <xsl:call-template name="process-prompt">
|
---|
| 87 | <xsl:with-param
|
---|
| 88 | name="instructions"
|
---|
| 89 | select="$instructions[position()>1]"/>
|
---|
| 90 | <xsl:with-param name="root-seen" select="boolean(0)"/>
|
---|
| 91 | <xsl:with-param name="prompt-seen" select="boolean(0)"/>
|
---|
| 92 | </xsl:call-template>
|
---|
| 93 | </xsl:otherwise><!-- no role -->
|
---|
| 94 | <!--============================================================-->
|
---|
| 95 | </xsl:choose>
|
---|
| 96 | </xsl:template>
|
---|
| 97 |
|
---|
| 98 | <xsl:template match="prompt"/>
|
---|
| 99 | </xsl:stylesheet>
|
---|