Rewrote olink templates to support new features.
authorBob Stayton <bobs@sagehill.net>
Mon, 9 Aug 2004 00:27:01 +0000 (00:27 +0000)
committerBob Stayton <bobs@sagehill.net>
Mon, 9 Aug 2004 00:27:01 +0000 (00:27 +0000)
xsl/html/param.ent
xsl/html/param.xweb
xsl/html/xref.xsl

index 3cbc13a749395806d0bdacbbfcf1b98484f5aba8..a5046a3c9e375b93ab2b6d264dceb2acf739a40b 100644 (file)
 <!ENTITY nominal.table.width SYSTEM "../params/nominal.table.width.xml">
 <!ENTITY olink.base.uri SYSTEM "../params/olink.base.uri.xml">
 <!ENTITY olink.doctitle SYSTEM "../params/olink.doctitle.xml">
+<!ENTITY olink.properties SYSTEM "../params/olink.properties.xml">
+<!ENTITY olink.debug SYSTEM "../params/olink.debug.xml">
+<!ENTITY prefer.internal.olink SYSTEM "../params/prefer.internal.olink.xml">
+<!ENTITY insert.olink.page.number SYSTEM "../params/insert.olink.page.number.xml">
+<!ENTITY insert.olink.pdf.frag SYSTEM "../params/insert.olink.pdf.frag.xml">
+<!ENTITY olink.lang.fallback.sequence SYSTEM "../params/olink.lang.fallback.sequence.xml">
 <!ENTITY olink.fragid SYSTEM "../params/olink.fragid.xml">
 <!ENTITY olink.outline.ext SYSTEM "../params/olink.outline.ext.xml">
 <!ENTITY olink.pubid SYSTEM "../params/olink.pubid.xml">
index daadcfe560b979cc42c04edf8c54a5865560a000..a6b968d11be54a78fcbbb457a13a6004be5030b3 100644 (file)
@@ -211,6 +211,12 @@ to be incomplete. Don't forget to read the source, too :-)</para>
 &use.local.olink.style;
 &current.docid;
 &olink.doctitle;
+&olink.debug;
+&olink.properties;
+&olink.lang.fallback.sequence;
+&insert.olink.page.number;
+&insert.olink.pdf.frag;
+&prefer.internal.olink;
 &link.mailto.url;
 &ulink.target;
 &olink.fragid;
@@ -581,6 +587,12 @@ around all these parameters.</para>
 <src:fragref linkend="nominal.image.width.frag"/>
 <src:fragref linkend="nominal.table.width.frag"/>
 <src:fragref linkend="olink.base.uri.frag"/>
+<src:fragref linkend="olink.debug.frag"/>
+<src:fragref linkend="olink.properties.frag"/>
+<src:fragref linkend="insert.olink.page.number.frag"/>
+<src:fragref linkend="insert.olink.pdf.frag.frag"/>
+<src:fragref linkend="prefer.internal.olink.frag"/>
+<src:fragref linkend="olink.lang.fallback.sequence.frag"/>
 <src:fragref linkend="olink.doctitle.frag"/>
 <src:fragref linkend="olink.fragid.frag"/>
 <src:fragref linkend="olink.outline.ext.frag"/>
index 02b209d361d4bbe64321b5dc787fc6ec6dbcd101..4572510736b45044fd5a8ed65966411cc70cf87a 100644 (file)
 
 <!-- ==================================================================== -->
 
-<!-- Create keys for quickly looking up olink targets -->
-<xsl:key name="targetdoc-key" match="document" use="@targetdoc" />
-<xsl:key name="targetptr-key"  match="div|obj"
-         use="concat(ancestor::document/@targetdoc, '/', @targetptr)" />
-
 <xsl:template match="anchor">
   <xsl:call-template name="anchor"/>
 </xsl:template>
 </xsl:template>
 
 <xsl:template match="olink" name="olink">
-  <xsl:param name="target.database" 
-      select="document($target.database.document, /)"/>
 
   <xsl:call-template name="anchor"/>
 
   <xsl:variable name="localinfo" select="@localinfo"/>
 
-  <xsl:variable name="href">
-    <xsl:choose>
-      <xsl:when test="@linkmode">
-        <!-- use the linkmode to get the base URI, use localinfo as fragid -->
-        <xsl:variable name="modespec" select="key('id',@linkmode)"/>
-        <xsl:if test="count($modespec) != 1
-                      or local-name($modespec) != 'modespec'">
-          <xsl:message>Warning: olink linkmode pointer is wrong.</xsl:message>
-        </xsl:if>
-        <xsl:value-of select="$modespec"/>
-        <xsl:if test="@localinfo">
-          <xsl:text>#</xsl:text>
-          <xsl:value-of select="@localinfo"/>
-        </xsl:if>
-      </xsl:when>
-      <xsl:when test="@type = 'href'">
-        <xsl:call-template name="olink.outline">
-          <xsl:with-param name="outline.base.uri"
-                          select="unparsed-entity-uri(@targetdocent)"/>
-          <xsl:with-param name="localinfo" select="@localinfo"/>
-          <xsl:with-param name="return" select="'href'"/>
+  <xsl:choose>
+    <!-- olinks resolved by stylesheet and target database -->
+    <xsl:when test="@targetdoc or @targetptr" >
+      <xsl:variable name="targetdoc.att" select="@targetdoc"/>
+      <xsl:variable name="targetptr.att" select="@targetptr"/>
+
+      <xsl:variable name="olink.lang">
+        <xsl:call-template name="l10n.language">
+          <xsl:with-param name="xref-context" select="true()"/>
         </xsl:call-template>
-      </xsl:when>
-      <!-- Olinks resolved by stylesheet and target database -->
-      <xsl:when test="@targetdoc and not(@targetptr)" >
-        <xsl:message>Olink missing @targetptr attribute value</xsl:message>
-      </xsl:when>
-      <xsl:when test="not(@targetdoc) and @targetptr" >
-        <xsl:message>Olink missing @targetdoc attribute value</xsl:message>
-      </xsl:when>
-      <xsl:when test="@targetdoc and @targetptr">
-        <xsl:variable name="seek.targetdoc" select="@targetdoc"/>
-        <xsl:variable name="seek.targetptr" select="@targetptr"/>
-        <xsl:variable name="targetdoc.key" >
-          <xsl:for-each select="$target.database" >
-            <xsl:value-of select="key('targetdoc-key', $seek.targetdoc)/@targetdoc" />
-          </xsl:for-each>
-        </xsl:variable>
-        <xsl:variable name="targetptr.key" >
-          <xsl:for-each select="$target.database" >
-            <xsl:value-of select="key('targetptr-key', concat($seek.targetdoc, '/', $seek.targetptr))/@targetptr" />
-          </xsl:for-each>
-        </xsl:variable>
-<!-- debug
-<xsl:message>seek.targetdoc is <xsl:value-of select="$seek.targetdoc"/></xsl:message>
-<xsl:message>seek.targetptr is <xsl:value-of select="$seek.targetptr"/></xsl:message>
--->
-        <xsl:choose>
-          <!-- Was the database document parameter not set? -->
-          <xsl:when test="$target.database.document = ''">
-            <xsl:message>
-              <xsl:text>Olinks not processed: must specify a $target.database.document parameter
-              </xsl:text>
-              <xsl:text>when using olinks with targetdoc and targetptr attributes.</xsl:text>
-            </xsl:message>
-          </xsl:when>
-          <!-- Did it not open? Should be a targetset element -->
-          <xsl:when test="not($target.database/targetset)">
-            <xsl:message>Olink error: could not open target database <xsl:value-of select="$target.database.document"/>.  </xsl:message>
-          </xsl:when>
-          <!-- Does it not have this document id? -->
-          <xsl:when test="$targetdoc.key = ''" >
-            <xsl:message>Olink error: document id <xsl:value-of select="$seek.targetdoc"/> not in target database.</xsl:message>
-          </xsl:when>
+      </xsl:variable>
+    
+      <xsl:variable name="target.database.filename">
+        <xsl:call-template name="select.target.database">
+          <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
+          <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
+          <xsl:with-param name="olink.lang" select="$olink.lang"/>
+        </xsl:call-template>
+      </xsl:variable>
+    
+      <xsl:variable name="target.database" 
+          select="document($target.database.filename,/)"/>
+    
+      <xsl:if test="$olink.debug != 0">
+        <xsl:message>
+          <xsl:text>Olink debug: root element of target.database '</xsl:text>
+          <xsl:value-of select="$target.database.filename"/>
+         <xsl:text>' is '</xsl:text>
+          <xsl:value-of select="local-name($target.database/*[1])"/>
+          <xsl:text>'.</xsl:text>
+        </xsl:message>
+      </xsl:if>
+    
+      <xsl:variable name="olink.key">
+        <xsl:call-template name="select.olink.key">
+          <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
+          <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
+          <xsl:with-param name="olink.lang" select="$olink.lang"/>
+          <xsl:with-param name="target.database" select="$target.database"/>
+        </xsl:call-template>
+      </xsl:variable>
+    
+      <xsl:variable name="href">
+        <xsl:call-template name="make.olink.href">
+          <xsl:with-param name="olink.key" select="$olink.key"/>
+          <xsl:with-param name="target.database" select="$target.database"/>
+        </xsl:call-template>
+      </xsl:variable>
 
-          <!-- Does this document not have this targetptr? -->
-          <xsl:when test="$targetptr.key = ''" >
-            <!-- Does this document have *any* content? -->
-            <xsl:variable name="document.root">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetdoc-key', $seek.targetdoc)/div/@element"/>
-              </xsl:for-each>
-            </xsl:variable>
-            <xsl:choose>
-              <xsl:when test="$document.root = ''">
-                <xsl:message>Olink error: could not open data file for document id '<xsl:value-of select="$seek.targetdoc"/>'.</xsl:message>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:message>Olink error: targetptr <xsl:value-of select="$seek.targetptr"/> not found in document id <xsl:value-of select="$seek.targetdoc"/>.</xsl:message>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:when>
+      <xsl:variable name="hottext">
+        <xsl:call-template name="olink.hottext">
+          <xsl:with-param name="target.database" select="$target.database"/>
+          <xsl:with-param name="olink.key" select="$olink.key"/>
+          <xsl:with-param name="olink.lang" select="$olink.lang"/>
+        </xsl:call-template>
+      </xsl:variable>
 
-          <!-- Proceed with good olink syntax -->
-          <xsl:otherwise>
-            
-            <!-- Does the target database use a sitemap? -->
-            <xsl:variable name="use.sitemap">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetdoc-key', $seek.targetdoc)/parent::dir/@name"/>
-              </xsl:for-each>
-            </xsl:variable>
-            <xsl:variable name="target.href" >
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetptr-key', concat($seek.targetdoc, '/', $seek.targetptr))/@href" />
-
-              </xsl:for-each>
-            </xsl:variable>
-
-            <!-- Get the baseuri for this targetptr -->
-
-            <xsl:variable name="baseuri" >
-              <xsl:choose>
-                <!-- Does the database use a sitemap? -->
-                <xsl:when test="$use.sitemap != ''" >
-                  <xsl:choose>
-                    <!-- Was current.docid parameter set? -->
-                    <xsl:when test="$current.docid != ''">
-                      <!-- Was it found in the database? -->
-                      <xsl:variable name="currentdoc.key" >
-                        <xsl:for-each select="$target.database" >
-                          <xsl:value-of select="key('targetdoc-key',
-                                                $current.docid)/@targetdoc" />
-                        </xsl:for-each>
-                      </xsl:variable>
-                      <xsl:choose>
-                        <xsl:when test="$currentdoc.key != ''">
-                          <xsl:for-each select="$target.database" >
-                            <xsl:call-template name="targetpath" >
-                              <xsl:with-param name="dirnode" select="key('targetdoc-key', $current.docid)/parent::dir"/>
-                              <xsl:with-param name="targetdoc" select="$seek.targetdoc"/>
-                            </xsl:call-template>
-                          </xsl:for-each >
-                        </xsl:when>
-                        <xsl:otherwise>
-                          <xsl:message>Olink error: cannot compute relative sitemap path because $current.docid '<xsl:value-of select="$current.docid"/>' not found in target database</xsl:message>
-                        </xsl:otherwise>
-                      </xsl:choose>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <xsl:message>Olink error: cannot compute relative sitemap path without $current.docid parameter</xsl:message>
-                    </xsl:otherwise>
-                  </xsl:choose> 
-                  <!-- In either case, add baseuri from its document entry-->
-                  <xsl:variable name="docbaseuri">
-                    <xsl:for-each select="$target.database" >
-                      <xsl:value-of select="key('targetdoc-key', $seek.targetdoc)/@baseuri" />
-                    </xsl:for-each>
-                  </xsl:variable>
-                  <xsl:if test="$docbaseuri != ''" >
-                    <xsl:value-of select="$docbaseuri"/>
-                  </xsl:if>
-                </xsl:when>
-                <!-- No database sitemap in use -->
-                <xsl:otherwise>
-                  <!-- Just use any baseuri from its document entry -->
-                  <xsl:variable name="docbaseuri">
-                    <xsl:for-each select="$target.database" >
-                      <xsl:value-of select="key('targetdoc-key', $seek.targetdoc)/@baseuri" />
-                    </xsl:for-each>
-                  </xsl:variable>
-                  <xsl:if test="$docbaseuri != ''" >
-                    <xsl:value-of select="$docbaseuri"/>
-                  </xsl:if>
-                </xsl:otherwise>
-              </xsl:choose>
-            </xsl:variable>
-
-            <!-- Form the href information -->
-            <xsl:if test="$baseuri != ''">
-              <xsl:value-of select="$baseuri"/>
-              <xsl:if test="substring($target.href,1,1) != '#'">
-                <!--xsl:text>/</xsl:text-->
-              </xsl:if>
-            </xsl:if>
-            <xsl:value-of select="$target.href"/>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="$olink.resolver"/>
-        <xsl:text>?</xsl:text>
-        <xsl:value-of select="$olink.sysid"/>
-        <xsl:value-of select="unparsed-entity-uri(@targetdocent)"/>
-        <!-- XSL gives no access to the public identifier (grumble...) -->
-        <xsl:if test="@localinfo">
-          <xsl:text>&amp;</xsl:text>
-          <xsl:value-of select="$olink.fragid"/>
-          <xsl:value-of select="@localinfo"/>
-        </xsl:if>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
+      <xsl:variable name="olink.docname.citation">
+        <xsl:call-template name="olink.document.citation">
+          <xsl:with-param name="olink.key" select="$olink.key"/>
+          <xsl:with-param name="target.database" select="$target.database"/>
+          <xsl:with-param name="olink.lang" select="$olink.lang"/>
+        </xsl:call-template>
+      </xsl:variable>
 
-  <xsl:choose>
-    <xsl:when test="$href != ''">
-      <a href="{$href}">
-        <xsl:call-template name="olink.hottext">
+      <xsl:variable name="olink.page.citation">
+        <xsl:call-template name="olink.page.citation">
+          <xsl:with-param name="olink.key" select="$olink.key"/>
           <xsl:with-param name="target.database" select="$target.database"/>
+          <xsl:with-param name="olink.lang" select="$olink.lang"/>
         </xsl:call-template>
-      </a>
+      </xsl:variable>
+
+      <xsl:choose>
+        <xsl:when test="$href != ''">
+          <a href="{$href}">
+            <xsl:copy-of select="$hottext"/>
+          </a>
+          <xsl:copy-of select="$olink.page.citation"/>
+          <xsl:copy-of select="$olink.docname.citation"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:copy-of select="$hottext"/>
+          <xsl:copy-of select="$olink.page.citation"/>
+          <xsl:copy-of select="$olink.docname.citation"/>
+        </xsl:otherwise>
+      </xsl:choose>
+
     </xsl:when>
+
+    <!-- Or use old olink mechanism -->
     <xsl:otherwise>
-      <xsl:call-template name="olink.hottext">
-        <xsl:with-param name="target.database" select="$target.database"/>
-      </xsl:call-template>
+      <xsl:variable name="href">
+        <xsl:choose>
+          <xsl:when test="@linkmode">
+            <!-- use the linkmode to get the base URI, use localinfo as fragid -->
+            <xsl:variable name="modespec" select="key('id',@linkmode)"/>
+            <xsl:if test="count($modespec) != 1
+                          or local-name($modespec) != 'modespec'">
+              <xsl:message>Warning: olink linkmode pointer is wrong.</xsl:message>
+            </xsl:if>
+            <xsl:value-of select="$modespec"/>
+            <xsl:if test="@localinfo">
+              <xsl:text>#</xsl:text>
+              <xsl:value-of select="@localinfo"/>
+            </xsl:if>
+          </xsl:when>
+          <xsl:when test="@type = 'href'">
+            <xsl:call-template name="olink.outline">
+              <xsl:with-param name="outline.base.uri"
+                              select="unparsed-entity-uri(@targetdocent)"/>
+              <xsl:with-param name="localinfo" select="@localinfo"/>
+              <xsl:with-param name="return" select="'href'"/>
+            </xsl:call-template>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:value-of select="$olink.resolver"/>
+            <xsl:text>?</xsl:text>
+            <xsl:value-of select="$olink.sysid"/>
+            <xsl:value-of select="unparsed-entity-uri(@targetdocent)"/>
+            <!-- XSL gives no access to the public identifier (grumble...) -->
+            <xsl:if test="@localinfo">
+              <xsl:text>&amp;</xsl:text>
+              <xsl:value-of select="$olink.fragid"/>
+              <xsl:value-of select="@localinfo"/>
+            </xsl:if>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+    
+      <xsl:choose>
+        <xsl:when test="$href != ''">
+          <a href="{$href}">
+            <xsl:call-template name="olink.hottext"/>
+          </a>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:call-template name="olink.hottext"/>
+        </xsl:otherwise>
+      </xsl:choose>
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>
 
+<xsl:template match="*" mode="pagenumber.markup">
+  <!-- no-op in HTML -->
+</xsl:template>
+
+
 <xsl:template name="olink.outline">
   <xsl:param name="outline.base.uri"/>
   <xsl:param name="localinfo"/>
   </xsl:choose>
 </xsl:template>
 
-<xsl:template name="olink.hottext">
-  <xsl:param name="target.database"/>
-  <xsl:param name="referrer" select="."/>
-  <xsl:param name="xrefstyle">
-    <xsl:choose>
-      <xsl:when test="@role and not(@xrefstyle) 
-                      and $use.role.as.xrefstyle != 0">
-        <xsl:value-of select="@role"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="@xrefstyle"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:param>
-
-  <xsl:choose>
-    <!-- If it has elements or text (not just PI or comment) -->
-    <xsl:when test="child::text() or child::*">
-      <xsl:apply-templates/>
-    </xsl:when>
-    <xsl:when test="@targetdoc and @targetptr">
-      <!-- Get the xref text for this record -->
-      <xsl:variable name="seek.targetdoc" select="@targetdoc"/>
-      <xsl:variable name="seek.targetptr" select="@targetptr"/>
-  
-      <xsl:variable name="xref.text" >
-        <xsl:for-each select="$target.database" >
-          <xsl:value-of select="key('targetptr-key',
-                 concat($seek.targetdoc, '/', $seek.targetptr))/xreftext" />
-        </xsl:for-each>
-      </xsl:variable>
-  
-      <!-- May need target element name for gentext template lookup -->
-      <xsl:variable name="target.elem" >
-        <xsl:for-each select="$target.database" >
-          <xsl:value-of select="key('targetptr-key',
-                 concat($seek.targetdoc, '/', $seek.targetptr))/@element" />
-        </xsl:for-each>
-      </xsl:variable>
-
-      <xsl:choose>
-        <xsl:when test="$xrefstyle != ''">
-          <xsl:variable name="template">
-            <xsl:choose>
-              <xsl:when test="starts-with(normalize-space($xrefstyle),
-                                          'select:')">
-                <xsl:call-template name="make.gentext.template">
-                  <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
-                  <xsl:with-param name="purpose" select="'olink'"/>
-                  <xsl:with-param name="referrer" select="."/>
-                  <xsl:with-param name="target.elem" select="$target.elem"/>
-                </xsl:call-template>
-              </xsl:when>
-              <xsl:when test="starts-with(normalize-space($xrefstyle),
-                                          'template:')">
-                <xsl:value-of select="substring-after(normalize-space($xrefstyle), 'template:')"/>
-              </xsl:when>
-              <!-- Otherwise get a named gentext template -->
-              <xsl:otherwise>
-                <xsl:call-template name="gentext.template">
-                  <xsl:with-param name="name" select="$target.elem"/>
-                  <xsl:with-param name="context" select="'xref'"/>
-                  <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
-                  <xsl:with-param name="purpose" select="'olink'"/>
-                  <xsl:with-param name="referrer" select="."/>
-                </xsl:call-template>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:variable>
-
-          <xsl:call-template name="substitute-markup">
-            <xsl:with-param name="template" select="$template"/>
-            <xsl:with-param name="title">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetptr-key',
-                      concat($seek.targetdoc, '/', $seek.targetptr))/ttl" />
-              </xsl:for-each>
-            </xsl:with-param>
-            <xsl:with-param name="label">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetptr-key',
-                     concat($seek.targetdoc, '/', $seek.targetptr))/@number" />
-              </xsl:for-each>
-            </xsl:with-param>
-          </xsl:call-template>
-        </xsl:when>
-
-
-        <xsl:when test="$use.local.olink.style != 0">
-          <!-- Get the element name and lang for this targetptr -->
-          <xsl:variable name="element" >
-            <xsl:for-each select="$target.database" >
-              <xsl:value-of select="key('targetptr-key', concat($seek.targetdoc, '/', $seek.targetptr))/@element" />
-            </xsl:for-each>
-          </xsl:variable>
-  
-          <xsl:variable name="lang">
-            <xsl:variable name="candidate">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetptr-key', concat($seek.targetdoc, '/', $seek.targetptr))/@lang" />
-              </xsl:for-each>
-            </xsl:variable>
-            <xsl:choose>
-              <xsl:when test="$candidate != ''">
-                <xsl:value-of select="$candidate"/>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:value-of select="'en'"/>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:variable>
-          <xsl:variable name="template">
-            <xsl:call-template name="gentext.template">
-              <xsl:with-param name="context" select="'title'"/>
-              <xsl:with-param name="name" select="$element"/>
-              <xsl:with-param name="lang" select="$lang"/>
-            </xsl:call-template>
-          </xsl:variable>
-          <xsl:call-template name="substitute-markup">
-            <xsl:with-param name="template" select="$template"/>
-            <xsl:with-param name="title">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetptr-key', concat($seek.targetdoc, '/', $seek.targetptr))/ttl" />
-              </xsl:for-each>
-            </xsl:with-param>
-            <xsl:with-param name="label">
-              <xsl:for-each select="$target.database" >
-                <xsl:value-of select="key('targetptr-key', concat($seek.targetdoc, '/', $seek.targetptr))/@number" />
-              </xsl:for-each>
-            </xsl:with-param>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:when test="$xref.text !=''">
-          <xsl:value-of select="$xref.text"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:message>Olink error: no generated text for targetdoc/targetptr = <xsl:value-of select="@targetdoc"/>/<xsl:value-of select="@targetptr"/></xsl:message>
-          <xsl:text>????</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:call-template name="olink.outline">
-        <xsl:with-param name="outline.base.uri"
-                        select="unparsed-entity-uri(@targetdocent)"/>
-        <xsl:with-param name="localinfo" select="@localinfo"/>
-        <xsl:with-param name="return" select="'xreftext'"/>
-      </xsl:call-template>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template name="targetpath">
-  <xsl:param name="dirnode" />
-  <xsl:param name="targetdoc" select="''"/>
-
-<!-- 
-<xsl:message>dirnode is <xsl:value-of select="$dirnode/@name"/></xsl:message>
-<xsl:message>targetdoc is <xsl:value-of select="$targetdoc"/></xsl:message>
--->
-  <!-- recursive template generates path to olink target directory -->
-  <xsl:choose>
-    <!-- Have we arrived at the final path step? -->
-    <xsl:when test="$dirnode/child::document[@targetdoc = $targetdoc]">
-      <!-- We are done -->
-    </xsl:when>
-    <!-- Have we reached the top without a match? -->
-    <xsl:when test="name($dirnode) != 'dir'" >
-        <xsl:message>Olink error: cannot locate targetdoc <xsl:value-of select="$targetdoc"/> in sitemap</xsl:message>
-    </xsl:when>
-    <!-- Is the target in a descendant? -->
-    <xsl:when test="$dirnode/descendant::document/@targetdoc = $targetdoc">
-      <xsl:variable name="step" select="$dirnode/child::dir[descendant::document/@targetdoc = $targetdoc]"/>
-      <xsl:if test = "$step">
-        <xsl:value-of select="$step/@name"/>
-        <xsl:text>/</xsl:text>
-      </xsl:if>
-      <!-- Now recurse with the child -->
-      <xsl:call-template name="targetpath" >
-        <xsl:with-param name="dirnode" select="$step"/>
-        <xsl:with-param name="targetdoc" select="$targetdoc"/>
-      </xsl:call-template>
-    </xsl:when>
-    <!-- Otherwise we need to move up a step -->
-    <xsl:otherwise>
-      <xsl:if test="$dirnode/parent::dir">
-        <xsl:text>../</xsl:text>
-      </xsl:if>
-      <xsl:call-template name="targetpath" >
-        <xsl:with-param name="dirnode" select="$dirnode/parent::*"/>
-        <xsl:with-param name="targetdoc" select="$targetdoc"/>
-      </xsl:call-template>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
 <!-- ==================================================================== -->
 
 <xsl:template name="xref.xreflabel">
   <xsl:call-template name="inline.monoseq"/>
 </xsl:template>
 
-<xsl:template match="*" mode="pagenumber.markup">
-  <xsl:message>
-    <xsl:text>Page numbers make no sense in HTML! (Don't use %p in templates)</xsl:text>
-  </xsl:message>
-</xsl:template>
-
 <!-- ==================================================================== -->
 
 <xsl:template match="*" mode="insert.title.markup">
   <xsl:copy-of select="$direction"/>
 </xsl:template>
 
+<xsl:template match="*" mode="insert.olink.docname.markup">
+  <xsl:param name="purpose"/>
+  <xsl:param name="xrefstyle"/>
+  <xsl:param name="docname"/>
+
+  <span class="olinkdocname">
+    <xsl:copy-of select="$docname"/>
+  </span>
+
+</xsl:template>
+
 </xsl:stylesheet>