Blame xslt/common/messages.xsl

Packit e4b6da
Packit e4b6da
Packit e4b6da
-->
Packit e4b6da
Packit e4b6da
                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
Packit e4b6da
                xmlns:l="http://docbook2x.sourceforge.net/xsl/localization"
Packit e4b6da
                xmlns:exslt="http://exslt.org/common"
Packit e4b6da
                xmlns:saxon="http://icl.com/saxon"
Packit e4b6da
                exclude-result-prefixes="doc saxon exslt"
Packit e4b6da
                version='1.0'
Packit e4b6da
                xml:lang="en">
Packit e4b6da
Packit e4b6da
Packit e4b6da
     $Id: messages.xsl,v 1.14 2004/08/18 14:24:27 stevecheng Exp $
Packit e4b6da
     ********************************************************************
Packit e4b6da
Packit e4b6da
     © 2000 Steve Cheng <stevecheng@users.sourceforge.net>
Packit e4b6da
Packit e4b6da
     Part of docbook2X.  Facilitates L10Nized user messages.
Packit e4b6da
                         
Packit e4b6da
     ******************************************************************** -->
Packit e4b6da
Packit e4b6da
Packit e4b6da
Packit e4b6da
<xsl:param name="message-language" select="'en'" />
Packit e4b6da
Packit e4b6da
Packit e4b6da
Packit e4b6da
<xsl:template name="l10n-message-choose-language">
Packit e4b6da
  <xsl:param name="key" />
Packit e4b6da
  <xsl:param name="languages" select="$message-language" />
Packit e4b6da
  
Packit e4b6da
    translate(substring-before($languages, ':'),
Packit e4b6da
              'ABCDEFGHIJKLMNOPQRSTUVWXYZ_',
Packit e4b6da
              'abcdefghijklmnopqrstuvwxyz-')" />
Packit e4b6da
Packit e4b6da
  <xsl:choose>
Packit e4b6da
    <xsl:when test="$first = ''">
Packit e4b6da
      <xsl:value-of select="$languages" />
Packit e4b6da
    </xsl:when>
Packit e4b6da
  
Packit e4b6da
    <xsl:when test="$l10n-data/l:locale[@lang=$first]/l:message[@key=$key]">
Packit e4b6da
      <xsl:value-of select="$first" />
Packit e4b6da
    </xsl:when>
Packit e4b6da
Packit e4b6da
    <xsl:otherwise>
Packit e4b6da
      <xsl:call-template name="l10n-message-choose-language">
Packit e4b6da
        <xsl:with-param name="key" select="$key" />
Packit e4b6da
        
Packit e4b6da
                        select="substring-after($languages, ':')" />
Packit e4b6da
      </xsl:call-template>
Packit e4b6da
    </xsl:otherwise>
Packit e4b6da
  </xsl:choose>
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
Packit e4b6da
Packit e4b6da
<xsl:template match="l:a1" mode="l10n-substitution">
Packit e4b6da
  <xsl:param name="arg-1" />
Packit e4b6da
  <xsl:value-of select="$arg-1" />
Packit e4b6da
</xsl:template>
Packit e4b6da
<xsl:template match="l:a2" mode="l10n-substitution">
Packit e4b6da
  <xsl:param name="arg-2" />
Packit e4b6da
  <xsl:value-of select="$arg-2" />
Packit e4b6da
</xsl:template>
Packit e4b6da
<xsl:template match="l:a3" mode="l10n-substitution">
Packit e4b6da
  <xsl:param name="arg-3" />
Packit e4b6da
  <xsl:value-of select="$arg-3" />
Packit e4b6da
</xsl:template>
Packit e4b6da
<xsl:template match="l:a4" mode="l10n-substitution">
Packit e4b6da
  <xsl:param name="arg-4" />
Packit e4b6da
  <xsl:value-of select="$arg-4" />
Packit e4b6da
</xsl:template>
Packit e4b6da
<xsl:template match="l:a5" mode="l10n-substitution">
Packit e4b6da
  <xsl:param name="arg-5" />
Packit e4b6da
  <xsl:value-of select="$arg-5" />
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
Packit e4b6da
Packit e4b6da
<doc:template name="user-message" xmlns="">
Packit e4b6da
  <refpurpose>Emit a user message</refpurpose>
Packit e4b6da
  <refdescription>
Packit e4b6da
    <para>
Packit e4b6da
      This template is used in place of <function>xsl:message</function>.
Packit e4b6da
       It traces the path of the given node to help in debugging and allows
Packit e4b6da
       messages to be localized.
Packit e4b6da
    </para>
Packit e4b6da
  </refdescription>
Packit e4b6da
  <refparameter>
Packit e4b6da
    <variablelist>
Packit e4b6da
      <varlistentry>
Packit e4b6da
        <term><parameter>node</parameter></term>
Packit e4b6da
        <listitem><para>
Packit e4b6da
          The node to get to trace the path to.
Packit e4b6da
          Default is the context node.
Packit e4b6da
        </para></listitem>
Packit e4b6da
      </varlistentry>
Packit e4b6da
      <varlistentry>
Packit e4b6da
        <term><parameter>arg</parameter></term>
Packit e4b6da
        <listitem><para>
Packit e4b6da
          Additional string argument to message, if any.
Packit e4b6da
        </para></listitem>
Packit e4b6da
      </varlistentry>
Packit e4b6da
      <varlistentry>
Packit e4b6da
        <term><parameter>key</parameter></term>
Packit e4b6da
        <listitem><para>
Packit e4b6da
          The standard message text.  If a localization/customization
Packit e4b6da
          exists, it is keyed under this text and displayed instead
Packit e4b6da
          of the standard message text.
Packit e4b6da
        </para></listitem>
Packit e4b6da
      </varlistentry>
Packit e4b6da
    </variablelist>
Packit e4b6da
  </refparameter>
Packit e4b6da
</doc:template>
Packit e4b6da
Packit e4b6da
<xsl:template name="user-message">
Packit e4b6da
  <xsl:param name="node" select="." />
Packit e4b6da
  <xsl:param name="trace-node" select="true()" />
Packit e4b6da
  <xsl:param name="arg-1" />
Packit e4b6da
  <xsl:param name="arg-2" />
Packit e4b6da
  <xsl:param name="arg-3" />
Packit e4b6da
  <xsl:param name="arg-4" />
Packit e4b6da
  <xsl:param name="arg-5" />
Packit e4b6da
  <xsl:param name="key" />
Packit e4b6da
  <xsl:param name="content" />
Packit e4b6da
Packit e4b6da
  <xsl:variable name="lang">
Packit e4b6da
    <xsl:call-template name="l10n-message-choose-language">
Packit e4b6da
      <xsl:with-param name="key" select="$key" />
Packit e4b6da
    </xsl:call-template>
Packit e4b6da
  </xsl:variable>
Packit e4b6da
Packit e4b6da
  <xsl:message>
Packit e4b6da
    <xsl:value-of select="$user-message-prefix" />
Packit e4b6da
  
Packit e4b6da
    <xsl:if test="$trace-node">
Packit e4b6da
      <xsl:choose>
Packit e4b6da
        
Packit e4b6da
                          and function-available('saxon:line-number')">
Packit e4b6da
          <xsl:call-template name="print-node-line-number">
Packit e4b6da
            <xsl:with-param name="node" select="$node" />
Packit e4b6da
          </xsl:call-template>
Packit e4b6da
        </xsl:when>
Packit e4b6da
        <xsl:otherwise>
Packit e4b6da
          <xsl:call-template name="print-node-xpath">
Packit e4b6da
            <xsl:with-param name="node" select="$node" />
Packit e4b6da
          </xsl:call-template>
Packit e4b6da
        </xsl:otherwise>
Packit e4b6da
      </xsl:choose>
Packit e4b6da
Packit e4b6da
      <xsl:text>: </xsl:text>
Packit e4b6da
    </xsl:if>
Packit e4b6da
Packit e4b6da
    
Packit e4b6da
      name="message"
Packit e4b6da
      select="($l10n-data/l:locale[@lang=$lang]/l:message[@key=$key])[last()]" />
Packit e4b6da
Packit e4b6da
    <xsl:choose>
Packit e4b6da
      <xsl:when test="$message">
Packit e4b6da
        
Packit e4b6da
                             mode="l10n-substitution">
Packit e4b6da
          <xsl:with-param name="arg-1" select="$arg-1" />
Packit e4b6da
          <xsl:with-param name="arg-2" select="$arg-2" />
Packit e4b6da
          <xsl:with-param name="arg-3" select="$arg-3" />
Packit e4b6da
          <xsl:with-param name="arg-4" select="$arg-4" />
Packit e4b6da
          <xsl:with-param name="arg-5" select="$arg-5" />
Packit e4b6da
        </xsl:apply-templates>
Packit e4b6da
      </xsl:when>
Packit e4b6da
Packit e4b6da
      <xsl:when test="$content != '' and function-available('exslt:node-set')">
Packit e4b6da
        
Packit e4b6da
                             mode="l10n-substitution">
Packit e4b6da
          <xsl:with-param name="arg-1" select="$arg-1" />
Packit e4b6da
          <xsl:with-param name="arg-2" select="$arg-2" />
Packit e4b6da
          <xsl:with-param name="arg-3" select="$arg-3" />
Packit e4b6da
          <xsl:with-param name="arg-4" select="$arg-4" />
Packit e4b6da
          <xsl:with-param name="arg-5" select="$arg-5" />
Packit e4b6da
        </xsl:apply-templates>
Packit e4b6da
      </xsl:when>
Packit e4b6da
Packit e4b6da
      <xsl:otherwise>
Packit e4b6da
        <xsl:value-of select="$key" />
Packit e4b6da
      </xsl:otherwise>
Packit e4b6da
    </xsl:choose>
Packit e4b6da
  </xsl:message>
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
Packit e4b6da
Packit e4b6da
<doc:template name="print-node-line-number" xmlns="">
Packit e4b6da
  <refpurpose>Display file name and line number of a node</refpurpose>
Packit e4b6da
  <refdescription>
Packit e4b6da
    <para>
Packit e4b6da
      This template displays the file name and 
Packit e4b6da
      the line number in that file that contains the given node.
Packit e4b6da
      In addition the name of the given node is shown in parentheses
Packit e4b6da
      (usually the element name).
Packit e4b6da
      The output is suitable for diagnostics to the user.
Packit e4b6da
    </para>
Packit e4b6da
Packit e4b6da
    <para>
Packit e4b6da
      (“filename” means the “filename” part of the URI of the 
Packit e4b6da
      containing entity.)  
Packit e4b6da
    </para>
Packit e4b6da
  </refdescription>
Packit e4b6da
Packit e4b6da
  <refparameter>
Packit e4b6da
    <variablelist>
Packit e4b6da
      <varlistentry>
Packit e4b6da
        <term><parameter>node</parameter></term>
Packit e4b6da
        <listitem><para>
Packit e4b6da
          The node to get to print the information for.
Packit e4b6da
          Default is the context node.
Packit e4b6da
        </para></listitem>
Packit e4b6da
      </varlistentry>
Packit e4b6da
    </variablelist>
Packit e4b6da
  </refparameter>
Packit e4b6da
</doc:template>
Packit e4b6da
Packit e4b6da
<xsl:template name="print-node-line-number">
Packit e4b6da
  <xsl:param name="node" select="." />
Packit e4b6da
  <xsl:for-each select="$node">
Packit e4b6da
    <xsl:variable name="filename">
Packit e4b6da
      <xsl:choose>
Packit e4b6da
        <xsl:when test="contains(saxon:system-id(), '/')">
Packit e4b6da
          <xsl:call-template name="substring-after-last">
Packit e4b6da
            <xsl:with-param name="content" select="saxon:system-id()" />
Packit e4b6da
            <xsl:with-param name="search"  select="'/'" />
Packit e4b6da
          </xsl:call-template>
Packit e4b6da
        </xsl:when>
Packit e4b6da
        <xsl:otherwise>
Packit e4b6da
          <xsl:value-of select="saxon:system-id()" />
Packit e4b6da
        </xsl:otherwise>
Packit e4b6da
      </xsl:choose>
Packit e4b6da
    </xsl:variable>
Packit e4b6da
Packit e4b6da
    <xsl:value-of select="$filename" />
Packit e4b6da
    <xsl:text>:</xsl:text>
Packit e4b6da
Packit e4b6da
    <xsl:value-of select="saxon:line-number()" />
Packit e4b6da
    <xsl:text>(</xsl:text>
Packit e4b6da
    <xsl:value-of select="name(.)" />
Packit e4b6da
    <xsl:text>)</xsl:text>
Packit e4b6da
  </xsl:for-each>
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
Packit e4b6da
Packit e4b6da
<doc:template name="print-node-xpath" xmlns="">
Packit e4b6da
  <refpurpose>Display the path of a node</refpurpose>
Packit e4b6da
  <refdescription>
Packit e4b6da
    <para>
Packit e4b6da
      This template displays the address of the given node in 
Packit e4b6da
      XPath notation, in a compact yet unambiguous form
Packit e4b6da
      suitable for diagnostics to the user.
Packit e4b6da
    </para>
Packit e4b6da
Packit e4b6da
    <para>
Packit e4b6da
      It assumes that ID attributes are named 
Packit e4b6da
      <sgmltag class="attribute">id</sgmltag>, and if an element
Packit e4b6da
      has an ID defined, then the element will be addressed using
Packit e4b6da
      that ID, instead of a long XPath starting from the root.
Packit e4b6da
    </para>
Packit e4b6da
  </refdescription>
Packit e4b6da
Packit e4b6da
  <refparameter>
Packit e4b6da
    <variablelist>
Packit e4b6da
      <varlistentry>
Packit e4b6da
        <term><parameter>node</parameter></term>
Packit e4b6da
        <listitem><para>
Packit e4b6da
          The node to get to trace the path to.
Packit e4b6da
          Default is the context node.
Packit e4b6da
        </para></listitem>
Packit e4b6da
      </varlistentry>
Packit e4b6da
    </variablelist>
Packit e4b6da
  </refparameter>
Packit e4b6da
</doc:template>
Packit e4b6da
Packit e4b6da
<xsl:template name="print-node-xpath">
Packit e4b6da
  <xsl:param name="node" select="." />
Packit e4b6da
  <xsl:apply-templates select="$node" mode="print-node-xpath" />
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
<xsl:template match="text()" mode="print-node-xpath">
Packit e4b6da
  <xsl:apply-templates select=".." mode="print-node-xpath" />
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
<xsl:template match="@*" mode="print-node-xpath">
Packit e4b6da
  <xsl:apply-templates select=".." mode="print-node-xpath" />
Packit e4b6da
  <xsl:value-of select="concat('/@', name(), "='", string(.), "'")" />
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
<xsl:template match="*[@id != '']" mode="print-node-xpath">
Packit e4b6da
  <xsl:value-of select="concat('//', name(), "[@id='", @id, "']")" />
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
<xsl:template match="*" mode="print-node-xpath">
Packit e4b6da
  <xsl:apply-templates select=".." mode="print-node-xpath" />
Packit e4b6da
  <xsl:value-of select="concat('/', name())" />
Packit e4b6da
  <xsl:if test="count(../*[name() = name(current())]) > 1">
Packit e4b6da
    
Packit e4b6da
      count(preceding-sibling::*[name() = name(current())])+1,
Packit e4b6da
          ']')" />
Packit e4b6da
  </xsl:if>
Packit e4b6da
</xsl:template>
Packit e4b6da
Packit e4b6da
<xsl:template match="/" mode="print-node-xpath">
Packit e4b6da
</xsl:template>
Packit e4b6da
   
Packit e4b6da
</xsl:stylesheet>
Packit e4b6da