my $section_counter = 0;
foreach my $section ( $chapter->findnodes('section') ) {
++$section_counter;
+ $section->setAttribute( 'sectprefix', $section_counter );
my $section_id = $section->getAttribute('id');
unless ($section_id) { # synthesise missing id
section_id => $section_counter,
section_title => $section_title
};
+
+ # 2022/07/07 jgh: added loop for sections under sections, which are resulting from the .subsection macro
+ # Add a "level" attribute to these nodes
+ ## Iterate over each subsection
+ my $subsec_counter = 0;
+ foreach my $subsection ( $section->findnodes('section') ) {
+ ++$subsec_counter;
+
+ $subsection->setAttribute( 'level', "2" );
+ $subsection->setAttribute( 'sectprefix', sprintf("%d.%d", $section_counter, $subsec_counter) );
+
+ my $subsec_id = $subsection->getAttribute('id');
+ unless ($subsec_id) { # synthesise missing id
+ $subsec_id = sprintf( 'section_noid_%04d_%04d_%04d', $chapter_counter, $section_counter, $subsec_counter );
+ $subsection->setAttribute( 'id', $subsec_id );
+ }
+ my $subsec_title = $subsection->findvalue('title');
+
+ $index{$subsec_id} = {
+ chapter_id => $chapter_counter,
+ chapter_title => $chapter_title,
+ section_id => $subsec_counter,
+ section_title => $subsec_title
+ };
+ }
}
}
## Build indexes as new chapters
</xsl:template>
<!-- Section -->
- <xsl:template match="/chapter/section">
+ <xsl:template match="*/section">
+
+ <!-- Add 2 to the "level" attr for the html header level; default h3 -->
+ <xsl:variable name="hlevel">
+ <xsl:choose>
+ <xsl:when test="@level!=''"><xsl:value-of select="@level + 2"/></xsl:when>
+ <xsl:otherwise>3</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- Take the "sectprefix" attr, default position() -->
+ <xsl:variable name="sectprefix">
+ <xsl:choose>
+ <xsl:when test="@sectprefix!=''"> <xsl:value-of select="@sectprefix"/> </xsl:when>
+ <xsl:otherwise> <xsl:value-of select="position()"/> </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
<!-- Section Wrapper -->
<div class="section{@class}">
</h3>
</xsl:when>
<xsl:otherwise>
- <h3 id="{@id}" class="{@class}">
- <xsl:value-of select="concat(position(),'. ',title)"/>
- </h3>
+ <xsl:element name="h{$hlevel}">
+ <xsl:attribute name="id"> <xsl:value-of select="@id"/> </xsl:attribute>
+ <xsl:attribute name="class"> <xsl:value-of select="@class"/> </xsl:attribute>
+ <xsl:value-of select="concat($sectprefix,'. ',title)"/>
+ </xsl:element>
</xsl:otherwise>
</xsl:choose>