<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:s="http://www.xmlmind.com/ns/sect"
                exclude-result-prefixes="s"
                version="1.0">

  <xsl:output method="html"
              encoding="ISO-8859-1"
              indent="no"/>

  <xsl:template match="/">
    <html>
      <head>
        <title><xsl:value-of select="s:section/s:title"/></title>
      </head>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="s:section">
    <div>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </div>
  </xsl:template>

  <xsl:template match="s:title">
    <h1>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </h1>
  </xsl:template>

  <xsl:template name="processCommonAttributes">
    <xsl:if test="@xml:lang">
      <xsl:attribute name="lang">
        <xsl:value-of select="@xml:lang"/>
      </xsl:attribute>
    </xsl:if>
  </xsl:template>

  <xsl:template match="s:paragraph">
    <p>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </p>
  </xsl:template>

  <xsl:template match="s:bold">
    <b>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </b>
  </xsl:template>

  <xsl:template match="s:italic">
    <i>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </i>
  </xsl:template>

  <xsl:template match="s:literal">
    <tt>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </tt>
  </xsl:template>

  <xsl:template match="s:break">
    <br/>
  </xsl:template>

  <xsl:template match="s:image">
    <img src="{@source}">
      <xsl:for-each select="@width">
        <xsl:copy/>
      </xsl:for-each>
      <xsl:for-each select="@height">
        <xsl:copy/>
      </xsl:for-each>
    </img>
  </xsl:template>

  <xsl:template match="s:table">
    <table border="1" cellspacing="0">
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:apply-templates/>
    </table>
  </xsl:template>

  <xsl:template match="s:tableRow | s:tableHeader">
    <tr>
      <xsl:call-template name="processCommonAttributes"/>

      <xsl:if test="self::s:tableHeader">
        <xsl:attribute name="style">background-color: #F0F0F0;</xsl:attribute>
      </xsl:if>

      <xsl:apply-templates/>
    </tr>
  </xsl:template>

  <xsl:template match="s:tableCell">
    <xsl:choose>
      <xsl:when test="parent::s:tableHeader">
        <th>
          <xsl:call-template name="processCommonAttributes"/>
          <xsl:call-template name="processColumnsAttribute"/>

          <xsl:apply-templates/>
        </th>
      </xsl:when>
      <xsl:otherwise>
        <td>
          <xsl:call-template name="processCommonAttributes"/>
          <xsl:call-template name="processColumnsAttribute"/>

          <xsl:apply-templates/>
        </td>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="processColumnsAttribute">
    <xsl:if test="@columns">
      <xsl:attribute name="colspan">
        <xsl:value-of select="@columns"/>
      </xsl:attribute>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>