log.message — Logs/emits formatted notes and warnings
<xsl:template name="log.message">
<xsl:param name="level"/>
<xsl:param name="source"/>
<xsl:param name="context-desc"/>
<xsl:param name="context-desc-field-length">12</xsl:param>
<xsl:param name="context-desc-padded">
    <xsl:if test="not($context-desc = '')">
      <xsl:call-template name="pad-string">
        <xsl:with-param name="leftRight">right</xsl:with-param>
        <xsl:with-param name="padVar" select="substring($context-desc, 1, $context-desc-field-length)"/>
        <xsl:with-param name="length" select="$context-desc-field-length"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:param>
<xsl:param name="message"/>
<xsl:param name="message-field-length" select="45"/>
<xsl:param name="message-padded">
    <xsl:variable name="spaces-for-blank-level">
      <!-- * if the level field is blank, we'll need to pad out -->
      <!-- * the message field with spaces to compensate -->
      <xsl:choose>
        <xsl:when test="$level = ''">
          <xsl:value-of select="4 + 2"/>
          <!-- * 4 = hard-coded length of comment text ("Note" or "Warn") -->
          <!-- * + 2 = length of colon-plus-space separator ": " -->
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="0"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:variable name="spaces-for-blank-context-desc">
      <!-- * if the context-description field is blank, we'll need -->
      <!-- * to pad out the message field with spaces to compensate -->
      <xsl:choose>
        <xsl:when test="$context-desc = ''">
          <xsl:value-of select="$context-desc-field-length + 2"/>
          <!-- * + 2 = length of colon-plus-space separator ": " -->
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="0"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:variable name="extra-spaces" select="$spaces-for-blank-level + $spaces-for-blank-context-desc"/>
    <xsl:call-template name="pad-string">
      <xsl:with-param name="leftRight">right</xsl:with-param>
      <xsl:with-param name="padVar" select="substring($message, 1, ($message-field-length + $extra-spaces))"/>
      <xsl:with-param name="length" select="$message-field-length + $extra-spaces"/>
    </xsl:call-template>
  </xsl:param>
  ...
</xsl:template>
The log.message template is a utility
    template for logging/emitting formatted messages – that is,
    notes and warnings, along with a given log “level” and an
    identifier for the “source” that the message relates to.
Text to log/emit in the message-level field to
            indicate the message level
          (Note or
          Warning)
Text to log/emit in the source field to identify the
            “source” to which the notification/warning relates.
            This can be any arbitrary string, but because the
            message lacks line and column numbers to identify the
            exact part of the source document to which it
            relates, the intention is that the value you pass
            into the source parameter should
            give the user some way to identify the portion of
            their source document on which to take potentially
            take action in response to the log message (for
            example, to edit, change, or add content).
So the source value should be,
            for example, an ID, book/chapter/article title, title
            of some formal object, or even a string giving an
            XPath expression.
Text to log/emit in the context-description field to describe the context for the message.
Specifies length of the context-description field (in characters); default is 12
If the text specified by the
            context-desc parameter is longer
            than the number of characters specified in
            context-desc-field-length, it is
            truncated to context-desc-field-length
            (12 characters by default).
If the specified text is shorter than
            context-desc-field-length,
          it is right-padded out to
          context-desc-field-length (12 by
          default).
If no value has been specified for the
          context-desc parameter, the field is
          left empty and the text of the log message begins with
          the value of the message
          parameter.
Text to log/emit in the actual message field
Specifies length of the message field (in characters); default is 45