]> granicus.if.org Git - docbook-dsssl/commitdiff
Added support for Segmentedlist.
authorMichael Smith <xmldoc@users.sourceforge.net>
Fri, 10 Mar 2006 08:04:15 +0000 (08:04 +0000)
committerMichael Smith <xmldoc@users.sourceforge.net>
Fri, 10 Mar 2006 08:04:15 +0000 (08:04 +0000)
Details: Output is tabular, with no option for "list" type output.
Output for Segtitle elements can be supressed by setting
man.segtitle.suppress. If Segtitle content is output, it is
rendered in italic type (not bold because not all terminals
support bold and so italic ensures the stand out on those
terminals). Extra space (.sp line) at end of table code ensures
that it gets handled correctly in the case where its source is the
child of a Para.  Closes feature-request #1400097. Thanks to
Daniel Leidert for the patch and push, and to Alastair Rankine for
filing the original feature request.

xsl/manpages/lists.xsl
xsl/manpages/utility.xsl

index 7a69456dc15ff157b244444b93144949cc9f636c..d13cbc36e2d1a34a4f9422bab4bb35ea2a7a15e2 100644 (file)
@@ -11,6 +11,8 @@
      copyright and other information.
 
      ******************************************************************** -->
+<!-- * FIXME: need to document the following parameter -->
+<xsl:param name="man.segtitle.suppress">0</xsl:param>
 
 <xsl:template match="para[ancestor::listitem or ancestor::step or ancestor::glossdef]|
                     simpara[ancestor::listitem or ancestor::step or ancestor::glossdef]|
   </xsl:for-each>
 </xsl:template>
 
+<!-- ================================================================== -->
+
+<!-- * We output Segmentedlist as a table, using tbl(1) markup. There -->
+<!-- * is no option for outputting it in manpages in "list" form. -->
+<xsl:template match="segmentedlist">
+  <xsl:if test="title">
+    <xsl:text>.PP&#10;</xsl:text>
+    <xsl:apply-templates mode="bold" select="title"/>
+    <xsl:text>&#10;</xsl:text>
+  </xsl:if>
+  <!-- * .TS = "Table Start" -->
+  <xsl:text>.TS&#10;</xsl:text>
+    <!-- * first output the table "format" spec, which tells tbl(1) how -->
+    <!-- * how to format each row and column. -->
+  <xsl:for-each select=".//segtitle">
+    <!-- * l = "left", which hard-codes left-alignment for tabular -->
+    <!-- * output of all segmentedlist content -->
+    <xsl:text>l</xsl:text>
+  </xsl:for-each>
+  <xsl:text>.&#10;</xsl:text>
+  <!-- * optionally suppress output of segtitle -->
+  <xsl:choose>
+    <xsl:when test="$man.segtitle.suppress != 0">
+      <!-- * non-zero = "suppress", so do nothing -->
+    </xsl:when>
+    <xsl:otherwise>
+      <!-- * "0" = "do not suppress", so output the segtitle(s) -->
+      <xsl:apply-templates select=".//segtitle" mode="table-title"/>
+      <xsl:text>&#10;</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:apply-templates/>
+  <!-- * .TE = "Table End" -->
+  <xsl:text>.TE&#10;</xsl:text>
+  <!-- * put a blank line of space below the table -->
+  <xsl:text>.sp&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="segmentedlist/segtitle" mode="table-title">
+  <!-- * italic makes titles stand out more reliably than bold (because -->
+  <!-- * some consoles do not actually support rendering of bold -->
+  <xsl:apply-templates mode="italic" select="."/>
+  <xsl:choose>
+      <xsl:when test="position() = last()"/> <!-- do nothing -->
+      <xsl:otherwise>
+        <!-- * tbl(1) treats tab characters as delimiters between -->
+        <!-- * cells; so we need to output a tab after each except -->
+        <!-- * segtitle except the last one -->
+        <xsl:text>&#09;</xsl:text>
+      </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="segmentedlist/seglistitem">
+  <xsl:apply-templates/>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="segmentedlist/seglistitem/seg">
+  <!-- * the “T{" and “T}” stuff are delimiters to tell tbl(1) that -->
+  <!-- * the delimited contents are "text blocks" that groff(1) -->
+  <!-- * needs to process -->
+  <xsl:text>T{&#10;</xsl:text>
+  <!-- * trim any leading and trailing whitespace from cell contents -->
+  <xsl:call-template name="trim.text">
+    <xsl:with-param name="contents" select="."/>
+  </xsl:call-template>
+  <xsl:text>&#10;T}</xsl:text>
+  <xsl:choose>
+    <xsl:when test="position() = last()"/> <!-- do nothing -->
+    <xsl:otherwise>
+      <!-- * tbl(1) treats tab characters as delimiters between -->
+      <!-- * cells; so we need to output a tab after each except -->
+      <!-- * segtitle except the last one -->
+      <xsl:text>&#09;</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
 </xsl:stylesheet>
index 9b0a9144c27151635c9c48701dcd5dc3ae62fed5..f214f9a39bac6f06c4ec8d7dbf183da545b61793 100644 (file)
         <xsl:when test="(self::itemizedlist|self::orderedlist|
                         self::variablelist|self::glosslist|
                         self::simplelist[@type !='inline']|
+                        self::segmentedlist|
                         self::caution|self::important|
                         self::note|self::tip|self::warning)">
           <xsl:apply-templates select="."/>
                     self::glosslistlist or
                     self::itemizedlist or
                     self::orderededlist or
+                    self::segmentedlist or
                     self::procedure or
                     self::address or
                     self::literallayout or