projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Improve code to trim leading spaces from numeric output.
[pspp-builds.git]
/
src
/
output
/
table.c
diff --git
a/src/output/table.c
b/src/output/table.c
index 5c8dc6f7ea8767feb23785617cba912e0529a0ed..04181e44f709b9ca1d2fcb9cab3abcce207b9595 100644
(file)
--- a/
src/output/table.c
+++ b/
src/output/table.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006
, 2009
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-29,6
+29,7
@@
#include <data/data-out.h>
#include <data/format.h>
#include <data/value.h>
#include <data/data-out.h>
#include <data/format.h>
#include <data/value.h>
+#include <data/dictionary.h>
#include <libpspp/assertion.h>
#include <libpspp/compiler.h>
#include <libpspp/misc.h>
#include <libpspp/assertion.h>
#include <libpspp/compiler.h>
#include <libpspp/misc.h>
@@
-399,10
+400,11
@@
tab_title (struct tab_table *t, const char *title, ...)
/* Set DIM_FUNC as the dimension function for table T. */
void
/* Set DIM_FUNC as the dimension function for table T. */
void
-tab_dim (struct tab_table *t, tab_dim_func *dim_func)
+tab_dim (struct tab_table *t, tab_dim_func *dim_func
, void *aux
)
{
assert (t != NULL && t->dim == NULL);
t->dim = dim_func;
{
assert (t != NULL && t->dim == NULL);
t->dim = dim_func;
+ t->dim_aux = aux;
}
/* Returns the natural width of column C in table T for driver D, that
}
/* Returns the natural width of column C in table T for driver D, that
@@
-496,7
+498,8
@@
tab_natural_height (struct tab_table *t, struct outp_driver *d, int r)
/* Callback function to set all columns and rows to their natural
dimensions. Not really meant to be called directly. */
void
/* Callback function to set all columns and rows to their natural
dimensions. Not really meant to be called directly. */
void
-tab_natural_dimensions (struct tab_table *t, struct outp_driver *d)
+tab_natural_dimensions (struct tab_table *t, struct outp_driver *d,
+ void *aux UNUSED)
{
int i;
{
int i;
@@
-516,7
+519,8
@@
tab_natural_dimensions (struct tab_table *t, struct outp_driver *d)
from V, displayed with format spec F. */
void
tab_value (struct tab_table *table, int c, int r, unsigned char opt,
from V, displayed with format spec F. */
void
tab_value (struct tab_table *table, int c, int r, unsigned char opt,
- const union value *v, const struct fmt_spec *f)
+ const union value *v, const struct dictionary *dict,
+ const struct fmt_spec *f)
{
char *contents;
{
char *contents;
@@
-535,11
+539,10
@@
tab_value (struct tab_table *table, int c, int r, unsigned char opt,
}
#endif
}
#endif
- contents = pool_alloc (table->container, f->w);
- table->cc[c + r * table->cf] = ss_buffer (contents, f->w);
- table->ct[c + r * table->cf] = opt;
+ contents = data_out_pool (v, dict_get_encoding (dict), f, table->container);
- data_out (v, f, contents);
+ table->cc[c + r * table->cf] = ss_cstr (contents);
+ table->ct[c + r * table->cf] = opt;
}
/* Sets cell (C,R) in TABLE, with options OPT, to have value VAL
}
/* Sets cell (C,R) in TABLE, with options OPT, to have value VAL
@@
-548,8
+551,7
@@
void
tab_fixed (struct tab_table *table, int c, int r, unsigned char opt,
double val, int w, int d)
{
tab_fixed (struct tab_table *table, int c, int r, unsigned char opt,
double val, int w, int d)
{
- char *contents;
- char buf[40], *cp;
+ char *s, *cp;
struct fmt_spec f;
union value double_value;
struct fmt_spec f;
union value double_value;
@@
-578,17
+580,15
@@
tab_fixed (struct tab_table *table, int c, int r, unsigned char opt,
#endif
double_value.f = val;
#endif
double_value.f = val;
-
data_out (&double_value, &f, buf
);
+
s = data_out_pool (&double_value, LEGACY_NATIVE, &f, table->container
);
- cp =
buf
;
- while (isspace ((unsigned char) *cp) && cp < &
buf
[w])
+ cp =
s
;
+ while (isspace ((unsigned char) *cp) && cp < &
s
[w])
cp++;
cp++;
- f.w = w - (cp -
buf
);
+ f.w = w - (cp -
s
);
- contents = pool_alloc (table->container, f.w);
- table->cc[c + r * table->cf] = ss_buffer (contents, f.w);
+ table->cc[c + r * table->cf] = ss_buffer (cp, f.w);
table->ct[c + r * table->cf] = opt;
table->ct[c + r * table->cf] = opt;
- memcpy (contents, cp, f.w);
}
/* Sets cell (C,R) in TABLE, with options OPT, to have value VAL as
}
/* Sets cell (C,R) in TABLE, with options OPT, to have value VAL as
@@
-599,11
+599,8
@@
void
tab_double (struct tab_table *table, int c, int r, unsigned char opt,
double val, const struct fmt_spec *fmt)
{
tab_double (struct tab_table *table, int c, int r, unsigned char opt,
double val, const struct fmt_spec *fmt)
{
- int w;
- char *contents;
- char buf[40], *cp;
-
- union value double_value;
+ struct substring ss;
+ union value double_value ;
assert (table != NULL);
assert (table != NULL);
@@
-632,17
+629,12
@@
tab_double (struct tab_table *table, int c, int r, unsigned char opt,
#endif
double_value.f = val;
#endif
double_value.f = val;
-
data_out (&double_value, fmt, buf
);
+
ss = ss_cstr (data_out_pool (&double_value, LEGACY_NATIVE, fmt, table->container)
);
- cp = buf;
- while (isspace ((unsigned char) *cp) && cp < &buf[fmt->w])
- cp++;
- w = fmt->w - (cp - buf);
+ ss_ltrim (&ss, ss_cstr (" "));
- contents = pool_alloc (table->container, w);
- table->cc[c + r * table->cf] = ss_buffer (contents, w);
+ table->cc[c + r * table->cf] = ss;
table->ct[c + r * table->cf] = opt;
table->ct[c + r * table->cf] = opt;
- memcpy (contents, cp, w);
}
}
@@
-787,7
+779,7
@@
tab_raw (struct tab_table *table, int c, int r, unsigned opt,
/* Sets the widths of all the columns and heights of all the rows in
table T for driver D. */
static void
/* Sets the widths of all the columns and heights of all the rows in
table T for driver D. */
static void
-nowrap_dim (struct tab_table *t, struct outp_driver *d)
+nowrap_dim (struct tab_table *t, struct outp_driver *d
, void *aux UNUSED
)
{
t->w[0] = tab_natural_width (t, d, 0);
t->h[0] = d->font_height;
{
t->w[0] = tab_natural_width (t, d, 0);
t->h[0] = d->font_height;
@@
-796,7
+788,7
@@
nowrap_dim (struct tab_table *t, struct outp_driver *d)
/* Sets the widths of all the columns and heights of all the rows in
table T for driver D. */
static void
/* Sets the widths of all the columns and heights of all the rows in
table T for driver D. */
static void
-wrap_dim (struct tab_table *t, struct outp_driver *d)
+wrap_dim (struct tab_table *t, struct outp_driver *d
, void *aux UNUSED
)
{
t->w[0] = tab_natural_width (t, d, 0);
t->h[0] = tab_natural_height (t, d, 0);
{
t->w[0] = tab_natural_width (t, d, 0);
t->h[0] = tab_natural_height (t, d, 0);
@@
-822,7
+814,7
@@
tab_output_text (int options, const char *buf, ...)
tab_text (t, 0, 0, options & ~TAT_PRINTF, buf);
tab_flags (t, SOMF_NO_TITLE | SOMF_NO_SPACING);
tab_text (t, 0, 0, options & ~TAT_PRINTF, buf);
tab_flags (t, SOMF_NO_TITLE | SOMF_NO_SPACING);
- tab_dim (t, options & TAT_NOWRAP ? nowrap_dim : wrap_dim);
+ tab_dim (t, options & TAT_NOWRAP ? nowrap_dim : wrap_dim
, NULL
);
tab_submit (t);
free (tmp_buf);
tab_submit (t);
free (tmp_buf);
@@
-982,7
+974,7
@@
tabi_driver (struct outp_driver *driver)
#endif
assert (t->dim != NULL);
#endif
assert (t->dim != NULL);
- t->dim (t, d);
+ t->dim (t, d
, t->dim_aux
);
#if DEBUGGING
{
#if DEBUGGING
{