[postgis-tickets] [SCM] PostGIS branch stable-3.2 updated. 3.2.3-16-g08d9498ea

git at osgeo.org git at osgeo.org
Sun Oct 16 14:08:32 PDT 2022


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, stable-3.2 has been updated
       via  08d9498ea5466d25c62c6e4192bfe1b74ab498db (commit)
      from  b5242328e5add998eaca2387943b914616bbba1d (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 08d9498ea5466d25c62c6e4192bfe1b74ab498db
Author: Regina Obe <lr at pcorp.us>
Date:   Sun Oct 16 17:08:22 2022 -0400

    Cleanup of cheatsheets and garden tests

diff --git a/doc/xsl/post_gis_day_cards.html.xsl b/doc/xsl/post_gis_day_cards.html.xsl
index 88efd8258..dc1350e4d 100644
--- a/doc/xsl/post_gis_day_cards.html.xsl
+++ b/doc/xsl/post_gis_day_cards.html.xsl
@@ -1,159 +1,159 @@
-<?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 PostGIS flash cards
-     ******************************************************************** -->
-	<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:template match="/">
-	<xsl:text><![CDATA[<html><head><title>Post GIS PostGIS Playing Cards</title>
-<style>body {
-	font-family: Arial, sans-serif;
-	font-size: 8.5pt;
-}
-		
-.func {position:relative;left:10px;top:20px;font-weight: 600;font-size:10pt;text-align:center; padding: 1px}
-.func_descrip {font-size: 8pt;text-align:left; padding:10px 5px 15px 20px;}
-#divoutter {width:800px; vertical-align: center }
-.card_front {
-	background-color: #eee;
-	width:334px; height: 148px;
-	float:left;border-bottom:thin dotted #ff0000;
-	border-left:thin dotted #ff0000;
-	border-top:thin dotted #ff0000;
-}
-
-.card_back {
-	background-color: #fff;
-	width:334px; height: 148px;
-	float:left; border-top:thin dotted #ff0000;
-	border-bottom:thin solid #ff0000;
-	border-right:thin dotted #ff0000;
-}
-.card_separator {height:9px;width:668px;clear:both;border-top:thin #00ff00}
-
-h1 {
-	margin: 0px;
-	padding: 0px;
-	font-size: 14pt;
-}
-
-</style>
-	</head><body><h1 style='text-align:center'>Post GIS ]]></xsl:text> <xsl:text><![CDATA[ Day 2012 Commemorative Playing Cards</h1>
-			<a href="http://creativecommons.org/licenses/by-sa/3.0/"><img src='images/ccbysa.png' /></a>   <a href="http://www.postgis.org">http://www.postgis.org</a>
-			<p>Celebrate this Post GIS day with these versatile Post GIS day commemorative playing cards. The number of games and fun-filled hours you
-			can have with these cards is priceless. Here is a small listing of the infinite number of games you can play with Post GIS cards:</p>
-			<ul><li><b>Name that thing</b> In this game you have the descriptions face up and have the opponent guess the name of the function, type, or operator.</li>
-				<li><b>What does it do?</b> In this game you have the name of the thing face up and have the opponent describe what the thing does or is for.  Your friends and even
-				strangers you tricked into playing this game will be amazed at your mastery of the 400 some-odd functions PostGIS provides. <em>To be able to exercise all 400 some-odd functions, you need to be running PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[+</em></li> 
-				<li><b>Post GIS war game</b> This game requires no knowledge of PostGIS what-so-ever. In this game, you play with the descriptions face up. Even your kids will like this game, and may learn how to use PostGIS better than you.
-					There are two joker cards -- the "What Is Post GIS?" and "What does Post GIS?".  Any player that is dealt either of these cards wins - period.  For other cards the order of precedence is: 
-						<sup>1</sup> - Is super and beats anything else except another <sup>1</sup> or joker card. In the event of multiple <sup>1</sup>, the one that happens alphabetically first trumps the others.  Symbols always trump letters. <br />
-						<sup>2</sup> - Second favorite, alphabetical rules apply (is beaten by a joker, <sup>1</sup>) <br />
-						<sup>mm</sup> - third highest ranking <br />
-						All other cards precedence by alphabetical order.</li>
-				<li><b>Post GIS in a language I don't understand</b> To celebrate the ubiquity of PostGIS, you can create Post GIS playing cards in a language
-					you don't understand.  Here is what you do.  Go to <a href="http://translate.google.com" target="_blank">http://translate.google.com</a> and paste in the URL to this page in the first text box (make sure it is set to English),
-					in the <b>To:</b> drop down, pick a language you do not know, but preferably you have friends that speak that language and can laugh at your grammar and pronounciation. In no time you'll be able to impress your friends living far far away with your command of their language.
-					<b><span style='color:red'>Warning: </span> because of the great number of functions PostGIS has to offer, Google (or any other translator) may refuse to translate all cards leaving you with a mix of some other language and English cards.</b>
-				</li>	
-				<li><b>Post GIS in a language I do understand</b> Similar to the I don't understand game, except you pick a non-english language that you do understand. Enjoy many moments of laughter reading machine generated translations that are sorta accurate but often comical.
-					</li>
-					<li><b>The Scotch and Milk moment, the beginning of all brilliant ideas</b> You realize there are 66 pages each of which has 6 cards. You realize you are a grown-up and grown-ups look silly cutting out cards from paper unless if accompanied by a minor.  You have a kid staring at you wondering why this day is so special.  <em>Eureka Moment</em>
-					Pour yourself a glass of scotch and the kid a glass of milk and whip out the old scissors, glue, and print outs. 
-					<b>Serving suggestion:</b> It might be a good idea to pour the Scotch in a clear glass so you don't hand out the wrong glass to the kids.
-					After the second helping, it might be prudent to stay away from the scissors.</li>
-					<li>Invent your own Post GIS card game.  The possiblities are only limited by your imagination.</li>
-				</ul>
-			<p style='page-break-before:always' />
-			<div id="divoutter"><div class='card_front'><div class='func'>WHAT IS POST GIS?</div></div><div class='card_back'><div class='func'>POSTGIS<br /><img src='images/PostGIS_logo.png' style='width:100px;height:100px' /></div></div>
-			<div class='card_separator'> </div>
-			<div class='card_front'><div class='func'>WHAT DOES POST GIS?</div></div><div class='card_back'><div class='func'>POSTGIS<br /><img src='images/PostGIS_logo.png' style='width:100px;height:100px'/></div></div>
-			<div class='card_separator'> </div>]]></xsl:text>
-			<xsl:apply-templates select="/book/chapter//refentry" />
-			<xsl:text><![CDATA[</div></body></html>]]></xsl:text>
-</xsl:template>
-			
-        
-<xsl:template match="refentry" >
-	<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
-	<xsl:variable name="gt"><xsl:text><![CDATA[>]]></xsl:text></xsl:variable>
-	 <xsl:variable name='plaindescr'>
-		<xsl:call-template name="globalReplace">
-			<xsl:with-param name="outputString" select="refnamediv/refpurpose"/>
-			<xsl:with-param name="target" select="$lt"/>
-			<xsl:with-param name="replacement" select="''"/>
-		</xsl:call-template>
-	</xsl:variable>
-	<xsl:variable name='plaindescr2'>
-		<xsl:call-template name="globalReplace">
-			<xsl:with-param name="outputString" select="$plaindescr"/>
-			<xsl:with-param name="target" select="$gt"/>
-			<xsl:with-param name="replacement" select="''"/>
-		</xsl:call-template>
-	</xsl:variable>
-	<!-- add row for each function and alternate colors of rows -->
-	<![CDATA[<div class="card_front"><div class='func'>]]><xsl:value-of select="refnamediv/refname" /><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>
-	
-	<![CDATA[</div></div><div class='card_back'><div class='func_descrip'>]]><xsl:value-of select="$plaindescr2" /><![CDATA[</div></div>
-	<div class="card_separator"> </div>]]>
-</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>
-
-
-</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 PostGIS flash cards
+     ******************************************************************** -->
+	<xsl:output method="text" />
+	<xsl:variable name='postgis_version'>3.2</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:template match="/">
+	<xsl:text><![CDATA[<html><head><title>Post GIS PostGIS Playing Cards</title>
+<style>body {
+	font-family: Arial, sans-serif;
+	font-size: 8.5pt;
+}
+
+.func {position:relative;left:10px;top:20px;font-weight: 600;font-size:10pt;text-align:center; padding: 1px}
+.func_descrip {font-size: 8pt;text-align:left; padding:10px 5px 15px 20px;}
+#divoutter {width:800px; vertical-align: center }
+.card_front {
+	background-color: #eee;
+	width:334px; height: 148px;
+	float:left;border-bottom:thin dotted #ff0000;
+	border-left:thin dotted #ff0000;
+	border-top:thin dotted #ff0000;
+}
+
+.card_back {
+	background-color: #fff;
+	width:334px; height: 148px;
+	float:left; border-top:thin dotted #ff0000;
+	border-bottom:thin solid #ff0000;
+	border-right:thin dotted #ff0000;
+}
+.card_separator {height:9px;width:668px;clear:both;border-top:thin #00ff00}
+
+h1 {
+	margin: 0px;
+	padding: 0px;
+	font-size: 14pt;
+}
+
+</style>
+	</head><body><h1 style='text-align:center'>Post GIS ]]></xsl:text> <xsl:text><![CDATA[ Day 2012 Commemorative Playing Cards</h1>
+			<a href="http://creativecommons.org/licenses/by-sa/3.0/"><img src='images/ccbysa.png' /></a>   <a href="http://www.postgis.org">http://www.postgis.org</a>
+			<p>Celebrate this Post GIS day with these versatile Post GIS day commemorative playing cards. The number of games and fun-filled hours you
+			can have with these cards is priceless. Here is a small listing of the infinite number of games you can play with Post GIS cards:</p>
+			<ul><li><b>Name that thing</b> In this game you have the descriptions face up and have the opponent guess the name of the function, type, or operator.</li>
+				<li><b>What does it do?</b> In this game you have the name of the thing face up and have the opponent describe what the thing does or is for.  Your friends and even
+				strangers you tricked into playing this game will be amazed at your mastery of the 400 some-odd functions PostGIS provides. <em>To be able to exercise all 400 some-odd functions, you need to be running PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /><xsl:text><![CDATA[+</em></li>
+				<li><b>Post GIS war game</b> This game requires no knowledge of PostGIS what-so-ever. In this game, you play with the descriptions face up. Even your kids will like this game, and may learn how to use PostGIS better than you.
+					There are two joker cards -- the "What Is Post GIS?" and "What does Post GIS?".  Any player that is dealt either of these cards wins - period.  For other cards the order of precedence is:
+						<sup>1</sup> - Is super and beats anything else except another <sup>1</sup> or joker card. In the event of multiple <sup>1</sup>, the one that happens alphabetically first trumps the others.  Symbols always trump letters. <br />
+						<sup>2</sup> - Second favorite, alphabetical rules apply (is beaten by a joker, <sup>1</sup>) <br />
+						<sup>mm</sup> - third highest ranking <br />
+						All other cards precedence by alphabetical order.</li>
+				<li><b>Post GIS in a language I don't understand</b> To celebrate the ubiquity of PostGIS, you can create Post GIS playing cards in a language
+					you don't understand.  Here is what you do.  Go to <a href="http://translate.google.com" target="_blank">http://translate.google.com</a> and paste in the URL to this page in the first text box (make sure it is set to English),
+					in the <b>To:</b> drop down, pick a language you do not know, but preferably you have friends that speak that language and can laugh at your grammar and pronounciation. In no time you'll be able to impress your friends living far far away with your command of their language.
+					<b><span style='color:red'>Warning: </span> because of the great number of functions PostGIS has to offer, Google (or any other translator) may refuse to translate all cards leaving you with a mix of some other language and English cards.</b>
+				</li>
+				<li><b>Post GIS in a language I do understand</b> Similar to the I don't understand game, except you pick a non-english language that you do understand. Enjoy many moments of laughter reading machine generated translations that are sorta accurate but often comical.
+					</li>
+					<li><b>The Scotch and Milk moment, the beginning of all brilliant ideas</b> You realize there are 66 pages each of which has 6 cards. You realize you are a grown-up and grown-ups look silly cutting out cards from paper unless if accompanied by a minor.  You have a kid staring at you wondering why this day is so special.  <em>Eureka Moment</em>
+					Pour yourself a glass of scotch and the kid a glass of milk and whip out the old scissors, glue, and print outs.
+					<b>Serving suggestion:</b> It might be a good idea to pour the Scotch in a clear glass so you don't hand out the wrong glass to the kids.
+					After the second helping, it might be prudent to stay away from the scissors.</li>
+					<li>Invent your own Post GIS card game.  The possiblities are only limited by your imagination.</li>
+				</ul>
+			<p style='page-break-before:always' />
+			<div id="divoutter"><div class='card_front'><div class='func'>WHAT IS POST GIS?</div></div><div class='card_back'><div class='func'>POSTGIS<br /><img src='images/PostGIS_logo.png' style='width:100px;height:100px' /></div></div>
+			<div class='card_separator'> </div>
+			<div class='card_front'><div class='func'>WHAT DOES POST GIS?</div></div><div class='card_back'><div class='func'>POSTGIS<br /><img src='images/PostGIS_logo.png' style='width:100px;height:100px'/></div></div>
+			<div class='card_separator'> </div>]]></xsl:text>
+			<xsl:apply-templates select="/book/chapter//refentry" />
+			<xsl:text><![CDATA[</div></body></html>]]></xsl:text>
+</xsl:template>
+
+
+<xsl:template match="refentry" >
+	<xsl:variable name="lt"><xsl:text><![CDATA[<]]></xsl:text></xsl:variable>
+	<xsl:variable name="gt"><xsl:text><![CDATA[>]]></xsl:text></xsl:variable>
+	 <xsl:variable name='plaindescr'>
+		<xsl:call-template name="globalReplace">
+			<xsl:with-param name="outputString" select="refnamediv/refpurpose"/>
+			<xsl:with-param name="target" select="$lt"/>
+			<xsl:with-param name="replacement" select="''"/>
+		</xsl:call-template>
+	</xsl:variable>
+	<xsl:variable name='plaindescr2'>
+		<xsl:call-template name="globalReplace">
+			<xsl:with-param name="outputString" select="$plaindescr"/>
+			<xsl:with-param name="target" select="$gt"/>
+			<xsl:with-param name="replacement" select="''"/>
+		</xsl:call-template>
+	</xsl:variable>
+	<!-- add row for each function and alternate colors of rows -->
+	<![CDATA[<div class="card_front"><div class='func'>]]><xsl:value-of select="refnamediv/refname" /><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>
+
+	<![CDATA[</div></div><div class='card_back'><div class='func_descrip'>]]><xsl:value-of select="$plaindescr2" /><![CDATA[</div></div>
+	<div class="card_separator"> </div>]]>
+</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>
+
+
+</xsl:stylesheet>
diff --git a/doc/xsl/postgis_cheatsheet.html.xsl b/doc/xsl/postgis_cheatsheet.html.xsl
index f3313420d..90f36ccde 100644
--- a/doc/xsl/postgis_cheatsheet.html.xsl
+++ b/doc/xsl/postgis_cheatsheet.html.xsl
@@ -8,12 +8,12 @@
 	 statements from postgis xml doc reference
      ******************************************************************** -->
 	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='postgis_version'>3.2</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:variable name='linkstub'>https://postgis.net/docs/manual-<xsl:value-of select="$postgis_version" />/</xsl:variable>
 <xsl:template match="/">
 	<xsl:text><![CDATA[<html><head><title>PostGIS Cheat Sheet</title>
 	<style type="text/css">
@@ -118,7 +118,7 @@ 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:text><![CDATA[<span class='notes'>New in this release <sup>1</sup> Enhanced in this release <sup>2</sup> Requires GEOS 3.9 or higher<sup>g3.9</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>
@@ -157,7 +157,7 @@ code {font-size: 8pt}
 		 		<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(.,'GEOS >= 3.9')"><![CDATA[<sup>g3.9</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">
diff --git a/doc/xsl/raster_cheatsheet.html.xsl b/doc/xsl/raster_cheatsheet.html.xsl
index 238a7e855..fee01b872 100644
--- a/doc/xsl/raster_cheatsheet.html.xsl
+++ b/doc/xsl/raster_cheatsheet.html.xsl
@@ -8,12 +8,12 @@
 	 statements from postgis xml doc reference
      ******************************************************************** -->
 	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='postgis_version'>3.2</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:variable name='linkstub'>https://postgis.net/docs/manual-<xsl:value-of select="$postgis_version" />/</xsl:variable>
 <xsl:template match="/">
 	<xsl:text><![CDATA[<html><head><title>PostGIS Raster Cheat Sheet</title>
 	<style type="text/css">
diff --git a/doc/xsl/sfcgal_cheatsheet.html.xsl b/doc/xsl/sfcgal_cheatsheet.html.xsl
index 99f06126a..e36678c9c 100644
--- a/doc/xsl/sfcgal_cheatsheet.html.xsl
+++ b/doc/xsl/sfcgal_cheatsheet.html.xsl
@@ -8,12 +8,12 @@
 	 statements from postgis xml doc reference
      ******************************************************************** -->
 	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='postgis_version'>3.2</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:variable name='linkstub'>http://postgis.net/docs/manual-<xsl:value-of select="$postgis_version" />/</xsl:variable>
 <xsl:template match="/">
 	<xsl:text><![CDATA[<html><head><title>PostGIS SFCGAL Cheat Sheet</title>
 	<style type="text/css">
diff --git a/doc/xsl/tiger_geocoder_cheatsheet.html.xsl b/doc/xsl/tiger_geocoder_cheatsheet.html.xsl
index cd5af55d4..ebe8fc36e 100644
--- a/doc/xsl/tiger_geocoder_cheatsheet.html.xsl
+++ b/doc/xsl/tiger_geocoder_cheatsheet.html.xsl
@@ -8,12 +8,12 @@
 	 statements from postgis xml doc reference
      ******************************************************************** -->
 	<xsl:output method="text" />
-	<xsl:variable name='postgis_version'>3.1</xsl:variable>
+	<xsl:variable name='postgis_version'>3.2</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:variable name='linkstub'>http://postgis.net/docs/manual-<xsl:value-of select="$postgis_version" />/</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">
diff --git a/doc/xsl/topology_cheatsheet.html.xsl b/doc/xsl/topology_cheatsheet.html.xsl
index 14c1b8f7f..322d7fe16 100644
--- a/doc/xsl/topology_cheatsheet.html.xsl
+++ b/doc/xsl/topology_cheatsheet.html.xsl
@@ -1,237 +1,237 @@
-<?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 Topology 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[ Topology 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>3.4</sup></span><div id="content_functions">]]></xsl:text>
-			<xsl:apply-templates select="/book/chapter[@id='Topology']" 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='Topology']/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">
-			<!--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>
-		 	<!--close section -->
-		 	<![CDATA[</table>]]>
-		</xsl:for-each>
-	</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="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.2</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-<xsl:value-of select="$postgis_version" />/</xsl:variable>
+<xsl:template match="/">
+	<xsl:text><![CDATA[<html><head><title>PostGIS Topology 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[ Topology 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>3.4</sup></span><div id="content_functions">]]></xsl:text>
+			<xsl:apply-templates select="/book/chapter[@id='Topology']" 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='Topology']/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">
+			<!--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>
+		 	<!--close section -->
+		 	<![CDATA[</table>]]>
+		</xsl:for-each>
+	</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="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/topology_gardentest.sql.xsl b/doc/xsl/topology_gardentest.sql.xsl
index 6ba890c28..72eb691a9 100644
--- a/doc/xsl/topology_gardentest.sql.xsl
+++ b/doc/xsl/topology_gardentest.sql.xsl
@@ -8,7 +8,7 @@
 			using a garden variety of geometries.  Its intent is to flag major crashes.
 	 ******************************************************************** -->
 	<xsl:output method="text" />
-	<xsl:variable name='testversion'>3.1.0</xsl:variable>
+	<xsl:variable name='testversion'>3.2.0</xsl:variable>
 	<xsl:variable name='fnexclude'>AddTopoGeometryColumn DropTopoGeometryColumn CreateTopology</xsl:variable>
 	<!--This is just a place holder to state functions not supported in 1.3 or tested separately -->
 
@@ -27,7 +27,7 @@
 	<xsl:variable name='var_spheroid'>'SPHEROID["GRS_1980",6378137,298.257222101]'</xsl:variable>
 	<xsl:variable name='var_matrix'>'FF1FF0102'</xsl:variable>
 	<xsl:variable name='var_boolean'>false</xsl:variable>
-	<xsl:variable name='var_logtable'>postgis_topology_garden_log31</xsl:variable>
+	<xsl:variable name='var_logtable'>postgis_topology_garden_log32</xsl:variable>
 	<xsl:variable name='var_logupdatesql'>UPDATE <xsl:value-of select="$var_logtable" /> SET log_end = clock_timestamp()
 		FROM (SELECT logid FROM <xsl:value-of select="$var_logtable" /> ORDER BY logid DESC limit 1) As foo
 		WHERE <xsl:value-of select="$var_logtable" />.logid = foo.logid  AND <xsl:value-of select="$var_logtable" />.log_end IS NULL;</xsl:variable>

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

Summary of changes:
 doc/xsl/post_gis_day_cards.html.xsl        | 318 +++++++++----------
 doc/xsl/postgis_cheatsheet.html.xsl        |   8 +-
 doc/xsl/raster_cheatsheet.html.xsl         |   4 +-
 doc/xsl/sfcgal_cheatsheet.html.xsl         |   4 +-
 doc/xsl/tiger_geocoder_cheatsheet.html.xsl |   4 +-
 doc/xsl/topology_cheatsheet.html.xsl       | 474 ++++++++++++++---------------
 doc/xsl/topology_gardentest.sql.xsl        |   4 +-
 7 files changed, 408 insertions(+), 408 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list