Automaticke cislovanie section v Appendixe

Pavol Vaskovic pavol.vaskovic na softproject.de
Pondělí Červenec 7 14:39:07 CEST 2003


Dobry den!

Velmi pekne dakujem panu Koskovi za vhodny startovaci bod. Ta sablona 
robila to co som potreboval, ale len v texte a len pre section prvej 
urovne..
Pre buducu referenciu sem posielam aj vyslednu upravu, ktora vypne 
cislovanie section v appendixe v texte aj v obsahu. (docbook xsl 1.61.2)
Aby sa negenerovali cisla sections v obsahu, upravili sme (s kolegom) 
sablonu label.this.section. Ale kedze mam zapnutej aj 
section.label.includes.component.label, bolo potrebne upravit aj dalsiu 
sablonu tak, aby sa v pripade appendixu nevolal match.label nadradeneho 
komponentu.

S pozdravom
Pavol Vaskovic

<!-- Turn off automatic numbering of sections in appendix -->
<xsl:template match="section[ancestor::appendix]"
              mode="object.title.template">
      <xsl:call-template name="gentext.template">
        <xsl:with-param name="context" select="'title-unnumbered'"/>
        <xsl:with-param name="name">
          <xsl:call-template name="xpath.location"/>
        </xsl:with-param>
      </xsl:call-template>
</xsl:template>

<xsl:template name="label.this.section">
  <xsl:param name="section" select="."/>
  <xsl:choose>
    <xsl:when test="count(ancestor::appendix) != 0">
      <xsl:value-of select="0"/>
    </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$section.autolabel"/>
        </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="section" mode="label.markup">
  <!-- if this is a nested section, label the parent -->
  <xsl:if test="local-name(..) = 'section'">
    <xsl:variable name="parent.section.label">
      <xsl:apply-templates select=".." mode="label.markup"/>
    </xsl:variable>
    <xsl:if test="$parent.section.label != ''">
      <xsl:apply-templates select=".." mode="label.markup"/>
      <xsl:apply-templates select=".." mode="intralabel.punctuation"/>
    </xsl:if>
  </xsl:if>

  <!-- if the parent is a component, maybe label that too -->
  <xsl:variable name="parent.is.component">
    <xsl:call-template name="is.component">
      <xsl:with-param name="node" select=".."/>
    </xsl:call-template>
  </xsl:variable>

  <!-- does this section get labelled? -->
  <xsl:variable name="label">
    <xsl:call-template name="label.this.section">
      <xsl:with-param name="section" select="."/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:if test="$section.label.includes.component.label != 0
                and $parent.is.component != 0">
    <xsl:variable name="parent.label">
          <xsl:if test="not(parent::appendix)">
        <xsl:apply-templates select=".." mode="label.markup"/>
            </xsl:if>
    </xsl:variable>
    <xsl:if test="$parent.label != ''">
      <xsl:apply-templates select=".." mode="label.markup"/>
      <xsl:apply-templates select=".." mode="intralabel.punctuation"/>
    </xsl:if>
  </xsl:if>

<!--
  <xsl:message>
    <xsl:value-of select="$label"/>, <xsl:number count="section"/>
  </xsl:message>
-->

  <xsl:choose>
    <xsl:when test="@label">
      <xsl:value-of select="@label"/>
    </xsl:when>
    <xsl:when test="$label != 0">
      <xsl:number count="section"/>
    </xsl:when>
  </xsl:choose>
</xsl:template>



Další informace o konferenci Docbook