<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<!-- $Id: specdiff.xsl,v 1.3 2002/04/24 12:48:11 ndw Exp $ -->

<xsl:import href="spec.xsl"/>

<xsl:param name="show.revisionflag" select="'1'"/>

<xsl:template name="user.head.content">
<style type="text/css">
<xsl:text>
div.added    { background-color: lime; }
div.deleted  { text-decoration: line-through;
               background-color: #FF7F7F; }
div.changed  { background-color: yellow; }
div.off      {  }

span.added   { background-color: lime; }
span.deleted { text-decoration: line-through;
               background-color: #FF7F7F; }
span.changed { background-color: yellow; }
span.off     {  }
</xsl:text>
</style>
</xsl:template>

<xsl:template name="user.header.content">
  <xsl:param name="node" select="."/>
  <div>
    <p>The presentation of this document has been augmented to
    identify changes from a previous version. Three kinds of changes
    are highlighted: <span class="added">new, added text</span>,
    <span class="changed">changed text</span>, and
    <span class="deleted">deleted text</span>.</p>
    <hr/>
  </div>
</xsl:template>

<xsl:template match="*[@revisionflag]">
  <xsl:variable name="block">
    <xsl:call-template name="is-block"/>
  </xsl:variable>

  <xsl:variable name="inline">
    <xsl:call-template name="is-inline"/>
  </xsl:variable>

  <xsl:message>
    <xsl:text>NTM: </xsl:text>
    <xsl:value-of select="name(.)"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$block"/>
    <xsl:text> </xsl:text>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$inline"/>
  </xsl:message>

  <xsl:choose>
    <xsl:when test="$block != 0">
      <div class='{@revisionflag}'>
	<xsl:apply-imports/>
      </div>
    </xsl:when>
    <xsl:when test="$inline != 0">
      <span class='{@revisionflag}'>
	<xsl:apply-imports/>
      </span>
    </xsl:when>
    <xsl:when test="local-name(.) = 'listitem'
                    or local-name(.) = 'title'">
      <!-- nop; these are handled directly in the stylesheet -->
      <xsl:apply-imports/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:message>
	<xsl:text>Revisionflag on unexpected element: </xsl:text>
	<xsl:value-of select="local-name(.)"/>
	<xsl:text>(Assuming block)</xsl:text>
      </xsl:message>
      <div class='{@revisionflag}'>
	<xsl:apply-imports/>
      </div>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="*[@revisionflag]" mode="titlepage.mode">
  <xsl:variable name="block">
    <xsl:call-template name="is-block"/>
  </xsl:variable>

  <xsl:variable name="inline">
    <xsl:call-template name="is-inline"/>
  </xsl:variable>

  <xsl:message>
    <xsl:text>TM: </xsl:text>
    <xsl:value-of select="name(.)"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$block"/>
    <xsl:text> </xsl:text>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$inline"/>
  </xsl:message>

  <xsl:choose>
    <xsl:when test="$block != 0">
      <div class='{@revisionflag}'>
	<xsl:apply-imports/>
      </div>
    </xsl:when>
    <xsl:when test="$inline != 0">
      <span class='{@revisionflag}'>
	<xsl:apply-imports/>
      </span>
    </xsl:when>
    <xsl:when test="local-name(.) = 'listitem'
                    or local-name(.) = 'title'">
      <!-- nop; these are handled directly in the stylesheet -->
      <xsl:apply-imports/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:message>
	<xsl:text>Revisionflag on unexpected element: </xsl:text>
	<xsl:value-of select="local-name(.)"/>
	<xsl:text>(Assuming block)</xsl:text>
      </xsl:message>
      <div class='{@revisionflag}'>
	<xsl:apply-imports/>
      </div>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template name="is-inline">
  <xsl:choose>
    <xsl:when test="local-name(.) = 'phrase'
                    or local-name(.) = 'ulink'
                    or local-name(.) = 'link'
                    or local-name(.) = 'sgmltag'
                    or local-name(.) = 'systemitem'
                    or local-name(.) = 'filename'
                    or local-name(.) = 'abbrev'
                    or local-name(.) = 'literal'
                    or local-name(.) = 'email'
                    or local-name(.) = 'date'
                    or local-name(.) = 'productname'
                    or local-name(.) = 'pubdate'
                    or local-name(.) = 'copyright'
                    or local-name(.) = 'year'
                    or local-name(.) = 'holder'
                    or local-name(.) = 'revnumber'
                    or local-name(.) = 'pubdate'
                    or local-name(.) = 'year'
                    or local-name(.) = 'holder'
                    or local-name(.) = 'member'
                    or local-name(.) = 'emphasis'
                    or local-name(.) = 'command'
                    or local-name(.) = 'quote'
                    or local-name(.) = 'glossterm'
                    or local-name(.) = 'xref'">1</xsl:when>
    <xsl:otherwise>0</xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template name="is-block">
  <xsl:choose>
    <xsl:when test="local-name(.) = 'para'
                    or local-name(.) = 'section'
                    or local-name(.) = 'sect1'
                    or local-name(.) = 'sect2'
                    or local-name(.) = 'sect3'
                    or local-name(.) = 'sect4'
                    or local-name(.) = 'sect5'
                    or local-name(.) = 'article'
                    or local-name(.) = 'authorgroup'
                    or local-name(.) = 'legalnotice'
                    or local-name(.) = 'chapter'
                    or local-name(.) = 'screen'
                    or local-name(.) = 'preface'
                    or local-name(.) = 'programlisting'
                    or local-name(.) = 'bibliomixed'
                    or local-name(.) = 'important'
                    or local-name(.) = 'note'
                    or local-name(.) = 'releaseinfo'
                    or local-name(.) = 'revision'
                    or local-name(.) = 'itemizedlist'
                    or local-name(.) = 'orderedlist'
                    or local-name(.) = 'appendix'">1</xsl:when>
    <xsl:otherwise>0</xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>
