]> granicus.if.org Git - docbook-dsssl/commitdiff
Deal with case of verbatim environments that have a linebreak
authorMichael Smith <xmldoc@users.sourceforge.net>
Tue, 4 Mar 2008 04:20:37 +0000 (04:20 +0000)
committerMichael Smith <xmldoc@users.sourceforge.net>
Tue, 4 Mar 2008 04:20:37 +0000 (04:20 +0000)
after the opening tag. Assumption is that users generally don't
want that linebreak to appear in output, so we do some groff
hackery to mess with vertical spacing and close the space.

xsl/manpages/block.xsl
xsl/manpages/other.xsl

index 4d4b32a492ad7307c78e6349002cc649d3ebc069..0dd46f206c78ed22f7584891391658362f344fe5 100644 (file)
     </xsl:if>
   </xsl:param>
 
+  <!-- * if this verbatim environment starts with a newline/linebreak -->
+  <!-- * (that is, if there is a linebreak after the opening tag), that -->
+  <!-- * break would otherwise show up in output; that does not seem to -->
+  <!-- * be what most users would expect, so we check to see if it does -->
+  <!-- * indeed start with a leading newline. if so, later in this -->
+  <!-- * template, we adjust for the leading new line by doing some -->
+  <!-- * monkeyshines with "sp -1" vertical spacing -->
+  <xsl:variable name="adjust-for-leading-newline">
+    <xsl:if test="substring(., 1, 1) = '&#10;'">Yes</xsl:if>
+  </xsl:variable>
+
   <xsl:choose>
     <!-- * Check to see if this verbatim item is within a parent element that -->
     <!-- * allows mixed content. -->
         <xsl:when test="self::literallayout|self::programlisting|self::screen">
           <!-- * if this is a literallayout|programlisting|screen, then we -->
           <!-- * put a background behind it in non-TTY output -->
-          <xsl:text>.BB lightgray&#10;</xsl:text>
+          <xsl:choose>
+            <!-- * if content has a leading newline, we need to back up -->
+            <!-- * one line vertically to get it boxed correctly -->
+            <xsl:when test="not($adjust-for-leading-newline = '')">
+              <xsl:call-template name="roff-if-start">
+                <xsl:with-param name="condition">t</xsl:with-param>
+              </xsl:call-template>
+              <xsl:text>.sp -1&#10;</xsl:text>
+              <xsl:call-template name="roff-if-end"/>
+              <xsl:text>.BB lightgray</xsl:text>
+              <xsl:text> </xsl:text>
+              <xsl:text>adjust-for-leading-newline&#10;</xsl:text>
+              <!-- * in non-TTY output, for the case where we have a -->
+              <!-- * leading newline, we need to also back up one line -->
+              <!-- * vertically inside the background box -->
+              <xsl:text>.sp -1&#10;</xsl:text>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text>.BB lightgray&#10;</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
           <xsl:apply-templates/>
           <xsl:text>&#10;</xsl:text>
-          <xsl:text>.EB lightgray&#10;</xsl:text>
+          <xsl:choose>
+            <xsl:when test="not($adjust-for-leading-newline = '')">
+              <xsl:text>.EB lightgray</xsl:text>
+              <xsl:text> </xsl:text>
+              <xsl:text>adjust-for-leading-newline&#10;</xsl:text>
+              <xsl:call-template name="roff-if-start">
+                <xsl:with-param name="condition">t</xsl:with-param>
+              </xsl:call-template>
+              <!-- * in non-TTY output, for the case where we have a -->
+              <!-- * leading newline, we need to add back at the end of -->
+              <!-- * the content some of the vertical space we chopped -->
+              <!-- * off at the beginning -->
+              <xsl:text>.sp 1&#10;</xsl:text>
+              <xsl:call-template name="roff-if-end"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text>.EB lightgray&#10;</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
         </xsl:when>
         <xsl:otherwise>
           <!-- * otherwise this is not a literallayout|programlisting|screen, -->
index 7c9ce2f374cdebe4e4244cfa6e472bd6a323ff99..9572df3df2b262eb1f5d81ad5690d9cd0e32ebcd 100644 (file)
@@ -802,6 +802,9 @@ db:manvolnum
 ..
 .de EB
 .if t \{\
+.if "\\$2"adjust-for-leading-newline" \{\
+.sp -1
+.\}
 .br
 .di
 .in
@@ -810,7 +813,12 @@ db:manvolnum
 .nr BW \\n(.lu-\\n(.i
 .nr BH \\n(dn+.5v
 .ne \\n(BHu+.5v
+.ie "\\$2"adjust-for-leading-newline" \{\
+\M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[]
+.\}
+.el \{\
 \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[]
+.\}
 .in 0
 .sp -.5v
 .nf