<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch master
in repository macports-guide.

</pre>
<p><a href="https://github.com/macports/macports-guide/commit/d623bbffe980de37bd05600c5ec4b41d728fff19">https://github.com/macports/macports-guide/commit/d623bbffe980de37bd05600c5ec4b41d728fff19</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit d623bbffe980de37bd05600c5ec4b41d728fff19
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Wed Nov 16 19:16:08 2016 +0100

<span style='display:block; white-space:pre;color:#404040;'>    Add support for macro templates
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This adds the possibility to define macros that can be reused across the
</span><span style='display:block; white-space:pre;color:#404040;'>    document. The first example for this is a macro that allows to place
</span><span style='display:block; white-space:pre;color:#404040;'>    a warning on sections that are outdated with this XML processing
</span><span style='display:block; white-space:pre;color:#404040;'>    instruction:
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    <?macro-outdated reason="..." ?>
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This will be transformed using the template defined in
</span><span style='display:block; white-space:pre;color:#404040;'>    guide/xml/macros.xml, while the reason="" parameter passed to the
</span><span style='display:block; white-space:pre;color:#404040;'>    processing instruction will replace the placeholder written as
</span><span style='display:block; white-space:pre;color:#404040;'>    <macro-param name="reason" /> in the template.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This approach uses multiple passes of template evaluation and different
</span><span style='display:block; white-space:pre;color:#404040;'>    modes for the replacement. It is not possible to generate the macro
</span><span style='display:block; white-space:pre;color:#404040;'>    fragment within the XSL stylesheet itself, as in XSLT 1.0 there is
</span><span style='display:block; white-space:pre;color:#404040;'>    a huge difference between node sets from the document and fragments
</span><span style='display:block; white-space:pre;color:#404040;'>    generated on-the-fly. In order to allow <xref> inside the macro
</span><span style='display:block; white-space:pre;color:#404040;'>    template, the template itself has to be part of the document.
</span>---
 guide/resources/base.xsl | 53 +++++++++++++++++++++++++++++++++++++++++++++++-
 guide/xml/guide.xml      |  2 ++
 guide/xml/macros.xml     | 13 ++++++++++++
 3 files changed, 67 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/guide/resources/base.xsl b/guide/resources/base.xsl
</span><span style='display:block; white-space:pre;color:#808080;'>index 7968d56..2fc0750 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/guide/resources/base.xsl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/guide/resources/base.xsl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,4 +1,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  xmlns:exslt="http://exslt.org/common"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+>
</span>     <!-- See http://docbook.sourceforge.net/release/xsl/current/doc/html/ for parameters -->
 
     <xsl:param name="html.stylesheet">docbook.css</xsl:param>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -9,4 +11,53 @@
</span>     <xsl:param name="profile.condition">noman</xsl:param>
     <xsl:param name="css.decoration">0</xsl:param>
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- custom templates for macros -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xsl:template match="processing-instruction('macro-outdated')">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:variable name="reason" select="substring-before(substring-after(., 'reason=&quot;'), '&quot;')" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:variable name="out">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <xsl:apply-templates select="//warning[@role = 'macro-outdated']" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <macro-with-param name="reason">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              <xsl:value-of select="$reason" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            </macro-with-param>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </xsl:variable>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:apply-templates select="exslt:node-set($out)" mode="macro-replace" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </xsl:template>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- copy macro-param verbatim in normal mode -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xsl:template match="macro-param">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      <xsl:copy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:copy-of select="@*|node()" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      </xsl:copy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </xsl:template>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- begin mode: macro-replace -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- identity copy in macro-replace mode -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xsl:template match="@*|node()" mode="macro-replace">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:copy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          <xsl:apply-templates select="@*|node()" mode="macro-replace"/>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </xsl:copy>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </xsl:template>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- replace macro-param with value -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xsl:template match="macro-param" mode="macro-replace">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:variable name="name" select="@name" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <xsl:copy-of select="following::macro-with-param[@name = $name]/text()" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </xsl:template>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- skip macro-with-param -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xsl:template match="macro-with-param" mode="macro-replace">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <!-- no output -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </xsl:template>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- end mode: macro-replace -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <!-- all macro content is defined in guide/xml/macros.xml, but hidden from normal output -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xsl:template match="section[@id = 'macros']">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <!-- no output -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </xsl:template>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> </xsl:stylesheet>
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/guide/xml/guide.xml b/guide/xml/guide.xml
</span><span style='display:block; white-space:pre;color:#808080;'>index 9304bd8..245a5b7 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/guide/xml/guide.xml
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/guide/xml/guide.xml
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -56,4 +56,6 @@
</span>         xmlns:xi="http://www.w3.org/2001/XInclude" />
     <xi:include href="glossary.xml"
         xmlns:xi="http://www.w3.org/2001/XInclude" />
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    <xi:include href="macros.xml"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xmlns:xi="http://www.w3.org/2001/XInclude" />
</span> </book>
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/guide/xml/macros.xml b/guide/xml/macros.xml
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..98d1d8a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/guide/xml/macros.xml
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<?xml version="1.0" encoding="UTF-8"?>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!-- This section will be hidden by a xsl:template in resources/base.xsl -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<section id='macros'>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<warning role='macro-outdated'><para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    This section is outdated <macro-param name="reason" /> and needs to be reworked.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  Please see <xref linkend="project.docs" /> if you can contribute updated instructions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+</para></warning>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+</section>
</span></pre><pre style='margin:0'>

</pre>