[postgis-tickets] [SCM] PostGIS branch master updated. 3.1.0alpha2-125-gf19ada9

git at osgeo.org git at osgeo.org
Sun Nov 1 20:31:57 PST 2020


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, master has been updated
       via  f19ada929bc8842ec01fd3968a3e914fb042a673 (commit)
      from  b02967a4ec3b4a03990dc089b0cce9f46eff9c53 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit f19ada929bc8842ec01fd3968a3e914fb042a673
Author: Regina Obe <lr at pcorp.us>
Date:   Sun Nov 1 23:31:40 2020 -0500

    Fix version number on cheatsheets, add a null garden for raster garden test

diff --git a/doc/xsl/postgis_cheatsheet.html.xsl b/doc/xsl/postgis_cheatsheet.html.xsl
index e9f34e4..f331342 100644
--- a/doc/xsl/postgis_cheatsheet.html.xsl
+++ b/doc/xsl/postgis_cheatsheet.html.xsl
@@ -1,281 +1,281 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<!-- ********************************************************************
-     ********************************************************************
-	 Copyright 2011, Regina Obe
-     License: BSD
-	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
-	 statements from postgis xml doc reference
-     ******************************************************************** -->
-	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>2.1</xsl:variable>
-	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='include_examples'>false</xsl:variable>
-	<xsl:variable name='output_purpose'>true</xsl:variable>
-	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
-<xsl:template match="/">
-	<xsl:text><![CDATA[<html><head><title>PostGIS Cheat Sheet</title>
-	<style type="text/css">
-<!--
-table { page-break-inside:avoid; page-break-after:auto }
-tr    { page-break-inside:avoid; page-break-after:avoid }
-thead { display:table-header-group }
-tfoot { display:table-footer-group }
-body {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-}
- at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
- at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
-
-.comment {font-size:x-small;color:green;font-family:"courier new"}
-.notes {font-size:x-small;color:#dd1111;font-weight:500;font-family:verdana}
-#example_heading {
-	border-bottom: 1px solid #000;
-	margin: 10px 15px 10px 85px;
-	color: #4a124a;font-size: 7.5pt;
-}
-
-
-#content_functions {
-	width:100%;
-	float: left;
-}
-
-#content_functions_left {
-	width:52%;
-	float: left;
-}
-
-#content_functions_right {
-	width: 45%;
-	float: right;
-}
-
-
-#content_examples {
-	float: left;
-	width: 100%;
-}
-
-.section {
-	border: 1px solid #000;
-	margin: 4px;
-	]]></xsl:text>
-	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 100%]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
-<xsl:text><![CDATA[	
-	float: left;
-}
-
-.example {
-	border: 1px solid #000;
-	margin: 4px;
-	width: 50%;
-	float:left;
-}
-
-.example b {font-size: 7.5pt}
-.example th {
-	border: 1px solid #000;
-	color: #000;
-	background-color: #ddd;
-	font-size: 8.0pt;
-}
-
-.section th {
-	border: 1px solid #000;
-	color: #fff;
-	background-color: #FF9900;
-	font-size: 9.5pt;
-	
-}
-.section td {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-	vertical-align: top;
-	border: 0;
-}
-
-.func {font-weight: 600}
-.func {font-weight: 600}
-.func_args {font-size: 8pt;font-family:"courier new";float:left}
-
-.evenrow {
-	background-color: #eee;
-}
-
-.oddrow {
-	background-color: #fff;
-}
-
-h1 {
-	margin: 0px;
-	padding: 0px;
-	font-size: 14pt;
-}
-code {font-size: 8pt}
--->
-</style>
-	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ Cheatsheet</h1>]]></xsl:text>
-		<xsl:text><![CDATA[<span class='notes'>New in this release <sup>1</sup> Enhanced in this release <sup>2</sup> Requires GEOS 3.4 or higher<sup>g3.4</sup>     2.5/3D support<sup>3d</sup> SQL-MM<sup>mm</sup>  Supports geography <sup>G</sup></span><div id="content_functions">]]></xsl:text>
-			<xsl:apply-templates select="/book/chapter[@id='reference']" />
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
-			<!-- examples go here -->
-			<xsl:if test="$include_examples='true'">
-			<xsl:apply-templates select="/book/chapter[@id='reference']/sect1[count(//refentry//refsection//programlisting) > 0]"  />
-			</xsl:if>
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[</body></html>]]></xsl:text>
-</xsl:template>
-			
-        
-    <xsl:template match="chapter" name="function_list">
-    	<![CDATA[<div id="content_functions_left">]]>
-    	
-    	<xsl:variable name="col_func_count"><xsl:value-of select="count(descendant::*//funcprototype) div 1.65" /></xsl:variable>
-    	
-    <!--count(preceding-sibling::*/refentry/refsynopsisdiv/funcsynopsis/funcprototype)-->	
-		<xsl:for-each select="sect1[count(//funcprototype) > 0]">
-			
-			<xsl:variable name="col_cur"><xsl:value-of select="count(current()//funcprototype) + count(preceding-sibling::*//funcprototype)"/></xsl:variable>
-		
-			<xsl:if test="$col_cur >$col_func_count and count(preceding-sibling::*//funcprototype) < $col_func_count ">
-				<![CDATA[</div><div id="content_functions_right">]]>
-			</xsl:if>
-			
-			<!--Beginning of section -->
-			<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text><xsl:value-of select="title" />
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-			<xsl:for-each select="refentry">
-				<!-- add row for each function and alternate colors of rows -->
-				<!-- , hyperlink to online manual -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if> 
-		 		<!-- enhanced tag -->
-		 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
-		 		<xsl:if test="contains(.,'GEOS >= 3.4')"><![CDATA[<sup>g3.4</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3d</sup> ]]></xsl:if>
-		 		<!-- if only one proto just dispaly it on first line -->
-		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
-		 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
-		 		</xsl:if>
-		 		
-		 		<![CDATA[  ]]>
-		 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
-		 		<!-- output different proto arg combos -->
-		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
-		 		<![CDATA[</ol></span>]]></xsl:if>
-		 		<![CDATA[</td></tr>]]>
-		 		</xsl:for-each>
-		 		<![CDATA[</table><br />]]>
-		 		<!--close section -->
-		 	</xsl:for-each>
-		<![CDATA[</div>]]>
-		
-	</xsl:template>
-	
-	 <xsl:template match="sect1[//refentry//refsection[contains(title,'Example')]]">
-	 		<!-- less than needed for converting html tags in listings so they are printable -->
-	 		<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
-	 		<!-- only print section header if it has examples - not sure why this is necessary -->
-	 		<xsl:if test="refentry/refsection/programlisting">
-			<!--Beginning of section -->
-				<xsl:text><![CDATA[<table class='example'><tr><th colspan="2" class="example_heading">]]></xsl:text>
-				<xsl:value-of select="title" /> Examples
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-				<!--only pull the first example section of each function -->
-			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
-				
-				 <xsl:variable name='plainlisting'>
-					<xsl:call-template name="globalReplace">
-						<xsl:with-param name="outputString" select="."/>
-						<xsl:with-param name="target" select="$lt"/>
-						<xsl:with-param name="replacement" select="'&lt;'"/>
-					</xsl:call-template>
-				</xsl:variable>
-				
-				<xsl:variable name='listing'>
-					<xsl:call-template name="break">
-						<xsl:with-param name="text" select="$plainlisting" />
-					</xsl:call-template>
-				</xsl:variable>
-				
-
-
-				<!-- add row for each function and alternate colors of rows -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
-		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
-		 	</xsl:for-each>
-		 	<![CDATA[</table>]]>
-		 	</xsl:if>
-		 	<!--close section -->
-		 
-		
-	</xsl:template>
-	
-<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.  
-	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
-	<xsl:template name="globalReplace">
-	  <xsl:param name="outputString"/>
-	  <xsl:param name="target"/>
-	  <xsl:param name="replacement"/>
-	  <xsl:choose>
-		<xsl:when test="contains($outputString,$target)">
-		  <xsl:value-of select=
-			"concat(substring-before($outputString,$target),
-				   $replacement)"/>
-		  <xsl:call-template name="globalReplace">
-			<xsl:with-param name="outputString" 
-				 select="substring-after($outputString,$target)"/>
-			<xsl:with-param name="target" select="$target"/>
-			<xsl:with-param name="replacement" 
-				 select="$replacement"/>
-		  </xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-		  <xsl:value-of select="$outputString"/>
-		</xsl:otherwise>
-	  </xsl:choose>
-	</xsl:template>
-	
-<xsl:template name="break">
-  <xsl:param name="text" select="."/>
-  <xsl:choose>
-    <xsl:when test="contains($text, '&#xa;')">
-      <xsl:value-of select="substring-before($text, '&#xa;')"/>
-      <![CDATA[<br/>]]>
-      <xsl:call-template name="break">
-        <xsl:with-param 
-          name="text" 
-          select="substring-after($text, '&#xa;')"
-        />
-      </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="$text"/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
-<xsl:template name="list_in_params">
-	<xsl:param name="func" />
-	<xsl:for-each select="$func">
-		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
-		<xsl:for-each select="paramdef">
-			<xsl:choose>
-				<xsl:when test="not( contains(parameter, 'OUT') )"> 
-					<xsl:value-of select="parameter" />
-					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
-				</xsl:when>
-			</xsl:choose>	
-		</xsl:for-each>
-	</xsl:for-each>	
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- ********************************************************************
+     ********************************************************************
+	 Copyright 2011, Regina Obe
+     License: BSD
+	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
+	 statements from postgis xml doc reference
+     ******************************************************************** -->
+	<xsl:output method="text" />
+	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='include_examples'>false</xsl:variable>
+	<xsl:variable name='output_purpose'>true</xsl:variable>
+	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
+<xsl:template match="/">
+	<xsl:text><![CDATA[<html><head><title>PostGIS Cheat Sheet</title>
+	<style type="text/css">
+<!--
+table { page-break-inside:avoid; page-break-after:auto }
+tr    { page-break-inside:avoid; page-break-after:avoid }
+thead { display:table-header-group }
+tfoot { display:table-footer-group }
+body {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+}
+ at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
+ at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
+
+.comment {font-size:x-small;color:green;font-family:"courier new"}
+.notes {font-size:x-small;color:#dd1111;font-weight:500;font-family:verdana}
+#example_heading {
+	border-bottom: 1px solid #000;
+	margin: 10px 15px 10px 85px;
+	color: #4a124a;font-size: 7.5pt;
+}
+
+
+#content_functions {
+	width:100%;
+	float: left;
+}
+
+#content_functions_left {
+	width:52%;
+	float: left;
+}
+
+#content_functions_right {
+	width: 45%;
+	float: right;
+}
+
+
+#content_examples {
+	float: left;
+	width: 100%;
+}
+
+.section {
+	border: 1px solid #000;
+	margin: 4px;
+	]]></xsl:text>
+	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 100%]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
+<xsl:text><![CDATA[
+	float: left;
+}
+
+.example {
+	border: 1px solid #000;
+	margin: 4px;
+	width: 50%;
+	float:left;
+}
+
+.example b {font-size: 7.5pt}
+.example th {
+	border: 1px solid #000;
+	color: #000;
+	background-color: #ddd;
+	font-size: 8.0pt;
+}
+
+.section th {
+	border: 1px solid #000;
+	color: #fff;
+	background-color: #FF9900;
+	font-size: 9.5pt;
+
+}
+.section td {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+	vertical-align: top;
+	border: 0;
+}
+
+.func {font-weight: 600}
+.func {font-weight: 600}
+.func_args {font-size: 8pt;font-family:"courier new";float:left}
+
+.evenrow {
+	background-color: #eee;
+}
+
+.oddrow {
+	background-color: #fff;
+}
+
+h1 {
+	margin: 0px;
+	padding: 0px;
+	font-size: 14pt;
+}
+code {font-size: 8pt}
+-->
+</style>
+	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ Cheatsheet</h1>]]></xsl:text>
+		<xsl:text><![CDATA[<span class='notes'>New in this release <sup>1</sup> Enhanced in this release <sup>2</sup> Requires GEOS 3.4 or higher<sup>g3.4</sup>     2.5/3D support<sup>3d</sup> SQL-MM<sup>mm</sup>  Supports geography <sup>G</sup></span><div id="content_functions">]]></xsl:text>
+			<xsl:apply-templates select="/book/chapter[@id='reference']" />
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
+			<!-- examples go here -->
+			<xsl:if test="$include_examples='true'">
+			<xsl:apply-templates select="/book/chapter[@id='reference']/sect1[count(//refentry//refsection//programlisting) > 0]"  />
+			</xsl:if>
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[</body></html>]]></xsl:text>
+</xsl:template>
+
+
+    <xsl:template match="chapter" name="function_list">
+    	<![CDATA[<div id="content_functions_left">]]>
+
+    	<xsl:variable name="col_func_count"><xsl:value-of select="count(descendant::*//funcprototype) div 1.65" /></xsl:variable>
+
+    <!--count(preceding-sibling::*/refentry/refsynopsisdiv/funcsynopsis/funcprototype)-->
+		<xsl:for-each select="sect1[count(//funcprototype) > 0]">
+
+			<xsl:variable name="col_cur"><xsl:value-of select="count(current()//funcprototype) + count(preceding-sibling::*//funcprototype)"/></xsl:variable>
+
+			<xsl:if test="$col_cur >$col_func_count and count(preceding-sibling::*//funcprototype) < $col_func_count ">
+				<![CDATA[</div><div id="content_functions_right">]]>
+			</xsl:if>
+
+			<!--Beginning of section -->
+			<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text><xsl:value-of select="title" />
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+			<xsl:for-each select="refentry">
+				<!-- add row for each function and alternate colors of rows -->
+				<!-- , hyperlink to online manual -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if>
+		 		<!-- enhanced tag -->
+		 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
+		 		<xsl:if test="contains(.,'GEOS >= 3.4')"><![CDATA[<sup>g3.4</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3d</sup> ]]></xsl:if>
+		 		<!-- if only one proto just dispaly it on first line -->
+		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
+		 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
+		 		</xsl:if>
+
+		 		<![CDATA[  ]]>
+		 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
+		 		<!-- output different proto arg combos -->
+		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
+		 		<![CDATA[</ol></span>]]></xsl:if>
+		 		<![CDATA[</td></tr>]]>
+		 		</xsl:for-each>
+		 		<![CDATA[</table><br />]]>
+		 		<!--close section -->
+		 	</xsl:for-each>
+		<![CDATA[</div>]]>
+
+	</xsl:template>
+
+	 <xsl:template match="sect1[//refentry//refsection[contains(title,'Example')]]">
+	 		<!-- less than needed for converting html tags in listings so they are printable -->
+	 		<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
+	 		<!-- only print section header if it has examples - not sure why this is necessary -->
+	 		<xsl:if test="refentry/refsection/programlisting">
+			<!--Beginning of section -->
+				<xsl:text><![CDATA[<table class='example'><tr><th colspan="2" class="example_heading">]]></xsl:text>
+				<xsl:value-of select="title" /> Examples
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+				<!--only pull the first example section of each function -->
+			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
+
+				 <xsl:variable name='plainlisting'>
+					<xsl:call-template name="globalReplace">
+						<xsl:with-param name="outputString" select="."/>
+						<xsl:with-param name="target" select="$lt"/>
+						<xsl:with-param name="replacement" select="'&lt;'"/>
+					</xsl:call-template>
+				</xsl:variable>
+
+				<xsl:variable name='listing'>
+					<xsl:call-template name="break">
+						<xsl:with-param name="text" select="$plainlisting" />
+					</xsl:call-template>
+				</xsl:variable>
+
+
+
+				<!-- add row for each function and alternate colors of rows -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
+		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
+		 	</xsl:for-each>
+		 	<![CDATA[</table>]]>
+		 	</xsl:if>
+		 	<!--close section -->
+
+
+	</xsl:template>
+
+<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.
+	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
+	<xsl:template name="globalReplace">
+	  <xsl:param name="outputString"/>
+	  <xsl:param name="target"/>
+	  <xsl:param name="replacement"/>
+	  <xsl:choose>
+		<xsl:when test="contains($outputString,$target)">
+		  <xsl:value-of select=
+			"concat(substring-before($outputString,$target),
+				   $replacement)"/>
+		  <xsl:call-template name="globalReplace">
+			<xsl:with-param name="outputString"
+				 select="substring-after($outputString,$target)"/>
+			<xsl:with-param name="target" select="$target"/>
+			<xsl:with-param name="replacement"
+				 select="$replacement"/>
+		  </xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+		  <xsl:value-of select="$outputString"/>
+		</xsl:otherwise>
+	  </xsl:choose>
+	</xsl:template>
+
+<xsl:template name="break">
+  <xsl:param name="text" select="."/>
+  <xsl:choose>
+    <xsl:when test="contains($text, '&#xa;')">
+      <xsl:value-of select="substring-before($text, '&#xa;')"/>
+      <![CDATA[<br/>]]>
+      <xsl:call-template name="break">
+        <xsl:with-param
+          name="text"
+          select="substring-after($text, '&#xa;')"
+        />
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$text"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
+<xsl:template name="list_in_params">
+	<xsl:param name="func" />
+	<xsl:for-each select="$func">
+		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
+		<xsl:for-each select="paramdef">
+			<xsl:choose>
+				<xsl:when test="not( contains(parameter, 'OUT') )">
+					<xsl:value-of select="parameter" />
+					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
+				</xsl:when>
+			</xsl:choose>
+		</xsl:for-each>
+	</xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/xsl/postgis_gardentest.sql.xsl b/doc/xsl/postgis_gardentest.sql.xsl
index c8629eb..00eac6a 100644
--- a/doc/xsl/postgis_gardentest.sql.xsl
+++ b/doc/xsl/postgis_gardentest.sql.xsl
@@ -10,7 +10,7 @@
 	<xsl:output method="text" />
 	<xsl:variable name='testversion'>3.1.0</xsl:variable>
 	<xsl:variable name='fnexclude14'>AddGeometryColumn DropGeometryColumn DropGeometryTable</xsl:variable>
-	<xsl:variable name='fnexclude'>AddGeometryColumn DropGeometryColumn DropGeometryTable</xsl:variable>
+	<xsl:variable name='fnexclude'>AddGeometryColumn DropGeometryColumn DropGeometryTable ST_VoronoiLines ST_VoronoiPolygons</xsl:variable>
 	<!--This is just a place holder to state functions not supported or tested separately -->
 
 	<xsl:variable name='var_srid'>3395</xsl:variable>
diff --git a/doc/xsl/raster_cheatsheet.html.xsl b/doc/xsl/raster_cheatsheet.html.xsl
index 0161ea4..238a7e8 100644
--- a/doc/xsl/raster_cheatsheet.html.xsl
+++ b/doc/xsl/raster_cheatsheet.html.xsl
@@ -1,255 +1,255 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<!-- ********************************************************************
-     ********************************************************************
-	 Copyright 2011, Regina Obe
-     License: BSD
-	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
-	 statements from postgis xml doc reference
-     ******************************************************************** -->
-	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>2.1</xsl:variable>
-	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='include_examples'>false</xsl:variable>
-	<xsl:variable name='output_purpose'>true</xsl:variable>
-	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
-<xsl:template match="/">
-	<xsl:text><![CDATA[<html><head><title>PostGIS Raster Cheat Sheet</title>
-	<style type="text/css">
-<!--
-table { page-break-inside:avoid; page-break-after:auto }
-tr    { page-break-inside:avoid; page-break-after:avoid }
-thead { display:table-header-group }
-tfoot { display:table-footer-group }
-body {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-}
- at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
- at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
-.comment {font-size:x-small;color:green;font-family:"courier new"}
-.notes {font-size:x-small;color:#dd1111;font-weight:500;font-family:verdana}
-#example_heading {
-	border-bottom: 1px solid #000;
-	margin: 10px 15px 10px 85px;
-	color: #4a124a;font-size: 7.5pt;
-}
-
-#content_functions {
-	width:100%;
-	float: left
-}
-
-#content_examples {
-	float: left;
-	width: 100%;
-	page-break-before: auto
-}
-
-.section {
-	border: 1px solid #000;
-	margin: 4px;
-	]]></xsl:text>
-	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 45%;]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
-<xsl:text><![CDATA[		float: left;
-}
-
-.example {
-	border: 1px solid #000;
-	margin: 4px;
-	width: 50%;
-	float:left;
-}
-
-.example b {font-size: 7.5pt}
-.example th {
-	border: 1px solid #000;
-	color: #000;
-	background-color: #ddd;
-	font-size: 8.0pt;
-}
-
-.section th {
-	border: 1px solid #000;
-	color: #fff;
-	background-color: #4a124a;
-	font-size: 9.5pt;
-	
-}
-.section td {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-	vertical-align: top;
-	border: 0;
-}
-
-.func {font-weight: 600}
-.func_args {font-size: 8pt;font-family:courier}
-
-.evenrow {
-	background-color: #eee;
-}
-
-.oddrow {
-	background-color: #fff;
-}
-
-h1 {
-	margin: 0px;
-	padding: 0px;
-	font-size: 14pt;
-}
-code {font-size: 8pt}
--->
-</style>
-	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ Raster Cheatsheet</h1>]]></xsl:text>
-		<xsl:text><![CDATA[<span class='notes'>New in this release <sup>1</sup> Enhanced in this release <sup>2</sup> Requires GEOS 3.3 or higher<sup>g3.3</sup>     2.5/3D support<sup>3d</sup> SQL-MM<sup>mm</sup>  Supports geography <sup>G</sup></span> <div id="content_functions">]]></xsl:text>
-			<xsl:apply-templates select="/book/chapter[@id='RT_reference']" name="function_list" />
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
-			<!-- examples go here -->
-			<xsl:if test="$include_examples='true'">
-				<xsl:apply-templates select="/book/chapter[@id='RT_reference']/sect1[count(//refentry//refsection//programlisting) > 0]"  />
-			</xsl:if>
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[</body></html>]]></xsl:text>
-</xsl:template>
-			
-        
-  <xsl:template match="chapter" name="function_list">
-		<xsl:for-each select="sect1[//funcprototype]">
-			<!--Beginning of section -->
-			<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text>
-				<xsl:value-of select="title" />
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-			<xsl:for-each select="refentry">
-				<!-- add row for each function and alternate colors of rows -->
-				<!-- , hyperlink to online manual -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if> 
-		 		<!-- enhanced tag -->
-		 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
-		 		<xsl:if test="contains(.,'GEOS >= 3.3')"><![CDATA[<sup>g3.3</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3D</sup> ]]></xsl:if>
-		 		<!-- if only one proto just dispaly it on first line -->
-		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
-		 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
-		 		</xsl:if>
-		 		
-		 		<![CDATA[  ]]>
-		 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
-		 		<!-- output different proto arg combos -->
-		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
-		 		<![CDATA[</ol></span>]]></xsl:if>
-		 		<![CDATA[</td></tr>]]>
-		 	</xsl:for-each>
-		 	<!--close section -->
-		 	<![CDATA[</table>]]>
-		</xsl:for-each>
-	</xsl:template>
-	
-	 <xsl:template match="sect1[//refentry//refsection/programlisting]">
-	 		<!-- less than needed for converting html tags in listings so they are printable -->
-	 		<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
-	 		<!-- only print section header if it has examples - not sure why this is necessary -->
-	 		<xsl:if test="refentry/refsection/programlisting">
-			<!--Beginning of section -->
-				<xsl:text><![CDATA[<table class='example'><tr><th colspan="2" class="example_heading">]]></xsl:text>
-				<xsl:value-of select="title" /> Examples
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-				<!--only pull the first example section of each function -->
-			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
-				
-				 <xsl:variable name='plainlisting'>
-					<xsl:call-template name="globalReplace">
-						<xsl:with-param name="outputString" select="."/>
-						<xsl:with-param name="target" select="$lt"/>
-						<xsl:with-param name="replacement" select="'&lt;'"/>
-					</xsl:call-template>
-				</xsl:variable>
-				
-				<xsl:variable name='listing'>
-					<xsl:call-template name="break">
-						<xsl:with-param name="text" select="$plainlisting" />
-					</xsl:call-template>
-				</xsl:variable>
-				
-
-
-				<!-- add row for each function and alternate colors of rows -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
-		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
-		 	</xsl:for-each>
-		 	<![CDATA[</table>]]>
-		 	</xsl:if>
-		 	<!--close section -->
-		 
-		
-	</xsl:template>
-	
-<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.  
-	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
-	<xsl:template name="globalReplace">
-	  <xsl:param name="outputString"/>
-	  <xsl:param name="target"/>
-	  <xsl:param name="replacement"/>
-	  <xsl:choose>
-		<xsl:when test="contains($outputString,$target)">
-		  <xsl:value-of select=
-			"concat(substring-before($outputString,$target),
-				   $replacement)"/>
-		  <xsl:call-template name="globalReplace">
-			<xsl:with-param name="outputString" 
-				 select="substring-after($outputString,$target)"/>
-			<xsl:with-param name="target" select="$target"/>
-			<xsl:with-param name="replacement" 
-				 select="$replacement"/>
-		  </xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-		  <xsl:value-of select="$outputString"/>
-		</xsl:otherwise>
-	  </xsl:choose>
-	</xsl:template>
-	
-<xsl:template name="break">
-  <xsl:param name="text" select="."/>
-  <xsl:choose>
-    <xsl:when test="contains($text, '&#xa;')">
-      <xsl:value-of select="substring-before($text, '&#xa;')"/>
-      <![CDATA[<br/>]]>
-      <xsl:call-template name="break">
-        <xsl:with-param 
-          name="text" 
-          select="substring-after($text, '&#xa;')"
-        />
-      </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="$text"/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
-<xsl:template name="list_in_params">
-	<xsl:param name="func" />
-	<xsl:for-each select="$func">
-		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
-		<xsl:for-each select="paramdef">
-			<xsl:choose>
-				<xsl:when test="not( contains(parameter, 'OUT') )"> 
-					<xsl:value-of select="parameter" />
-					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
-				</xsl:when>
-			</xsl:choose>
-			
-		</xsl:for-each>
-	</xsl:for-each>	
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- ********************************************************************
+     ********************************************************************
+	 Copyright 2011, Regina Obe
+     License: BSD
+	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
+	 statements from postgis xml doc reference
+     ******************************************************************** -->
+	<xsl:output method="text" />
+	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='include_examples'>false</xsl:variable>
+	<xsl:variable name='output_purpose'>true</xsl:variable>
+	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
+<xsl:template match="/">
+	<xsl:text><![CDATA[<html><head><title>PostGIS Raster Cheat Sheet</title>
+	<style type="text/css">
+<!--
+table { page-break-inside:avoid; page-break-after:auto }
+tr    { page-break-inside:avoid; page-break-after:avoid }
+thead { display:table-header-group }
+tfoot { display:table-footer-group }
+body {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+}
+ at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
+ at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
+.comment {font-size:x-small;color:green;font-family:"courier new"}
+.notes {font-size:x-small;color:#dd1111;font-weight:500;font-family:verdana}
+#example_heading {
+	border-bottom: 1px solid #000;
+	margin: 10px 15px 10px 85px;
+	color: #4a124a;font-size: 7.5pt;
+}
+
+#content_functions {
+	width:100%;
+	float: left
+}
+
+#content_examples {
+	float: left;
+	width: 100%;
+	page-break-before: auto
+}
+
+.section {
+	border: 1px solid #000;
+	margin: 4px;
+	]]></xsl:text>
+	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 45%;]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
+<xsl:text><![CDATA[		float: left;
+}
+
+.example {
+	border: 1px solid #000;
+	margin: 4px;
+	width: 50%;
+	float:left;
+}
+
+.example b {font-size: 7.5pt}
+.example th {
+	border: 1px solid #000;
+	color: #000;
+	background-color: #ddd;
+	font-size: 8.0pt;
+}
+
+.section th {
+	border: 1px solid #000;
+	color: #fff;
+	background-color: #4a124a;
+	font-size: 9.5pt;
+
+}
+.section td {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+	vertical-align: top;
+	border: 0;
+}
+
+.func {font-weight: 600}
+.func_args {font-size: 8pt;font-family:courier}
+
+.evenrow {
+	background-color: #eee;
+}
+
+.oddrow {
+	background-color: #fff;
+}
+
+h1 {
+	margin: 0px;
+	padding: 0px;
+	font-size: 14pt;
+}
+code {font-size: 8pt}
+-->
+</style>
+	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ Raster Cheatsheet</h1>]]></xsl:text>
+		<xsl:text><![CDATA[<span class='notes'>New in this release <sup>1</sup> Enhanced in this release <sup>2</sup> Requires GEOS 3.3 or higher<sup>g3.3</sup>     2.5/3D support<sup>3d</sup> SQL-MM<sup>mm</sup>  Supports geography <sup>G</sup></span> <div id="content_functions">]]></xsl:text>
+			<xsl:apply-templates select="/book/chapter[@id='RT_reference']" name="function_list" />
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
+			<!-- examples go here -->
+			<xsl:if test="$include_examples='true'">
+				<xsl:apply-templates select="/book/chapter[@id='RT_reference']/sect1[count(//refentry//refsection//programlisting) > 0]"  />
+			</xsl:if>
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[</body></html>]]></xsl:text>
+</xsl:template>
+
+
+  <xsl:template match="chapter" name="function_list">
+		<xsl:for-each select="sect1[//funcprototype]">
+			<!--Beginning of section -->
+			<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text>
+				<xsl:value-of select="title" />
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+			<xsl:for-each select="refentry">
+				<!-- add row for each function and alternate colors of rows -->
+				<!-- , hyperlink to online manual -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if>
+		 		<!-- enhanced tag -->
+		 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
+		 		<xsl:if test="contains(.,'GEOS >= 3.3')"><![CDATA[<sup>g3.3</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3D</sup> ]]></xsl:if>
+		 		<!-- if only one proto just dispaly it on first line -->
+		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
+		 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
+		 		</xsl:if>
+
+		 		<![CDATA[  ]]>
+		 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
+		 		<!-- output different proto arg combos -->
+		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
+		 		<![CDATA[</ol></span>]]></xsl:if>
+		 		<![CDATA[</td></tr>]]>
+		 	</xsl:for-each>
+		 	<!--close section -->
+		 	<![CDATA[</table>]]>
+		</xsl:for-each>
+	</xsl:template>
+
+	 <xsl:template match="sect1[//refentry//refsection/programlisting]">
+	 		<!-- less than needed for converting html tags in listings so they are printable -->
+	 		<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
+	 		<!-- only print section header if it has examples - not sure why this is necessary -->
+	 		<xsl:if test="refentry/refsection/programlisting">
+			<!--Beginning of section -->
+				<xsl:text><![CDATA[<table class='example'><tr><th colspan="2" class="example_heading">]]></xsl:text>
+				<xsl:value-of select="title" /> Examples
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+				<!--only pull the first example section of each function -->
+			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
+
+				 <xsl:variable name='plainlisting'>
+					<xsl:call-template name="globalReplace">
+						<xsl:with-param name="outputString" select="."/>
+						<xsl:with-param name="target" select="$lt"/>
+						<xsl:with-param name="replacement" select="'&lt;'"/>
+					</xsl:call-template>
+				</xsl:variable>
+
+				<xsl:variable name='listing'>
+					<xsl:call-template name="break">
+						<xsl:with-param name="text" select="$plainlisting" />
+					</xsl:call-template>
+				</xsl:variable>
+
+
+
+				<!-- add row for each function and alternate colors of rows -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
+		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
+		 	</xsl:for-each>
+		 	<![CDATA[</table>]]>
+		 	</xsl:if>
+		 	<!--close section -->
+
+
+	</xsl:template>
+
+<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.
+	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
+	<xsl:template name="globalReplace">
+	  <xsl:param name="outputString"/>
+	  <xsl:param name="target"/>
+	  <xsl:param name="replacement"/>
+	  <xsl:choose>
+		<xsl:when test="contains($outputString,$target)">
+		  <xsl:value-of select=
+			"concat(substring-before($outputString,$target),
+				   $replacement)"/>
+		  <xsl:call-template name="globalReplace">
+			<xsl:with-param name="outputString"
+				 select="substring-after($outputString,$target)"/>
+			<xsl:with-param name="target" select="$target"/>
+			<xsl:with-param name="replacement"
+				 select="$replacement"/>
+		  </xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+		  <xsl:value-of select="$outputString"/>
+		</xsl:otherwise>
+	  </xsl:choose>
+	</xsl:template>
+
+<xsl:template name="break">
+  <xsl:param name="text" select="."/>
+  <xsl:choose>
+    <xsl:when test="contains($text, '&#xa;')">
+      <xsl:value-of select="substring-before($text, '&#xa;')"/>
+      <![CDATA[<br/>]]>
+      <xsl:call-template name="break">
+        <xsl:with-param
+          name="text"
+          select="substring-after($text, '&#xa;')"
+        />
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$text"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
+<xsl:template name="list_in_params">
+	<xsl:param name="func" />
+	<xsl:for-each select="$func">
+		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
+		<xsl:for-each select="paramdef">
+			<xsl:choose>
+				<xsl:when test="not( contains(parameter, 'OUT') )">
+					<xsl:value-of select="parameter" />
+					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
+				</xsl:when>
+			</xsl:choose>
+
+		</xsl:for-each>
+	</xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/xsl/raster_gardentest.sql.xsl b/doc/xsl/raster_gardentest.sql.xsl
index dffeff5..78c514e 100644
--- a/doc/xsl/raster_gardentest.sql.xsl
+++ b/doc/xsl/raster_gardentest.sql.xsl
@@ -114,6 +114,10 @@
 		 	(SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '64BF'), i, (i+1),42949.12345),4326) As rast
 		 		FROM generate_series(1,10) As i)
 		 </pgis:pixeltype>
+		 <pgis:pixeltype ID="NULLRaster" PixType="64BF" createtable="true" nodata="NULL">
+		 	(SELECT NULL::raster As rast
+		 		FROM generate_series(1,10) As i)
+		 </pgis:pixeltype>
 	</pgis:pixeltypes>
         <!-- We deal only with the reference chapter -->
         <xsl:template match="/">
@@ -243,7 +247,7 @@ COMMIT;
 				-- <xsl:value-of select="funcdef"/>
 				<xsl:variable name='numparams'><xsl:value-of select="count(paramdef/parameter)" /></xsl:variable>
 				<xsl:variable name='numparamgeoms'><xsl:value-of select="count(paramdef/type[contains(text(),'geometry') or contains(text(),'geography') or contains(text(),'box') ]) + count(paramdef/parameter[contains(text(),'WKT')]) + count(paramdef/parameter[contains(text(),'geomgml')])" /></xsl:variable>
-				<xsl:variable name='numparamrasts'><xsl:value-of select="count(paramdef/type[contains(text(),'raster')] )" /></xsl:variable>
+				<xsl:variable name='numparamrasts'><xsl:value-of select="count(paramdef/type[contains(text(),'raster') ] )" /></xsl:variable>
 				<xsl:variable name='log_label'><xsl:value-of select="funcdef/function" />(<xsl:value-of select="$fnargs" />)</xsl:variable>
 
 				<xsl:variable name="geoftype">
@@ -285,7 +289,7 @@ SELECT  'Ending <xsl:value-of select="funcdef/function" />(<xsl:value-of select=
 <!-- put functions that take only one raster no need to cross with another raster collection, these are unary raster, aggregates, and so forth -->
 	<xsl:when test="$numparamrasts = '1' and $numparamgeoms = '0'  and not(contains($fnexclude,funcdef/function))" >
 		<xsl:for-each select="document('')//pgis:pixeltypes/pgis:pixeltype">
-		SELECT '<xsl:value-of select="$geoftype" /> <xsl:value-of select="$fnname" /><xsl:text> </xsl:text><xsl:value-of select="@ID" />: Start Testing <xsl:value-of select="@PixType" />';
+		SELECT '<xsl:value-of select="$geoftype" /> <xsl:value-of select="$fnname" /><xsl:text> </xsl:text><xsl:value-of select="@ID" />: Start Testing <xsl:value-of select="@PixType" /> with 1 rast param';
 			<xsl:choose>
 			  <xsl:when test="contains($fndef, 'raster ') or contains($fndef, 'geometry ')">
 	 <!-- If output is raster show ewkt convexhull rep -->
@@ -464,13 +468,13 @@ SELECT '<xsl:value-of select="$fnname" /><xsl:text> </xsl:text><xsl:value-of sel
 					<xsl:when test="contains(type, 'raster[]') ">
 						<xsl:text>ARRAY[rast2.rast]</xsl:text>
 					</xsl:when>
-					<xsl:when test="(type = 'raster' or type = 'raster ' or contains(type, 'raster set') ) and (position() = 1) ">
+					<xsl:when test="(type = 'raster' or type = 'raster ' or contains(type, 'raster set') or contains(type, 'setof raster') ) and (position() = 1) ">
 						<xsl:text>rast1.rast</xsl:text>
 					</xsl:when>
-					<xsl:when test="type = 'raster' or type = 'raster ' or contains(type, 'raster set')">
+					<xsl:when test="type = 'raster' or type = 'raster ' or contains(type, 'raster set')or contains(type, 'setof raster')">
 						<xsl:text>rast2.rast</xsl:text>
 					</xsl:when>
-					<xsl:when test="type = 'raster' or type = 'raster ' or contains(type, 'raster set')">
+					<xsl:when test="type = 'raster' or type = 'raster ' or contains(type, 'raster set') or contains(type, 'setof raster')">
 						<xsl:text>rast2.rast</xsl:text>
 					</xsl:when>
 					<xsl:when test="contains(type, 'geometry[]') and count($func/paramdef/type[contains(text(),'geometry') or contains(text(),'box') or contains(text(), 'WKT') or contains(text(), 'bytea')]) = '1'">
diff --git a/doc/xsl/sfcgal_cheatsheet.html.xsl b/doc/xsl/sfcgal_cheatsheet.html.xsl
index c63805c..99f0612 100644
--- a/doc/xsl/sfcgal_cheatsheet.html.xsl
+++ b/doc/xsl/sfcgal_cheatsheet.html.xsl
@@ -1,233 +1,233 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<!-- ********************************************************************
-     ********************************************************************
-	 Copyright 2011, Regina Obe
-     License: BSD
-	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
-	 statements from postgis xml doc reference
-     ******************************************************************** -->
-	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>2.1</xsl:variable>
-	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='include_examples'>false</xsl:variable>
-	<xsl:variable name='output_purpose'>true</xsl:variable>
-	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
-<xsl:template match="/">
-	<xsl:text><![CDATA[<html><head><title>PostGIS SFCGAL Cheat Sheet</title>
-	<style type="text/css">
-<!--
-table { page-break-inside:avoid; page-break-after:auto }
-tr    { page-break-inside:avoid; page-break-after:avoid }
-thead { display:table-header-group }
-tfoot { display:table-footer-group }
-body {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-}
- at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
- at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
-.comment {font-size:x-small;color:green;font-family:"courier new"}
-.notes {font-size:x-small;color:red}
-#example_heading {
-	border-bottom: 1px solid #000;
-	margin: 10px 15px 10px 85px;
-	color: #00d
-}
-
-#content_functions {
-	float: left;
-	width:100%;
-}
-
-#content_examples {
-	float: left;
-	width: 100%;
-}
-
-.section {
-	border: 1px solid #000; float:left;
-	margin: 4px;]]></xsl:text>
-	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 45%;]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
-<xsl:text><![CDATA[	}
-.section th {
-	border: 1px solid #000;
-	color: #fff;
-	background-color: #b63300;
-	font-size: 9.5pt;
-	
-}
-.section td {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-	vertical-align: top;
-	border: 0;
-}
-
-.func {font-weight: 600}
-.func {font-weight: 600}
-.func_args {font-size: 7.5pt;font-family:courier;}
-.func_args ol {margin: 2px}
-.func_args ol li {margin: 5px}
-
-.evenrow {
-	background-color: #eee;
-}
-
-.oddrow {
-	background-color: #fff;
-}
-
-h1 {
-	margin: 0px;
-	padding: 0px;
-	font-size: 14pt;
-}
-
--->
-</style>
-	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ PostGIS SFCGAL Cheatsheet</h1>]]></xsl:text>
-		<!--Beginning of section -->
-		<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text>
-			<xsl:value-of select="title" />
-			<!-- end of section header beginning of function list -->
-			<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-
-			<xsl:apply-templates select="/book/chapter/sect1[@id='reference_sfcgal']" name="function_list" />
-		<!--close section -->
-	 	<![CDATA[</table>]]>
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
-			<!-- examples go here -->
-			<xsl:if test="$include_examples='true'">
-				<xsl:apply-templates select="/book/chapter/sect1[@id='reference_sfcgal']/refentry[count(//refsection//programlisting) > 0]" />
-			</xsl:if>
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[</body></html>]]></xsl:text>
-</xsl:template>
-			
-        
-    <xsl:template match="refentry" name="function_list">
-		<!-- add row for each function and alternate colors of rows -->
-		<!-- , hyperlink to online manual -->
- 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if> 
- 		<!-- enhanced tag -->
- 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
- 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
- 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
- 		<xsl:if test="contains(.,'GEOS >= 3.4')"><![CDATA[<sup>g3.4</sup> ]]></xsl:if>
- 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3D</sup> ]]></xsl:if>
- 		<!-- if only one proto just dispaly it on first line -->
- 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
- 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
-		</xsl:if>
-		 		
- 		<![CDATA[  ]]>
- 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
- 		<!-- output different proto arg combos -->
- 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
- 		<![CDATA[</ol></span>]]></xsl:if>
- 		<![CDATA[</td></tr>]]>
-	</xsl:template>
-	
-	 <xsl:template match="//refentry//refsection[contains(title,'Example')]">
-	 		<!-- less than needed for converting html tags in listings so they are printable -->
-	 		<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
-	 		<!-- only print section header if it has examples - not sure why this is necessary -->
-	 		<xsl:if test="contains(., 'Example')">
-			<!--Beginning of section -->
-				<xsl:text><![CDATA[<table><tr><th colspan="2" class="example_heading">]]></xsl:text>
-				<xsl:value-of select="title" /> Examples
-				<!--only pull the first example section of each function -->
-			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-				 <xsl:variable name='plainlisting'>
-					<xsl:call-template name="globalReplace">
-						<xsl:with-param name="outputString" select="."/>
-						<xsl:with-param name="target" select="$lt"/>
-						<xsl:with-param name="replacement" select="'&lt;'"/>
-					</xsl:call-template>
-				</xsl:variable>
-				
-				<xsl:variable name='listing'>
-					<xsl:call-template name="break">
-						<xsl:with-param name="text" select="$plainlisting" />
-					</xsl:call-template>
-				</xsl:variable>
-				
-
-
-				<!-- add row for each function and alternate colors of rows -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
-		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
-		 	</xsl:for-each>
-		 	<![CDATA[</table>]]>
-		 	</xsl:if>
-		 	<!--close section -->
-		 
-		
-	</xsl:template>
-	
-<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.  
-	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
-	<xsl:template name="globalReplace">
-	  <xsl:param name="outputString"/>
-	  <xsl:param name="target"/>
-	  <xsl:param name="replacement"/>
-	  <xsl:choose>
-		<xsl:when test="contains($outputString,$target)">
-		  <xsl:value-of select=
-			"concat(substring-before($outputString,$target),
-				   $replacement)"/>
-		  <xsl:call-template name="globalReplace">
-			<xsl:with-param name="outputString" 
-				 select="substring-after($outputString,$target)"/>
-			<xsl:with-param name="target" select="$target"/>
-			<xsl:with-param name="replacement" 
-				 select="$replacement"/>
-		  </xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-		  <xsl:value-of select="$outputString"/>
-		</xsl:otherwise>
-	  </xsl:choose>
-	</xsl:template>
-	
-<xsl:template name="break">
-  <xsl:param name="text" select="."/>
-  <xsl:choose>
-    <xsl:when test="contains($text, '&#xa;')">
-      <xsl:value-of select="substring-before($text, '&#xa;')"/>
-      <![CDATA[<br/>]]>
-      <xsl:call-template name="break">
-        <xsl:with-param 
-          name="text" 
-          select="substring-after($text, '&#xa;')"
-        />
-      </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="$text"/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
-<xsl:template name="list_in_params">
-	<xsl:param name="func" />
-	<xsl:for-each select="$func">
-		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
-		<xsl:for-each select="paramdef">
-			<xsl:choose>
-				<xsl:when test="not( contains(parameter, 'OUT') )"> 
-					<xsl:value-of select="parameter" />
-					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
-				</xsl:when>
-			</xsl:choose>
-		</xsl:for-each>
-	</xsl:for-each>	
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- ********************************************************************
+     ********************************************************************
+	 Copyright 2011, Regina Obe
+     License: BSD
+	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
+	 statements from postgis xml doc reference
+     ******************************************************************** -->
+	<xsl:output method="text" />
+	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='include_examples'>false</xsl:variable>
+	<xsl:variable name='output_purpose'>true</xsl:variable>
+	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
+<xsl:template match="/">
+	<xsl:text><![CDATA[<html><head><title>PostGIS SFCGAL Cheat Sheet</title>
+	<style type="text/css">
+<!--
+table { page-break-inside:avoid; page-break-after:auto }
+tr    { page-break-inside:avoid; page-break-after:avoid }
+thead { display:table-header-group }
+tfoot { display:table-footer-group }
+body {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+}
+ at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
+ at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
+.comment {font-size:x-small;color:green;font-family:"courier new"}
+.notes {font-size:x-small;color:red}
+#example_heading {
+	border-bottom: 1px solid #000;
+	margin: 10px 15px 10px 85px;
+	color: #00d
+}
+
+#content_functions {
+	float: left;
+	width:100%;
+}
+
+#content_examples {
+	float: left;
+	width: 100%;
+}
+
+.section {
+	border: 1px solid #000; float:left;
+	margin: 4px;]]></xsl:text>
+	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 45%;]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
+<xsl:text><![CDATA[	}
+.section th {
+	border: 1px solid #000;
+	color: #fff;
+	background-color: #b63300;
+	font-size: 9.5pt;
+
+}
+.section td {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+	vertical-align: top;
+	border: 0;
+}
+
+.func {font-weight: 600}
+.func {font-weight: 600}
+.func_args {font-size: 7.5pt;font-family:courier;}
+.func_args ol {margin: 2px}
+.func_args ol li {margin: 5px}
+
+.evenrow {
+	background-color: #eee;
+}
+
+.oddrow {
+	background-color: #fff;
+}
+
+h1 {
+	margin: 0px;
+	padding: 0px;
+	font-size: 14pt;
+}
+
+-->
+</style>
+	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ PostGIS SFCGAL Cheatsheet</h1>]]></xsl:text>
+		<!--Beginning of section -->
+		<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text>
+			<xsl:value-of select="title" />
+			<!-- end of section header beginning of function list -->
+			<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+
+			<xsl:apply-templates select="/book/chapter/sect1[@id='reference_sfcgal']" name="function_list" />
+		<!--close section -->
+	 	<![CDATA[</table>]]>
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
+			<!-- examples go here -->
+			<xsl:if test="$include_examples='true'">
+				<xsl:apply-templates select="/book/chapter/sect1[@id='reference_sfcgal']/refentry[count(//refsection//programlisting) > 0]" />
+			</xsl:if>
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[</body></html>]]></xsl:text>
+</xsl:template>
+
+
+    <xsl:template match="refentry" name="function_list">
+		<!-- add row for each function and alternate colors of rows -->
+		<!-- , hyperlink to online manual -->
+ 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if>
+ 		<!-- enhanced tag -->
+ 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
+ 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
+ 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
+ 		<xsl:if test="contains(.,'GEOS >= 3.4')"><![CDATA[<sup>g3.4</sup> ]]></xsl:if>
+ 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3D</sup> ]]></xsl:if>
+ 		<!-- if only one proto just dispaly it on first line -->
+ 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
+ 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
+		</xsl:if>
+
+ 		<![CDATA[  ]]>
+ 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
+ 		<!-- output different proto arg combos -->
+ 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
+ 		<![CDATA[</ol></span>]]></xsl:if>
+ 		<![CDATA[</td></tr>]]>
+	</xsl:template>
+
+	 <xsl:template match="//refentry//refsection[contains(title,'Example')]">
+	 		<!-- less than needed for converting html tags in listings so they are printable -->
+	 		<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
+	 		<!-- only print section header if it has examples - not sure why this is necessary -->
+	 		<xsl:if test="contains(., 'Example')">
+			<!--Beginning of section -->
+				<xsl:text><![CDATA[<table><tr><th colspan="2" class="example_heading">]]></xsl:text>
+				<xsl:value-of select="title" /> Examples
+				<!--only pull the first example section of each function -->
+			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+				 <xsl:variable name='plainlisting'>
+					<xsl:call-template name="globalReplace">
+						<xsl:with-param name="outputString" select="."/>
+						<xsl:with-param name="target" select="$lt"/>
+						<xsl:with-param name="replacement" select="'&lt;'"/>
+					</xsl:call-template>
+				</xsl:variable>
+
+				<xsl:variable name='listing'>
+					<xsl:call-template name="break">
+						<xsl:with-param name="text" select="$plainlisting" />
+					</xsl:call-template>
+				</xsl:variable>
+
+
+
+				<!-- add row for each function and alternate colors of rows -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
+		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
+		 	</xsl:for-each>
+		 	<![CDATA[</table>]]>
+		 	</xsl:if>
+		 	<!--close section -->
+
+
+	</xsl:template>
+
+<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.
+	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
+	<xsl:template name="globalReplace">
+	  <xsl:param name="outputString"/>
+	  <xsl:param name="target"/>
+	  <xsl:param name="replacement"/>
+	  <xsl:choose>
+		<xsl:when test="contains($outputString,$target)">
+		  <xsl:value-of select=
+			"concat(substring-before($outputString,$target),
+				   $replacement)"/>
+		  <xsl:call-template name="globalReplace">
+			<xsl:with-param name="outputString"
+				 select="substring-after($outputString,$target)"/>
+			<xsl:with-param name="target" select="$target"/>
+			<xsl:with-param name="replacement"
+				 select="$replacement"/>
+		  </xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+		  <xsl:value-of select="$outputString"/>
+		</xsl:otherwise>
+	  </xsl:choose>
+	</xsl:template>
+
+<xsl:template name="break">
+  <xsl:param name="text" select="."/>
+  <xsl:choose>
+    <xsl:when test="contains($text, '&#xa;')">
+      <xsl:value-of select="substring-before($text, '&#xa;')"/>
+      <![CDATA[<br/>]]>
+      <xsl:call-template name="break">
+        <xsl:with-param
+          name="text"
+          select="substring-after($text, '&#xa;')"
+        />
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$text"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
+<xsl:template name="list_in_params">
+	<xsl:param name="func" />
+	<xsl:for-each select="$func">
+		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
+		<xsl:for-each select="paramdef">
+			<xsl:choose>
+				<xsl:when test="not( contains(parameter, 'OUT') )">
+					<xsl:value-of select="parameter" />
+					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
+				</xsl:when>
+			</xsl:choose>
+		</xsl:for-each>
+	</xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/xsl/tiger_geocoder_cheatsheet.html.xsl b/doc/xsl/tiger_geocoder_cheatsheet.html.xsl
index a1d4661..cd5af55 100644
--- a/doc/xsl/tiger_geocoder_cheatsheet.html.xsl
+++ b/doc/xsl/tiger_geocoder_cheatsheet.html.xsl
@@ -1,231 +1,231 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<!-- ********************************************************************
-     ********************************************************************
-	 Copyright 2011, Regina Obe
-     License: BSD
-	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
-	 statements from postgis xml doc reference
-     ******************************************************************** -->
-	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>2.1</xsl:variable>
-	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
-	<xsl:variable name='include_examples'>true</xsl:variable>
-	<xsl:variable name='output_purpose'>true</xsl:variable>
-	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
-<xsl:template match="/">
-	<xsl:text><![CDATA[<html><head><title>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /> Tiger Geocoder Cheat Sheet <xsl:text><![CDATA[</title>
-	<style type="text/css">
-<!--
-body {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-}
- at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
- at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
-.comment {font-size:x-small;color:green;font-family:"courier new"}
-.notes {font-size:x-small;color:#dd1111;font-weight:500;font-family:verdana}
-.example_heading {
-	border-bottom: 1px solid #000;
-	margin: 10px 15px 10px 85px;
-	background-color: #3e332a;
-	color: #fff;
-}
-
-#content_functions {
-	float: left;
-	width:100%;
-}
-
-#content_examples {
-	float: left;
-	width: 100%;
-}
-
-.section {
-	border: 1px solid #000;
-	margin: 4px;
-	]]></xsl:text>
-	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 45%;]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
-<xsl:text><![CDATA[	}
-
-.section th {
-	border: 1px solid #000;
-	color: #fff;
-	background-color: #3b332a;
-	font-size: 9.5pt;
-	
-}
-.section td {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-	vertical-align: top;
-	border: 0;
-}
-
-.func {font-weight: 600}
-.func {font-weight: 600}
-.func_args {font-size: 7.5pt;font-family:courier;}
-.func_args ol {margin: 2px}
-.func_args ol li {margin: 5px}
-
-.evenrow {
-	background-color: #eee;
-}
-
-.oddrow {
-	background-color: #fff;
-}
-
-h1 {
-	margin: 0px;
-	padding: 0px;
-	font-size: 14pt;
-}
-
--->
-</style>
-	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ Tiger Geocoder Cheatsheet</h1>]]></xsl:text>
-		<xsl:text><![CDATA[<div id="content_functions"><span class='notes'>New in this release <sup>1</sup> Enhanced in this release<sup>2</sup></span>]]></xsl:text>
-			<xsl:apply-templates select="/book/chapter[@id='Extras']" name="function_list" />
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
-			<!-- examples go here -->
-			<xsl:apply-templates select="/book/chapter[@id='Extras']/sect1[count(//refentry//refsection//programlisting) > 0]"  />
-			<xsl:text><![CDATA[</div>]]></xsl:text>
-			<xsl:text><![CDATA[</body></html>]]></xsl:text>
-</xsl:template>
-			
-        
-    <xsl:template match="chapter" name="function_list">
-		<xsl:for-each select="sect1">
-			<!--Beginning of section -->
-			<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text>
-				<xsl:value-of select="title" />
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-			<xsl:for-each select="refentry">
-				<!-- add row for each function and alternate colors of rows -->
-				<!-- , hyperlink to online manual -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if> 
-		 		<!-- enhanced tag -->
-		 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
-		 		<xsl:if test="contains(.,'GEOS >= 3.3')"><![CDATA[<sup>g3.3</sup> ]]></xsl:if>
-		 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3D</sup> ]]></xsl:if>
-		 		<!-- if only one proto just dispaly it on first line -->
-		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
-		 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
-		 		</xsl:if>
-		 		
-		 		<![CDATA[  ]]>
-		 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
-		 		<!-- output different proto arg combos -->
-		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
-		 		<![CDATA[</ol></span>]]></xsl:if>
-		 		<![CDATA[</td></tr>]]>
-		 	</xsl:for-each>
-		 	<!--close section -->
-		 	<![CDATA[</table>]]>
-		</xsl:for-each>
-	</xsl:template>
-	
-	 <xsl:template match="sect1[count(//refentry//refsection//programlisting) > 0]">
-			<!--Beginning of section -->
-			<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
-			<xsl:if test="contains(., 'Example')">
-			<xsl:text><![CDATA[<table><tr><th colspan="2" class="example_heading">]]></xsl:text>
-			<xsl:value-of select="title" /> Examples
-
-				<!--only pull the first example seciton of each function -->
-			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
-				<!-- end of section header beginning of function list -->
-				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
-				 <xsl:variable name='plainlisting'>
-					<xsl:call-template name="globalReplace">
-						<xsl:with-param name="outputString" select="."/>
-						<xsl:with-param name="target" select="$lt"/>
-						<xsl:with-param name="replacement" select="'&lt;'"/>
-					</xsl:call-template>
-				</xsl:variable>
-				
-				<xsl:variable name='listing'>
-					<xsl:call-template name="break">
-						<xsl:with-param name="text" select="$plainlisting" />
-					</xsl:call-template>
-				</xsl:variable>
-				
-				<!-- add row for each function and alternate colors of rows -->
-		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
-		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
-		 		
-		 	</xsl:for-each>
-		 	<!--close section -->
-		 	<![CDATA[</table>]]>
-		 	</xsl:if>
-		
-	</xsl:template>
-	
-<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.  
-	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
-	<xsl:template name="globalReplace">
-	  <xsl:param name="outputString"/>
-	  <xsl:param name="target"/>
-	  <xsl:param name="replacement"/>
-	  <xsl:choose>
-		<xsl:when test="contains($outputString,$target)">
-		  <xsl:value-of select=
-			"concat(substring-before($outputString,$target),
-				   $replacement)"/>
-		  <xsl:call-template name="globalReplace">
-			<xsl:with-param name="outputString" 
-				 select="substring-after($outputString,$target)"/>
-			<xsl:with-param name="target" select="$target"/>
-			<xsl:with-param name="replacement" 
-				 select="$replacement"/>
-		  </xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-		  <xsl:value-of select="$outputString"/>
-		</xsl:otherwise>
-	  </xsl:choose>
-	</xsl:template>
-	
-<xsl:template name="break">
-  <xsl:param name="text" select="."/>
-  <xsl:choose>
-    <xsl:when test="contains($text, '&#xa;')">
-      <xsl:value-of select="substring-before($text, '&#xa;')"/>
-      <![CDATA[<br/>]]>
-      <xsl:call-template name="break">
-        <xsl:with-param 
-          name="text" 
-          select="substring-after($text, '&#xa;')"
-        />
-      </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="$text"/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
-<xsl:template name="list_in_params">
-	<xsl:param name="func" />
-	<xsl:for-each select="$func">
-		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
-		<xsl:for-each select="paramdef">
-			<xsl:choose>
-				<xsl:when test="not( contains(parameter, 'OUT') )"> 
-					<xsl:value-of select="parameter" />
-					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
-				</xsl:when>
-			</xsl:choose>
-		</xsl:for-each>
-	</xsl:for-each>	
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- ********************************************************************
+     ********************************************************************
+	 Copyright 2011, Regina Obe
+     License: BSD
+	 Purpose: This is an xsl transform that generates PostgreSQL COMMENT ON FUNCTION ddl
+	 statements from postgis xml doc reference
+     ******************************************************************** -->
+	<xsl:output method="text" />
+	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='new_tag'>Availability: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='enhanced_tag'>Enhanced: <xsl:value-of select="$postgis_version" /></xsl:variable>
+	<xsl:variable name='include_examples'>true</xsl:variable>
+	<xsl:variable name='output_purpose'>true</xsl:variable>
+	<xsl:variable name='linkstub'>http://postgis.net/docs/manual-dev/</xsl:variable>
+<xsl:template match="/">
+	<xsl:text><![CDATA[<html><head><title>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /> Tiger Geocoder Cheat Sheet <xsl:text><![CDATA[</title>
+	<style type="text/css">
+<!--
+body {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+}
+ at media print { a , a:hover, a:focus, a:active{text-decoration: none;color:black} }
+ at media screen { a , a:hover, a:focus, a:active{text-decoration: underline} }
+.comment {font-size:x-small;color:green;font-family:"courier new"}
+.notes {font-size:x-small;color:#dd1111;font-weight:500;font-family:verdana}
+.example_heading {
+	border-bottom: 1px solid #000;
+	margin: 10px 15px 10px 85px;
+	background-color: #3e332a;
+	color: #fff;
+}
+
+#content_functions {
+	float: left;
+	width:100%;
+}
+
+#content_examples {
+	float: left;
+	width: 100%;
+}
+
+.section {
+	border: 1px solid #000;
+	margin: 4px;
+	]]></xsl:text>
+	<xsl:choose><xsl:when test="$output_purpose = 'false'"><![CDATA[width: 45%;]]></xsl:when><xsl:otherwise><![CDATA[width: 100%;]]></xsl:otherwise></xsl:choose>
+<xsl:text><![CDATA[	}
+
+.section th {
+	border: 1px solid #000;
+	color: #fff;
+	background-color: #3b332a;
+	font-size: 9.5pt;
+
+}
+.section td {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+	vertical-align: top;
+	border: 0;
+}
+
+.func {font-weight: 600}
+.func {font-weight: 600}
+.func_args {font-size: 7.5pt;font-family:courier;}
+.func_args ol {margin: 2px}
+.func_args ol li {margin: 5px}
+
+.evenrow {
+	background-color: #eee;
+}
+
+.oddrow {
+	background-color: #fff;
+}
+
+h1 {
+	margin: 0px;
+	padding: 0px;
+	font-size: 14pt;
+}
+
+-->
+</style>
+	</head><body><h1 style='text-align:center'>PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[ Tiger Geocoder Cheatsheet</h1>]]></xsl:text>
+		<xsl:text><![CDATA[<div id="content_functions"><span class='notes'>New in this release <sup>1</sup> Enhanced in this release<sup>2</sup></span>]]></xsl:text>
+			<xsl:apply-templates select="/book/chapter[@id='Extras']" name="function_list" />
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[<div id="content_examples">]]></xsl:text>
+			<!-- examples go here -->
+			<xsl:apply-templates select="/book/chapter[@id='Extras']/sect1[count(//refentry//refsection//programlisting) > 0]"  />
+			<xsl:text><![CDATA[</div>]]></xsl:text>
+			<xsl:text><![CDATA[</body></html>]]></xsl:text>
+</xsl:template>
+
+
+    <xsl:template match="chapter" name="function_list">
+		<xsl:for-each select="sect1">
+			<!--Beginning of section -->
+			<xsl:text><![CDATA[<table class="section"><tr><th colspan="2">]]></xsl:text>
+				<xsl:value-of select="title" />
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+			<xsl:for-each select="refentry">
+				<!-- add row for each function and alternate colors of rows -->
+				<!-- , hyperlink to online manual -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>" <![CDATA[><td colspan='2'><span class='func'>]]><xsl:text><![CDATA[<a href="]]></xsl:text><xsl:value-of select="$linkstub" /><xsl:value-of select="@id" />.html<xsl:text><![CDATA[" target="_blank">]]></xsl:text><xsl:value-of select="refnamediv/refname" /><xsl:text><![CDATA[</a>]]></xsl:text><![CDATA[</span>]]><xsl:if test="contains(.,$new_tag)"><![CDATA[<sup>1</sup> ]]></xsl:if>
+		 		<!-- enhanced tag -->
+		 		<xsl:if test="contains(.,$enhanced_tag)"><![CDATA[<sup>2</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(.,'implements the SQL/MM')"><![CDATA[<sup>mm</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(refsynopsisdiv/funcsynopsis,'geography') or contains(refsynopsisdiv/funcsynopsis/funcprototype/funcdef,'geography')"><![CDATA[<sup>G</sup>  ]]></xsl:if>
+		 		<xsl:if test="contains(.,'GEOS >= 3.3')"><![CDATA[<sup>g3.3</sup> ]]></xsl:if>
+		 		<xsl:if test="contains(.,'This function supports 3d')"><![CDATA[<sup>3D</sup> ]]></xsl:if>
+		 		<!-- if only one proto just dispaly it on first line -->
+		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) = 1">
+		 			(<xsl:call-template name="list_in_params"><xsl:with-param name="func" select="refsynopsisdiv/funcsynopsis/funcprototype" /></xsl:call-template>)
+		 		</xsl:if>
+
+		 		<![CDATA[  ]]>
+		 		<xsl:if test="$output_purpose = 'true'"><xsl:value-of select="refnamediv/refpurpose" /></xsl:if>
+		 		<!-- output different proto arg combos -->
+		 		<xsl:if test="count(refsynopsisdiv/funcsynopsis/funcprototype) > 1"><![CDATA[<span class='func_args'><ol>]]><xsl:for-each select="refsynopsisdiv/funcsynopsis/funcprototype"><![CDATA[<li>]]><xsl:call-template name="list_in_params"><xsl:with-param name="func" select="." /></xsl:call-template><![CDATA[</li>]]></xsl:for-each>
+		 		<![CDATA[</ol></span>]]></xsl:if>
+		 		<![CDATA[</td></tr>]]>
+		 	</xsl:for-each>
+		 	<!--close section -->
+		 	<![CDATA[</table>]]>
+		</xsl:for-each>
+	</xsl:template>
+
+	 <xsl:template match="sect1[count(//refentry//refsection//programlisting) > 0]">
+			<!--Beginning of section -->
+			<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
+			<xsl:if test="contains(., 'Example')">
+			<xsl:text><![CDATA[<table><tr><th colspan="2" class="example_heading">]]></xsl:text>
+			<xsl:value-of select="title" /> Examples
+
+				<!--only pull the first example seciton of each function -->
+			<xsl:for-each select="refentry//refsection[contains(title,'Example')][1]/programlisting[1]">
+				<!-- end of section header beginning of function list -->
+				<xsl:text><![CDATA[</th></tr>]]></xsl:text>
+				 <xsl:variable name='plainlisting'>
+					<xsl:call-template name="globalReplace">
+						<xsl:with-param name="outputString" select="."/>
+						<xsl:with-param name="target" select="$lt"/>
+						<xsl:with-param name="replacement" select="'&lt;'"/>
+					</xsl:call-template>
+				</xsl:variable>
+
+				<xsl:variable name='listing'>
+					<xsl:call-template name="break">
+						<xsl:with-param name="text" select="$plainlisting" />
+					</xsl:call-template>
+				</xsl:variable>
+
+				<!-- add row for each function and alternate colors of rows -->
+		 		<![CDATA[<tr]]> class="<xsl:choose><xsl:when test="position() mod 2 = 0">evenrow</xsl:when><xsl:otherwise>oddrow</xsl:otherwise></xsl:choose>"<![CDATA[>]]>
+		 		<![CDATA[<td><b>]]><xsl:value-of select="ancestor::refentry/refnamediv/refname" /><![CDATA[</b><br /><code>]]><xsl:value-of select="$listing"  disable-output-escaping="no"/><![CDATA[</code></td></tr>]]>
+
+		 	</xsl:for-each>
+		 	<!--close section -->
+		 	<![CDATA[</table>]]>
+		 	</xsl:if>
+
+	</xsl:template>
+
+<!--General replace macro hack to make up for the fact xsl 1.0 does not have a built in one.
+	Not needed for xsl 2.0 lifted from http://www.xml.com/pub/a/2002/06/05/transforming.html -->
+	<xsl:template name="globalReplace">
+	  <xsl:param name="outputString"/>
+	  <xsl:param name="target"/>
+	  <xsl:param name="replacement"/>
+	  <xsl:choose>
+		<xsl:when test="contains($outputString,$target)">
+		  <xsl:value-of select=
+			"concat(substring-before($outputString,$target),
+				   $replacement)"/>
+		  <xsl:call-template name="globalReplace">
+			<xsl:with-param name="outputString"
+				 select="substring-after($outputString,$target)"/>
+			<xsl:with-param name="target" select="$target"/>
+			<xsl:with-param name="replacement"
+				 select="$replacement"/>
+		  </xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+		  <xsl:value-of select="$outputString"/>
+		</xsl:otherwise>
+	  </xsl:choose>
+	</xsl:template>
+
+<xsl:template name="break">
+  <xsl:param name="text" select="."/>
+  <xsl:choose>
+    <xsl:when test="contains($text, '&#xa;')">
+      <xsl:value-of select="substring-before($text, '&#xa;')"/>
+      <![CDATA[<br/>]]>
+      <xsl:call-template name="break">
+        <xsl:with-param
+          name="text"
+          select="substring-after($text, '&#xa;')"
+        />
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$text"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!--macro to pull out function parameter names so we can provide a pretty arg list prefix for each function -->
+<xsl:template name="list_in_params">
+	<xsl:param name="func" />
+	<xsl:for-each select="$func">
+		<xsl:if test="count(paramdef/parameter)  > 0"> </xsl:if>
+		<xsl:for-each select="paramdef">
+			<xsl:choose>
+				<xsl:when test="not( contains(parameter, 'OUT') )">
+					<xsl:value-of select="parameter" />
+					<xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
+				</xsl:when>
+			</xsl:choose>
+		</xsl:for-each>
+	</xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet>

-----------------------------------------------------------------------

Summary of changes:
 doc/xsl/postgis_cheatsheet.html.xsl        | 562 ++++++++++++++---------------
 doc/xsl/postgis_gardentest.sql.xsl         |   2 +-
 doc/xsl/raster_cheatsheet.html.xsl         | 510 +++++++++++++-------------
 doc/xsl/raster_gardentest.sql.xsl          |  14 +-
 doc/xsl/sfcgal_cheatsheet.html.xsl         | 466 ++++++++++++------------
 doc/xsl/tiger_geocoder_cheatsheet.html.xsl | 462 ++++++++++++------------
 6 files changed, 1010 insertions(+), 1006 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list