techtonik               Mon Nov  1 11:33:48 2004 EDT

  Modified files:              
    /phpdoc/xsl common.xsl 
  Log:
  more advanced newline strip template for programlistings
  what preserves first line indentation
  
http://cvs.php.net/diff.php/phpdoc/xsl/common.xsl?r1=1.13&r2=1.14&ty=u
Index: phpdoc/xsl/common.xsl
diff -u phpdoc/xsl/common.xsl:1.13 phpdoc/xsl/common.xsl:1.14
--- phpdoc/xsl/common.xsl:1.13  Mon Nov  1 07:16:55 2004
+++ phpdoc/xsl/common.xsl       Mon Nov  1 11:33:47 2004
@@ -1,196 +1,248 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- 
-
-  common.xsl: Common customizations for all formats
-
-  $Id: common.xsl,v 1.13 2004/11/01 12:16:55 techtonik Exp $
-
--->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
-                version="1.0">
-
-
-<!-- Colorize background for programlisting and screens
-     will go into CSS probably in next DocBook version --> 
-<xsl:param name="shade.verbatim" select="1"/>
-
-
-<!-- *************** TUNE FUNCTION REFERENCE PAGES **************** -->
-<!-- Generate title from function name instead of word "NAME" in title -->
-<xsl:param name="refentry.generate.name" select="'0'"/>
-<xsl:param name="refentry.generate.title" select="'1'"/>
-
-<!-- Turn off separators on reference and refentry pages -->
-<xsl:param name="refentry.separator" select="'0'"/>
-<xsl:template name="reference.titlepage.separator"/>
-<!-- FIX: temporary till also this is in std.-distrib. -->
-<xsl:template match="reference/titleabbrev"/>
-
-
-<!-- Load VERSION INFORMATION into variable -->
-<xsl:param name="version" select="document('version.xml')/versions"/>
-
-
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- 
+
+  common.xsl: Common customizations for all HTML formats
+
+  $Id: common.xsl,v 1.14 2004/11/01 16:33:47 techtonik Exp $
+
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+                version="1.0">
+
+
+<!-- Colorize background for programlisting and screens
+     will go into CSS probably in next DocBook version --> 
+<xsl:param name="shade.verbatim" select="1"/>
+
+
+
+<!-- *************** TUNE FUNCTION REFERENCE PAGES **************** -->
+<!-- Generate title from function name instead of word "NAME" in title -->
+<xsl:param name="refentry.generate.name" select="'0'"/>
+<xsl:param name="refentry.generate.title" select="'1'"/>
+
+<!-- Turn off separators on reference and refentry pages -->
+<xsl:param name="refentry.separator" select="'0'"/>
+<xsl:template name="reference.titlepage.separator"/>
+<!-- FIX: temporary till also this is in std.-distrib. -->
+<xsl:template match="reference/titleabbrev"/>
+
+
+<!-- Load VERSION INFORMATION into variable -->
+<xsl:param name="version" select="document('version.xml')/versions"/>
+
+
 <!-- We do not want semicolon at the end of prototype and our own style
      of square brackets for optional parameters -->
-<xsl:template match="methodsynopsis">
-  <xsl:apply-templates />
-</xsl:template>
-
-<xsl:template match="methodsynopsis/type">
-  <xsl:apply-templates />
-  <xsl:text> </xsl:text>
-</xsl:template>
-
-<xsl:template match="methodsynopsis/void">
+<xsl:template match="methodsynopsis">
+  <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template match="methodsynopsis/type">
+  <xsl:apply-templates />
+  <xsl:text> </xsl:text>
+</xsl:template>
+
+<xsl:template match="methodsynopsis/void">
   <xsl:text> (void)</xsl:text>
-</xsl:template>
-
-<xsl:template match="methodparam/type">
-  <xsl:apply-templates />
-  <xsl:text> </xsl:text>
-</xsl:template>
-
-<xsl:template match="methodparam/parameter">
-  <xsl:apply-templates />
-</xsl:template>
-
-<xsl:template match="methodparam">
-  <xsl:if test="preceding-sibling::methodparam=false()">
-    <xsl:text> (</xsl:text>
-    <xsl:if test="@choice='opt'">
-      <xsl:text>[</xsl:text>
-    </xsl:if>
-  </xsl:if>
-  <xsl:apply-templates />
-  <xsl:choose>
-    <xsl:when test="following-sibling::methodparam">
-      <xsl:choose>
-        <xsl:when 
test="following-sibling::methodparam[position()=1]/attribute::choice[.='opt']">
-          <xsl:text> [, </xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>, </xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:when>
-    <xsl:otherwise>
+</xsl:template>
+
+<xsl:template match="methodparam/type">
+  <xsl:apply-templates />
+  <xsl:text> </xsl:text>
+</xsl:template>
+
+<xsl:template match="methodparam/parameter">
+  <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template match="methodparam">
+  <xsl:if test="preceding-sibling::methodparam=false()">
+    <xsl:text> (</xsl:text>
+    <xsl:if test="@choice='opt'">
+      <xsl:text>[</xsl:text>
+    </xsl:if>
+  </xsl:if>
+  <xsl:apply-templates />
+  <xsl:choose>
+    <xsl:when test="following-sibling::methodparam">
+      <xsl:choose>
+        <xsl:when 
test="following-sibling::methodparam[position()=1]/attribute::choice[.='opt']">
+          <xsl:text> [, </xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>, </xsl:text>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:when>
+    <xsl:otherwise>
       <xsl:for-each select="preceding-sibling::methodparam">
                                <xsl:if test="attribute::choice[.='opt']">
                                        <xsl:text>]</xsl:text>
                                </xsl:if>
-      </xsl:for-each>
-      <xsl:if test="self::methodparam/attribute::choice[.='opt']">
-        <xsl:text>]</xsl:text>
-      </xsl:if>
-      <xsl:text>)</xsl:text>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-
-<!-- Remove whitespace before and after the contents of
-     programlisting and screen tags used for PHP code and
-     output examples
-     
-     Thanks to Peter Kullman for the initial version of this code
--->
-<xsl:template match="screen/text()|programlisting/text()">
- <xsl:variable name="before" select="preceding-sibling::node()"/>
- <xsl:variable name="after" select="following-sibling::node()"/>
-
- <xsl:variable name="conts" select="."/>
-
- <xsl:variable name="contsl">
-  <xsl:choose>
-   <xsl:when test="count($before) = 0">
-    <xsl:call-template name="remove-ws-left">
-     <xsl:with-param name="astr" select="$conts"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$conts"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="contslr">
-  <xsl:choose>
-   <xsl:when test="count($after) = 0">
-    <xsl:call-template name="remove-ws-right">
-     <xsl:with-param name="astr" select="$contsl"/>
-    </xsl:call-template>
-   </xsl:when>
-   <xsl:otherwise>
-    <xsl:value-of select="$contsl"/>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:variable>
-
- <xsl:value-of select="$contslr"/>
-
-</xsl:template>
-
-<!-- Remove whitespace from the left of a string -->
-<xsl:template name="remove-ws-left">
- <xsl:param name="astr"/>
-
- <xsl:choose>
-  <xsl:when test="starts-with($astr,'&#xA;') or
-                  starts-with($astr,'&#xD;') or
-                  starts-with($astr,'&#x20;') or
-                  starts-with($astr,'&#x9;')">
-   <xsl:call-template name="remove-ws-left">
-    <xsl:with-param name="astr" select="substring($astr, 2)"/>
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$astr"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- Remove whitespace from the right of a string -->
-<xsl:template name="remove-ws-right">
- <xsl:param name="astr"/>
-
- <xsl:variable name="last-char">
-  <xsl:value-of select="substring($astr, string-length($astr), 1)"/>
- </xsl:variable>
-
- <xsl:choose>
-  <xsl:when test="($last-char = '&#xA;') or
-                  ($last-char = '&#xD;') or
-                  ($last-char = '&#x20;') or
-                  ($last-char = '&#x9;')">
-   <xsl:call-template name="remove-ws-right">
-    <xsl:with-param name="astr"
-     select="substring($astr, 1, string-length($astr) - 1)"/>
-   </xsl:call-template>
-  </xsl:when>
-  <xsl:otherwise>
-   <xsl:value-of select="$astr"/>
-  </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-
-<!-- *************** FOR TRANSLATORS LIST **************** -->
-<xsl:template match="collab" mode="titlepage.mode">
-  <xsl:choose>
-    <xsl:when test="position()=last()">
-      <xsl:apply-templates/>
-    </xsl:when>
-    <xsl:when test="position() &gt; 1">
-      <xsl:apply-templates/><xsl:text>, </xsl:text>
-    </xsl:when>
-    <xsl:otherwise></xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<xsl:template match="collabname">
-  <xsl:apply-templates/>
-</xsl:template>
-
-</xsl:stylesheet>
+      </xsl:for-each>
+      <xsl:if test="self::methodparam/attribute::choice[.='opt']">
+        <xsl:text>]</xsl:text>
+      </xsl:if>
+      <xsl:text>)</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+
+<!-- *************** TUNE PROGRAMLISTING DISPLAY **************** -->
+<!-- This is the same as in DocBook XSL verbatim.xsl, except
+     that we preserve the role in programlisting and the like -->
+<xsl:template match="programlisting|screen|synopsis">
+  <xsl:param name="suppress-numbers" select="'0'"/>
+  <xsl:variable name="id">
+    <xsl:call-template name="object.id"/>
+  </xsl:variable>
+
+  <xsl:call-template name="anchor"/>
+
+  <xsl:variable name="preclass">
+    <xsl:choose>
+      <xsl:when test="./@role">
+        <xsl:value-of select="./@role"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="name(.)"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:variable name="content">
+    <xsl:choose>
+      <xsl:when test="$suppress-numbers = '0'
+                      and @linenumbering = 'numbered'
+                      and $use.extensions != '0'
+                      and $linenumbering.extension != '0'">
+        <xsl:variable name="rtf">
+          <xsl:apply-templates/>
+        </xsl:variable>
+        <pre class="{$preclass}">
+          <xsl:call-template name="number.rtf.lines">
+            <xsl:with-param name="rtf" select="$rtf"/>
+          </xsl:call-template>
+        </pre>
+      </xsl:when>
+      <xsl:otherwise>
+        <pre class="{$preclass}">
+          <xsl:apply-templates/>
+        </pre>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+
+  <xsl:choose>
+    <xsl:when test="$shade.verbatim != 0">
+      <table xsl:use-attribute-sets="shade.verbatim.style">
+        <tr>
+          <td>
+            <xsl:copy-of select="$content"/>
+          </td>
+        </tr>
+      </table>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:copy-of select="$content"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<!-- Strip newlines before and after the contents of program listing and
+     and screen tags used for PHP code and output examples preserve
+     identation of the first line.
+     
+     Initial version by techtonik =p
+     Thanks to Peter Kullman for an idea
+-->
+<xsl:template match="screen/text()|programlisting/text()">
+ <xsl:variable name="before" select="count(preceding-sibling::*)"/>
+ <xsl:variable name="after" select="count(following-sibling::*)"/>
+
+ <xsl:choose>
+  <xsl:when test="$before = 0 and $after = 0">
+   <xsl:call-template name="trim_newlines"/>
+  </xsl:when>
+  <xsl:when test="$before = 0">
+   <xsl:call-template name="trim_newlines">
+    <xsl:with-param name="lttrim" select="true()"/>
+   </xsl:call-template>
+  </xsl:when>
+  <xsl:when test="$after = 0">
+   <xsl:call-template name="trim_newlines">
+    <xsl:with-param name="rttrim" select="true()"/>
+   </xsl:call-template>
+  </xsl:when>
+  <xsl:otherwise>
+   <xsl:value-of select="."/>
+  </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="trim_newlines">
+  <xsl:param name="string" select="."/>
+  <xsl:param name="lttrim" select="false()"/>
+  <xsl:param name="rttrim" select="false()"/> <!-- looking for endstring -->
+
+  <xsl:variable name="nl" select="'&#xA;'" />
+
+  <xsl:choose>
+    <xsl:when test="normalize-space($string) and contains($string,$nl)"><!-- prevent 
endless cycle on empty blocks -->
+      <xsl:variable name="beforenl" select="substring-before($string,$nl)" />
+      <xsl:variable name="afternl" select="substring-after($string,$nl)" />
+      <xsl:variable name="nextnl" 
select="normalize-space(substring-before($afternl,$nl))" />
+      <xsl:choose>
+        <xsl:when test="not($rttrim) and string-length(normalize-space($beforenl)) = 
0">
+          <xsl:call-template name="trim_newlines">
+            <xsl:with-param name="string" select="$afternl" />
+            <xsl:with-param name="lttrim" select="$lttrim" />
+            <xsl:with-param name="rttrim" select="$rttrim or $nextnl" />
+          </xsl:call-template>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:copy-of select="concat($beforenl,$nl)"/>
+          <xsl:if test="$lttrim">
+            <xsl:copy-of select="$afternl"/>
+          </xsl:if>
+          <xsl:if test="not($lttrim)">
+            <xsl:call-template name="trim_newlines">
+              <xsl:with-param name="string" select="$afternl" />
+              <xsl:with-param name="rttrim" select="true()" />
+            </xsl:call-template>
+          </xsl:if>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:if test="normalize-space($string)">
+        <xsl:copy-of select="$string"/>
+      </xsl:if>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+
+<!-- *************** FOR TRANSLATORS LIST **************** -->
+<xsl:template match="collab" mode="titlepage.mode">
+  <xsl:choose>
+    <xsl:when test="position()=last()">
+      <xsl:apply-templates/>
+    </xsl:when>
+    <xsl:when test="position() &gt; 1">
+      <xsl:apply-templates/><xsl:text>, </xsl:text>
+    </xsl:when>
+    <xsl:otherwise></xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="collabname">
+  <xsl:apply-templates/>
+</xsl:template>
+
+</xsl:stylesheet>

Reply via email to