This is only necessary in pathological cases. Those cases don't really
come up in normal usage and as PSPP shifts toward pivot tables they won't
come up at all.
16 files changed:
return;
t = tab_create (3, split_cnt + 1);
return;
t = tab_create (3, split_cnt + 1);
- tab_vline (t, TAL_GAP, 1, 0, split_cnt);
- tab_vline (t, TAL_GAP, 2, 0, split_cnt);
tab_text (t, 0, 0, TAB_NONE, _("Variable"));
tab_text (t, 1, 0, TAB_LEFT, _("Value"));
tab_text (t, 2, 0, TAB_LEFT, _("Label"));
tab_text (t, 0, 0, TAB_NONE, _("Variable"));
tab_text (t, 1, 0, TAB_LEFT, _("Value"));
tab_text (t, 2, 0, TAB_LEFT, _("Label"));
t = tab_create (2, 11 + (info.product_ext != NULL));
r = 0;
t = tab_create (2, 11 + (info.product_ext != NULL));
r = 0;
- tab_vline (t, TAL_GAP, 1, 0, 8);
-
tab_text (t, 0, r, TAB_LEFT, _("File:"));
tab_text (t, 1, r++, TAB_LEFT, fh_get_file_name (h));
tab_text (t, 0, r, TAB_LEFT, _("File:"));
tab_text (t, 1, r++, TAB_LEFT, fh_get_file_name (h));
tab_box (t, TAL_2, TAL_2, -1, -1, 0, 0, tab_nc (t) - 1, tab_nr (t) - 1);
tab_box (t, -1, -1, -1, TAL_1, tab_l (t), tab_t (t) - 1, tab_nc (t) - 1,
tab_nr (t) - 1);
tab_box (t, TAL_2, TAL_2, -1, -1, 0, 0, tab_nc (t) - 1, tab_nr (t) - 1);
tab_box (t, -1, -1, -1, TAL_1, tab_l (t), tab_t (t) - 1, tab_nc (t) - 1,
tab_nr (t) - 1);
- tab_box (t, -1, -1, -1, TAL_GAP, 0, tab_t (t), tab_l (t) - 1,
- tab_nr (t) - 1);
tab_vline (t, TAL_2, tab_l (t), 0, tab_nr (t) - 1);
tab_submit (t);
tab_vline (t, TAL_2, tab_l (t), 0, tab_nr (t) - 1);
tab_submit (t);
tab_box (t, TAL_1, TAL_1, -1, -1 , 0 , 0 , 2, tab_nr(t) - 1) ;
tab_vline (t, TAL_1 , 2, 0, tab_nr(t) - 1);
tab_box (t, TAL_1, TAL_1, -1, -1 , 0 , 0 , 2, tab_nr(t) - 1) ;
tab_vline (t, TAL_1 , 2, 0, tab_nr(t) - 1);
- tab_vline (t, TAL_GAP , 1, 0, tab_nr(t) - 1 ) ;
for (i = 0; i < FRQ_ST_count; i++)
{
for (i = 0; i < FRQ_ST_count; i++)
{
tab_box (t, TAL_2, TAL_2, TAL_0, TAL_1, 0, 0, cols - 1, rows - 1);
tab_hline (t, TAL_2, 0, cols - 1, 1);
tab_box (t, TAL_2, TAL_2, TAL_0, TAL_1, 0, 0, cols - 1, rows - 1);
tab_hline (t, TAL_2, 0, cols - 1, 1);
- tab_vline (t, TAL_GAP, 1, 0, rows - 1);
tab_title (t, _("Group Statistics"));
tab_text (t, 1, 0, TAB_CENTER | TAT_TITLE, var_to_string (is->gvar));
tab_text (t, 2, 0, TAB_CENTER | TAT_TITLE, _("N"));
tab_title (t, _("Group Statistics"));
tab_text (t, 1, 0, TAB_CENTER | TAT_TITLE, var_to_string (is->gvar));
tab_text (t, 2, 0, TAB_CENTER | TAT_TITLE, _("N"));
_("%g%% Confidence Interval of the Difference"),
tt->confidence * 100.0);
_("%g%% Confidence Interval of the Difference"),
tt->confidence * 100.0);
- tab_vline (t, TAL_GAP, 6, 1, 1);
tab_hline (t, TAL_1, 5, 6, 2);
tab_text (t, 1, 2, TAB_CENTER | TAT_TITLE, _("t"));
tab_text (t, 2, 2, TAB_CENTER | TAT_TITLE, _("df"));
tab_hline (t, TAL_1, 5, 6, 2);
tab_text (t, 1, 2, TAB_CENTER | TAT_TITLE, _("t"));
tab_text (t, 2, 2, TAB_CENTER | TAT_TITLE, _("df"));
_("%g%% Confidence Interval of the Difference"),
tt->confidence * 100.0);
_("%g%% Confidence Interval of the Difference"),
tt->confidence * 100.0);
- tab_vline (t, TAL_GAP, 6, 1, 1);
tab_hline (t, TAL_1, 5, 6, 2);
tab_text (t, 7, 2, TAB_CENTER | TAT_TITLE, _("t"));
tab_text (t, 8, 2, TAB_CENTER | TAT_TITLE, _("df"));
tab_hline (t, TAL_1, 5, 6, 2);
tab_text (t, 7, 2, TAB_CENTER | TAT_TITLE, _("t"));
tab_text (t, 8, 2, TAB_CENTER | TAT_TITLE, _("df"));
}
for (i = 0; i < TABLE_N_AXES; i++)
params.min_break[i] = a->min_break[i];
}
for (i = 0; i < TABLE_N_AXES; i++)
params.min_break[i] = a->min_break[i];
+ params.supports_margins = false;
if (a->file == NULL && !ascii_open_page (a))
return;
if (a->file == NULL && !ascii_open_page (a))
return;
for (i = 0; i < TABLE_N_AXES; i++)
xr->params->min_break[i] = xr->min_break[i];
for (i = 0; i < TABLE_N_AXES; i++)
xr->params->min_break[i] = xr->min_break[i];
+ xr->params->supports_margins = true;
}
cairo_set_source_rgb (xr->cairo, xr->fg.red, xr->fg.green, xr->fg.blue);
}
cairo_set_source_rgb (xr->cairo, xr->fg.red, xr->fg.green, xr->fg.blue);
n_borders = 0;
top = table_get_rule (t, TABLE_VERT, x, y);
n_borders = 0;
top = table_get_rule (t, TABLE_VERT, x, y);
put_border (html->file, n_borders++, top, "top");
if (y + rowspan == table_nr (t))
{
bottom = table_get_rule (t, TABLE_VERT, x, y + rowspan);
put_border (html->file, n_borders++, top, "top");
if (y + rowspan == table_nr (t))
{
bottom = table_get_rule (t, TABLE_VERT, x, y + rowspan);
put_border (html->file, n_borders++, bottom, "bottom");
}
left = table_get_rule (t, TABLE_HORZ, x, y);
put_border (html->file, n_borders++, bottom, "bottom");
}
left = table_get_rule (t, TABLE_HORZ, x, y);
put_border (html->file, n_borders++, left, "left");
if (x + colspan == table_nc (t))
{
right = table_get_rule (t, TABLE_HORZ, x + colspan, y);
put_border (html->file, n_borders++, left, "left");
if (x + colspan == table_nc (t))
{
right = table_get_rule (t, TABLE_HORZ, x + colspan, y);
put_border (html->file, n_borders++, right, "right");
}
put_border (html->file, n_borders++, right, "right");
}
switch (type)
{
case TAL_0:
switch (type)
{
case TAL_0:
return RENDER_LINE_NONE;
case TAL_1:
return RENDER_LINE_SINGLE;
return RENDER_LINE_NONE;
case TAL_1:
return RENDER_LINE_SINGLE;
for (d[b] = 0; d[b] < table->n[b]; d[b]++)
rules |= 1u << table_get_rule (table, a, d[H], d[V]);
for (d[b] = 0; d[b] < table->n[b]; d[b]++)
rules |= 1u << table_get_rule (table, a, d[H], d[V]);
+ /* Turn off TAL_NONE because it has width 0 and we needn't bother. However,
+ if the device doesn't support margins, make sure that there is at least a
+ small gap between cells (but we don't need any at the left or right edge
+ of the table). */
+ if (rules & (1u << TAL_0))
+ {
+ rules &= ~(1u << TAL_0);
+ if (z > 0 && z < table->n[a] && !params->supports_margins && a == H)
+ rules |= 1u << TAL_1;
+ }
+
/* Calculate maximum width of the rules that are present. */
width = 0;
if (rules & (1u << TAL_1)
/* Calculate maximum width of the rules that are present. */
width = 0;
if (rules & (1u << TAL_1)
- || (z > 0 && z < table->n[a] && rules & (1u << TAL_GAP)))
+ || (z > 0 && z < table->n[a] && rules & (1u << TAL_0)))
width = params->line_widths[a][RENDER_LINE_SINGLE];
if (rules & (1u << TAL_2))
width = MAX (width, params->line_widths[a][RENDER_LINE_DOUBLE]);
width = params->line_widths[a][RENDER_LINE_SINGLE];
if (rules & (1u << TAL_2))
width = MAX (width, params->line_widths[a][RENDER_LINE_DOUBLE]);
across two pages. (Joined cells may always be broken at join
points.) */
int min_break[TABLE_N_AXES];
across two pages. (Joined cells may always be broken at join
points.) */
int min_break[TABLE_N_AXES];
+
+ bool supports_margins;
};
/* An iterator for breaking render_pages into smaller chunks. */
};
/* An iterator for breaking render_pages into smaller chunks. */
memset (t->ct, 0, nc * nr);
t->rh = pool_nmalloc (t->container, nc, nr + 1);
memset (t->ct, 0, nc * nr);
t->rh = pool_nmalloc (t->container, nc, nr + 1);
- memset (t->rh, 0, nc * (nr + 1));
+ memset (t->rh, TAL_0, nc * (nr + 1));
t->rv = pool_nmalloc (t->container, nr, nc + 1);
t->rv = pool_nmalloc (t->container, nr, nc + 1);
- memset (t->fmtmap, 0, sizeof (*t->fmtmap) * n_RC);
-
- memset (t->rv, TAL_GAP, nr * (nc + 1));
+ memset (t->rv, TAL_0, nr * (nc + 1));
+ memset (t->fmtmap, 0, sizeof (*t->fmtmap) * n_RC);
t->fmtmap[RC_PVALUE] = ugly[RC_PVALUE];
t->fmtmap[RC_INTEGER] = ugly[RC_INTEGER];
t->fmtmap[RC_OTHER] = *settings_get_format ();
t->fmtmap[RC_PVALUE] = ugly[RC_PVALUE];
t->fmtmap[RC_INTEGER] = ugly[RC_INTEGER];
t->fmtmap[RC_OTHER] = *settings_get_format ();
{
memset (&t->rh[nc * (tab_nr (t) + 1)], TAL_0,
(nr - tab_nr (t)) * nc);
{
memset (&t->rh[nc * (tab_nr (t) + 1)], TAL_0,
(nr - tab_nr (t)) * nc);
- memset (&t->rv[(nc + 1) * tab_nr (t)], TAL_GAP,
+ memset (&t->rv[(nc + 1) * tab_nr (t)], TAL_0,
(nr - tab_nr (t)) * (nc + 1));
}
}
(nr - tab_nr (t)) * (nc + 1));
}
}
if (axis == TABLE_VERT)
return tc->heading != NULL && y == 1 ? TAL_1 : TAL_0;
else
if (axis == TABLE_VERT)
return tc->heading != NULL && y == 1 ? TAL_1 : TAL_0;
else
}
static const struct table_class table_casereader_class =
}
static const struct table_class table_casereader_class =
enum
{
TAL_0, /* No line. */
enum
{
TAL_0, /* No line. */
- TAL_GAP, /* Spacing but no line. */
TAL_1, /* Single line. */
TAL_2, /* Double line. */
N_LINES
TAL_1, /* Single line. */
TAL_2, /* Double line. */
N_LINES
1*2 hij\nklm\nnop
])
AT_CHECK([render-test input], [0], [dnl
1*2 hij\nklm\nnop
])
AT_CHECK([render-test input], [0], [dnl
+ abc
+ def
+ hij
+ klm
+ nop
1*2 @shorter
])
AT_CHECK([render-test --width=30 --length=15 input], [0], [dnl
1*2 @shorter
])
AT_CHECK([render-test --width=30 --length=15 input], [0], [dnl
-+-------------------+
-|A long text string.|
-+-------------------+
-| shorter|
-+-------------------+
++--------------------+
+| A long text string.|
++--------------------+
+| shorter|
++--------------------+