mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-04 06:11:37 +01:00 
			
		
		
		
	
		
			
	
	
		
			771 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
		
		
			
		
	
	
			771 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
| 
								 | 
							
								<?xml version="1.0" encoding="utf-8"?>
							 | 
						||
| 
								 | 
							
								<!-- This file was generated by weave.xsl version 0.00+. Do not edit! -->
							 | 
						||
| 
								 | 
							
								<!-- See http://sourceforge.net/projects/docbook/ -->
							 | 
						||
| 
								 | 
							
								<!DOCTYPE book
							 | 
						||
| 
								 | 
							
								  PUBLIC "-//DocBook Open Repository//DTD DocBook Literate Programming V0.0//EN" "http://docbook.sourceforge.net/release/litprog/current/dtd/ldocbook.dtd">
							 | 
						||
| 
								 | 
							
								<book xmlns:src="http://nwalsh.com/xmlns/litprog/fragment" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
							 | 
						||
| 
								 | 
							
								<bookinfo>
							 | 
						||
| 
								 | 
							
								<title>XSL Library Template Reference</title>
							 | 
						||
| 
								 | 
							
								<releaseinfo role="cvs">$Id$
							 | 
						||
| 
								 | 
							
								</releaseinfo>
							 | 
						||
| 
								 | 
							
								<corpauthor>DocBook Open Repository Team</corpauthor>
							 | 
						||
| 
								 | 
							
								<copyright>
							 | 
						||
| 
								 | 
							
								  <year>1999</year>
							 | 
						||
| 
								 | 
							
								  <year>2000</year>
							 | 
						||
| 
								 | 
							
								  <year>2001</year>
							 | 
						||
| 
								 | 
							
								  <year>2002</year>
							 | 
						||
| 
								 | 
							
								  <holder>Norman Walsh</holder>
							 | 
						||
| 
								 | 
							
								</copyright>
							 | 
						||
| 
								 | 
							
								</bookinfo>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<preface><title>Introduction</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>This is technical reference documentation for the DocBook XSL
							 | 
						||
| 
								 | 
							
								Stylesheets; it documents (some of) the parameters, templates, and
							 | 
						||
| 
								 | 
							
								other elements of the stylesheets.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>This is not intended to be <quote>user</quote> documentation.
							 | 
						||
| 
								 | 
							
								It is provided for developers writing customization layers for the
							 | 
						||
| 
								 | 
							
								stylesheets, and for anyone who's interested in <quote>how it
							 | 
						||
| 
								 | 
							
								works</quote>.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>Although I am trying to be thorough, this documentation is known
							 | 
						||
| 
								 | 
							
								to be incomplete. Don't forget to read the source, too :-)</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</preface>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<reference>
							 | 
						||
| 
								 | 
							
								<title>General Library Templates</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="dot.count">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>dot.count</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Returns the number of <quote>.</quote> characters in a string</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="dot.count.frag"><xsl:template name="dot.count">
							 | 
						||
| 
								 | 
							
								  <!-- Returns the number of "." characters in a string -->
							 | 
						||
| 
								 | 
							
								  <xsl:param name="string"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="count"
							 | 
						||
| 
								 | 
							
								             select="0"/>
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="contains($string, '.')">
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="dot.count">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="string"
							 | 
						||
| 
								 | 
							
								                        select="substring-after($string, '.')"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="count"
							 | 
						||
| 
								 | 
							
								                        select="$count+1"/>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$count"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="copy-string">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>copy-string</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Returns <quote>count</quote> copies of a string</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="copy-string.frag"><xsl:template name="copy-string">
							 | 
						||
| 
								 | 
							
								  <!-- returns 'count' copies of 'string' -->
							 | 
						||
| 
								 | 
							
								  <xsl:param name="string"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="count"
							 | 
						||
| 
								 | 
							
								             select="0"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="result"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$count>0">
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="copy-string">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="string"
							 | 
						||
| 
								 | 
							
								                        select="$string"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="count"
							 | 
						||
| 
								 | 
							
								                        select="$count - 1"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="result">
							 | 
						||
| 
								 | 
							
								          <xsl:value-of select="$result"/>
							 | 
						||
| 
								 | 
							
								          <xsl:value-of select="$string"/>
							 | 
						||
| 
								 | 
							
								        </xsl:with-param>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$result"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ====================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="string.subst">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>string.subst</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Substitute one text string for another in a string</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">string.subst</function> template replaces all
							 | 
						||
| 
								 | 
							
								occurances of <parameter moreinfo="none">target</parameter> in <parameter moreinfo="none">string</parameter>
							 | 
						||
| 
								 | 
							
								with <parameter moreinfo="none">replacement</parameter> and returns the result.
							 | 
						||
| 
								 | 
							
								</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="string.subst.frag"><xsl:template name="string.subst">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="string"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="target"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="replacement"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="contains($string, $target)">
							 | 
						||
| 
								 | 
							
								      <xsl:variable name="rest">
							 | 
						||
| 
								 | 
							
								        <xsl:call-template name="string.subst">
							 | 
						||
| 
								 | 
							
								          <xsl:with-param name="string"
							 | 
						||
| 
								 | 
							
								                          select="substring-after($string, $target)"/>
							 | 
						||
| 
								 | 
							
								          <xsl:with-param name="target"
							 | 
						||
| 
								 | 
							
								                          select="$target"/>
							 | 
						||
| 
								 | 
							
								          <xsl:with-param name="replacement"
							 | 
						||
| 
								 | 
							
								                          select="$replacement"/>
							 | 
						||
| 
								 | 
							
								        </xsl:call-template>
							 | 
						||
| 
								 | 
							
								      </xsl:variable>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="concat(substring-before($string, $target),                                    $replacement,                                    $rest)"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$string"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="xpointer.idref">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>xpointer.idref</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Extract IDREF from an XPointer</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">xpointer.idref</function> template returns the
							 | 
						||
| 
								 | 
							
								ID portion of an XPointer which is a pointer to an ID within the current
							 | 
						||
| 
								 | 
							
								document, or the empty string if it is not.</para>
							 | 
						||
| 
								 | 
							
								<para>In other words, <function moreinfo="none">xpointer.idref</function> returns
							 | 
						||
| 
								 | 
							
								<quote>foo</quote> when passed either <literal moreinfo="none">#foo</literal>
							 | 
						||
| 
								 | 
							
								or <literal moreinfo="none">#xpointer(id('foo'))</literal>, otherwise it returns
							 | 
						||
| 
								 | 
							
								the empty string.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="xpointer.idref.frag"><xsl:template name="xpointer.idref">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="xpointer">http://...</xsl:param>
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="starts-with($xpointer, '#xpointer(id(')">
							 | 
						||
| 
								 | 
							
								      <xsl:variable name="rest"
							 | 
						||
| 
								 | 
							
								                    select="substring-after($xpointer, '#xpointer(id(')"/>
							 | 
						||
| 
								 | 
							
								      <xsl:variable name="quote"
							 | 
						||
| 
								 | 
							
								                    select="substring($rest, 1, 1)"/>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="substring-before(substring-after($xpointer, $quote), $quote)"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="starts-with($xpointer, '#')">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="substring-after($xpointer, '#')"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <!-- otherwise it's a pointer to some other document -->
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="length-magnitude">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>length-magnitude</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Return the unqualified dimension from a length specification</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">length-magnitude</function> template returns the
							 | 
						||
| 
								 | 
							
								unqualified length ("20" for "20pt") from a dimension.
							 | 
						||
| 
								 | 
							
								</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="length-magnitude.frag"><xsl:template name="length-magnitude">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="length"
							 | 
						||
| 
								 | 
							
								             select="'0pt'"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="string-length($length) = 0"/>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="substring($length,1,1) = '0'                     or substring($length,1,1) = '1'                     or substring($length,1,1) = '2'                     or substring($length,1,1) = '3'                     or substring($length,1,1) = '4'                     or substring($length,1,1) = '5'                     or substring($length,1,1) = '6'                     or substring($length,1,1) = '7'                     or substring($length,1,1) = '8'                     or substring($length,1,1) = '9'                     or substring($length,1,1) = '.'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="substring($length,1,1)"/>
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="length-magnitude">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="length"
							 | 
						||
| 
								 | 
							
								                        select="substring($length,2)"/>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="length-units">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>length-units</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Return the units from a length specification</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">length-units</function> template returns the
							 | 
						||
| 
								 | 
							
								units ("pt" for "20pt") from a length. If no units are supplied on the
							 | 
						||
| 
								 | 
							
								length, the <parameter moreinfo="none">defauilt.units</parameter> are returned.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="length-units.frag"><xsl:template name="length-units">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="length"
							 | 
						||
| 
								 | 
							
								             select="'0pt'"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="default.units"
							 | 
						||
| 
								 | 
							
								             select="'px'"/>
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="magnitude">
							 | 
						||
| 
								 | 
							
								    <xsl:call-template name="length-magnitude">
							 | 
						||
| 
								 | 
							
								      <xsl:with-param name="length"
							 | 
						||
| 
								 | 
							
								                      select="$length"/>
							 | 
						||
| 
								 | 
							
								    </xsl:call-template>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="units">
							 | 
						||
| 
								 | 
							
								    <xsl:value-of select="substring($length, string-length($magnitude)+1)"/>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = ''">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$default.units"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$units"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="length-spec">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>length-spec</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Return a fully qualified length specification</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">length-spec</function> template returns the
							 | 
						||
| 
								 | 
							
								qualified length from a dimension. If an unqualified length is given,
							 | 
						||
| 
								 | 
							
								the <parameter moreinfo="none">default.units</parameter> will be added to it.
							 | 
						||
| 
								 | 
							
								</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="length-spec.frag"><xsl:template name="length-spec">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="length"
							 | 
						||
| 
								 | 
							
								             select="'0pt'"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="default.units"
							 | 
						||
| 
								 | 
							
								             select="'px'"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="magnitude">
							 | 
						||
| 
								 | 
							
								    <xsl:call-template name="length-magnitude">
							 | 
						||
| 
								 | 
							
								      <xsl:with-param name="length"
							 | 
						||
| 
								 | 
							
								                      select="$length"/>
							 | 
						||
| 
								 | 
							
								    </xsl:call-template>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="units">
							 | 
						||
| 
								 | 
							
								    <xsl:value-of select="substring($length, string-length($magnitude)+1)"/>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:value-of select="$magnitude"/>
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units='cm'                     or $units='mm'                     or $units='in'                     or $units='pt'                     or $units='pc'                     or $units='px'                     or $units='em'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$units"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = ''">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$default.units"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:message>
							 | 
						||
| 
								 | 
							
								        <xsl:text>Unrecognized unit of measure: </xsl:text>
							 | 
						||
| 
								 | 
							
								        <xsl:value-of select="$units"/>
							 | 
						||
| 
								 | 
							
								        <xsl:text>.</xsl:text>
							 | 
						||
| 
								 | 
							
								      </xsl:message>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="length-in-points">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>length-in-points</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Returns the size, in points, of a specified length</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">length-in-points</function> template converts a length
							 | 
						||
| 
								 | 
							
								specification to points and returns that value as an unqualified
							 | 
						||
| 
								 | 
							
								number.
							 | 
						||
| 
								 | 
							
								</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<caution>
							 | 
						||
| 
								 | 
							
								<para>There is no way for the template to infer the size of an
							 | 
						||
| 
								 | 
							
								<literal moreinfo="none">em</literal>. It relies on the default <parameter moreinfo="none">em.size</parameter>
							 | 
						||
| 
								 | 
							
								which is initially <literal moreinfo="none">10</literal> (for 10pt).</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>Similarly, converting pixesl to points relies on the
							 | 
						||
| 
								 | 
							
								<parameter moreinfo="none">pixels.per.inch</parameter> parameter which is initially
							 | 
						||
| 
								 | 
							
								<literal moreinfo="none">90</literal>.
							 | 
						||
| 
								 | 
							
								</para>
							 | 
						||
| 
								 | 
							
								</caution>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="length-in-points.frag"><xsl:template name="length-in-points">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="length"
							 | 
						||
| 
								 | 
							
								             select="'0pt'"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="em.size"
							 | 
						||
| 
								 | 
							
								             select="10"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="pixels.per.inch"
							 | 
						||
| 
								 | 
							
								             select="90"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="magnitude">
							 | 
						||
| 
								 | 
							
								    <xsl:call-template name="length-magnitude">
							 | 
						||
| 
								 | 
							
								      <xsl:with-param name="length"
							 | 
						||
| 
								 | 
							
								                      select="$length"/>
							 | 
						||
| 
								 | 
							
								    </xsl:call-template>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="units">
							 | 
						||
| 
								 | 
							
								    <xsl:value-of select="substring($length, string-length($magnitude)+1)"/>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'pt'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'cm'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude div 2.54 * 72.0"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'mm'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude div 25.4 * 72.0"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'in'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude * 72.0"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'pc'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude div 6.0 * 72.0"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'px'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude div $pixels.per.inch * 72.0"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$units = 'em'">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$magnitude * $em.size"/>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:message>
							 | 
						||
| 
								 | 
							
								        <xsl:text>Unrecognized unit of measure: </xsl:text>
							 | 
						||
| 
								 | 
							
								        <xsl:value-of select="$units"/>
							 | 
						||
| 
								 | 
							
								        <xsl:text>.</xsl:text>
							 | 
						||
| 
								 | 
							
								      </xsl:message>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="pi-attribute">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>pi-attribute</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Extract a pseudo-attribute from a PI</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">pi-attribute</function> template extracts a pseudo-attribute
							 | 
						||
| 
								 | 
							
								from a processing instruction. For example, given the PI
							 | 
						||
| 
								 | 
							
								<quote><literal moreinfo="none"><?foo bar="1" baz='red'?></literal></quote>,</para>
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><xsl:call-template name="pi-attribute">
							 | 
						||
| 
								 | 
							
								  <xsl:with-param name="pis" select="processing-instruction('foo')"/>
							 | 
						||
| 
								 | 
							
								  <xsl:with-param name="attribute" select="'baz'"/>
							 | 
						||
| 
								 | 
							
								</xsl:call-template></programlisting>
							 | 
						||
| 
								 | 
							
								<para>will return <quote>red</quote>. This template returns the first matching
							 | 
						||
| 
								 | 
							
								attribute that it finds. Presented with processing instructions that
							 | 
						||
| 
								 | 
							
								contain badly formed pseudo-attributes (missing or unbalanced quotes,
							 | 
						||
| 
								 | 
							
								for example), the template may silently return erroneous results.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="pi-attribute.frag"><xsl:template name="pi-attribute">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="pis"
							 | 
						||
| 
								 | 
							
								             select="processing-instruction('')"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="attribute">filename</xsl:param>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="count">1</xsl:param>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$count>count($pis)">
							 | 
						||
| 
								 | 
							
								      <!-- not found -->
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:variable name="pi">
							 | 
						||
| 
								 | 
							
								        <xsl:value-of select="$pis[$count]"/>
							 | 
						||
| 
								 | 
							
								      </xsl:variable>
							 | 
						||
| 
								 | 
							
								      <xsl:choose>
							 | 
						||
| 
								 | 
							
								        <xsl:when test="contains($pi,concat($attribute, '='))">
							 | 
						||
| 
								 | 
							
								          <xsl:variable name="rest"
							 | 
						||
| 
								 | 
							
								                        select="substring-after($pi,concat($attribute,'='))"/>
							 | 
						||
| 
								 | 
							
								          <xsl:variable name="quote"
							 | 
						||
| 
								 | 
							
								                        select="substring($rest,1,1)"/>
							 | 
						||
| 
								 | 
							
								          <xsl:value-of select="substring-before(substring($rest,2),$quote)"/>
							 | 
						||
| 
								 | 
							
								        </xsl:when>
							 | 
						||
| 
								 | 
							
								        <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								          <xsl:call-template name="pi-attribute">
							 | 
						||
| 
								 | 
							
								            <xsl:with-param name="pis"
							 | 
						||
| 
								 | 
							
								                            select="$pis"/>
							 | 
						||
| 
								 | 
							
								            <xsl:with-param name="attribute"
							 | 
						||
| 
								 | 
							
								                            select="$attribute"/>
							 | 
						||
| 
								 | 
							
								            <xsl:with-param name="count"
							 | 
						||
| 
								 | 
							
								                            select="$count + 1"/>
							 | 
						||
| 
								 | 
							
								          </xsl:call-template>
							 | 
						||
| 
								 | 
							
								        </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      </xsl:choose>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="lookup.key">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>lookup.key</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Retrieve the value associated with a particular key in a table</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>Given a table of space-delimited key/value pairs,
							 | 
						||
| 
								 | 
							
								the <function moreinfo="none">lookup.key</function> template extracts the value associated
							 | 
						||
| 
								 | 
							
								with a particular key.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="lookup.key.frag"><xsl:template name="lookup.key">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="key"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="table"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:if test="contains($table, ' ')">
							 | 
						||
| 
								 | 
							
								    <xsl:choose>
							 | 
						||
| 
								 | 
							
								      <xsl:when test="substring-before($table, ' ') = $key">
							 | 
						||
| 
								 | 
							
								        <xsl:variable name="rest"
							 | 
						||
| 
								 | 
							
								                      select="substring-after($table, ' ')"/>
							 | 
						||
| 
								 | 
							
								        <xsl:choose>
							 | 
						||
| 
								 | 
							
								          <xsl:when test="contains($rest, ' ')">
							 | 
						||
| 
								 | 
							
								            <xsl:value-of select="substring-before($rest, ' ')"/>
							 | 
						||
| 
								 | 
							
								          </xsl:when>
							 | 
						||
| 
								 | 
							
								          <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								            <xsl:value-of select="$rest"/>
							 | 
						||
| 
								 | 
							
								          </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								        </xsl:choose>
							 | 
						||
| 
								 | 
							
								      </xsl:when>
							 | 
						||
| 
								 | 
							
								      <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								        <xsl:call-template name="lookup.key">
							 | 
						||
| 
								 | 
							
								          <xsl:with-param name="key"
							 | 
						||
| 
								 | 
							
								                          select="$key"/>
							 | 
						||
| 
								 | 
							
								          <xsl:with-param name="table"
							 | 
						||
| 
								 | 
							
								                          select="substring-after(substring-after($table,' '), ' ')"/>
							 | 
						||
| 
								 | 
							
								        </xsl:call-template>
							 | 
						||
| 
								 | 
							
								      </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								    </xsl:choose>
							 | 
						||
| 
								 | 
							
								  </xsl:if>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="xpath.location">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>xpath.location</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Calculate the XPath child-sequence to the current node</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">xpath.location</function> template calculates the
							 | 
						||
| 
								 | 
							
								absolute path from the root of the tree to the current element node.
							 | 
						||
| 
								 | 
							
								</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="xpath.location.frag"><xsl:template name="xpath.location">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="node"
							 | 
						||
| 
								 | 
							
								             select="."/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="path"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:variable name="next.path">
							 | 
						||
| 
								 | 
							
								    <xsl:value-of select="local-name($node)"/>
							 | 
						||
| 
								 | 
							
								    <xsl:if test="$path != ''">/</xsl:if>
							 | 
						||
| 
								 | 
							
								    <xsl:value-of select="$path"/>
							 | 
						||
| 
								 | 
							
								  </xsl:variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="$node/parent::*">
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="xpath.location">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="node"
							 | 
						||
| 
								 | 
							
								                        select="$node/parent::*"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="path"
							 | 
						||
| 
								 | 
							
								                        select="$next.path"/>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:text>/</xsl:text>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$next.path"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ================================================================== -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="comment-escape-string">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>comment-escape-string</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Prepare a string for inclusion in an XML comment</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">comment-escape-string</function> template returns a string
							 | 
						||
| 
								 | 
							
								that has been transformed so that it can safely be output as an XML comment.
							 | 
						||
| 
								 | 
							
								Internal occurrences of "--" will be replaced with "- -" and a leading and/or
							 | 
						||
| 
								 | 
							
								trailing space will be added to the string, if necessary.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="comment-escape-string"><xsl:template name="comment-escape-string">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="string"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:if test="starts-with($string, '-')">
							 | 
						||
| 
								 | 
							
								    <xsl:text> </xsl:text>
							 | 
						||
| 
								 | 
							
								  </xsl:if>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:call-template name="comment-escape-string.recursive">
							 | 
						||
| 
								 | 
							
								    <xsl:with-param name="string"
							 | 
						||
| 
								 | 
							
								                    select="$string"/>
							 | 
						||
| 
								 | 
							
								  </xsl:call-template>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:if test="substring($string, string-length($string), 1) = '-'">
							 | 
						||
| 
								 | 
							
								    <xsl:text> </xsl:text>
							 | 
						||
| 
								 | 
							
								  </xsl:if>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="comment-escape-string.recursive">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>comment-escape-string.recursive</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Internal function used by comment-escape-string</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <function moreinfo="none">comment-escape-string.recursive</function> template is used
							 | 
						||
| 
								 | 
							
								by <function moreinfo="none">comment-escape-string</function>.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="comment-escape-string.recursive"><xsl:template name="comment-escape-string.recursive">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="string"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="contains($string, '--')">
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="substring-before($string, '--')"/>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="'- -'"/>
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="comment-escape-string.recursive">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="string"
							 | 
						||
| 
								 | 
							
								                        select="substring-after($string, '--')"/>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$string"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</reference>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<reference>
							 | 
						||
| 
								 | 
							
								<title>Relative URI Functions</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<partintro><title>Introduction</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>These functions manipulate relative URI references.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The following assumptions must hold true:</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<orderedlist inheritnum="ignore" continuation="restarts">
							 | 
						||
| 
								 | 
							
								<listitem>
							 | 
						||
| 
								 | 
							
								<para>All URIs are relative.</para>
							 | 
						||
| 
								 | 
							
								</listitem>
							 | 
						||
| 
								 | 
							
								<listitem>
							 | 
						||
| 
								 | 
							
								<para>No URI contains the <quote><literal moreinfo="none">../</literal></quote> sequence
							 | 
						||
| 
								 | 
							
								which would effectively move <quote>up</quote> the hierarchy.</para>
							 | 
						||
| 
								 | 
							
								</listitem>
							 | 
						||
| 
								 | 
							
								</orderedlist>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>If these assumptions do not hold, the results are unpredictable.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</partintro>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="count.uri.path.depth">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>count.uri.path.depth</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Count the number of path components in a relative URI</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>This function counts the number of path components in a relative URI.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="count.uri.path.depth.frag"><xsl:template name="count.uri.path.depth">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="filename"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="count"
							 | 
						||
| 
								 | 
							
								             select="0"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="contains($filename, '/')">
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="count.uri.path.depth">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="filename"
							 | 
						||
| 
								 | 
							
								                        select="substring-after($filename, '/')"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="count"
							 | 
						||
| 
								 | 
							
								                        select="$count + 1"/>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:value-of select="$count"/>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refentry id="trim.common.uri.paths">
							 | 
						||
| 
								 | 
							
								<refnamediv>
							 | 
						||
| 
								 | 
							
								<refname>trim.common.uri.paths</refname>
							 | 
						||
| 
								 | 
							
								<refpurpose>Trim common leading path components from a relative URI</refpurpose>
							 | 
						||
| 
								 | 
							
								</refnamediv>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<refsect1><title>Description</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>This function trims common leading path components from a relative URI.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<programlisting format="linespecific"><src:fragment id="trim.common.uri.paths.frag"><xsl:template name="trim.common.uri.paths">
							 | 
						||
| 
								 | 
							
								  <xsl:param name="uriA"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="uriB"
							 | 
						||
| 
								 | 
							
								             select="''"/>
							 | 
						||
| 
								 | 
							
								  <xsl:param name="return"
							 | 
						||
| 
								 | 
							
								             select="'A'"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <xsl:choose>
							 | 
						||
| 
								 | 
							
								    <xsl:when test="contains($uriA, '/') and contains($uriB, '/')                     and substring-before($uriA, '/') = substring-before($uriB, '/')">
							 | 
						||
| 
								 | 
							
								      <xsl:call-template name="trim.common.uri.paths">
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="uriA"
							 | 
						||
| 
								 | 
							
								                        select="substring-after($uriA, '/')"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="uriB"
							 | 
						||
| 
								 | 
							
								                        select="substring-after($uriB, '/')"/>
							 | 
						||
| 
								 | 
							
								        <xsl:with-param name="return"
							 | 
						||
| 
								 | 
							
								                        select="$return"/>
							 | 
						||
| 
								 | 
							
								      </xsl:call-template>
							 | 
						||
| 
								 | 
							
								    </xsl:when>
							 | 
						||
| 
								 | 
							
								    <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      <xsl:choose>
							 | 
						||
| 
								 | 
							
								        <xsl:when test="$return = 'A'">
							 | 
						||
| 
								 | 
							
								          <xsl:value-of select="$uriA"/>
							 | 
						||
| 
								 | 
							
								        </xsl:when>
							 | 
						||
| 
								 | 
							
								        <xsl:otherwise>
							 | 
						||
| 
								 | 
							
								          <xsl:value-of select="$uriB"/>
							 | 
						||
| 
								 | 
							
								        </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								      </xsl:choose>
							 | 
						||
| 
								 | 
							
								    </xsl:otherwise>
							 | 
						||
| 
								 | 
							
								  </xsl:choose>
							 | 
						||
| 
								 | 
							
								</xsl:template></src:fragment></programlisting>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</refsect1>
							 | 
						||
| 
								 | 
							
								</refentry>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</reference>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<appendix><title>The Stylesheet</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<para>The <filename moreinfo="none">lib.xsl</filename> stylesheet is just a wrapper
							 | 
						||
| 
								 | 
							
								around these functions.</para>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<src:fragment id="top">
							 | 
						||
| 
								 | 
							
								<!-- ********************************************************************
							 | 
						||
| 
								 | 
							
								     $Id$
							 | 
						||
| 
								 | 
							
								     ********************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     This file is part of the XSL DocBook Stylesheet distribution.
							 | 
						||
| 
								 | 
							
								     See ../README or http://nwalsh.com/docbook/xsl/ for copyright
							 | 
						||
| 
								 | 
							
								     and other information.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     This module implements DTD-independent functions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     ******************************************************************** -->
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
							 | 
						||
| 
								 | 
							
								                exclude-result-prefixes="src"
							 | 
						||
| 
								 | 
							
								                version="1.0">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="dot.count.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="copy-string.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="string.subst.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="xpointer.idref.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="length-magnitude.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="length-units.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="length-spec.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="length-in-points.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="pi-attribute.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="lookup.key.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="xpath.location.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="comment-escape-string"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="comment-escape-string.recursive"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="count.uri.path.depth.frag"/>
							 | 
						||
| 
								 | 
							
								<src:fragref linkend="trim.common.uri.paths.frag"/>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</xsl:stylesheet></src:fragment>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</appendix>
							 | 
						||
| 
								 | 
							
								</book>
							 |