]> granicus.if.org Git - docbook-dsssl/commitdiff
Added support for multiple targets in one parameter
authorJirka Kosek <jirka@kosek.cz>
Fri, 7 Dec 2001 20:03:13 +0000 (20:03 +0000)
committerJirka Kosek <jirka@kosek.cz>
Fri, 7 Dec 2001 20:03:13 +0000 (20:03 +0000)
xsl/tools/profile/profile.xsl

index 5285fd49208aae4b899495a3a1ea38bece2bb091..e39bad3a584558b1cdf05d9e50fd57ff21835072 100644 (file)
 
 <!-- Profile elements based on input parameters -->
 <xsl:template match="*">
+  <xsl:variable name="os.content">
+    <xsl:if test="@os">
+      <xsl:call-template name="cross.compare">
+        <xsl:with-param name="a" select="$os"/>
+        <xsl:with-param name="b" select="@os"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:variable>
   <xsl:variable name="os.ok" select="not(@os) or not($os) or
-                contains(concat($sep, @os, $sep), concat($sep, $os, $sep)) or
-                @os = ''"/>
+                                     $os.content != '' or @os = ''"/>
+
+  <xsl:variable name="ul.content">
+    <xsl:if test="@userlevel">
+      <xsl:call-template name="cross.compare">
+        <xsl:with-param name="a" select="$ul"/>
+        <xsl:with-param name="b" select="@userlevel"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:variable>
   <xsl:variable name="ul.ok" select="not(@userlevel) or not($ul) or
-                contains(concat($sep, @userlevel, $sep), concat($sep, $ul, $sep)) or
-                @userlevel = ''"/>
+                                     $ul.content != '' or @userlevel = ''"/>
+
+  <xsl:variable name="arch.content">
+    <xsl:if test="@arch">
+      <xsl:call-template name="cross.compare">
+        <xsl:with-param name="a" select="$arch"/>
+        <xsl:with-param name="b" select="@arch"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:variable>
   <xsl:variable name="arch.ok" select="not(@arch) or not($arch) or
-                contains(concat($sep, @arch, $sep), concat($sep, $arch, $sep)) or
-                @arch = ''"/>
+                                       $arch.content != '' or @arch = ''"/>
+
+  <xsl:variable name="attr.content">
+    <xsl:if test="@*[local-name()=$attr]">
+      <xsl:call-template name="cross.compare">
+        <xsl:with-param name="a" select="$val"/>
+        <xsl:with-param name="b" select="@*[local-name()=$attr]"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:variable>
   <xsl:variable name="attr.ok" select="not(@*[local-name()=$attr]) or not($val) or
-                contains(concat($sep, @*[local-name()=$attr], $sep), concat($sep, $val, $sep)) or
-                @*[local-name()=$attr] = '' or not($attr)"/>
+                                       $attr.content != '' 
+                                       or @*[local-name()=$attr] = '' or not($attr)"/>
+
   <xsl:if test="$os.ok and $ul.ok and $arch.ok and $attr.ok">
     <xsl:copy>
       <xsl:apply-templates select="@*|node()"/>
   </xsl:if>
 </xsl:template>
 
+<!-- Returns non-empty string if list in $b contains one ore more values from list $a -->
+<xsl:template name="cross.compare">
+  <xsl:param name="a"/>
+  <xsl:param name="b"/>
+  <xsl:param name="head" select="substring-before(concat($a, $sep), $sep)"/>
+  <xsl:param name="tail" select="substring-after($a, $sep)"/>
+  <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:template>
+
 </xsl:stylesheet>