EcmaScript 0.92 Stylesheet


  <?xml version="1.0" ?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

    <xsl:template match="/jsp-script">
      <xsl:apply-templates select="import"/>

      <xsl:apply-templates select="declaration"/>

      <xsl:text>
        function service(servletrequest, servletresponse) {
  	var headerCount = 0;
  	var headers = new Array();
  
          var errorPage = null;
          var contentType = "text/html";
  
          var input = servletrequest.getReader();
          var output = servletresponse.getWriter();
      </xsl:text>

      <xsl:apply-templates select="errorpage"/>
      <xsl:apply-templates select="contenttype"/>
      <xsl:apply-templates select="header"/>

      <xsl:text>
          servletresponse.setContentType(contentType);
          for (var i = 0; i < headers.length; i++) {
            servletresponse.setHeader(headers[i].name, headers[i].value);
          }
          // User code
      </xsl:text>

      <xsl:apply-templates select="body/*" />

      <xsl:text>
        }
      </xsl:text>
    </xsl:template>

    <xsl:template match="*" priority="-1"/>

    <xsl:template match="import">
      <xsl:script><![CDATA[
        var result = "// User imports\n";
        var csImport = this.getData();
        var importList = csImport.split(",");
        for (var i = 0; i < importList.length; i++) {
          result += "load(\"" + importList[i] + "\");\n"
         }
        return result;
      ]]></xsl:script>
    </xsl:template>

    <xsl:template match="declaration">
      <xsl:text>&#10;// Declarations&#10;</xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>&#10;&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="contenttype">
      <xsl:text>  contentType = "</xsl:text>
	  <xsl:value-of select="."/>
      <xsl:text>";&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="errorpage">
      <xsl:text>  errorPage = "</xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>";&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="header">
      <xsl:text>  headers[headersCount++] = new Header("</xsl:text>
      <xsl:value-of select="@name"/>
      <xsl:text>", "</xsl:text>
      <xsl:value-of select="@value"/>
      <xsl:text>");&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="boilerplate">
      <xsl:text>  output.print("</xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>");&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="scriptlet">
      <xsl:text>&#10;</xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="expression">
      <xsl:text>  output.print(</xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>);&#10;</xsl:text>
    </xsl:template>

  </xsl:stylesheet>