render: Fix rendering of TAL_GAP rules.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 16 Apr 2011 05:26:43 +0000 (22:26 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 16 Apr 2011 05:26:43 +0000 (22:26 -0700)
A rule that is set to TAL_GAP is supposed to have the same width or
height as a rule of type TAL_1, but without drawing the line.  That
is, it is supposed to be a small blank space between rows or columns.

Unfortunately, TAL_GAP was not implemented properly in the rendering
code.  It was treated just like TAL_0, which meant that it was ignored
and no gap appeared.

This commit implements TAL_GAP, fixing the problem.

src/output/render.c
tests/output/render.at

index 6722a13dc2e1100a99fc0f3d8b971a14150e665e..a4fe9e24e65eae7d82b9f7fa984cca010b2dfc0e 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011 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
@@ -455,7 +455,7 @@ measure_rule (const struct render_params *params, const struct table *table,
   enum table_axis b = !a;
   unsigned int rules;
   int d[TABLE_N_AXES];
-  int width, i;
+  int width;
 
   /* Determine all types of rules that are present, as a bitmap in 'rules'
      where rule type 't' is present if bit 2**t is set. */
@@ -466,10 +466,11 @@ measure_rule (const struct render_params *params, const struct table *table,
 
   /* Calculate maximum width of the rules that are present. */
   width = 0;
-  for (i = 0; i < N_LINES; i++)
-    if (rules & (1u << i))
-      width = MAX (width, params->line_widths[a][rule_to_render_type (i)]);
-
+  if (rules & (1u << TAL_1)
+      || (z > 0 && z < table->n[a] && rules & (1u << TAL_GAP)))
+    width = params->line_widths[a][RENDER_LINE_SINGLE];
+  if (rules & (1u << TAL_2))
+    width = MAX (width, params->line_widths[a][RENDER_LINE_DOUBLE]);
   return width;
 }
 
index a39f688d68af2103ac124563564d9e2f1df4c395..250da4f2897afcc153eefdc5e8dc28539b488342 100644 (file)
@@ -301,9 +301,9 @@ AT_DATA([input], [2 2
 2*1 hij\nklm\nnop
 ])
 AT_CHECK([render-test input], [0], [dnl
-abhij
-cdklm
-efnop
+ab hij
+cd klm
+ef nop
 ])
 AT_CLEANUP