Re: psql latex bugfixes

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Roger Leigh <rleigh(at)whinlatter(dot)ukfsn(dot)org>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: psql latex bugfixes
Date: 2004-08-06 18:09:17
Message-ID: 200408061809.i76I9H407627@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


Patch applied for 8.0. Thanks.

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

Roger Leigh wrote:
> I have noticed that the latex format in psql has some bugs:
>
> ? "_" is not escaped, and causes TeX to abort, thinking it's a
> subscript outside of maths mode. Most of my table and field names
> use underscores, so this is a really nasty one.
> ? The column count is calculated using the contents of opt_align. But
> opt_align has one extra element, and so it's always one too many. I
> changed it to count the column headings, like all the other output
> formats. There may be a bug in computing opt_align that this patch
> does not address, but I'm not yet familiar enough with the psql
> source to fix this as well.
> ? The line drawing rules for each border setting (0-3) and expanded
> mode didn't always match the documented behaviour and what other
> formats (e.g. aligned) did. I made it as conformant as possible,
> and also tidied the alignment of the first line of the footer, which
> was incorrectly indented.
>
> I've attached some example output with this patch applied.
>
> Regards,
> Roger
>
>
> Index: src/bin/psql/print.c
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.c,v
> retrieving revision 1.48
> diff -u -r1.48 print.c
> --- src/bin/psql/print.c 23 May 2004 22:20:10 -0000 1.48
> +++ src/bin/psql/print.c 1 Aug 2004 22:54:22 -0000
> @@ -769,7 +769,7 @@
>
>
> /*************************/
> -/* LaTeX */
> +/* LaTeX */
> /*************************/
>
>
> @@ -790,6 +790,9 @@
> case '$':
> fputs("\\$", fout);
> break;
> + case '_':
> + fputs("\\_", fout);
> + break;
> case '{':
> fputs("\\{", fout);
> break;
> @@ -817,7 +820,6 @@
> {
> unsigned int col_count = 0;
> unsigned int i;
> - const char *cp;
> const char *const * ptr;
>
>
> @@ -829,42 +831,39 @@
> fputs("\n\\end{center}\n\n", fout);
> }
>
> + /* count columns */
> + for (ptr = headers; *ptr; ptr++)
> + col_count++;
> +
> /* begin environment and set alignments and borders */
> fputs("\\begin{tabular}{", fout);
> - if (opt_border == 0)
> - fputs(opt_align, fout);
> - else if (opt_border == 1)
> - {
> - for (cp = opt_align; *cp; cp++)
> - {
> - if (cp != opt_align)
> - fputc('|', fout);
> - fputc(*cp, fout);
> - }
> - }
> - else if (opt_border == 2)
> +
> + if (opt_border == 2)
> + fputs("| ", fout);
> + for (i = 0; i < col_count; i++)
> {
> - for (cp = opt_align; *cp; cp++)
> - {
> - fputc('|', fout);
> - fputc(*cp, fout);
> - }
> - fputc('|', fout);
> + fputc(*(opt_align + i), fout);
> + if (opt_border != 0 && i < col_count - 1)
> + fputs (" | ", fout);
> }
> + if (opt_border == 2)
> + fputs(" |", fout);
> +
> fputs("}\n", fout);
>
> if (!opt_barebones && opt_border == 2)
> fputs("\\hline\n", fout);
>
> /* print headers and count columns */
> - for (i = 0, ptr = headers; *ptr; i++, ptr++)
> + for (i = 0, ptr = headers; i < col_count; i++, ptr++)
> {
> - col_count++;
> if (!opt_barebones)
> {
> if (i != 0)
> fputs(" & ", fout);
> + fputs("\\textit{", fout);
> latex_escaped_print(*ptr, fout);
> + fputc('}', fout);
> }
> }
>
> @@ -888,7 +887,7 @@
> if (opt_border == 2)
> fputs("\\hline\n", fout);
>
> - fputs("\\end{tabular}\n\n", fout);
> + fputs("\\end{tabular}\n\n\\noindent ", fout);
>
>
> /* print footers */
> @@ -951,8 +950,12 @@
> if (!opt_barebones)
> {
> if (opt_border == 2)
> + {
> fputs("\\hline\n", fout);
> - fprintf(fout, "\\multicolumn{2}{c}{Record %d} \\\\\n", record++);
> + fprintf(fout, "\\multicolumn{2}{|c|}{\\textit{Record %d}} \\\\\n", record++);
> + }
> + else
> + fprintf(fout, "\\multicolumn{2}{c}{\\textit{Record %d}} \\\\\n", record++);
> }
> if (opt_border >= 1)
> fputs("\\hline\n", fout);
> @@ -967,7 +970,7 @@
> if (opt_border == 2)
> fputs("\\hline\n", fout);
>
> - fputs("\\end{tabular}\n\n", fout);
> + fputs("\\end{tabular}\n\n\\noindent ", fout);
>
>
> /* print footers */
>
>
>
> --
> Roger Leigh
>
> Printing on GNU/Linux? http://gimp-print.sourceforge.net/
> GPG Public Key: 0x25BFB848. Please sign and encrypt your mail.

Content-Description: psql latex output

Content-Description: psql latex PDF output

[ Attachment, skipping... ]

>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
> joining column's datatypes do not match

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Browse pgsql-patches by date

  From Date Subject
Next Message David Fetter 2004-08-06 18:10:40 Intro patch
Previous Message David Fetter 2004-08-06 18:09:13 Tutorial patch