Hi,
Profiling for exclusion requires a customization of the profiling template
named 'cross.compare' in profiling/profile-mode.xsl. That template compares a
profiling attribute to the corresponding value of the profiling parameter
(e.g., @os vs. $profile.os). Below is my attempt at a customization to handle
a simple case:
a. When the profiling attribute has a single value, so that it does not have
to recurse through a set of values separated by semicolons (and thereby
complicating the logic), and
b. When the attribute value to be excluded is prepended with the literal
string "NOT", as in "NOTconditionB".
So, for example, if $profile.os="windows" and an element has @os="NOTwindows",
then the element will be excluded. Any other value of $profile.os would
include the element. More work would be needed if you wanted to use multiple
values such as @os="NOTwindows;NOTmac".
<xsl:template name="cross.compare">
<xsl:param name="a"/>
<xsl:param name="b"/>
<xsl:param name="sep" select="$profile.separator"/>
<xsl:variable name="head" select="substring-before(concat($a, $sep), $sep)"/>
<xsl:variable name="tail" select="substring-after($a, $sep)"/>
<xsl:choose>
<!-- special case of single value attribute that starts with NOT -->
<xsl:when test="not(contains($b, $sep)) and
starts-with(normalize-space($b),'NOT')">
<xsl:variable name="negative"
select="substring-after(normalize-space($b),'NOT')"/>
<xsl:choose>
<xsl:when test="contains(concat($sep, $negative, $sep),
concat($sep, $a, $sep))"></xsl:when>
<!-- otherwise include it -->
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<!-- this part is the original cross.compare -->
<xsl:if test="contains(concat($sep, $b, $sep),
concat($sep, $head, $sep))">1</xsl:if>
<xsl:if test="$tail">
<xsl:call-template name="cross.compare">
<xsl:with-param name="a" select="$tail"/>
<xsl:with-param name="b" select="$b"/>
</xsl:call-template>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Bob Stayton
Sagehill Enterprises
[email protected]
----- Original Message -----
From: Laurie Burley
To: [email protected]
Sent: Tuesday, May 12, 2009 1:05 AM
Subject: [docbook-apps] Profiles
Has anyone managed to configure profile logic to allow negative conditions?
I would like to be able to do the following:
Show SectionA unless conditionB
The reason for this is because we have dozens of conditions and it is common
that we need to add all but one on a conditional element. We will inevitably
need more conditions in the future, and things are quickly spiraling out of
control, making the profiles unmanageable.
Does anyone have an example or recommendations here?
Kind Regards,
Laurie