xmlns='http://www.w3.org/1999/xhtml'
xmlns:xhtml='http://www.w3.org/1999/xhtml'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+ xmlns:func='http://exslt.org/functions'
+ xmlns:f='http://draconx.ca/my-functions'
+ extension-element-prefixes='func f'
exclude-result-prefixes='xhtml'>
<xsl:output method='xml' encoding='UTF-8' indent='yes'
doctype-public='-//W3C//DTD XHTML 1.1//EN'
doctype-system='http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd' />
<xsl:strip-space elements='*' />
+<xsl:preserve-space elements='xhtml:p' />
<xsl:param name='source-uri'
select='"//git.draconx.ca/gitweb/homepage.git/blob/"' />
<xsl:param name='site-title' select='"The Citrine Citadel"' />
+<func:function name='f:ends-with'>
+ <xsl:param name='a' />
+ <xsl:param name='b' />
+ <func:result
+ select='substring($a, string-length($a)-string-length($b)+1)=$b' />
+</func:function>
+
<xsl:template match='node()|@*'>
<xsl:copy><xsl:apply-templates select='node()|@*' /></xsl:copy>
</xsl:template>
+<!-- Add rel attributes to external links -->
+<xsl:template match='xhtml:a[starts-with(@href,"http://")
+ or starts-with(@href,"https://")
+ or starts-with(@href,"//")]'>
+ <xsl:variable name='domain'
+ select='substring-before(
+ concat(translate(substring-after(@href, "//"), ":", "/"), "/"),
+ "/")' />
+
+ <xsl:copy>
+ <xsl:apply-templates select='@*' />
+ <xsl:if test='not($domain="draconx.ca"
+ or f:ends-with($domain, ".draconx.ca"))'>
+ <xsl:attribute name='rel'>
+ <xsl:if test='@rel'>
+ <xsl:value-of select='@rel' />
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <xsl:text>external noopener noreferrer</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select='node()' />
+ </xsl:copy>
+</xsl:template>
+
+<xsl:template match='xhtml:h2[@id]'>
+ <xsl:variable name='fragment' select='concat("#", @id)' />
+ <xsl:copy>
+ <xsl:apply-templates select='node()|@*' />
+ <xsl:text> </xsl:text>
+ <small class='permalink'>
+ (<a href='{$fragment}'><xsl:value-of select='$fragment' /></a>)
+ </small>
+ </xsl:copy>
+</xsl:template>
+
+<xsl:template match='copyright'>
+ <p>
+ <xsl:text>Copyright © </xsl:text>
+ <xsl:value-of select='text()' />
+ <xsl:text>.</xsl:text>
+ </p>
+</xsl:template>
+
+<xsl:template match='license'>
+ <p>
+ <xsl:text>Copying and distribution of this material</xsl:text>
+ <xsl:if test='normalize-space(modification-allowed)="yes"'>
+ <xsl:text>, with or without modification,</xsl:text>
+ </xsl:if>
+ <xsl:text> is permitted under the terms of the </xsl:text>
+ <a rel='license'>
+ <xsl:attribute name='href'>
+ <xsl:value-of select='normalize-space(uri)' />
+ </xsl:attribute>
+ <xsl:value-of select='name' />
+ </a>
+ <xsl:text>.</xsl:text>
+ </p>
+</xsl:template>
+
<xsl:template match='source'>
<p>
<xsl:text>This document was compiled from </xsl:text>
<xsl:apply-templates select='/document/xhtml:html/@*' />
<xsl:apply-templates select='/document/xhtml:html/node()' />
+ <hr />
<div id='footer'>
+ <xsl:apply-templates select='/document/copyright' />
+ <xsl:apply-templates select='/document/license' />
<xsl:apply-templates select='/document/source' />
</div>
</body>