Add numeric separator support for latex and troff output methods.

This commit is contained in:
Bruce Momjian 2005-07-14 07:32:01 +00:00
parent 75c76e93c7
commit 4a8bbbd2ee
1 changed files with 67 additions and 19 deletions

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.65 2005/07/14 06:49:58 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.66 2005/07/14 07:32:01 momjian Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@ -37,7 +37,7 @@ pg_local_malloc(size_t size)
tmp = malloc(size);
if (!tmp)
{
psql_error("out of memory\n");
fprintf(stderr, _("out of memory\n"));
exit(EXIT_FAILURE);
}
return tmp;
@ -999,7 +999,8 @@ static void
print_latex_text(const char *title, const char *const *headers,
const char *const *cells, const char *const *footers,
const char *opt_align, bool opt_tuples_only,
unsigned short int opt_border, FILE *fout)
char *opt_numericsep, unsigned short int opt_border,
FILE *fout)
{
unsigned int col_count = 0;
unsigned int i;
@ -1059,7 +1060,18 @@ print_latex_text(const char *title, const char *const *headers,
/* print cells */
for (i = 0, ptr = cells; *ptr; i++, ptr++)
{
latex_escaped_print(*ptr, fout);
if (strlen(*ptr) != 0 &&
opt_numericsep != NULL && strlen(opt_numericsep) > 0)
{
char *my_cell = pg_local_malloc(len_with_numericsep(*ptr) + 1);
strcpy(my_cell, *ptr);
format_numericsep(my_cell, opt_numericsep);
latex_escaped_print(my_cell, fout);
free(my_cell);
}
else
latex_escaped_print(*ptr, fout);
if ((i + 1) % col_count == 0)
fputs(" \\\\\n", fout);
@ -1091,7 +1103,8 @@ static void
print_latex_vertical(const char *title, const char *const *headers,
const char *const *cells, const char *const *footers,
const char *opt_align, bool opt_tuples_only,
unsigned short int opt_border, FILE *fout)
char *opt_numericsep, unsigned short int opt_border,
FILE *fout)
{
unsigned int col_count = 0;
unsigned int i;
@ -1161,7 +1174,18 @@ print_latex_vertical(const char *title, const char *const *headers,
if (footers && !opt_tuples_only)
for (ptr = footers; *ptr; ptr++)
{
latex_escaped_print(*ptr, fout);
if (strlen(*ptr) != 0 &&
opt_numericsep != NULL && strlen(opt_numericsep) > 0)
{
char *my_cell = pg_local_malloc(len_with_numericsep(*ptr) + 1);
strcpy(my_cell, *ptr);
format_numericsep(my_cell, opt_numericsep);
latex_escaped_print(my_cell, fout);
free(my_cell);
}
else
latex_escaped_print(*ptr, fout);
fputs(" \\\\\n", fout);
}
@ -1197,7 +1221,8 @@ static void
print_troff_ms_text(const char *title, const char *const *headers,
const char *const *cells, const char *const *footers,
const char *opt_align, bool opt_tuples_only,
unsigned short int opt_border, FILE *fout)
char *opt_numericsep, unsigned short int opt_border,
FILE *fout)
{
unsigned int col_count = 0;
unsigned int i;
@ -1245,14 +1270,23 @@ print_troff_ms_text(const char *title, const char *const *headers,
}
if (!opt_tuples_only)
{
fputs("\n_\n", fout);
}
/* print cells */
for (i = 0, ptr = cells; *ptr; i++, ptr++)
{
troff_ms_escaped_print(*ptr, fout);
if (strlen(*ptr) != 0 &&
opt_numericsep != NULL && strlen(opt_numericsep) > 0)
{
char *my_cell = pg_local_malloc(len_with_numericsep(*ptr) + 1);
strcpy(my_cell, *ptr);
format_numericsep(my_cell, opt_numericsep);
troff_ms_escaped_print(my_cell, fout);
free(my_cell);
}
else
troff_ms_escaped_print(*ptr, fout);
if ((i + 1) % col_count == 0)
fputc('\n', fout);
@ -1281,7 +1315,8 @@ static void
print_troff_ms_vertical(const char *title, const char *const *headers,
const char *const *cells, const char *const *footers,
const char *opt_align, bool opt_tuples_only,
unsigned short int opt_border, FILE *fout)
char *opt_numericsep, unsigned short int opt_border,
FILE *fout)
{
unsigned int col_count = 0;
unsigned int i;
@ -1324,7 +1359,6 @@ print_troff_ms_vertical(const char *title, const char *const *headers,
{
if (!opt_tuples_only)
{
if (current_format != 1)
{
if (opt_border == 2 && i > 0)
@ -1356,7 +1390,19 @@ print_troff_ms_vertical(const char *title, const char *const *headers,
troff_ms_escaped_print(headers[i % col_count], fout);
fputc('\t', fout);
troff_ms_escaped_print(*ptr, fout);
if (strlen(*ptr) != 0 &&
opt_numericsep != NULL && strlen(opt_numericsep) > 0)
{
char *my_cell = pg_local_malloc(len_with_numericsep(*ptr) + 1);
strcpy(my_cell, *ptr);
format_numericsep(my_cell, opt_numericsep);
troff_ms_escaped_print(my_cell, fout);
free(my_cell);
}
else
troff_ms_escaped_print(*ptr, fout);
fputc('\n', fout);
}
@ -1529,19 +1575,21 @@ printTable(const char *title,
case PRINT_LATEX:
if (use_expanded)
print_latex_vertical(title, headers, cells, footers, align,
opt->tuples_only, border, output);
opt->tuples_only, opt->numericSep,
border, output);
else
print_latex_text(title, headers, cells, footers, align,
opt->tuples_only, border, output);
opt->tuples_only, opt->numericSep,
border, output);
break;
case PRINT_TROFF_MS:
if (use_expanded)
print_troff_ms_vertical(title, headers, cells, footers,
align, opt->tuples_only,
print_troff_ms_vertical(title, headers, cells, footers, align,
opt->tuples_only, opt->numericSep,
border, output);
else
print_troff_ms_text(title, headers, cells, footers,
align, opt->tuples_only,
print_troff_ms_text(title, headers, cells, footers, align,
opt->tuples_only, opt->numericSep,
border, output);
break;
default: