]> granicus.if.org Git - docbook-dsssl/commitdiff
Add support for autolink.index.see param to link from see and
authorBob Stayton <bobs@sagehill.net>
Sun, 19 Jan 2014 22:49:20 +0000 (22:49 +0000)
committerBob Stayton <bobs@sagehill.net>
Sun, 19 Jan 2014 22:49:20 +0000 (22:49 +0000)
seealso element to primary element in index.

xsl/html/autoidx.xsl
xsl/html/param.ent
xsl/html/param.xweb

index 833fc0f98ce1409bc9c2182dcb443e16bd5e5768..ea954e6c3f44c4dd16a6f2c75e78da1a89178378 100644 (file)
@@ -5,6 +5,7 @@
 ]>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:exslt="http://exslt.org/common"
+                xmlns:xlink='http://www.w3.org/1999/xlink'
                 extension-element-prefixes="exslt"
                 exclude-result-prefixes="exslt"
                 version="1.0">
          match="indexterm"
          use="concat(&primary;, &sep;, &secondary;, &sep;, &tertiary;)"/>
 
+<!-- this key used for automatic links from see and seealso to primary -->
+<xsl:key name="primaryonly"
+         match="indexterm"
+         use="normalize-space(primary)"/>
+
 <xsl:key name="endofrange"
          match="indexterm[@class='endofrange']"
          use="@startref"/>
   <xsl:variable name="key" select="&primary;"/>
   <xsl:variable name="refs" select="key('primary', $key)[&scope;]"/>
   <dt>
+    <xsl:if test="$autolink.index.see != 0">
+      <!-- add internal id attribute to form see and seealso links -->
+      <xsl:attribute name="id">
+        <xsl:value-of select="concat('ientry-', generate-id())"/>
+      </xsl:attribute>
+    </xsl:if>
     <xsl:for-each select="$refs/primary">
       <xsl:if test="@id or @xml:id">
         <xsl:choose>
   <xsl:param name="role" select="''"/>
   <xsl:param name="type" select="''"/>
 
+  <xsl:variable name="see" select="normalize-space(see)"/>
+
+  <!-- can only link to primary, which should appear before comma
+  in see "primary, secondary" entry -->
+  <xsl:variable name="seeprimary">
+    <xsl:choose>
+      <xsl:when test="contains($see, ',')">
+        <xsl:value-of select="substring-before($see, ',')"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$see"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable> 
+
+  <xsl:variable name="seetarget" select="key('primaryonly', $seeprimary)[1]"/>
+
+  <xsl:variable name="linkend">
+    <xsl:if test="$seetarget">
+      <xsl:value-of select="concat('#ientry-', generate-id($seetarget))"/>
+    </xsl:if>
+  </xsl:variable>
+
   <xsl:text> (</xsl:text>
   <xsl:call-template name="gentext">
     <xsl:with-param name="key" select="'see'"/>
   </xsl:call-template>
   <xsl:text> </xsl:text>
-  <xsl:value-of select="see"/>
+  <xsl:choose>
+    <!-- manual links have precedence -->
+    <xsl:when test="see/@linkend or see/@xlink:href">
+      <xsl:call-template name="simple.xlink">
+        <xsl:with-param name="node" select="see"/>
+        <xsl:with-param name="content" select="$see"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="$autolink.index.see = 0">
+      <xsl:value-of select="$see"/>
+    </xsl:when>
+    <xsl:when test="$seetarget">
+      <a href="{$linkend}">
+        <xsl:value-of select="$see"/>
+      </a>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$see"/>
+    </xsl:otherwise>
+  </xsl:choose>
   <xsl:text>)</xsl:text>
 </xsl:template>
 
 
   <xsl:for-each select="seealso">
     <xsl:sort select="translate(., &lowercase;, &uppercase;)"/>
+
+    <xsl:variable name="seealso" select="normalize-space(.)"/>
+
+    <!-- can only link to primary, which should appear before comma
+    in seealso "primary, secondary" entry -->
+    <xsl:variable name="seealsoprimary">
+      <xsl:choose>
+        <xsl:when test="contains($seealso, ',')">
+          <xsl:value-of select="substring-before($seealso, ',')"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$seealso"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable> 
+
+    <xsl:variable name="seealsotarget" select="key('primaryonly', $seealsoprimary)[1]"/>
+
+    <xsl:variable name="linkend">
+      <xsl:if test="$seealsotarget">
+        <xsl:value-of select="concat('#ientry-', generate-id($seealsotarget))"/>
+      </xsl:if>
+    </xsl:variable>
+
     <dt>
-    <xsl:text>(</xsl:text>
-    <xsl:call-template name="gentext">
-      <xsl:with-param name="key" select="'seealso'"/>
-    </xsl:call-template>
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="."/>
-    <xsl:text>)</xsl:text>
+      <xsl:text>(</xsl:text>
+      <xsl:call-template name="gentext">
+        <xsl:with-param name="key" select="'seealso'"/>
+      </xsl:call-template>
+      <xsl:text> </xsl:text>
+      <xsl:choose>
+        <!-- manual links have precedence -->
+        <xsl:when test="@linkend or @xlink:href">
+          <xsl:call-template name="simple.xlink">
+            <xsl:with-param name="node" select="."/>
+            <xsl:with-param name="content" select="$seealso"/>
+          </xsl:call-template>
+        </xsl:when>
+        <xsl:when test="$autolink.index.see = 0">
+          <xsl:value-of select="$seealso"/>
+        </xsl:when>
+        <xsl:when test="$seealsotarget">
+          <a href="{$linkend}">
+            <xsl:value-of select="$seealso"/>
+          </a>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$seealso"/>
+        </xsl:otherwise>
+      </xsl:choose>
+      <xsl:text>)</xsl:text>
     </dt>
+
     <xsl:if test="$div.element = 'section'">
       <dd></dd>
     </xsl:if>
index 42f4e1af95bf3241bdefb3bc804d52d0caa61915..9454f321cee23f875c76d994c449af86f6481496 100644 (file)
 <!ENTITY webhelp.start.filename     SYSTEM "../params/webhelp.start.filename.xml">
 <!ENTITY webhelp.tree.cookie.id     SYSTEM "../params/webhelp.tree.cookie.id.xml">
 <!ENTITY activate.external.olinks     SYSTEM "../params/activate.external.olinks.xml">
+<!ENTITY autolink.index.see         SYSTEM "../params/autolink.index.see.xml">
index 9333e584a6a46093aa83058f590f8ac395ce2d91..2b435c99a0f95e698eed86d5beab3d39bcbe682e 100644 (file)
@@ -85,6 +85,7 @@ $Id$
 &index.on.role;
 &index.links.to.section;
 &index.prefer.titleabbrev;
+&autolink.index.see;
 &index.term.separator;
 &index.number.separator;
 &index.range.separator;
@@ -471,6 +472,7 @@ around all these parameters.</para>
 <src:fragref linkend="author.othername.in.middle.frag"/>
 <src:fragref linkend="autotoc.label.in.hyperlink.frag"/>
 <src:fragref linkend="autotoc.label.separator.frag"/>
+<src:fragref linkend="autolink.index.see.frag"/>
 <src:fragref linkend="base.dir.frag"/>
 <src:fragref linkend="biblioentry.item.separator.frag"/>
 <src:fragref linkend="bibliography.collection.frag"/>