| 1 | <?xml version="1.0"?>
 | 
|---|
| 2 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
|---|
| 3 |                 version="1.0">
 | 
|---|
| 4 | 
 | 
|---|
| 5 | <!-- Create keys for quickly looking up olink targets -->
 | 
|---|
| 6 | <xsl:key name="targetdoc-key" match="document" use="@targetdoc" />
 | 
|---|
| 7 | <xsl:key name="targetptr-key"  match="div|obj"
 | 
|---|
| 8 |          use="concat(ancestor::document/@targetdoc, '/',
 | 
|---|
| 9 |                      @targetptr, '/', ancestor::document/@lang)" />
 | 
|---|
| 10 | 
 | 
|---|
| 11 | <!-- Return filename of database -->
 | 
|---|
| 12 | <xsl:template name="select.target.database">
 | 
|---|
| 13 |   <xsl:param name="targetdoc.att" select="''"/>
 | 
|---|
| 14 |   <xsl:param name="targetptr.att" select="''"/>
 | 
|---|
| 15 |   <xsl:param name="olink.lang" select="''"/>
 | 
|---|
| 16 | 
 | 
|---|
| 17 |   <!-- use root's xml:base if exists -->
 | 
|---|
| 18 |   <xsl:variable name="xml.base" select="/*/@xml:base"/>
 | 
|---|
| 19 | 
 | 
|---|
| 20 |   <!-- This selection can be customized if needed -->
 | 
|---|
| 21 |   <xsl:variable name="target.database.filename">
 | 
|---|
| 22 |     <xsl:choose>
 | 
|---|
| 23 |       <xsl:when test="$xml.base != '' and
 | 
|---|
| 24 |                    not(starts-with($target.database.document, 'file:/')) and
 | 
|---|
| 25 |                    not(starts-with($target.database.document, '/'))">
 | 
|---|
| 26 |         <xsl:call-template name="systemIdToBaseURI">
 | 
|---|
| 27 |           <xsl:with-param name="systemId" select="$xml.base"/>
 | 
|---|
| 28 |         </xsl:call-template>
 | 
|---|
| 29 |         <xsl:value-of select="$target.database.document"/>
 | 
|---|
| 30 |       </xsl:when>
 | 
|---|
| 31 |       <xsl:otherwise>
 | 
|---|
| 32 |         <xsl:value-of select="$target.database.document"/>
 | 
|---|
| 33 |       </xsl:otherwise>
 | 
|---|
| 34 |     </xsl:choose>
 | 
|---|
| 35 |   </xsl:variable>
 | 
|---|
| 36 | 
 | 
|---|
| 37 |   <xsl:variable name="target.database" 
 | 
|---|
| 38 |       select="document($target.database.filename,/)"/>
 | 
|---|
| 39 | 
 | 
|---|
| 40 |   <xsl:choose>
 | 
|---|
| 41 |     <!-- Was the database document parameter not set? -->
 | 
|---|
| 42 |     <xsl:when test="$target.database.document = ''">
 | 
|---|
| 43 |       <xsl:message>
 | 
|---|
| 44 |         <xsl:text>Olinks not processed: must specify a </xsl:text>
 | 
|---|
| 45 |         <xsl:text>$target.database.document parameter
</xsl:text>
 | 
|---|
| 46 |         <xsl:text>when using olinks with targetdoc </xsl:text>
 | 
|---|
| 47 |         <xsl:text>and targetptr attributes.</xsl:text>
 | 
|---|
| 48 |       </xsl:message>
 | 
|---|
| 49 |     </xsl:when>
 | 
|---|
| 50 |     <!-- Did it not open? Should be a targetset element -->
 | 
|---|
| 51 |     <xsl:when test="not($target.database/*)">
 | 
|---|
| 52 |       <xsl:message>
 | 
|---|
| 53 |         <xsl:text>Olink error: could not open target database '</xsl:text>
 | 
|---|
| 54 |         <xsl:value-of select="$target.database.filename"/>
 | 
|---|
| 55 |         <xsl:text>'.</xsl:text>
 | 
|---|
| 56 |       </xsl:message>
 | 
|---|
| 57 |     </xsl:when>
 | 
|---|
| 58 |     <xsl:otherwise>
 | 
|---|
| 59 |       <xsl:value-of select="$target.database.filename"/>
 | 
|---|
| 60 |     </xsl:otherwise>
 | 
|---|
| 61 |   </xsl:choose>
 | 
|---|
| 62 | </xsl:template>
 | 
|---|
| 63 | 
 | 
|---|
| 64 | <xsl:template name="select.olink.key">
 | 
|---|
| 65 |   <xsl:param name="targetdoc.att" select="''"/>
 | 
|---|
| 66 |   <xsl:param name="targetptr.att" select="''"/>
 | 
|---|
| 67 |   <xsl:param name="olink.lang" select="''"/>
 | 
|---|
| 68 |   <xsl:param name="target.database"/>
 | 
|---|
| 69 | 
 | 
|---|
| 70 |   <xsl:if test="$target.database/*">
 | 
|---|
| 71 |     <xsl:variable name="olink.fallback.sequence">
 | 
|---|
| 72 |       <xsl:call-template name="select.olink.lang.fallback">
 | 
|---|
| 73 |         <xsl:with-param name="olink.lang" select="$olink.lang"/>
 | 
|---|
| 74 |       </xsl:call-template>
 | 
|---|
| 75 |     </xsl:variable>
 | 
|---|
| 76 |   
 | 
|---|
| 77 |     <!-- Recurse through the languages until you find a match -->
 | 
|---|
| 78 |     <xsl:call-template name="select.olink.key.in.lang">
 | 
|---|
| 79 |       <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
 | 
|---|
| 80 |       <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
 | 
|---|
| 81 |       <xsl:with-param name="olink.lang" select="$olink.lang"/>
 | 
|---|
| 82 |       <xsl:with-param name="target.database" select="$target.database"/>
 | 
|---|
| 83 |       <xsl:with-param name="fallback.index" select="1"/>
 | 
|---|
| 84 |       <xsl:with-param name="olink.fallback.sequence"
 | 
|---|
| 85 |                       select="$olink.fallback.sequence"/>
 | 
|---|
| 86 |     </xsl:call-template>
 | 
|---|
| 87 |   </xsl:if>
 | 
|---|
| 88 |   
 | 
|---|
| 89 | </xsl:template>
 | 
|---|
| 90 | 
 | 
|---|
| 91 | <!-- Locate olink key in a particular language -->
 | 
|---|
| 92 | <xsl:template name="select.olink.key.in.lang">
 | 
|---|
| 93 |   <xsl:param name="targetdoc.att" select="''"/>
 | 
|---|
| 94 |   <xsl:param name="targetptr.att" select="''"/>
 | 
|---|
| 95 |   <xsl:param name="olink.lang" select="''"/>
 | 
|---|
| 96 |   <xsl:param name="target.database"/>
 | 
|---|
| 97 |   <xsl:param name="fallback.index" select="1"/>
 | 
|---|
| 98 |   <xsl:param name="olink.fallback.sequence" select="''"/>
 | 
|---|
| 99 |   
 | 
|---|
| 100 |   <xsl:variable name="target.lang">
 | 
|---|
| 101 |     <xsl:call-template name="select.target.lang">
 | 
|---|
| 102 |       <xsl:with-param name="fallback.index" select="$fallback.index"/>
 | 
|---|
| 103 |       <xsl:with-param name="olink.fallback.sequence"
 | 
|---|
| 104 |                       select="$olink.fallback.sequence"/>
 | 
|---|
| 105 |     </xsl:call-template>
 | 
|---|
| 106 |   </xsl:variable>
 | 
|---|
| 107 | 
 | 
|---|
| 108 |   <xsl:if test="$olink.debug != 0">
 | 
|---|
| 109 |     <xsl:message><xsl:text>Olink debug: cases for targetdoc='</xsl:text>
 | 
|---|
| 110 |       <xsl:value-of select="$targetdoc.att"/>
 | 
|---|
| 111 |       <xsl:text>' and targetptr='</xsl:text>
 | 
|---|
| 112 |       <xsl:value-of select="$targetptr.att"/>
 | 
|---|
| 113 |       <xsl:text>' in language '</xsl:text>
 | 
|---|
| 114 |       <xsl:value-of select="$target.lang"/>
 | 
|---|
| 115 |       <xsl:text>'.</xsl:text>
 | 
|---|
| 116 |     </xsl:message>
 | 
|---|
| 117 |   </xsl:if>
 | 
|---|
| 118 | 
 | 
|---|
| 119 |   <!-- Customize these cases if you want different selection logic -->
 | 
|---|
| 120 |   <xsl:variable name="CaseA">
 | 
|---|
| 121 |     <!-- targetdoc.att = not blank
 | 
|---|
| 122 |          targetptr.att = not blank
 | 
|---|
| 123 |     -->
 | 
|---|
| 124 |     <xsl:if test="$targetdoc.att != '' and
 | 
|---|
| 125 |                   $targetptr.att != ''">
 | 
|---|
| 126 |       <xsl:for-each select="$target.database">
 | 
|---|
| 127 |         <xsl:variable name="key" 
 | 
|---|
| 128 |                       select="concat($targetdoc.att, '/', 
 | 
|---|
| 129 |                                      $targetptr.att, '/',
 | 
|---|
| 130 |                                      $target.lang)"/>
 | 
|---|
| 131 |         <xsl:choose>
 | 
|---|
| 132 |           <xsl:when test="key('targetptr-key', $key)/@href != ''">
 | 
|---|
| 133 |             <xsl:value-of select="$key"/>
 | 
|---|
| 134 |             <xsl:if test="$olink.debug != 0">
 | 
|---|
| 135 |               <xsl:message>Olink debug: CaseA matched.</xsl:message>
 | 
|---|
| 136 |             </xsl:if>
 | 
|---|
| 137 |           </xsl:when>
 | 
|---|
| 138 |           <xsl:when test="$olink.debug != 0">
 | 
|---|
| 139 |             <xsl:message>Olink debug: CaseA NOT matched</xsl:message>
 | 
|---|
| 140 |           </xsl:when>
 | 
|---|
| 141 |         </xsl:choose>
 | 
|---|
| 142 |       </xsl:for-each>
 | 
|---|
| 143 |     </xsl:if>
 | 
|---|
| 144 |   </xsl:variable>
 | 
|---|
| 145 | 
 | 
|---|
| 146 |   <xsl:variable name="CaseB">
 | 
|---|
| 147 |     <!-- targetdoc.att = not blank
 | 
|---|
| 148 |          targetptr.att = not blank
 | 
|---|
| 149 |          prefer.internal.olink = not zero
 | 
|---|
| 150 |          current.docid = not blank 
 | 
|---|
| 151 |     -->
 | 
|---|
| 152 |     <xsl:if test="$targetdoc.att != '' and
 | 
|---|
| 153 |                   $targetptr.att != '' and
 | 
|---|
| 154 |                   $current.docid != '' and
 | 
|---|
| 155 |                   $prefer.internal.olink != 0">
 | 
|---|
| 156 |       <xsl:for-each select="$target.database">
 | 
|---|
| 157 |         <xsl:variable name="key" 
 | 
|---|
| 158 |                       select="concat($current.docid, '/', 
 | 
|---|
| 159 |                                      $targetptr.att, '/',
 | 
|---|
| 160 |                                      $target.lang)"/>
 | 
|---|
| 161 |         <xsl:choose>
 | 
|---|
| 162 |           <xsl:when test="key('targetptr-key', $key)/@href != ''">
 | 
|---|
| 163 |             <xsl:value-of select="$key"/>
 | 
|---|
| 164 |             <xsl:if test="$olink.debug != 0">
 | 
|---|
| 165 |               <xsl:message>Olink debug: CaseB matched.</xsl:message>
 | 
|---|
| 166 |             </xsl:if>
 | 
|---|
| 167 |           </xsl:when>
 | 
|---|
| 168 |           <xsl:when test="$olink.debug != 0">
 | 
|---|
| 169 |             <xsl:message>Olink debug: CaseB NOT matched</xsl:message>
 | 
|---|
| 170 |           </xsl:when>
 | 
|---|
| 171 |         </xsl:choose>
 | 
|---|
| 172 |       </xsl:for-each>
 | 
|---|
| 173 |     </xsl:if>
 | 
|---|
| 174 |   </xsl:variable>
 | 
|---|
| 175 | 
 | 
|---|
| 176 |   <xsl:variable name="CaseC">
 | 
|---|
| 177 |     <!-- targetdoc.att = blank
 | 
|---|
| 178 |          targetptr.att = not blank
 | 
|---|
| 179 |          current.docid = not blank 
 | 
|---|
| 180 |     -->
 | 
|---|
| 181 |     <xsl:if test="string-length($targetdoc.att) = 0 and
 | 
|---|
| 182 |                   $targetptr.att != '' and
 | 
|---|
| 183 |                   $current.docid != ''">
 | 
|---|
| 184 |       <!-- Must use a for-each to change context for keys to work -->
 | 
|---|
| 185 |       <xsl:for-each select="$target.database">
 | 
|---|
| 186 |         <xsl:variable name="key" 
 | 
|---|
| 187 |                       select="concat($current.docid, '/', 
 | 
|---|
| 188 |                                      $targetptr.att, '/',
 | 
|---|
| 189 |                                      $target.lang)"/>
 | 
|---|
| 190 |         <xsl:choose>
 | 
|---|
| 191 |           <xsl:when test="key('targetptr-key', $key)/@href != ''">
 | 
|---|
| 192 |             <xsl:value-of select="$key"/>
 | 
|---|
| 193 |             <xsl:if test="$olink.debug != 0">
 | 
|---|
| 194 |               <xsl:message>Olink debug: CaseC matched.</xsl:message>
 | 
|---|
| 195 |             </xsl:if>
 | 
|---|
| 196 |           </xsl:when>
 | 
|---|
| 197 |           <xsl:when test="$olink.debug != 0">
 | 
|---|
| 198 |             <xsl:message>Olink debug: CaseC NOT matched.</xsl:message>
 | 
|---|
| 199 |           </xsl:when>
 | 
|---|
| 200 |         </xsl:choose>
 | 
|---|
| 201 |       </xsl:for-each>
 | 
|---|
| 202 |     </xsl:if>
 | 
|---|
| 203 |   </xsl:variable>
 | 
|---|
| 204 | 
 | 
|---|
| 205 |   <xsl:variable name="CaseD">
 | 
|---|
| 206 |     <!-- targetdoc.att = blank
 | 
|---|
| 207 |          targetptr.att = not blank
 | 
|---|
| 208 |          current.docid = blank 
 | 
|---|
| 209 |     -->
 | 
|---|
| 210 |     <!-- This is possible if only one document in the database -->
 | 
|---|
| 211 |     <xsl:if test="string-length($targetdoc.att) = 0 and
 | 
|---|
| 212 |                   $targetptr.att != '' and
 | 
|---|
| 213 |                   string-length($current.docid) = 0 and
 | 
|---|
| 214 |                   count($target.database//document) = 1">
 | 
|---|
| 215 |       <xsl:for-each select="$target.database">
 | 
|---|
| 216 |         <xsl:variable name="key" 
 | 
|---|
| 217 |                       select="concat(.//document/@targetdoc, '/', 
 | 
|---|
| 218 |                                      $targetptr.att, '/',
 | 
|---|
| 219 |                                      $target.lang)"/>
 | 
|---|
| 220 |         <xsl:choose>
 | 
|---|
| 221 |           <xsl:when test="key('targetptr-key', $key)/@href != ''">
 | 
|---|
| 222 |             <xsl:value-of select="$key"/>
 | 
|---|
| 223 |             <xsl:if test="$olink.debug != 0">
 | 
|---|
| 224 |               <xsl:message>Olink debug: CaseD matched.</xsl:message>
 | 
|---|
| 225 |             </xsl:if>
 | 
|---|
| 226 |           </xsl:when>
 | 
|---|
| 227 |           <xsl:when test="$olink.debug != 0">
 | 
|---|
| 228 |             <xsl:message>Olink debug: CaseD NOT matched</xsl:message>
 | 
|---|
| 229 |           </xsl:when>
 | 
|---|
| 230 |         </xsl:choose>
 | 
|---|
| 231 |       </xsl:for-each>
 | 
|---|
| 232 |     </xsl:if>
 | 
|---|
| 233 |   </xsl:variable>
 | 
|---|
| 234 | 
 | 
|---|
| 235 |   <xsl:variable name="CaseE">
 | 
|---|
| 236 |     <!-- targetdoc.att = not blank
 | 
|---|
| 237 |          targetptr.att = blank
 | 
|---|
| 238 |     -->
 | 
|---|
| 239 |     <xsl:if test="$targetdoc.att != '' and
 | 
|---|
| 240 |                   string-length($targetptr.att) = 0">
 | 
|---|
| 241 | 
 | 
|---|
| 242 |       <!-- Try the document's root element id -->
 | 
|---|
| 243 |       <xsl:variable name="rootid">
 | 
|---|
| 244 |         <xsl:choose>
 | 
|---|
| 245 |           <xsl:when test="$target.lang != ''">
 | 
|---|
| 246 |             <xsl:value-of select="$target.database//document[@targetdoc = $targetdoc.att and @lang = $target.lang]/*[1]/@targetptr"/>
 | 
|---|
| 247 |           </xsl:when>
 | 
|---|
| 248 |           <xsl:otherwise>
 | 
|---|
| 249 |             <xsl:value-of select="$target.database//document[@targetdoc = $targetdoc.att and not(@lang)]/*[1]/@targetptr"/>
 | 
|---|
| 250 |           </xsl:otherwise>
 | 
|---|
| 251 |         </xsl:choose>
 | 
|---|
| 252 |       </xsl:variable>
 | 
|---|
| 253 | 
 | 
|---|
| 254 |       <xsl:for-each select="$target.database">
 | 
|---|
| 255 |         <xsl:variable name="key" 
 | 
|---|
| 256 |                       select="concat($targetdoc.att, '/', 
 | 
|---|
| 257 |                                      $rootid, '/',
 | 
|---|
| 258 |                                      $target.lang)"/>
 | 
|---|
| 259 |         <xsl:choose>
 | 
|---|
| 260 |           <xsl:when test="key('targetptr-key', $key)/@href != ''">
 | 
|---|
| 261 |             <xsl:value-of select="$key"/>
 | 
|---|
| 262 |             <xsl:if test="$olink.debug != 0">
 | 
|---|
| 263 |               <xsl:message>Olink debug: CaseE matched.</xsl:message>
 | 
|---|
| 264 |             </xsl:if>
 | 
|---|
| 265 |           </xsl:when>
 | 
|---|
| 266 |           <xsl:when test="$olink.debug != 0">
 | 
|---|
| 267 |             <xsl:message>Olink debug: CaseE NOT matched.</xsl:message>
 | 
|---|
| 268 |           </xsl:when>
 | 
|---|
| 269 |         </xsl:choose>
 | 
|---|
| 270 |       </xsl:for-each>
 | 
|---|
| 271 |     </xsl:if>
 | 
|---|
| 272 |   </xsl:variable>
 | 
|---|
| 273 | 
 | 
|---|
| 274 |   <xsl:variable name="CaseF">
 | 
|---|
| 275 |     <!-- targetdoc.att = not blank
 | 
|---|
| 276 |          targetptr.att = blank
 | 
|---|
| 277 |          prefer.internal.olink = not zero
 | 
|---|
| 278 |          current.docid = not blank 
 | 
|---|
| 279 |     -->
 | 
|---|
| 280 |     <xsl:if test="$targetdoc.att != '' and
 | 
|---|
| 281 |                   string-length($targetptr.att) = 0 and
 | 
|---|
| 282 |                   $current.docid != '' and
 | 
|---|
| 283 |                   $prefer.internal.olink != 0">
 | 
|---|
| 284 |       <!-- Try the document's root element id -->
 | 
|---|
| 285 |       <xsl:variable name="rootid">
 | 
|---|
| 286 |         <xsl:choose>
 | 
|---|
| 287 |           <xsl:when test="$target.lang != ''">
 | 
|---|
| 288 |             <xsl:value-of select="$target.database//document[@targetdoc = $current.docid and @lang = $target.lang]/*[1]/@targetptr"/>
 | 
|---|
| 289 |           </xsl:when>
 | 
|---|
| 290 |           <xsl:otherwise>
 | 
|---|
| 291 |             <xsl:value-of select="$target.database//document[@targetdoc = $current.docid and not(@lang)]/*[1]/@targetptr"/>
 | 
|---|
| 292 |           </xsl:otherwise>
 | 
|---|
| 293 |         </xsl:choose>
 | 
|---|
| 294 |       </xsl:variable>
 | 
|---|
| 295 | 
 | 
|---|
| 296 |       <xsl:for-each select="$target.database">
 | 
|---|
| 297 |         <xsl:variable name="key" 
 | 
|---|
| 298 |                       select="concat($current.docid, '/', 
 | 
|---|
| 299 |                                      $rootid, '/',
 | 
|---|
| 300 |                                      $target.lang)"/>
 | 
|---|
| 301 |         <xsl:choose>
 | 
|---|
| 302 |           <xsl:when test="key('targetptr-key', $key)/@href != ''">
 | 
|---|
| 303 |             <xsl:value-of select="$key"/>
 | 
|---|
| 304 |             <xsl:if test="$olink.debug != 0">
 | 
|---|
| 305 |               <xsl:message>Olink debug: CaseF matched.</xsl:message>
 | 
|---|
| 306 |             </xsl:if>
 | 
|---|
| 307 |           </xsl:when>
 | 
|---|
| 308 |           <xsl:when test="$olink.debug != 0">
 | 
|---|
| 309 |             <xsl:message>Olink debug: CaseF NOT matched.</xsl:message>
 | 
|---|
| 310 |           </xsl:when>
 | 
|---|
| 311 |         </xsl:choose>
 | 
|---|
| 312 |       </xsl:for-each>
 | 
|---|
| 313 |     </xsl:if>
 | 
|---|
| 314 |   </xsl:variable>
 | 
|---|
| 315 | 
 | 
|---|
| 316 |   <!-- Now select the best match. Customize the order if needed -->
 | 
|---|
| 317 |   <xsl:variable name="selected.key">
 | 
|---|
| 318 |     <xsl:choose>
 | 
|---|
| 319 |       <xsl:when test="$CaseB != ''">
 | 
|---|
| 320 |         <xsl:value-of select="$CaseB"/>
 | 
|---|
| 321 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 322 |           <xsl:message>
 | 
|---|
| 323 |             <xsl:text>Olink debug: CaseB key is the final selection: </xsl:text>
 | 
|---|
| 324 |             <xsl:value-of select="$CaseB"/>
 | 
|---|
| 325 |           </xsl:message>
 | 
|---|
| 326 |         </xsl:if>
 | 
|---|
| 327 |       </xsl:when>
 | 
|---|
| 328 |       <xsl:when test="$CaseA != ''">
 | 
|---|
| 329 |         <xsl:value-of select="$CaseA"/>
 | 
|---|
| 330 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 331 |           <xsl:message>
 | 
|---|
| 332 |             <xsl:text>Olink debug: CaseA key is the final selection: </xsl:text>
 | 
|---|
| 333 |             <xsl:value-of select="$CaseA"/>
 | 
|---|
| 334 |           </xsl:message>
 | 
|---|
| 335 |         </xsl:if>
 | 
|---|
| 336 |       </xsl:when>
 | 
|---|
| 337 |       <xsl:when test="$CaseC != ''">
 | 
|---|
| 338 |         <xsl:value-of select="$CaseC"/>
 | 
|---|
| 339 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 340 |           <xsl:message>
 | 
|---|
| 341 |             <xsl:text>Olink debug: CaseC key is the final selection: </xsl:text>
 | 
|---|
| 342 |             <xsl:value-of select="$CaseC"/>
 | 
|---|
| 343 |           </xsl:message>
 | 
|---|
| 344 |         </xsl:if>
 | 
|---|
| 345 |       </xsl:when>
 | 
|---|
| 346 |       <xsl:when test="$CaseD != ''">
 | 
|---|
| 347 |         <xsl:value-of select="$CaseD"/>
 | 
|---|
| 348 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 349 |           <xsl:message>
 | 
|---|
| 350 |             <xsl:text>Olink debug: CaseD key is the final selection: </xsl:text>
 | 
|---|
| 351 |             <xsl:value-of select="$CaseD"/>
 | 
|---|
| 352 |           </xsl:message>
 | 
|---|
| 353 |         </xsl:if>
 | 
|---|
| 354 |       </xsl:when>
 | 
|---|
| 355 |       <xsl:when test="$CaseF != ''">
 | 
|---|
| 356 |         <xsl:value-of select="$CaseF"/>
 | 
|---|
| 357 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 358 |           <xsl:message>
 | 
|---|
| 359 |             <xsl:text>Olink debug: CaseF key is the final selection: </xsl:text>
 | 
|---|
| 360 |             <xsl:value-of select="$CaseF"/>
 | 
|---|
| 361 |           </xsl:message>
 | 
|---|
| 362 |         </xsl:if>
 | 
|---|
| 363 |       </xsl:when>
 | 
|---|
| 364 |       <xsl:when test="$CaseE != ''">
 | 
|---|
| 365 |         <xsl:value-of select="$CaseE"/>
 | 
|---|
| 366 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 367 |           <xsl:message>
 | 
|---|
| 368 |             <xsl:text>Olink debug: CaseE key is the final selection: </xsl:text>
 | 
|---|
| 369 |             <xsl:value-of select="$CaseE"/>
 | 
|---|
| 370 |           </xsl:message>
 | 
|---|
| 371 |         </xsl:if>
 | 
|---|
| 372 |       </xsl:when>
 | 
|---|
| 373 |       <xsl:otherwise>
 | 
|---|
| 374 |         <xsl:if test="$olink.debug != 0">
 | 
|---|
| 375 |           <xsl:message>
 | 
|---|
| 376 |             <xsl:text>Olink debug: No case matched for lang '</xsl:text>
 | 
|---|
| 377 |             <xsl:value-of select="$target.lang"/>
 | 
|---|
| 378 |             <xsl:text>'.</xsl:text>
 | 
|---|
| 379 |           </xsl:message>
 | 
|---|
| 380 |         </xsl:if>
 | 
|---|
| 381 |       </xsl:otherwise>
 | 
|---|
| 382 |     </xsl:choose>
 | 
|---|
| 383 |   </xsl:variable>
 | 
|---|
| 384 | 
 | 
|---|
| 385 |   <xsl:choose>
 | 
|---|
| 386 |     <xsl:when test="$selected.key != ''">
 | 
|---|
| 387 |       <xsl:value-of select="$selected.key"/>
 | 
|---|
| 388 |     </xsl:when>
 | 
|---|
| 389 |     <xsl:when test="string-length($selected.key) = 0 and 
 | 
|---|
| 390 |                     string-length($target.lang) = 0">
 | 
|---|
| 391 |       <!-- No match on last try, and we are done -->
 | 
|---|
| 392 |     </xsl:when>
 | 
|---|
| 393 |     <xsl:otherwise>
 | 
|---|
| 394 |       <!-- Recurse through next language -->
 | 
|---|
| 395 |       <xsl:call-template name="select.olink.key.in.lang">
 | 
|---|
| 396 |         <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
 | 
|---|
| 397 |         <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
 | 
|---|
| 398 |         <xsl:with-param name="olink.lang" select="$olink.lang"/>
 | 
|---|
| 399 |         <xsl:with-param name="target.database" select="$target.database"/>
 | 
|---|
| 400 |         <xsl:with-param name="fallback.index" select="$fallback.index + 1"/>
 | 
|---|
| 401 |         <xsl:with-param name="olink.fallback.sequence"
 | 
|---|
| 402 |                         select="$olink.fallback.sequence"/>
 | 
|---|
| 403 |       </xsl:call-template>
 | 
|---|
| 404 |     </xsl:otherwise>
 | 
|---|
| 405 |   </xsl:choose>
 | 
|---|
| 406 | 
 | 
|---|
| 407 | </xsl:template>
 | 
|---|
| 408 | 
 | 
|---|
| 409 | <xsl:template name="select.target.lang">
 | 
|---|
| 410 |   <xsl:param name="fallback.index" select="1"/>
 | 
|---|
| 411 |   <xsl:param name="olink.fallback.sequence" select="''"/>
 | 
|---|
| 412 | 
 | 
|---|
| 413 |   <!-- recurse backwards to find the lang matching the index -->
 | 
|---|
| 414 |   <xsl:variable name="firstlang" 
 | 
|---|
| 415 |                 select="substring-before($olink.fallback.sequence, ' ')"/>
 | 
|---|
| 416 |   <xsl:variable name="rest" 
 | 
|---|
| 417 |                 select="substring-after($olink.fallback.sequence, ' ')"/>
 | 
|---|
| 418 |   <xsl:choose>
 | 
|---|
| 419 |     <xsl:when test="$fallback.index = 1">
 | 
|---|
| 420 |       <xsl:value-of select="$firstlang"/>
 | 
|---|
| 421 |     </xsl:when>
 | 
|---|
| 422 |     <xsl:when test="$fallback.index > 1">
 | 
|---|
| 423 |       <xsl:call-template name="select.target.lang">
 | 
|---|
| 424 |         <xsl:with-param name="fallback.index" select="$fallback.index - 1"/>
 | 
|---|
| 425 |         <xsl:with-param name="olink.fallback.sequence"
 | 
|---|
| 426 |                         select="$rest"/>
 | 
|---|
| 427 |       </xsl:call-template>
 | 
|---|
| 428 |     </xsl:when>
 | 
|---|
| 429 |     <xsl:otherwise>
 | 
|---|
| 430 |     </xsl:otherwise>
 | 
|---|
| 431 |   </xsl:choose>
 | 
|---|
| 432 | </xsl:template>
 | 
|---|
| 433 | 
 | 
|---|
| 434 | <xsl:template name="select.olink.lang.fallback">
 | 
|---|
| 435 |   <xsl:param name="olink.lang" select="''"/>
 | 
|---|
| 436 | 
 | 
|---|
| 437 |   <!-- Prefer language of the olink element -->
 | 
|---|
| 438 |   <xsl:value-of select="concat(normalize-space(concat($olink.lang, ' ', 
 | 
|---|
| 439 |                         $olink.lang.fallback.sequence)), ' ')"/>
 | 
|---|
| 440 | </xsl:template>
 | 
|---|
| 441 | 
 | 
|---|
| 442 | <!-- Returns the complete olink href value if found -->
 | 
|---|
| 443 | <xsl:template name="make.olink.href">
 | 
|---|
| 444 |   <xsl:param name="olink.key" select="''"/>
 | 
|---|
| 445 |   <xsl:param name="target.database"/>
 | 
|---|
| 446 | 
 | 
|---|
| 447 |   <xsl:if test="$olink.key != ''">
 | 
|---|
| 448 |     <xsl:variable name="target.href" >
 | 
|---|
| 449 |       <xsl:for-each select="$target.database" >
 | 
|---|
| 450 |         <xsl:value-of select="key('targetptr-key', $olink.key)/@href" />
 | 
|---|
| 451 |       </xsl:for-each>
 | 
|---|
| 452 |     </xsl:variable>
 | 
|---|
| 453 |   
 | 
|---|
| 454 |     <xsl:variable name="targetdoc">
 | 
|---|
| 455 |       <xsl:value-of select="substring-before($olink.key, '/')"/>
 | 
|---|
| 456 |     </xsl:variable>
 | 
|---|
| 457 |   
 | 
|---|
| 458 |     <!-- Does the target database use a sitemap? -->
 | 
|---|
| 459 |     <xsl:variable name="use.sitemap">
 | 
|---|
| 460 |       <xsl:choose>
 | 
|---|
| 461 |         <xsl:when test="$target.database//sitemap">1</xsl:when>
 | 
|---|
| 462 |         <xsl:otherwise>0</xsl:otherwise>
 | 
|---|
| 463 |       </xsl:choose>
 | 
|---|
| 464 |     </xsl:variable>
 | 
|---|
| 465 |   
 | 
|---|
| 466 |   
 | 
|---|
| 467 |     <!-- Get the baseuri for this targetptr -->
 | 
|---|
| 468 |     <xsl:variable name="baseuri" >
 | 
|---|
| 469 |       <xsl:choose>
 | 
|---|
| 470 |         <!-- Does the database use a sitemap? -->
 | 
|---|
| 471 |         <xsl:when test="$use.sitemap != 0" >
 | 
|---|
| 472 |           <xsl:choose>
 | 
|---|
| 473 |             <!-- Was current.docid parameter set? -->
 | 
|---|
| 474 |             <xsl:when test="$current.docid != ''">
 | 
|---|
| 475 |               <!-- Was it found in the database? -->
 | 
|---|
| 476 |               <xsl:variable name="currentdoc.key" >
 | 
|---|
| 477 |                 <xsl:for-each select="$target.database" >
 | 
|---|
| 478 |                   <xsl:value-of select="key('targetdoc-key',
 | 
|---|
| 479 |                                         $current.docid)/@targetdoc" />
 | 
|---|
| 480 |                 </xsl:for-each>
 | 
|---|
| 481 |               </xsl:variable>
 | 
|---|
| 482 |               <xsl:choose>
 | 
|---|
| 483 |                 <xsl:when test="$currentdoc.key != ''">
 | 
|---|
| 484 |                   <xsl:for-each select="$target.database" >
 | 
|---|
| 485 |                     <xsl:call-template name="targetpath" >
 | 
|---|
| 486 |                       <xsl:with-param name="dirnode" 
 | 
|---|
| 487 |                           select="key('targetdoc-key', $current.docid)/parent::dir"/>
 | 
|---|
| 488 |                       <xsl:with-param name="targetdoc" select="$targetdoc"/>
 | 
|---|
| 489 |                     </xsl:call-template>
 | 
|---|
| 490 |                   </xsl:for-each >
 | 
|---|
| 491 |                 </xsl:when>
 | 
|---|
| 492 |                 <xsl:otherwise>
 | 
|---|
| 493 |                   <xsl:message>
 | 
|---|
| 494 |                     <xsl:text>Olink error: cannot compute relative </xsl:text>
 | 
|---|
| 495 |                     <xsl:text>sitemap path because $current.docid '</xsl:text>
 | 
|---|
| 496 |                     <xsl:value-of select="$current.docid"/>
 | 
|---|
| 497 |                     <xsl:text>' not found in target database.</xsl:text>
 | 
|---|
| 498 |                   </xsl:message>
 | 
|---|
| 499 |                 </xsl:otherwise>
 | 
|---|
| 500 |               </xsl:choose>
 | 
|---|
| 501 |             </xsl:when>
 | 
|---|
| 502 |             <xsl:otherwise>
 | 
|---|
| 503 |               <xsl:message>
 | 
|---|
| 504 |                 <xsl:text>Olink warning: cannot compute relative </xsl:text>
 | 
|---|
| 505 |                 <xsl:text>sitemap path without $current.docid parameter</xsl:text>
 | 
|---|
| 506 |               </xsl:message>
 | 
|---|
| 507 |             </xsl:otherwise>
 | 
|---|
| 508 |           </xsl:choose> 
 | 
|---|
| 509 |           <!-- In either case, add baseuri from its document entry-->
 | 
|---|
| 510 |           <xsl:variable name="docbaseuri">
 | 
|---|
| 511 |             <xsl:for-each select="$target.database" >
 | 
|---|
| 512 |               <xsl:value-of select="key('targetdoc-key', $targetdoc)/@baseuri" />
 | 
|---|
| 513 |             </xsl:for-each>
 | 
|---|
| 514 |           </xsl:variable>
 | 
|---|
| 515 |           <xsl:if test="$docbaseuri != ''" >
 | 
|---|
| 516 |             <xsl:value-of select="$docbaseuri"/>
 | 
|---|
| 517 |           </xsl:if>
 | 
|---|
| 518 |         </xsl:when>
 | 
|---|
| 519 |         <!-- No database sitemap in use -->
 | 
|---|
| 520 |         <xsl:otherwise>
 | 
|---|
| 521 |           <!-- Just use any baseuri from its document entry -->
 | 
|---|
| 522 |           <xsl:variable name="docbaseuri">
 | 
|---|
| 523 |             <xsl:for-each select="$target.database" >
 | 
|---|
| 524 |               <xsl:value-of select="key('targetdoc-key', $targetdoc)/@baseuri" />
 | 
|---|
| 525 |             </xsl:for-each>
 | 
|---|
| 526 |           </xsl:variable>
 | 
|---|
| 527 |           <xsl:if test="$docbaseuri != ''" >
 | 
|---|
| 528 |             <xsl:value-of select="$docbaseuri"/>
 | 
|---|
| 529 |           </xsl:if>
 | 
|---|
| 530 |         </xsl:otherwise>
 | 
|---|
| 531 |       </xsl:choose>
 | 
|---|
| 532 |     </xsl:variable>
 | 
|---|
| 533 |   
 | 
|---|
| 534 |     <!-- Form the href information -->
 | 
|---|
| 535 |     <xsl:if test="$baseuri != ''">
 | 
|---|
| 536 |       <xsl:value-of select="$baseuri"/>
 | 
|---|
| 537 |       <xsl:if test="substring($target.href,1,1) != '#'">
 | 
|---|
| 538 |         <!--xsl:text>/</xsl:text-->
 | 
|---|
| 539 |       </xsl:if>
 | 
|---|
| 540 |     </xsl:if>
 | 
|---|
| 541 |     <!-- optionally turn off frag for PDF references -->
 | 
|---|
| 542 |     <xsl:if test="not($insert.olink.pdf.frag = 0 and
 | 
|---|
| 543 |           translate(substring($baseuri, string-length($baseuri) - 3),
 | 
|---|
| 544 |                     'PDF', 'pdf') = '.pdf'
 | 
|---|
| 545 |           and starts-with($target.href, '#') )">
 | 
|---|
| 546 |       <xsl:value-of select="$target.href"/>
 | 
|---|
| 547 |     </xsl:if>
 | 
|---|
| 548 |   </xsl:if>
 | 
|---|
| 549 | </xsl:template>
 | 
|---|
| 550 | 
 | 
|---|
| 551 | <!-- Computes the href of the object containing the olink element -->
 | 
|---|
| 552 | <xsl:template name="olink.from.uri">
 | 
|---|
| 553 |   <xsl:param name="target.database"/>
 | 
|---|
| 554 |   <xsl:param name="object" select="NotAnElement"/>
 | 
|---|
| 555 |   <xsl:param name="object.targetdoc" select="$current.docid"/>
 | 
|---|
| 556 |   <xsl:param name="object.lang" 
 | 
|---|
| 557 |            select="concat($object/ancestor::*[last()]/@lang,
 | 
|---|
| 558 |                           $object/ancestor::*[last()]/@xml:lang)"/>
 | 
|---|
| 559 | 
 | 
|---|
| 560 |   <xsl:variable name="parent.id">
 | 
|---|
| 561 |     <xsl:call-template name="object.id">
 | 
|---|
| 562 |       <xsl:with-param name="object" select="$object"/>
 | 
|---|
| 563 |     </xsl:call-template>
 | 
|---|
| 564 |   </xsl:variable>
 | 
|---|
| 565 | 
 | 
|---|
| 566 |   <!-- Get the olink key for the parent of olink element -->
 | 
|---|
| 567 |   <xsl:variable name="from.key">
 | 
|---|
| 568 |     <xsl:call-template name="select.olink.key">
 | 
|---|
| 569 |       <xsl:with-param name="targetdoc.att" select="$object.targetdoc"/>
 | 
|---|
| 570 |       <xsl:with-param name="targetptr.att" select="$parent.id"/>
 | 
|---|
| 571 |       <xsl:with-param name="olink.lang" select="$object.lang"/>
 | 
|---|
| 572 |       <xsl:with-param name="target.database" select="$target.database"/>
 | 
|---|
| 573 |     </xsl:call-template>
 | 
|---|
| 574 |   </xsl:variable>
 | 
|---|
| 575 | 
 | 
|---|
| 576 |   <xsl:variable name="from.olink.href">
 | 
|---|
| 577 |     <xsl:for-each select="$target.database" >
 | 
|---|
| 578 |       <xsl:value-of select="key('targetptr-key', $from.key)/@href" />
 | 
|---|
| 579 |     </xsl:for-each>
 | 
|---|
| 580 |   </xsl:variable>
 | 
|---|
| 581 | 
 | 
|---|
| 582 |   <xsl:choose>
 | 
|---|
| 583 |     <!-- we found the olink object -->
 | 
|---|
| 584 |     <xsl:when test="$from.olink.href != ''">
 | 
|---|
| 585 |       <xsl:value-of select="$from.olink.href"/>
 | 
|---|
| 586 |     </xsl:when>
 | 
|---|
| 587 |     <xsl:when test="not($object/parent::*)">
 | 
|---|
| 588 |       <xsl:value-of select="$from.olink.href"/>
 | 
|---|
| 589 |     </xsl:when>
 | 
|---|
| 590 |     <xsl:otherwise>
 | 
|---|
| 591 |       <!-- recurse upward in current document -->
 | 
|---|
| 592 |       <xsl:call-template name="olink.from.uri">
 | 
|---|
| 593 |         <xsl:with-param name="target.database" select="$target.database"/>
 | 
|---|
| 594 |         <xsl:with-param name="object" select="$object/parent::*"/>
 | 
|---|
| 595 |         <xsl:with-param name="object.targetdoc" select="$object.targetdoc"/>
 | 
|---|
| 596 |         <xsl:with-param name="object.lang" select="$object.lang"/>
 | 
|---|
| 597 |       </xsl:call-template>
 | 
|---|
| 598 |     </xsl:otherwise>
 | 
|---|
| 599 |   </xsl:choose>
 | 
|---|
| 600 | 
 | 
|---|
| 601 | </xsl:template>
 | 
|---|
| 602 | 
 | 
|---|
| 603 | <xsl:template name="olink.hottext">
 | 
|---|
| 604 |   <xsl:param name="target.database"/>
 | 
|---|
| 605 |   <xsl:param name="olink.lang" select="''"/>
 | 
|---|
| 606 |   <xsl:param name="olink.key" select="''"/>
 | 
|---|
| 607 |   <xsl:param name="referrer" select="."/>
 | 
|---|
| 608 |   <xsl:param name="xrefstyle">
 | 
|---|
| 609 |     <xsl:choose>
 | 
|---|
| 610 |       <xsl:when test="@role and not(@xrefstyle) 
 | 
|---|
| 611 |                       and $use.role.as.xrefstyle != 0">
 | 
|---|
| 612 |         <xsl:value-of select="@role"/>
 | 
|---|
| 613 |       </xsl:when>
 | 
|---|
| 614 |       <xsl:otherwise>
 | 
|---|
| 615 |         <xsl:value-of select="@xrefstyle"/>
 | 
|---|
| 616 |       </xsl:otherwise>
 | 
|---|
| 617 |     </xsl:choose>
 | 
|---|
| 618 |   </xsl:param>
 | 
|---|
| 619 | 
 | 
|---|
| 620 |   <xsl:choose>
 | 
|---|
| 621 |     <!-- If it has elements or text (not just PI or comment) -->
 | 
|---|
| 622 |     <xsl:when test="child::text() or child::*">
 | 
|---|
| 623 |       <xsl:apply-templates/>
 | 
|---|
| 624 |     </xsl:when>
 | 
|---|
| 625 |     <xsl:when test="$olink.key != ''">
 | 
|---|
| 626 |       <!-- Get the xref text for this record -->
 | 
|---|
| 627 |       <xsl:variable name="xref.text" >
 | 
|---|
| 628 |         <xsl:for-each select="$target.database" >
 | 
|---|
| 629 |           <xsl:copy-of 
 | 
|---|
| 630 |                   select="key('targetptr-key', $olink.key)/xreftext/node()" />
 | 
|---|
| 631 |         </xsl:for-each>
 | 
|---|
| 632 |       </xsl:variable>
 | 
|---|
| 633 | 
 | 
|---|
| 634 |       <xsl:variable name="xref.number" >
 | 
|---|
| 635 |         <xsl:for-each select="$target.database" >
 | 
|---|
| 636 |           <xsl:value-of select="key('targetptr-key', $olink.key)/@number" />
 | 
|---|
| 637 |         </xsl:for-each>
 | 
|---|
| 638 |       </xsl:variable>
 | 
|---|
| 639 | 
 | 
|---|
| 640 |       <xsl:variable name="target.elem" >
 | 
|---|
| 641 |         <xsl:for-each select="$target.database" >
 | 
|---|
| 642 |           <xsl:value-of select="key('targetptr-key', $olink.key)/@element" />
 | 
|---|
| 643 |         </xsl:for-each>
 | 
|---|
| 644 |       </xsl:variable>
 | 
|---|
| 645 | 
 | 
|---|
| 646 |       <xsl:variable name="lang">
 | 
|---|
| 647 |         <xsl:variable name="candidate">
 | 
|---|
| 648 |           <xsl:for-each select="$target.database" >
 | 
|---|
| 649 |             <xsl:value-of 
 | 
|---|
| 650 |                       select="key('targetptr-key', $olink.key)/@lang" />
 | 
|---|
| 651 |           </xsl:for-each>
 | 
|---|
| 652 |         </xsl:variable>
 | 
|---|
| 653 |         <xsl:choose>
 | 
|---|
| 654 |           <xsl:when test="$candidate != ''">
 | 
|---|
| 655 |             <xsl:value-of select="$candidate"/>
 | 
|---|
| 656 |           </xsl:when>
 | 
|---|
| 657 |           <xsl:otherwise>
 | 
|---|
| 658 |             <xsl:value-of select="$olink.lang"/>
 | 
|---|
| 659 |           </xsl:otherwise>
 | 
|---|
| 660 |         </xsl:choose>
 | 
|---|
| 661 |       </xsl:variable>
 | 
|---|
| 662 | 
 | 
|---|
| 663 |       <xsl:variable name="targetdoc">
 | 
|---|
| 664 |         <xsl:value-of select="substring-before($olink.key, '/')"/>
 | 
|---|
| 665 |       </xsl:variable>
 | 
|---|
| 666 | 
 | 
|---|
| 667 |       <xsl:choose>
 | 
|---|
| 668 |         <xsl:when test="$xrefstyle != '' and
 | 
|---|
| 669 |                         starts-with(normalize-space($xrefstyle), 'select:') and
 | 
|---|
| 670 |                         (contains($xrefstyle, 'nodocname') or
 | 
|---|
| 671 |                         contains($xrefstyle, 'nopage')) and
 | 
|---|
| 672 |                         not(contains($xrefstyle, 'title')) and
 | 
|---|
| 673 |                         not(contains($xrefstyle, 'label'))"> 
 | 
|---|
| 674 |           <xsl:copy-of select="$xref.text"/>
 | 
|---|
| 675 |         </xsl:when>
 | 
|---|
| 676 |         <xsl:when test="$xrefstyle != ''">
 | 
|---|
| 677 |           <xsl:if test="$olink.debug != 0">
 | 
|---|
| 678 |             <xsl:message>
 | 
|---|
| 679 |               <xsl:text>xrefstyle is '</xsl:text>
 | 
|---|
| 680 |               <xsl:value-of select="$xrefstyle"/>
 | 
|---|
| 681 |               <xsl:text>'.</xsl:text>
 | 
|---|
| 682 |             </xsl:message>
 | 
|---|
| 683 |           </xsl:if>
 | 
|---|
| 684 |           <xsl:variable name="template">
 | 
|---|
| 685 |             <xsl:choose>
 | 
|---|
| 686 |               <xsl:when test="starts-with(normalize-space($xrefstyle),
 | 
|---|
| 687 |                                           'select:')">
 | 
|---|
| 688 |                 <xsl:call-template name="make.gentext.template">
 | 
|---|
| 689 |                   <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
 | 
|---|
| 690 |                   <xsl:with-param name="purpose" select="'olink'"/>
 | 
|---|
| 691 |                   <xsl:with-param name="referrer" select="."/>
 | 
|---|
| 692 |                   <xsl:with-param name="target.elem" select="$target.elem"/>
 | 
|---|
| 693 |                 </xsl:call-template>
 | 
|---|
| 694 |               </xsl:when>
 | 
|---|
| 695 |               <xsl:when test="starts-with(normalize-space($xrefstyle),
 | 
|---|
| 696 |                                           'template:')">
 | 
|---|
| 697 |                 <xsl:value-of select="substring-after(
 | 
|---|
| 698 |                                  normalize-space($xrefstyle), 'template:')"/>
 | 
|---|
| 699 |               </xsl:when>
 | 
|---|
| 700 |               <xsl:otherwise>
 | 
|---|
| 701 |                 <!-- Look for Gentext template with @style attribute -->
 | 
|---|
| 702 |                 <!-- Must compare to no style value because gentext.template
 | 
|---|
| 703 |                      falls back to no style -->
 | 
|---|
| 704 | 
 | 
|---|
| 705 |                 <xsl:variable name="xref-context">
 | 
|---|
| 706 |                   <xsl:call-template name="gentext.template">
 | 
|---|
| 707 |                     <xsl:with-param name="context" select="'xref'"/>
 | 
|---|
| 708 |                     <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 709 |                     <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 710 |                   </xsl:call-template>
 | 
|---|
| 711 |                 </xsl:variable>
 | 
|---|
| 712 | 
 | 
|---|
| 713 |                 <xsl:variable name="styled-xref-context">
 | 
|---|
| 714 |                   <xsl:call-template name="gentext.template">
 | 
|---|
| 715 |                     <xsl:with-param name="context" select="'xref'"/>
 | 
|---|
| 716 |                     <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 717 |                     <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 718 |                     <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
 | 
|---|
| 719 |                   </xsl:call-template>
 | 
|---|
| 720 |                 </xsl:variable>
 | 
|---|
| 721 | 
 | 
|---|
| 722 |                 <xsl:variable name="xref-number-context">
 | 
|---|
| 723 |                   <xsl:call-template name="gentext.template">
 | 
|---|
| 724 |                     <xsl:with-param name="context" select="'xref-number'"/>
 | 
|---|
| 725 |                     <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 726 |                     <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 727 |                   </xsl:call-template>
 | 
|---|
| 728 |                 </xsl:variable>
 | 
|---|
| 729 | 
 | 
|---|
| 730 |                 <xsl:variable name="styled-xref-number-context">
 | 
|---|
| 731 |                   <xsl:call-template name="gentext.template">
 | 
|---|
| 732 |                     <xsl:with-param name="context" select="'xref-number'"/>
 | 
|---|
| 733 |                     <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 734 |                     <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 735 |                     <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
 | 
|---|
| 736 |                   </xsl:call-template>
 | 
|---|
| 737 |                 </xsl:variable>
 | 
|---|
| 738 | 
 | 
|---|
| 739 |                 <xsl:variable name="xref-number-and-title-context">
 | 
|---|
| 740 |                   <xsl:call-template name="gentext.template">
 | 
|---|
| 741 |                     <xsl:with-param name="context" 
 | 
|---|
| 742 |                                     select="'xref-number-and-title'"/>
 | 
|---|
| 743 |                     <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 744 |                     <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 745 |                   </xsl:call-template>
 | 
|---|
| 746 |                 </xsl:variable>
 | 
|---|
| 747 | 
 | 
|---|
| 748 |                 <xsl:variable name="styled-xref-number-and-title-context">
 | 
|---|
| 749 |                   <xsl:call-template name="gentext.template">
 | 
|---|
| 750 |                     <xsl:with-param name="context" 
 | 
|---|
| 751 |                                     select="'xref-number-and-title'"/>
 | 
|---|
| 752 |                     <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 753 |                     <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 754 |                     <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
 | 
|---|
| 755 |                   </xsl:call-template>
 | 
|---|
| 756 |                 </xsl:variable>
 | 
|---|
| 757 | 
 | 
|---|
| 758 |                 <xsl:choose>
 | 
|---|
| 759 |                   <xsl:when test="$xref-number-and-title-context != 
 | 
|---|
| 760 |                                  $styled-xref-number-and-title-context and
 | 
|---|
| 761 |                                  $xref.number != '' and
 | 
|---|
| 762 |                                  $xref.with.number.and.title != 0">
 | 
|---|
| 763 |                     <xsl:value-of 
 | 
|---|
| 764 |                             select="$styled-xref-number-and-title-context"/>
 | 
|---|
| 765 |                   </xsl:when>
 | 
|---|
| 766 |                   <xsl:when test="$xref-number-context != 
 | 
|---|
| 767 |                                  $styled-xref-number-context and
 | 
|---|
| 768 |                                  $xref.number != ''">
 | 
|---|
| 769 |                     <xsl:value-of select="$styled-xref-number-context"/>
 | 
|---|
| 770 |                   </xsl:when>
 | 
|---|
| 771 |                   <xsl:when test="$xref-context != $styled-xref-context">
 | 
|---|
| 772 |                     <xsl:value-of select="$styled-xref-context"/>
 | 
|---|
| 773 |                   </xsl:when>
 | 
|---|
| 774 |                   <xsl:when test="$xref-number-and-title-context != '' and
 | 
|---|
| 775 |                                  $xref.number != '' and
 | 
|---|
| 776 |                                  $xref.with.number.and.title != 0">
 | 
|---|
| 777 |                     <xsl:value-of 
 | 
|---|
| 778 |                             select="$xref-number-and-title-context"/>
 | 
|---|
| 779 |                     <xsl:if test="$olink.debug">
 | 
|---|
| 780 |                       <xsl:message>
 | 
|---|
| 781 |                         <xsl:text>Olink error: no gentext template</xsl:text>
 | 
|---|
| 782 |                         <xsl:text> exists for xrefstyle '</xsl:text>
 | 
|---|
| 783 |                         <xsl:value-of select="$xrefstyle"/>
 | 
|---|
| 784 |                         <xsl:text>' for element '</xsl:text>
 | 
|---|
| 785 |                         <xsl:value-of select="$target.elem"/>
 | 
|---|
| 786 |                         <xsl:text>' in language '</xsl:text>
 | 
|---|
| 787 |                         <xsl:value-of select="$lang"/>
 | 
|---|
| 788 |                         <xsl:text>' in context 'xref-number-and-title</xsl:text>
 | 
|---|
| 789 |                         <xsl:text>'. Using template without @style.</xsl:text>
 | 
|---|
| 790 |                       </xsl:message>
 | 
|---|
| 791 |                     </xsl:if>
 | 
|---|
| 792 |                   </xsl:when>
 | 
|---|
| 793 |                   <xsl:when test="$xref-number-context != '' and
 | 
|---|
| 794 |                                  $xref.number != ''">
 | 
|---|
| 795 |                     <xsl:value-of select="$xref-number-context"/>
 | 
|---|
| 796 |                     <xsl:if test="$olink.debug">
 | 
|---|
| 797 |                       <xsl:message>
 | 
|---|
| 798 |                         <xsl:text>Olink error: no gentext template</xsl:text>
 | 
|---|
| 799 |                         <xsl:text> exists for xrefstyle '</xsl:text>
 | 
|---|
| 800 |                         <xsl:value-of select="$xrefstyle"/>
 | 
|---|
| 801 |                         <xsl:text>' for element '</xsl:text>
 | 
|---|
| 802 |                         <xsl:value-of select="$target.elem"/>
 | 
|---|
| 803 |                         <xsl:text>' in language '</xsl:text>
 | 
|---|
| 804 |                         <xsl:value-of select="$lang"/>
 | 
|---|
| 805 |                         <xsl:text>' in context 'xref-number</xsl:text>
 | 
|---|
| 806 |                         <xsl:text>'. Using template without @style.</xsl:text>
 | 
|---|
| 807 |                       </xsl:message>
 | 
|---|
| 808 |                     </xsl:if>
 | 
|---|
| 809 |                   </xsl:when>
 | 
|---|
| 810 |                   <xsl:when test="$xref-context != ''">
 | 
|---|
| 811 |                     <xsl:value-of select="$xref-context"/>
 | 
|---|
| 812 |                     <xsl:if test="$olink.debug">
 | 
|---|
| 813 |                       <xsl:message>
 | 
|---|
| 814 |                         <xsl:text>Olink error: no gentext template</xsl:text>
 | 
|---|
| 815 |                         <xsl:text> exists for xrefstyle '</xsl:text>
 | 
|---|
| 816 |                         <xsl:value-of select="$xrefstyle"/>
 | 
|---|
| 817 |                         <xsl:text>' for element '</xsl:text>
 | 
|---|
| 818 |                         <xsl:value-of select="$target.elem"/>
 | 
|---|
| 819 |                         <xsl:text>' in language '</xsl:text>
 | 
|---|
| 820 |                         <xsl:value-of select="$lang"/>
 | 
|---|
| 821 |                         <xsl:text>' in context 'xref</xsl:text>
 | 
|---|
| 822 |                         <xsl:text>'. Using template without @style.</xsl:text>
 | 
|---|
| 823 |                       </xsl:message>
 | 
|---|
| 824 |                     </xsl:if>
 | 
|---|
| 825 |                   </xsl:when>
 | 
|---|
| 826 |                   <xsl:otherwise>
 | 
|---|
| 827 |                     <xsl:message>
 | 
|---|
| 828 |                       <xsl:text>Olink error: no gentext template</xsl:text>
 | 
|---|
| 829 |                       <xsl:text> exists for xrefstyle '</xsl:text>
 | 
|---|
| 830 |                       <xsl:value-of select="$xrefstyle"/>
 | 
|---|
| 831 |                       <xsl:text>' for element '</xsl:text>
 | 
|---|
| 832 |                       <xsl:value-of select="$target.elem"/>
 | 
|---|
| 833 |                       <xsl:text>' in language '</xsl:text>
 | 
|---|
| 834 |                       <xsl:value-of select="$lang"/>
 | 
|---|
| 835 |                       <xsl:text>'. Trying '%t'.</xsl:text>
 | 
|---|
| 836 |                     </xsl:message>
 | 
|---|
| 837 |                     <xsl:value-of select="'%t'"/>
 | 
|---|
| 838 |                   </xsl:otherwise>
 | 
|---|
| 839 |                 </xsl:choose>
 | 
|---|
| 840 |               </xsl:otherwise>
 | 
|---|
| 841 |             </xsl:choose>
 | 
|---|
| 842 |           </xsl:variable>
 | 
|---|
| 843 | 
 | 
|---|
| 844 |           <xsl:if test="$olink.debug != 0">
 | 
|---|
| 845 |             <xsl:message>
 | 
|---|
| 846 |               <xsl:text>Olink debug: xrefstyle template is '</xsl:text>
 | 
|---|
| 847 |               <xsl:value-of select="$template"/>
 | 
|---|
| 848 |               <xsl:text>'.</xsl:text>
 | 
|---|
| 849 |             </xsl:message>
 | 
|---|
| 850 |           </xsl:if>
 | 
|---|
| 851 | 
 | 
|---|
| 852 |           <xsl:call-template name="substitute-markup">
 | 
|---|
| 853 |             <xsl:with-param name="template" select="$template"/>
 | 
|---|
| 854 |             <xsl:with-param name="title">
 | 
|---|
| 855 |               <xsl:for-each select="$target.database" >
 | 
|---|
| 856 |                 <xsl:value-of select="key('targetptr-key', $olink.key)/ttl" />
 | 
|---|
| 857 |               </xsl:for-each>
 | 
|---|
| 858 |             </xsl:with-param>
 | 
|---|
| 859 |             <xsl:with-param name="label">
 | 
|---|
| 860 |               <xsl:for-each select="$target.database" >
 | 
|---|
| 861 |                 <xsl:value-of 
 | 
|---|
| 862 |                         select="key('targetptr-key', $olink.key)/@number" />
 | 
|---|
| 863 |               </xsl:for-each>
 | 
|---|
| 864 |             </xsl:with-param>
 | 
|---|
| 865 |             <xsl:with-param name="pagenumber">
 | 
|---|
| 866 |               <xsl:for-each select="$target.database" >
 | 
|---|
| 867 |                 <xsl:value-of 
 | 
|---|
| 868 |                         select="key('targetptr-key', $olink.key)/@page" />
 | 
|---|
| 869 |               </xsl:for-each>
 | 
|---|
| 870 |             </xsl:with-param>
 | 
|---|
| 871 |             <xsl:with-param name="docname">
 | 
|---|
| 872 |               <xsl:for-each select="$target.database" >
 | 
|---|
| 873 |                 <xsl:value-of 
 | 
|---|
| 874 |                        select="key('targetdoc-key', $targetdoc)/div[1]/ttl" />
 | 
|---|
| 875 |               </xsl:for-each>
 | 
|---|
| 876 |             </xsl:with-param>
 | 
|---|
| 877 |           </xsl:call-template>
 | 
|---|
| 878 |         </xsl:when>
 | 
|---|
| 879 | 
 | 
|---|
| 880 |         <xsl:when test="$use.local.olink.style != 0">
 | 
|---|
| 881 | 
 | 
|---|
| 882 |           <xsl:variable name="template">
 | 
|---|
| 883 |             <xsl:call-template name="gentext.template">
 | 
|---|
| 884 |               <xsl:with-param name="context" select="'xref'"/>
 | 
|---|
| 885 |               <xsl:with-param name="name" select="$target.elem"/>
 | 
|---|
| 886 |               <xsl:with-param name="lang" select="$lang"/>
 | 
|---|
| 887 |             </xsl:call-template>
 | 
|---|
| 888 |           </xsl:variable>
 | 
|---|
| 889 | 
 | 
|---|
| 890 |           <xsl:call-template name="substitute-markup">
 | 
|---|
| 891 |             <xsl:with-param name="template" select="$template"/>
 | 
|---|
| 892 |             <xsl:with-param name="title">
 | 
|---|
| 893 |               <xsl:for-each select="$target.database" >
 | 
|---|
| 894 |                 <xsl:value-of select="key('targetptr-key', $olink.key)/ttl" />
 | 
|---|
| 895 |               </xsl:for-each>
 | 
|---|
| 896 |             </xsl:with-param>
 | 
|---|
| 897 |             <xsl:with-param name="label">
 | 
|---|
| 898 |               <xsl:for-each select="$target.database" >
 | 
|---|
| 899 |                 <xsl:value-of 
 | 
|---|
| 900 |                           select="key('targetptr-key', $olink.key)/@number" />
 | 
|---|
| 901 |               </xsl:for-each>
 | 
|---|
| 902 |             </xsl:with-param>
 | 
|---|
| 903 |           </xsl:call-template>
 | 
|---|
| 904 |         </xsl:when>
 | 
|---|
| 905 |         <xsl:when test="$xref.text !=''">
 | 
|---|
| 906 |           <xsl:copy-of select="$xref.text"/>
 | 
|---|
| 907 |         </xsl:when>
 | 
|---|
| 908 |         <xsl:otherwise>
 | 
|---|
| 909 |           <xsl:message>
 | 
|---|
| 910 |             <xsl:text>Olink error: no generated text for </xsl:text>
 | 
|---|
| 911 |             <xsl:text>targetdoc/targetptr/lang = '</xsl:text>
 | 
|---|
| 912 |             <xsl:value-of select="$olink.key"/>
 | 
|---|
| 913 |             <xsl:text>'.</xsl:text>
 | 
|---|
| 914 |           </xsl:message>
 | 
|---|
| 915 |           <xsl:text>????</xsl:text>
 | 
|---|
| 916 |         </xsl:otherwise>
 | 
|---|
| 917 |       </xsl:choose>
 | 
|---|
| 918 |     </xsl:when>
 | 
|---|
| 919 |     <xsl:when test="@targetdoc != '' or @targetptr != ''">
 | 
|---|
| 920 |       <xsl:if test="$olink.key != ''">
 | 
|---|
| 921 |         <xsl:message>
 | 
|---|
| 922 |           <xsl:text>Olink error: no generated text for </xsl:text>
 | 
|---|
| 923 |           <xsl:text>targetdoc/targetptr/lang = '</xsl:text>
 | 
|---|
| 924 |           <xsl:value-of select="$olink.key"/>
 | 
|---|
| 925 |           <xsl:text>'.</xsl:text>
 | 
|---|
| 926 |         </xsl:message>
 | 
|---|
| 927 |       </xsl:if>
 | 
|---|
| 928 |       <xsl:text>????</xsl:text>
 | 
|---|
| 929 |     </xsl:when>
 | 
|---|
| 930 |     <xsl:otherwise>
 | 
|---|
| 931 |       <!-- old style olink -->
 | 
|---|
| 932 |       <xsl:call-template name="olink.outline">
 | 
|---|
| 933 |         <xsl:with-param name="outline.base.uri"
 | 
|---|
| 934 |                         select="unparsed-entity-uri(@targetdocent)"/>
 | 
|---|
| 935 |         <xsl:with-param name="localinfo" select="@localinfo"/>
 | 
|---|
| 936 |         <xsl:with-param name="return" select="'xreftext'"/>
 | 
|---|
| 937 |       </xsl:call-template>
 | 
|---|
| 938 |     </xsl:otherwise>
 | 
|---|
| 939 |   </xsl:choose>
 | 
|---|
| 940 | </xsl:template>
 | 
|---|
| 941 | 
 | 
|---|
| 942 | <xsl:template match="*" mode="olink.docname.markup">
 | 
|---|
| 943 |   <!-- No-op for now -->
 | 
|---|
| 944 | </xsl:template>
 | 
|---|
| 945 | 
 | 
|---|
| 946 | <xsl:template name="targetpath">
 | 
|---|
| 947 |   <xsl:param name="dirnode" />
 | 
|---|
| 948 |   <xsl:param name="targetdoc" select="''"/>
 | 
|---|
| 949 | 
 | 
|---|
| 950 | <!-- 
 | 
|---|
| 951 | <xsl:message>dirnode is <xsl:value-of select="$dirnode/@name"/></xsl:message>
 | 
|---|
| 952 | <xsl:message>targetdoc is <xsl:value-of select="$targetdoc"/></xsl:message>
 | 
|---|
| 953 | -->
 | 
|---|
| 954 |   <!-- recursive template generates path to olink target directory -->
 | 
|---|
| 955 |   <xsl:choose>
 | 
|---|
| 956 |     <!-- Have we arrived at the final path step? -->
 | 
|---|
| 957 |     <xsl:when test="$dirnode/child::document[@targetdoc = $targetdoc]">
 | 
|---|
| 958 |       <!-- We are done -->
 | 
|---|
| 959 |     </xsl:when>
 | 
|---|
| 960 |     <!-- Have we reached the top without a match? -->
 | 
|---|
| 961 |     <xsl:when test="local-name($dirnode) != 'dir'" >
 | 
|---|
| 962 |         <xsl:message>Olink error: cannot locate targetdoc <xsl:value-of select="$targetdoc"/> in sitemap</xsl:message>
 | 
|---|
| 963 |     </xsl:when>
 | 
|---|
| 964 |     <!-- Is the target in a descendant? -->
 | 
|---|
| 965 |     <xsl:when test="$dirnode/descendant::document/@targetdoc = $targetdoc">
 | 
|---|
| 966 |       <xsl:variable name="step" select="$dirnode/child::dir[descendant::document/@targetdoc = $targetdoc]"/>
 | 
|---|
| 967 |       <xsl:if test = "$step">
 | 
|---|
| 968 |         <xsl:value-of select="$step/@name"/>
 | 
|---|
| 969 |         <xsl:text>/</xsl:text>
 | 
|---|
| 970 |       </xsl:if>
 | 
|---|
| 971 |       <!-- Now recurse with the child -->
 | 
|---|
| 972 |       <xsl:call-template name="targetpath" >
 | 
|---|
| 973 |         <xsl:with-param name="dirnode" select="$step"/>
 | 
|---|
| 974 |         <xsl:with-param name="targetdoc" select="$targetdoc"/>
 | 
|---|
| 975 |       </xsl:call-template>
 | 
|---|
| 976 |     </xsl:when>
 | 
|---|
| 977 |     <!-- Otherwise we need to move up a step -->
 | 
|---|
| 978 |     <xsl:otherwise>
 | 
|---|
| 979 |       <xsl:if test="$dirnode/parent::dir">
 | 
|---|
| 980 |         <xsl:text>../</xsl:text>
 | 
|---|
| 981 |       </xsl:if>
 | 
|---|
| 982 |       <xsl:call-template name="targetpath" >
 | 
|---|
| 983 |         <xsl:with-param name="dirnode" select="$dirnode/parent::*"/>
 | 
|---|
| 984 |         <xsl:with-param name="targetdoc" select="$targetdoc"/>
 | 
|---|
| 985 |       </xsl:call-template>
 | 
|---|
| 986 |     </xsl:otherwise>
 | 
|---|
| 987 |   </xsl:choose>
 | 
|---|
| 988 | </xsl:template>
 | 
|---|
| 989 | 
 | 
|---|
| 990 | <xsl:template name="olink.page.citation">
 | 
|---|
| 991 |   <xsl:param name="olink.key" select="''"/>
 | 
|---|
| 992 |   <xsl:param name="olink.lang" select="'en'"/>
 | 
|---|
| 993 |   <xsl:param name="target.database"/>
 | 
|---|
| 994 |   <xsl:param name="linkend" select="''"/>
 | 
|---|
| 995 |   <xsl:param name="xrefstyle">
 | 
|---|
| 996 |     <xsl:choose>
 | 
|---|
| 997 |       <xsl:when test="@role and not(@xrefstyle) 
 | 
|---|
| 998 |                       and $use.role.as.xrefstyle != 0">
 | 
|---|
| 999 |         <xsl:value-of select="@role"/>
 | 
|---|
| 1000 |       </xsl:when>
 | 
|---|
| 1001 |       <xsl:otherwise>
 | 
|---|
| 1002 |         <xsl:value-of select="@xrefstyle"/>
 | 
|---|
| 1003 |       </xsl:otherwise>
 | 
|---|
| 1004 |     </xsl:choose>
 | 
|---|
| 1005 |   </xsl:param>
 | 
|---|
| 1006 | 
 | 
|---|
| 1007 |   <xsl:variable name="targetdoc">
 | 
|---|
| 1008 |     <xsl:value-of select="substring-before($olink.key, '/')"/>
 | 
|---|
| 1009 |   </xsl:variable>
 | 
|---|
| 1010 | 
 | 
|---|
| 1011 |   <xsl:choose>
 | 
|---|
| 1012 |     <xsl:when test="$linkend != ''">
 | 
|---|
| 1013 |       <xsl:call-template name="xref.page.citation">
 | 
|---|
| 1014 |         <xsl:with-param name="linkend" select="$linkend"/>
 | 
|---|
| 1015 |         <xsl:with-param name="target" select="key('id', $linkend)"/>
 | 
|---|
| 1016 |         <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
 | 
|---|
| 1017 |       </xsl:call-template>
 | 
|---|
| 1018 |     </xsl:when>
 | 
|---|
| 1019 |     <xsl:when test="not(starts-with(normalize-space($xrefstyle),
 | 
|---|
| 1020 |                         'select:') 
 | 
|---|
| 1021 |                 and (contains($xrefstyle, 'page')
 | 
|---|
| 1022 |                      or contains($xrefstyle, 'Page')))
 | 
|---|
| 1023 |                 and $current.docid != '' 
 | 
|---|
| 1024 |                 and $current.docid != $targetdoc
 | 
|---|
| 1025 |                 and $insert.olink.page.number = 'yes' ">
 | 
|---|
| 1026 |   
 | 
|---|
| 1027 |       <xsl:variable name="page-number">
 | 
|---|
| 1028 |         <xsl:for-each select="$target.database" >
 | 
|---|
| 1029 |           <xsl:value-of 
 | 
|---|
| 1030 |                  select="key('targetptr-key', $olink.key)/@page" />
 | 
|---|
| 1031 |         </xsl:for-each>
 | 
|---|
| 1032 |       </xsl:variable>
 | 
|---|
| 1033 |   
 | 
|---|
| 1034 |       <xsl:if test="$page-number != ''">
 | 
|---|
| 1035 |         <xsl:call-template name="substitute-markup">
 | 
|---|
| 1036 |           <xsl:with-param name="template">
 | 
|---|
| 1037 |             <xsl:call-template name="gentext.template">
 | 
|---|
| 1038 |               <xsl:with-param name="name" select="'olink.page.citation'"/>
 | 
|---|
| 1039 |               <xsl:with-param name="context" select="'xref'"/>
 | 
|---|
| 1040 |               <xsl:with-param name="lang" select="$olink.lang"/>
 | 
|---|
| 1041 |             </xsl:call-template>
 | 
|---|
| 1042 |           </xsl:with-param>
 | 
|---|
| 1043 |           <xsl:with-param name="pagenumber" select="$page-number"/>
 | 
|---|
| 1044 |         </xsl:call-template>
 | 
|---|
| 1045 |       </xsl:if>
 | 
|---|
| 1046 |   
 | 
|---|
| 1047 |     </xsl:when>
 | 
|---|
| 1048 |   </xsl:choose>
 | 
|---|
| 1049 | </xsl:template>
 | 
|---|
| 1050 | 
 | 
|---|
| 1051 | <xsl:template name="olink.document.citation">
 | 
|---|
| 1052 |   <xsl:param name="olink.key" select="''"/>
 | 
|---|
| 1053 |   <xsl:param name="olink.lang" select="'en'"/>
 | 
|---|
| 1054 |   <xsl:param name="target.database"/>
 | 
|---|
| 1055 |   <xsl:param name="xrefstyle">
 | 
|---|
| 1056 |     <xsl:choose>
 | 
|---|
| 1057 |       <xsl:when test="@role and not(@xrefstyle) 
 | 
|---|
| 1058 |                       and $use.role.as.xrefstyle != 0">
 | 
|---|
| 1059 |         <xsl:value-of select="@role"/>
 | 
|---|
| 1060 |       </xsl:when>
 | 
|---|
| 1061 |       <xsl:otherwise>
 | 
|---|
| 1062 |         <xsl:value-of select="@xrefstyle"/>
 | 
|---|
| 1063 |       </xsl:otherwise>
 | 
|---|
| 1064 |     </xsl:choose>
 | 
|---|
| 1065 |   </xsl:param>
 | 
|---|
| 1066 | 
 | 
|---|
| 1067 |   <xsl:variable name="page">
 | 
|---|
| 1068 |     <xsl:for-each select="$target.database" >
 | 
|---|
| 1069 |       <xsl:value-of 
 | 
|---|
| 1070 |              select="key('targetptr-key', $olink.key)/@page" />
 | 
|---|
| 1071 |     </xsl:for-each>
 | 
|---|
| 1072 |   </xsl:variable>
 | 
|---|
| 1073 | 
 | 
|---|
| 1074 |   <xsl:variable name="targetdoc">
 | 
|---|
| 1075 |     <xsl:value-of select="substring-before($olink.key, '/')"/>
 | 
|---|
| 1076 |   </xsl:variable>
 | 
|---|
| 1077 | 
 | 
|---|
| 1078 |   <xsl:variable name="targetptr">
 | 
|---|
| 1079 |     <xsl:value-of 
 | 
|---|
| 1080 |           select="substring-before(substring-after($olink.key, '/'), '/')"/>
 | 
|---|
| 1081 |   </xsl:variable>
 | 
|---|
| 1082 | 
 | 
|---|
| 1083 |   <!-- Don't add docname if pointing to root element -->
 | 
|---|
| 1084 |   <xsl:variable name="rootptr">
 | 
|---|
| 1085 |     <xsl:for-each select="$target.database" >
 | 
|---|
| 1086 |       <xsl:value-of 
 | 
|---|
| 1087 |              select="key('targetdoc-key', $targetdoc)/div[1]/@targetptr" />
 | 
|---|
| 1088 |     </xsl:for-each>
 | 
|---|
| 1089 |   </xsl:variable>
 | 
|---|
| 1090 | 
 | 
|---|
| 1091 |   <xsl:variable name="docname">
 | 
|---|
| 1092 |     <xsl:for-each select="$target.database" >
 | 
|---|
| 1093 |       <xsl:value-of 
 | 
|---|
| 1094 |              select="key('targetdoc-key', $targetdoc)/div[1]/ttl" />
 | 
|---|
| 1095 |     </xsl:for-each>
 | 
|---|
| 1096 |   </xsl:variable>
 | 
|---|
| 1097 | 
 | 
|---|
| 1098 |   <xsl:if test="not(starts-with(normalize-space($xrefstyle), 'select:') 
 | 
|---|
| 1099 |               and (contains($xrefstyle, 'docname')))
 | 
|---|
| 1100 |               and ($olink.doctitle = 'yes' or $olink.doctitle = '1')
 | 
|---|
| 1101 |               and $current.docid != '' 
 | 
|---|
| 1102 |               and $rootptr != $targetptr
 | 
|---|
| 1103 |               and $current.docid != $targetdoc
 | 
|---|
| 1104 |               and $docname != ''">
 | 
|---|
| 1105 |     <xsl:call-template name="substitute-markup">
 | 
|---|
| 1106 |       <xsl:with-param name="template">
 | 
|---|
| 1107 |         <xsl:call-template name="gentext.template">
 | 
|---|
| 1108 |           <xsl:with-param name="name" select="'olink.document.citation'"/>
 | 
|---|
| 1109 |           <xsl:with-param name="context" select="'xref'"/>
 | 
|---|
| 1110 |           <xsl:with-param name="lang" select="$olink.lang"/>
 | 
|---|
| 1111 |         </xsl:call-template>
 | 
|---|
| 1112 |       </xsl:with-param>
 | 
|---|
| 1113 |       <xsl:with-param name="docname" select="$docname"/>
 | 
|---|
| 1114 |       <xsl:with-param name="pagenumber" select="$page"/>
 | 
|---|
| 1115 |     </xsl:call-template>
 | 
|---|
| 1116 |   </xsl:if>
 | 
|---|
| 1117 | </xsl:template>
 | 
|---|
| 1118 | 
 | 
|---|
| 1119 | <xsl:template name="xref.page.citation">
 | 
|---|
| 1120 |   <!-- Determine if this xref should have a page citation.
 | 
|---|
| 1121 |        Context node is the xref or local olink element -->
 | 
|---|
| 1122 |   <xsl:param name="linkend" select="@linkend"/>
 | 
|---|
| 1123 |   <xsl:param name="target" select="key('id', $linkend)"/>
 | 
|---|
| 1124 |   <xsl:param name="xrefstyle">
 | 
|---|
| 1125 |     <xsl:choose>
 | 
|---|
| 1126 |       <xsl:when test="@role and not(@xrefstyle) 
 | 
|---|
| 1127 |                       and $use.role.as.xrefstyle != 0">
 | 
|---|
| 1128 |         <xsl:value-of select="@role"/>
 | 
|---|
| 1129 |       </xsl:when>
 | 
|---|
| 1130 |       <xsl:otherwise>
 | 
|---|
| 1131 |         <xsl:value-of select="@xrefstyle"/>
 | 
|---|
| 1132 |       </xsl:otherwise>
 | 
|---|
| 1133 |     </xsl:choose>
 | 
|---|
| 1134 |   </xsl:param>
 | 
|---|
| 1135 | 
 | 
|---|
| 1136 |   <xsl:if test="not(starts-with(normalize-space($xrefstyle),'select:')
 | 
|---|
| 1137 |                     and (contains($xrefstyle, 'page')
 | 
|---|
| 1138 |                          or contains($xrefstyle, 'Page')))
 | 
|---|
| 1139 |                 and ( $insert.xref.page.number = 'yes' 
 | 
|---|
| 1140 |                    or $insert.xref.page.number = '1')
 | 
|---|
| 1141 |                 or local-name($target) = 'para'">
 | 
|---|
| 1142 |     <xsl:apply-templates select="$target" mode="page.citation">
 | 
|---|
| 1143 |       <xsl:with-param name="id" select="$linkend"/>
 | 
|---|
| 1144 |     </xsl:apply-templates>
 | 
|---|
| 1145 |   </xsl:if>
 | 
|---|
| 1146 | </xsl:template>
 | 
|---|
| 1147 | 
 | 
|---|
| 1148 | </xsl:stylesheet>
 | 
|---|
| 1149 | 
 | 
|---|