morerows & ltxtable
Nikolai Prokoschenko <[email protected]> Mon, 24 Jan 2005 22:18:33 +0100
| Newsgroups | gmane.text.docbook.db2latex.devel |
|---|---|
| Message-ID | <[email protected]> |
--BOKacYhQ+x31HxR3 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Hello, James, Ramon and whoever reads this on the list! Let me introduce myself to you. My name is Nikolai Prokoschenko. I'm a 22-year-old computer science student from Germany, coming in the ex-USSR. I have been doing some translation work for the Debian Installer project and currently became involved into building a better manual - on the technical side of the process, because I did not like the looks of its russian translation. Here comes DB2LaTeX, which I've chosen to do the work on the manual, as Debian needs truly free software to rely on - thus XSL:FO and FOP have never been an option. However, I've noticed that the morerows option in tables has not been supported, so I decided to implement that myself to have good looking manuals ;) I'm a complete novice to XSLT, however I've managed to accomplish this task! On the way, I've implemented LTXtable support, so this one can now also be used. I'm attaching my current patch to this mail. WARNING: it's not production-ready! I've made it work, but it can fail without any particular reason, no guarantees etc., you know the game. It's also missing consistent naming, good algorithm, documentation and possible interferes with other things. Please test it and tell me what you think. I'd pleased if this patch would make it upstream. I'd also like to know, where DB2LaTeX is heading right now. The project seems kind of stalled -- is there any plan, todo-list or something like it? Thank you and I hope I can help the project to some extent. It would be a shame if it would die, as documentation under linux would then become a real mess, even worse than it is now. PS. James and Ramon, sorry for CC:ing you, but I hope I can reach you this way, don't know if you're still subscribed to the list. -- Nikolai Prokoschenko [email protected] / Jabber: [email protected] --BOKacYhQ+x31HxR3 Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="db2latex-xsl.diff" Content-Transfer-Encoding: quoted-printable =D0=9E=D0=B1=D1=89=D0=B8=D0=B5 =D0=BF=D0=BE=D0=B4=D0=BA=D0=B0=D1=82=D0=B0= =D0=BB=D0=BE=D0=B3=D0=B8: /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl= /common =D0=B8 db2latex/common =D0=9E=D0=B1=D1=89=D0=B8=D0=B5 =D0=BF=D0=BE=D0=B4=D0=BA=D0=B0=D1=82=D0=B0= =D0=BB=D0=BE=D0=B3=D0=B8: /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl= /figures =D0=B8 db2latex/figures diff -u /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/latex.mapping.xml= db2latex/latex.mapping.xml --- /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/latex.mapping.xml 200= 4-08-12 10:12:33 +0200 +++ db2latex/latex.mapping.xml 2005-01-24 21:44:02 +0100 @@ -143,7 +143,7 @@ <mapping key=3D"informaltable" text=3D""> <line> </line> <line>% tabular ---------------------------------------------------= --- </line> - <line>\begin{center} </line> +<!-- <line>\begin{center} </line> --> <line>\label{%id%}\hypertarget{%id%}{}% </line> </mapping> =20 @@ -430,7 +430,7 @@ </mapping> =20 <mapping key=3D"informaltable" text=3D""> - <line>\end{center} </line> +<!-- <line>\end{center} </line> --> <line> </line> </mapping>=09 =20 =D0=9E=D0=B1=D1=89=D0=B8=D0=B5 =D0=BF=D0=BE=D0=B4=D0=BA=D0=B0=D1=82=D0=B0= =D0=BB=D0=BE=D0=B3=D0=B8: /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl= /mathml =D0=B8 db2latex/mathml diff -u /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/param-direct.mod.= xsl db2latex/param-direct.mod.xsl --- /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/param-direct.mod.xsl = 2004-08-12 10:12:34 +0200 +++ db2latex/param-direct.mod.xsl 2005-01-08 19:46:48 +0100 @@ -169,16 +169,32 @@ <para> Undocumented. </para> </doc:description> </doc:template> + <xsl:template name=3D"latex.thead.row.entry"> <xsl:apply-templates/> </xsl:template> =20 + + <doc:template xmlns=3D""> + <refpurpose> Format the output of tabular row entries. </refpurpose> + <doc:description> + <para> Undocumented. </para> + </doc:description> + </doc:template> + + <xsl:template name=3D"latex.tbody.row.entry"> + <xsl:apply-templates/> + </xsl:template> + + + <doc:template xmlns=3D""> <refpurpose> Format the output of tabular footers. </refpurpose> <doc:description> <para> Undocumented. </para> </doc:description> </doc:template> +=09 <xsl:template name=3D"latex.tfoot.row.entry"> <xsl:apply-templates/> </xsl:template> diff -u /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/preamble.mod.xsl = db2latex/preamble.mod.xsl --- /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/preamble.mod.xsl 2004= -01-31 13:45:13 +0100 +++ db2latex/preamble.mod.xsl 2005-01-24 14:17:47 +0100 @@ -523,7 +523,7 @@ <xsl:text>% ---------------------- </xsl:text> <xsl:text>% Most Common Packages </xsl:text> <xsl:text>% ---------------------- </xsl:text> - <xsl:if test=3D"$latex.use.varioref=3D1"> + <xsl:if test=3D"$latex.use.varioref=3D'1'"> <xsl:text>\usepackage[</xsl:text> <xsl:value-of select=3D"$latex.varioref.options"/> <xsl:text>]{varioref} </xsl:text> @@ -555,6 +555,9 @@ <xsl:text>\usepackage{fancybox} </xsl:text> </xsl:if> <xsl:text>\usepackage{float} </xsl:text> + <xsl:text>\usepackage{moreverb} </xsl:text> + <xsl:text>\usepackage{multirow} </xsl:text> + <xsl:text>\usepackage{bigstrut} </xsl:text> <xsl:text>\usepackage{ragged2e} </xsl:text> <xsl:if test=3D"$latex.use.fancyvrb=3D1"> <!-- must be after \usepackage{fancybox} --> @@ -588,7 +591,8 @@ <xsl:if test=3D"$latex.use.rotating=3D1"><xsl:text>\usepackage{rotatin= g} </xsl:text></xsl:if> <xsl:if test=3D"$latex.use.subfigure=3D1"><xsl:text>\usepackage{subfig= ure} </xsl:text></xsl:if> <xsl:if test=3D"$latex.use.tabularx=3D1"><xsl:text>\usepackage{tabular= x} </xsl:text></xsl:if> - <xsl:if test=3D"$latex.use.ltxtable=3D1 or $latex.use.longtable=3D1"><= xsl:text>\usepackage{longtable} </xsl:text></xsl:if> + <xsl:if test=3D"$latex.use.longtable=3D1"><xsl:text>\usepackage{longta= ble} </xsl:text></xsl:if> + <xsl:if test=3D"$latex.use.ltxtable=3D1"><xsl:text>\usepackage{ltxtabl= e} </xsl:text></xsl:if> <xsl:if test=3D"$latex.use.umoline=3D1"><xsl:text>\usepackage{umoline}= </xsl:text></xsl:if> <xsl:if test=3D"$latex.use.url=3D1"><xsl:text>\usepackage{url} = </xsl:text></xsl:if> <xsl:if test=3D"$latex.math.support=3D1"><xsl:value-of select=3D"$late= x.math.preamble"/></xsl:if> =D0=9E=D0=B1=D1=89=D0=B8=D0=B5 =D0=BF=D0=BE=D0=B4=D0=BA=D0=B0=D1=82=D0=B0= =D0=BB=D0=BE=D0=B3=D0=B8: /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl= /slides =D0=B8 db2latex/slides =D0=A2=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE =D0=B2 db2latex/: .svn diff -u /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/table.mod.xsl db2= latex/table.mod.xsl --- /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/table.mod.xsl 2004-12= -05 13:45:06 +0100 +++ db2latex/table.mod.xsl 2005-01-24 17:40:53 +0100 @@ -629,9 +629,10 @@ </xsl:when> <xsl:when test=3D"$latex.use.ltxtable=3D'1'"> <xsl:if test=3D"parent::informaltable"> - <xsl:text>\addtocounter{table}{-1}</xsl:text> + <xsl:text>\addtocounter{table}{-1} </xsl:text> </xsl:if> - <xsl:text>\begin{longtable}</xsl:text> + <xsl:text>\begin{verbatimwrite}{table.temp} </xsl:text> + <xsl:text>\begin{longtable} </xsl:text> </xsl:when> <xsl:otherwise> <xsl:if test=3D"$useminipage=3D'1'"><xsl:text>\begin{minipage}{\line= width} </xsl:text></xsl:if> @@ -639,6 +640,7 @@ </xsl:otherwise> </xsl:choose> <xsl:choose> + <xsl:when test=3D"$latex.use.ltxtable=3D'1'" /> <xsl:when test=3D"$width!=3D''"> <xsl:text>{</xsl:text> <xsl:value-of select=3D"$width"/> @@ -666,7 +668,7 @@ </xsl:choose> </xsl:variable> <xsl:choose> - <xsl:when test=3D"$usex=3D1"> + <xsl:when test=3D"$usex=3D1 or $latex.use.ltxtable=3D1"> <xsl:call-template name=3D"table.format.tabularx"> <xsl:with-param name=3D"cols" select=3D"$cols"/> <xsl:with-param name=3D"colsep" select=3D"$colsep"/> @@ -740,10 +742,10 @@ <xsl:apply-templates select=3D"tfoot"> <xsl:with-param name=3D"frame" select=3D"$tfoot.frame"/> </xsl:apply-templates> + <xsl:apply-templates select=3D"tbody"/> <xsl:if test=3D"$tfoot.frame=3D1 and not(tfoot)"> <xsl:text>\hline </xsl:text> </xsl:if> - <xsl:apply-templates select=3D"tbody"/> </xsl:when> <xsl:otherwise> <xsl:if test=3D"$thead.frame=3D1 and not(thead)"> @@ -771,6 +773,9 @@ </xsl:otherwise> </xsl:choose> <xsl:apply-templates select=3D"tbody"/> + <xsl:if test=3D"$tfoot.frame=3D1 and not(tfoot)"> + <xsl:text>\hline </xsl:text> + </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:when> @@ -786,7 +791,7 @@ <xsl:with-param name=3D"frame" select=3D"$tfoot.frame"/> </xsl:apply-templates> <xsl:if test=3D"$tfoot.frame=3D1 and not(tfoot)"> - <xsl:text>\hline </xsl:text> + <xsl:text>\hline </xsl:text> </xsl:if> </xsl:otherwise> </xsl:choose> @@ -797,6 +802,17 @@ </xsl:when> <xsl:when test=3D"$latex.use.ltxtable=3D'1'"> <xsl:text>\end{longtable} </xsl:text> + <xsl:text>\end{verbatimwrite} </xsl:text> + <xsl:text>\LTXtable{</xsl:text> + <xsl:choose> + <xsl:when test=3D"$width!=3D''"> + <xsl:value-of select=3D"$width"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>\linewidth</xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:text>}{table.temp}</xsl:text> <!-- catcode touchup ARGH --> <xsl:call-template name=3D"generate.latex.cell.separator"> <xsl:with-param name=3D"which" select=3D"'post'"/> @@ -1058,10 +1074,12 @@ &no_var; </doc:variables> </doc:template> + <xsl:template match=3D"tbody"> <xsl:apply-templates/> </xsl:template> =20 + <doc:template basename=3D"row" xmlns=3D""> <refpurpose>Process a <doc:db>tbody</doc:db>'s <doc:db>row</doc:db> el= ements</refpurpose> <doc:variables> @@ -1070,8 +1088,11 @@ </doc:template> <xsl:template match=3D"tbody/row"> <xsl:apply-templates/> + <!-- should be conditional for multirows --> + <xsl:text>\bigstrut</xsl:text> <xsl:text> \tabularnewline </xsl:text> - <xsl:call-template name=3D"generate.table.row.separator"/> + <xsl:call-template name=3D"generate.table.row.separator"> + </xsl:call-template> </xsl:template> =20 <doc:template basename=3D"row" xmlns=3D""> @@ -1093,7 +1114,9 @@ </doc:variables> </doc:template> <xsl:template match=3D"tfoot/row"> - <xsl:call-template name=3D"generate.table.row.separator"/> + <xsl:call-template name=3D"generate.table.row.separator"> + <xsl:with-param name=3D"cline-string" select=3D"$cline-string" /> + </xsl:call-template> <xsl:apply-templates/> <xsl:text> \tabularnewline </xsl:text> </xsl:template> @@ -1102,6 +1125,7 @@ Frame attribute of the enclosing Table or InformalTable and the RowSep=20 of the last row is ignored. If unspecified, this attribute is=20 inherited from enclosing elements, rowsep=3D1 by default. --> + <xsl:template name=3D"generate.table.row.separator"> <xsl:param name=3D"rowsep"> <xsl:choose> @@ -1117,17 +1141,185 @@ <xsl:variable name=3D"parent_position" select=3D"count(../preceding-si= bling::node())+1"/> <xsl:variable name=3D"grandparent_children" select=3D"count(../../chil= d::node())"/> <xsl:if test=3D"$rowsep=3D1 and (position() !=3D last() or $parent_pos= ition < $grandparent_children)"> - <xsl:call-template name=3D"table.row.separator"/> + <xsl:call-template name=3D"table.row.separator"> + <xsl:with-param name=3D"start" select=3D"0"/> + <xsl:with-param name=3D"test"> + <xsl:call-template name=3D"generate.row.description"> + <xsl:with-param name=3D"start" select=3D"position()"/> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:text> </xsl:text> + </xsl:template> + + <xsl:template name=3D"generate.row.description"> + <xsl:variable name=3D"currow"> + <xsl:for-each select=3D"./entry"> + <xsl:choose> + <xsl:when test=3D"@morerows"> + <xsl:value-of select=3D"@morerows"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select=3D"0"/> + </xsl:otherwise> + </xsl:choose> + <xsl:text> </xsl:text> + </xsl:for-each> + </xsl:variable> + <xsl:if test=3D"count(preceding-sibling::row)=3D0"> + <xsl:value-of select=3D"$currow"/> + </xsl:if> + <xsl:for-each select=3D"preceding-sibling::row[1]"> + <xsl:call-template name=3D"combineTwoClines"> + <xsl:with-param name=3D"start" select=3D"0"/> + <xsl:with-param name=3D"first"> + <xsl:call-template name=3D"decreaseAll"> + <xsl:with-param name=3D"start" select=3D"0"/> + <xsl:with-param name=3D"array"> + <xsl:call-template name=3D"generate.row.description"> + <xsl:with-param name=3D"start" select=3D"$start - 1"/> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:with-param> + <xsl:with-param name=3D"second" select=3D"$currow"/> + </xsl:call-template> + </xsl:for-each> =20 + </xsl:template> +=09 + + + + <xsl:template name=3D"combineTwoClines"> + <xsl:if test=3D"$start > 0"> + <xsl:choose> + <xsl:when test=3D"$i > 0"> + <xsl:value-of select=3D"string($i)"/> + </xsl:when> + <xsl:when test=3D"$j > 0"> + <xsl:value-of select=3D"string($j)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select=3D"string($i)"/> + </xsl:otherwise> + </xsl:choose> + <xsl:text> </xsl:text> + </xsl:if> + <xsl:if test=3D"string-length($first) > 0"> + <xsl:choose> + <xsl:when test=3D"$start > 0"> + <xsl:choose> + <xsl:when test=3D"$i > 0"> + <xsl:call-template name=3D"combineTwoClines"> + <xsl:with-param name=3D"start" select=3D"$start+1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($fi= rst, ' '))" /> + <xsl:with-param name=3D"first" select=3D"substring-after($first,= ' ')" /> + <xsl:with-param name=3D"j" select=3D"$j" /> + <xsl:with-param name=3D"second" select=3D"$second" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name=3D"combineTwoClines"> + <xsl:with-param name=3D"start" select=3D"$start+1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($fi= rst, ' '))" /> + <xsl:with-param name=3D"first" select=3D"substring-after($first,= ' ')" /> + <xsl:with-param name=3D"j" select=3D"number(substring-before($se= cond, ' '))" /> + <xsl:with-param name=3D"second" select=3D"substring-after($secon= d, ' ')" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name=3D"combineTwoClines"> + <xsl:with-param name=3D"start" select=3D"$start+1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($firs= t, ' '))" /> + <xsl:with-param name=3D"first" select=3D"substring-after($first, '= ')" /> + <xsl:with-param name=3D"j" select=3D"number(substring-before($seco= nd, ' '))" /> + <xsl:with-param name=3D"second" select=3D"substring-after($second,= ' ')" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:if> +=09 + </xsl:template> +=09 + <xsl:template name=3D"initializeArray"> + <xsl:if test=3D"$number > 0"> + <xsl:text>0 </xsl:text> + <xsl:call-template name=3D"initializeArray"> + <xsl:with-param name=3D"number" select=3D"$number - 1"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name=3D"increaseOne"> + <xsl:if test=3D"$start > 0"> + <xsl:choose> + <xsl:when test=3D"$start =3D $pos"> + <xsl:value-of select=3D"string($i + $by)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select=3D"string($i)"/> + </xsl:otherwise> + </xsl:choose> + <xsl:text> </xsl:text> + </xsl:if> + <xsl:if test=3D"string-length($array) > 0"> + <xsl:call-template name=3D"increaseOne"> + <xsl:with-param name=3D"start" select=3D"$start+1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($array, = ' '))" /> + <xsl:with-param name=3D"array" select=3D"substring-after($array, ' ')= " /> + <xsl:with-param name=3D"pos" select=3D"$pos"/> + <xsl:with-param name=3D"by" select=3D"$by"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name=3D"decreaseAll"> + <xsl:variable name=3D"by" select=3D"-1"/> + <xsl:if test=3D"$start > 0"> + <xsl:choose> + <xsl:when test=3D"$i > 0"> + <xsl:value-of select=3D"string($i + $by)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select=3D"string($i)"/> + </xsl:otherwise> + </xsl:choose> + <xsl:text> </xsl:text> + </xsl:if> + <xsl:if test=3D"string-length($array) > 0"> + <xsl:call-template name=3D"decreaseAll"> + <xsl:with-param name=3D"start" select=3D"$start+1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($array, = ' '))" /> + <xsl:with-param name=3D"array" select=3D"substring-after($array, ' ')= " /> + </xsl:call-template> </xsl:if> </xsl:template> =20 <xsl:template name=3D"table.row.separator"> - <xsl:text> \hline </xsl:text> + <xsl:if test=3D"$start > 0"> + <xsl:if test=3D"$i =3D 0"> + <xsl:text>\cline{</xsl:text> + <xsl:value-of select=3D"$start"/> + <xsl:text>-</xsl:text> + <xsl:value-of select=3D"$start"/> + <xsl:text>}</xsl:text> + </xsl:if> + </xsl:if> + <xsl:if test=3D"string-length($test) > 0"> + <xsl:call-template name=3D"table.row.separator"> + <xsl:with-param name=3D"start" select=3D"$start+1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($test, '= '))" /> + <xsl:with-param name=3D"test" select=3D"substring-after($test, ' ')" = /> + </xsl:call-template> + </xsl:if> </xsl:template> =20 <xsl:template match=3D"tbody/row/entry"> <xsl:call-template name=3D"latex.entry.prealign"/> - <xsl:apply-templates/> + <xsl:call-template name=3D"latex.tbody.row.entry"/> <xsl:call-template name=3D"latex.entry.postalign"/> <xsl:if test=3D"position()<last()"> <xsl:call-template name=3D"generate.latex.cell.separator"> @@ -1136,6 +1328,68 @@ </xsl:if>=20 </xsl:template> =20 + <xsl:template name=3D"get.multirow.description.pos"> + <xsl:if test=3D"$pos =3D 0"> + <xsl:value-of select=3D"$i"/> + </xsl:if> + <xsl:if test=3D"string-length($array) > 0"> + <xsl:call-template name=3D"get.multirow.description.pos"> + <xsl:with-param name=3D"pos" select=3D"$pos - 1"/> + <xsl:with-param name=3D"i" select=3D"number(substring-before($array, = ' '))" /> + <xsl:with-param name=3D"array" select=3D"substring-after($array, ' ')= " /> + </xsl:call-template> + </xsl:if> + <xsl:if test=3D"string-length($array) <=3D 0 and $pos > 0"> + <xsl:value-of select=3D"-2"/> + </xsl:if> + </xsl:template> + + <xsl:template name=3D"generate.ampersands"> + <xsl:if test=3D"$number > 0"> + <xsl:text>&</xsl:text> + <xsl:call-template name=3D"generate.ampersands"> + <xsl:with-param name=3D"number" select=3D"$number - 1"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name=3D"CountToZero"> + <xsl:variable name=3D"current"> + <xsl:call-template name=3D"get.multirow.description.pos"> + <xsl:with-param name=3D"pos" select=3D"$pos"/> + <xsl:with-param name=3D"i" select=3D"-1" /> + <xsl:with-param name=3D"array" select=3D"$desc" /> + </xsl:call-template> + </xsl:variable> + <xsl:if test=3D"$current =3D 0"> + <xsl:choose> + <xsl:when test=3D"$count =3D 0"> + <xsl:value-of select=3D"$pos"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name=3D"CountToZero"> + <xsl:with-param name=3D"desc" select=3D"$desc"/> + <xsl:with-param name=3D"pos" select=3D"$pos + 1"/> + <xsl:with-param name=3D"count" select=3D"$count -1"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test=3D"$current > 0"> + <xsl:call-template name=3D"CountToZero"> + <xsl:with-param name=3D"desc" select=3D"$desc"/> + <xsl:with-param name=3D"pos" select=3D"$pos + 1"/> + <xsl:with-param name=3D"count" select=3D"$count"/> + </xsl:call-template> + </xsl:if> + <xsl:if test=3D"$current =3D -1"> + <xsl:text>-1</xsl:text> + </xsl:if> + <xsl:if test=3D"$current =3D -2"> + <xsl:value-of select=3D"$pos"/> + </xsl:if> + </xsl:template> + <xsl:template name=3D"latex.entry.prealign"> <xsl:variable name=3D"span"> <xsl:choose> @@ -1152,6 +1406,27 @@ <xsl:otherwise>-1</xsl:otherwise> </xsl:choose> </xsl:variable> + <!-- MultiRow --> + <xsl:variable name=3D"desc"> + <xsl:for-each select=3D"parent::*/preceding-sibling::row[1]"> + <xsl:call-template name=3D"generate.row.description"> + <xsl:with-param name=3D"start" select=3D"position()"/> + </xsl:call-template> + </xsl:for-each> + </xsl:variable> + <xsl:variable name=3D"FirstZero"> + <xsl:call-template name=3D"CountToZero"> + <xsl:with-param name=3D"desc" select=3D"$desc"/> + <xsl:with-param name=3D"pos" select=3D"1"/> + <xsl:with-param name=3D"count" select=3D"0"/> + </xsl:call-template> + </xsl:variable> + <xsl:if test=3D"position()=3D1"> + <xsl:call-template name=3D"generate.ampersands"> + <xsl:with-param name=3D"number" select=3D"$FirstZero - 1"/> + </xsl:call-template> + </xsl:if> +=09 <!-- Remember: if multicolumn is present, generate.latex.cell.separator= post needs to occur within multicolumn --> <xsl:if test=3D"$span > 1"> <xsl:text>\multicolumn{</xsl:text> @@ -1186,11 +1461,42 @@ </xsl:if> <xsl:text>{</xsl:text> <!-- use this as a hook for some general warnings --> - <xsl:if test=3D"@morerows!=3D''"><xsl:message>The morerows attribute is= not supported.</xsl:message></xsl:if> + <xsl:if test=3D"@morerows!=3D''"> + <xsl:text>\multirow{</xsl:text> + <xsl:value-of select=3D"@morerows+1"/> + <xsl:text>}*{</xsl:text> + </xsl:if> </xsl:template> =20 <xsl:template name=3D"latex.entry.postalign"> + <xsl:if test=3D"@morerows!=3D''">}</xsl:if> <xsl:text>}}</xsl:text> + <!-- multirow stuff --> + <xsl:variable name=3D"desc"> + <xsl:for-each select=3D"parent::*/preceding-sibling::row[1]"> + <xsl:call-template name=3D"generate.row.description"> + <xsl:with-param name=3D"start" select=3D"position()"/> + </xsl:call-template> + </xsl:for-each> + </xsl:variable> + <xsl:variable name=3D"NewCount"> + <xsl:call-template name=3D"CountToZero"> + <xsl:with-param name=3D"desc" select=3D"$desc"/> + <xsl:with-param name=3D"pos" select=3D"1"/> + <xsl:with-param name=3D"count" select=3D"position()"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name=3D"OldCount"> + <xsl:call-template name=3D"CountToZero"> + <xsl:with-param name=3D"desc" select=3D"$desc"/> + <xsl:with-param name=3D"pos" select=3D"1"/> + <xsl:with-param name=3D"count" select=3D"position() -1"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name=3D"PostAmper" select=3D"number($NewCount) - number($= OldCount)"/> + <xsl:call-template name=3D"generate.ampersands"> + <xsl:with-param name=3D"number" select=3D"$PostAmper -1 "/> + </xsl:call-template> <!-- this is used when the entry's align spec wants to override the col= umn default --> <xsl:if test=3D"@namest=3D'' and @spanspec=3D''"><!-- TODO improve --> <xsl:choose> diff -u /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/VERSION.xml db2la= tex/VERSION.xml --- /home/nikolai/db2latex-xsl-0.8pre1+20050124/xsl/VERSION.xml 2005-01-2= 4 14:24:04 +0100 +++ db2latex/VERSION.xml 2005-01-08 10:44:40 +0100 @@ -8,7 +8,7 @@ + #####################################################################= ######### --> =20 <xsl:stylesheet xmlns:xsl=3D"http://www.w3.org/1999/XSL/Transform" versi= on=3D'1.0'> -<xsl:variable name=3D"VERSION">0.8pre1+20050124</xsl:variable> +<xsl:variable name=3D"VERSION">0.8pre1+20050108</xsl:variable> <xsl:variable name=3D"LASTRELEASE">0.8pre1</xsl:variable> <xsl:variable name=3D"TAG"> <xsl:variable name=3D"RCSTAG" select=3D"substring-before(substring-aft= er('$Name: $',concat('$','Name: ')),'$')"/> =D0=A2=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE =D0=B2 /home/nikolai/db2latex-xsl-0.= 8pre1+20050124/xsl/: .#VERSION.xml.1.5 --BOKacYhQ+x31HxR3-- ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl