@@ -309,4 +309,131 @@ set toc,title
309309 </xsl : choose >
310310</xsl : template >
311311
312+
313+ <!-- Add an id link to each section heading. -->
314+
315+ <!-- from html/sections.xsl -->
316+ <xsl : template name =" section.heading" >
317+ <xsl : param name =" section" select =" ." />
318+ <xsl : param name =" level" select =" 1" />
319+ <xsl : param name =" allow-anchors" select =" 1" />
320+ <xsl : param name =" title" />
321+ <xsl : param name =" class" select =" 'title'" />
322+
323+ <xsl : variable name =" id" >
324+ <xsl : choose >
325+ <!-- Make sure the subtitle doesn't get the same id as the title -->
326+ <xsl : when test =" self::subtitle" >
327+ <xsl : call-template name =" object.id" >
328+ <xsl : with-param name =" object" select =" ." />
329+ </xsl : call-template >
330+ </xsl : when >
331+ <!-- if title is in an *info wrapper, get the grandparent -->
332+ <xsl : when test =" contains(local-name(..), 'info')" >
333+ <xsl : call-template name =" object.id" >
334+ <xsl : with-param name =" object" select =" ../.." />
335+ </xsl : call-template >
336+ </xsl : when >
337+ <xsl : otherwise >
338+ <xsl : call-template name =" object.id" >
339+ <xsl : with-param name =" object" select =" .." />
340+ </xsl : call-template >
341+ </xsl : otherwise >
342+ </xsl : choose >
343+ </xsl : variable >
344+
345+ <!-- HTML H level is one higher than section level -->
346+ <xsl : variable name =" hlevel" >
347+ <xsl : choose >
348+ <!-- highest valid HTML H level is H6; so anything nested deeper
349+ than 5 levels down just becomes H6 -->
350+ <xsl : when test =" $level > 5" >6</xsl : when >
351+ <xsl : otherwise >
352+ <xsl : value-of select =" $level + 1" />
353+ </xsl : otherwise >
354+ </xsl : choose >
355+ </xsl : variable >
356+ <xsl : element name =" h{$hlevel}" namespace =" http://www.w3.org/1999/xhtml" >
357+ <xsl : attribute name =" class" ><xsl : value-of select =" $class" /></xsl : attribute >
358+ <xsl : if test =" $css.decoration != '0'" >
359+ <xsl : if test =" $hlevel< 3" >
360+ <xsl : attribute name =" style" >clear: both</xsl : attribute >
361+ </xsl : if >
362+ </xsl : if >
363+ <xsl : if test =" $allow-anchors != 0" >
364+ <xsl : call-template name =" anchor" >
365+ <xsl : with-param name =" node" select =" $section" />
366+ <xsl : with-param name =" conditional" select =" 0" />
367+ </xsl : call-template >
368+ </xsl : if >
369+ <xsl : copy-of select =" $title" />
370+ <!-- pgsql-docs: begin -->
371+ <xsl : call-template name =" pg.id.link" >
372+ <xsl : with-param name =" object" select =" $section" />
373+ </xsl : call-template >
374+ <!-- pgsql-docs: end -->
375+ </xsl : element >
376+ </xsl : template >
377+
378+
379+ <!-- Add an id link after the last term of a varlistentry. -->
380+
381+ <!-- overrides html/lists.xsl -->
382+ <xsl : template match =" varlistentry/term" >
383+ <xsl : apply-imports />
384+
385+ <!-- Add the link after the last term -->
386+ <xsl : if test =" position() = last()" >
387+ <xsl : call-template name =" pg.id.link" >
388+ <xsl : with-param name =" object" select =" parent::varlistentry" />
389+ </xsl : call-template >
390+ </xsl : if >
391+ </xsl : template >
392+
393+
394+ <!-- Create a link pointing to an id within the document -->
395+ <xsl : template name =" pg.id.link" >
396+ <xsl : param name =" object" select =" ." />
397+ <xsl : choose >
398+ <xsl : when test =" $object/@id or $object/@xml:id" >
399+ <xsl : text > </xsl : text >
400+ <a >
401+ <xsl : attribute name =" href" >
402+ <xsl : text >#</xsl : text >
403+ <xsl : call-template name =" object.id" >
404+ <xsl : with-param name =" object" select =" $object" />
405+ </xsl : call-template >
406+ </xsl : attribute >
407+ <xsl : attribute name =" class" >
408+ <xsl : text >id_link</xsl : text >
409+ </xsl : attribute >
410+ <xsl : text >#</xsl : text >
411+ </a >
412+ </xsl : when >
413+ <xsl : otherwise >
414+ <!-- Only complain about varlistentries if at least one entry in
415+ the list has an id -->
416+ <xsl : if test =" name($object) != 'varlistentry'
417+ or $object/parent::variablelist/varlistentry[@id]" >
418+ <xsl : message terminate =" yes" >
419+ <xsl : text >ERROR: id attribute missing on < </xsl : text >
420+ <xsl : value-of select =" name($object)" />
421+ <xsl : text >> element under </xsl : text >
422+ <xsl : for-each select =" $object/ancestor::*" >
423+ <xsl : text >/</xsl : text >
424+ <xsl : value-of select =" name(.)" />
425+ <xsl : if test =" @id|@xml:id" >
426+ <xsl : text >[@</xsl : text >
427+ <xsl : value-of select =" name(@id|@xml:id)" />
428+ <xsl : text > = '</xsl : text >
429+ <xsl : value-of select =" @id" />
430+ <xsl : text >']</xsl : text >
431+ </xsl : if >
432+ </xsl : for-each >
433+ </xsl : message >
434+ </xsl : if >
435+ </xsl : otherwise >
436+ </xsl : choose >
437+ </xsl : template >
438+
312439</xsl : stylesheet >
0 commit comments