Index: stylesheets/lfs-xsl/docbook-xsl-snapshot/common/pi.xsl
===================================================================
--- stylesheets/lfs-xsl/docbook-xsl-snapshot/common/pi.xsl	(revision 65b29045133149ef43685da7cc2b265e2dfaf0dc)
+++ stylesheets/lfs-xsl/docbook-xsl-snapshot/common/pi.xsl	(revision 65b29045133149ef43685da7cc2b265e2dfaf0dc)
@@ -0,0 +1,211 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
+                xmlns:date="http://exslt.org/dates-and-times"
+                xmlns:exsl="http://exslt.org/common"
+                exclude-result-prefixes="doc date exsl"
+                extension-element-prefixes="date exsl"
+                version='1.0'>
+
+<!-- ********************************************************************
+     $Id$
+     ********************************************************************
+
+     This file is part of the XSL DocBook Stylesheet distribution.
+     See ../README or http://docbook.sf.net/release/xsl/current/ for
+     copyright and other information.
+
+     This file contains general templates for processing processing
+     instructions common to both the HTML and FO versions of the
+     DocBook stylesheets.
+     ******************************************************************** -->
+
+<!-- Process PIs also on title pages -->
+<xsl:template match="processing-instruction()" mode="titlepage.mode">
+  <xsl:apply-templates select="."/>
+</xsl:template>
+
+<xsl:template match="processing-instruction('dbtimestamp')">
+  <xsl:variable name="format">
+    <xsl:variable name="pi-format">
+      <xsl:call-template name="pi-attribute">
+        <xsl:with-param name="pis" select="."/>
+        <xsl:with-param name="attribute">format</xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="$pi-format != ''">
+        <xsl:value-of select="$pi-format"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:call-template name="gentext.template">
+          <xsl:with-param name="context" select="'datetime'"/>
+          <xsl:with-param name="name" select="'format'"/>
+        </xsl:call-template>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>  
+
+  <xsl:variable name="padding">
+    <xsl:variable name="pi-padding">
+      <xsl:call-template name="pi-attribute">
+        <xsl:with-param name="pis" select="."/>
+        <xsl:with-param name="attribute">padding</xsl:with-param>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="$pi-padding != ''">
+        <xsl:value-of select="$pi-padding"/>
+      </xsl:when>
+      <xsl:otherwise>1</xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:variable name="date">
+    <xsl:choose>
+      <xsl:when test="function-available('date:date-time')">
+        <xsl:value-of select="date:date-time()"/>
+      </xsl:when>
+      <xsl:when test="function-available('date:dateTime')">
+        <!-- Xalan quirk -->
+        <xsl:value-of select="date:dateTime()"/>
+      </xsl:when>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:choose>
+    <xsl:when test="function-available('date:date-time') or
+                    function-available('date:dateTime')">
+      <xsl:call-template name="datetime.format">
+        <xsl:with-param name="date" select="$date"/>
+        <xsl:with-param name="format" select="$format"/>
+        <xsl:with-param name="padding" select="$padding"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:message>
+        Timestamp processing requires XSLT processor with EXSLT date support.
+      </xsl:message>
+    </xsl:otherwise>
+  </xsl:choose>
+
+</xsl:template>
+
+<xsl:template name="datetime.format">
+  <xsl:param name="date"/>
+  <xsl:param name="format"/>
+  <xsl:param name="padding" select="1"/>
+  
+  <xsl:if test="$format != ''">
+    <!-- replace any whitespace in the format string with a non-breaking space -->
+    <xsl:variable name="format-nbsp"
+		  select="translate($format,
+			  '&#x20;&#x9;&#xd;&#xa;',
+			  '&#xa0;&#xa0;&#xa0;&#xa0;')"/>
+    <xsl:variable name="tokenized-format-string">
+      <xsl:call-template name="str.tokenize.keep.delimiters">
+	<xsl:with-param name="string" select="$format-nbsp"/>
+	<xsl:with-param name="delimiters" select="'&#xa0;,./-()[]:'"/>
+      </xsl:call-template>
+    </xsl:variable>
+
+  <xsl:choose>
+    <!-- include extra test for Xalan quirk -->
+    <xsl:when test="function-available('exsl:node-set') or 
+		    contains(system-property('xsl:vendor'),'Apache Software Foundation')">
+      <!-- We must preserve context node in order to get valid language -->
+      <xsl:variable name="context" select="."/>
+      <xsl:for-each select="exsl:node-set($tokenized-format-string)/node()">
+        <xsl:variable name="token">
+          <xsl:value-of select="."/>
+        </xsl:variable>
+        <!-- Restore context node -->
+        <xsl:for-each select="$context">
+          <xsl:choose>
+            <xsl:when test="$token = 'a'">
+              <xsl:call-template name="gentext.template">
+                <xsl:with-param name="context" select="'datetime-abbrev'"/>
+                <xsl:with-param name="name" select="date:day-abbreviation($date)"/>
+              </xsl:call-template>
+            </xsl:when>
+            <xsl:when test="$token = 'A'">
+              <xsl:call-template name="gentext.template">
+                <xsl:with-param name="context" select="'datetime-full'"/>
+                <xsl:with-param name="name" select="date:day-name($date)"/>
+              </xsl:call-template>
+            </xsl:when>
+            <xsl:when test="$token = 'b'">
+              <xsl:call-template name="gentext.template">
+                <xsl:with-param name="context" select="'datetime-abbrev'"/>
+                <xsl:with-param name="name" select="date:month-abbreviation($date)"/>
+              </xsl:call-template>
+            </xsl:when>
+            <xsl:when test="$token = 'c'">
+              <xsl:value-of select="date:date($date)"/>
+              <xsl:text> </xsl:text>
+              <xsl:value-of select="date:time($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'B'">
+              <xsl:call-template name="gentext.template">
+                <xsl:with-param name="context" select="'datetime-full'"/>
+                <xsl:with-param name="name" select="date:month-name($date)"/>
+              </xsl:call-template>
+            </xsl:when>
+            <xsl:when test="$token = 'd'">
+              <xsl:if test="$padding = 1 and
+              string-length(date:day-in-month($date)) = 1">0</xsl:if>
+              <xsl:value-of select="date:day-in-month($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'H'">
+              <xsl:if test="$padding = 1 and string-length(date:hour-in-day($date)) = 1">0</xsl:if>
+              <xsl:value-of select="date:hour-in-day($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'j'">
+              <xsl:value-of select="date:day-in-year($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'm'">
+              <xsl:if test="$padding = 1 and string-length(date:month-in-year($date)) = 1">0</xsl:if>
+              <xsl:value-of select="date:month-in-year($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'M'">
+              <xsl:if test="string-length(date:minute-in-hour($date)) = 1">0</xsl:if>
+              <xsl:value-of select="date:minute-in-hour($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'S'">
+              <xsl:if test="string-length(date:second-in-minute($date)) = 1">0</xsl:if>
+              <xsl:value-of select="date:second-in-minute($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'U'">
+              <xsl:value-of select="date:week-in-year($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'w'">
+              <xsl:value-of select="date:day-in-week($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'x'">
+              <xsl:value-of select="date:date($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'X'">
+              <xsl:value-of select="date:time($date)"/>
+            </xsl:when>
+            <xsl:when test="$token = 'Y'">
+              <xsl:value-of select="date:year($date)"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:value-of select="$token"/>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:for-each>
+      </xsl:for-each>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:message>
+        Timestamp processing requires an XSLT processor with support
+        for the EXSLT node-set() function.
+      </xsl:message>
+    </xsl:otherwise>
+  </xsl:choose>
+  </xsl:if>
+
+</xsl:template>
+
+</xsl:stylesheet>
