I have applied your patch, and added the optimization that only leading
spaces are converted to 'nbsp;', as you suggested.
---
Jean-Paul Argudo wrote:
Hi all,
This is my 1st patch ever in C :-)... I was just borried by a bad psql
\H html output of an EXPLAIN
because it didnt respected spaces sent from backend like:
- Sort
- Sort
I just remarked in this print.c the case of a white space wasnt handled
in the function escaping special caracters to HTML codes, so I added it
replacing a space by special html nbsp; ( n b s p).
So we'll have now:
-nbsp;Sort
nbsp;nbsp;-nbsp;Sort
... in the html generated
(see example at http://www.pack-solutions.net/~jpargudo/explain.html)
Then, every single space in the html source is replaced by this. The
source looks ugly, yes, I will look to *only replacing starting spaces*
of each row of the EXPLAIN, thats will be my 1st patch ever, version 2 :)
So I post this patch only FYI.. I had much fun playing with C a bit :-)
(yes, I dont code C, just a bit of Perl and Python).
Cheers! Thanks again for such a powerfull release.
--
Jean-Paul Argudo
www.PostgreSQLFr.org
---(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@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup.| Newtown Square, Pennsylvania 19073
Index: src/bin/psql/print.c
===
RCS file: /cvsroot/pgsql/src/bin/psql/print.c,v
retrieving revision 1.59
diff -c -c -r1.59 print.c
*** src/bin/psql/print.c14 Jun 2005 02:57:41 - 1.59
--- src/bin/psql/print.c14 Jun 2005 22:14:20 -
***
*** 595,602
html_escaped_print(const char *in, FILE *fout)
{
const char *p;
!
for (p = in; *p; p++)
switch (*p)
{
case '':
--- 595,604
html_escaped_print(const char *in, FILE *fout)
{
const char *p;
! boolleading_space = true;
!
for (p = in; *p; p++)
+ {
switch (*p)
{
case '':
***
*** 617,625
--- 619,637
case '\'':
fputs(apos;, fout);
break;
+ case ' ':
+ /* protect leading space, for EXPLAIN output */
+ if (leading_space)
+ fputs(nbsp;, fout);
+ else
+ fputs( , fout);
+ break;
default:
fputc(*p, fout);
}
+ if (*p != ' ')
+ leading_space = false;
+ }
}
---(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