size_t last_break_ofs = 0;
int last_break_width = 0;
int width = 0;
+ size_t graph_ofs;
size_t ofs;
for (ofs = 0; ofs < n; )
}
ofs += mblen;
}
- if (b[ofs] != UC_BREAK_MANDATORY)
- {
- while (ofs > 0 && isspace (line[ofs - 1]))
- {
- ofs--;
- width--;
- }
- }
- if (width > *widthp)
- *widthp = width;
+
+ /* Trim any trailing spaces off the end of the text to be drawn. */
+ for (graph_ofs = ofs; graph_ofs > 0; graph_ofs--)
+ if (!isspace (line[graph_ofs - 1]))
+ break;
+ width -= ofs - graph_ofs;
/* Draw text. */
- text_draw (a, cell->options, bb, clip, y, line, ofs, width);
+ text_draw (a, cell->options, bb, clip, y, line, graph_ofs, width);
- /* Next line. */
- pos += ofs;
- if (ofs < n && isspace (line[ofs]))
- pos++;
+ /* If a new-line ended the line, just skip the new-line. Otherwise, skip
+ past any spaces past the end of the line (but not past a new-line). */
+ if (b[ofs] == UC_BREAK_MANDATORY)
+ ofs++;
+ else
+ while (ofs < n && isspace (line[ofs]) && b[ofs] != UC_BREAK_MANDATORY)
+ ofs++;
+ if (width > *widthp)
+ *widthp = width;
+ pos += ofs;
}
*heightp = y - bb[V][0];
+-+--+--+---+
|h| The
| | su
-| | determ
-+-+ han
-|i|missing va
-| | If IN
-| | s
-+-+ user
++-+ determ
+|i| han
+| |missing va
+| |If INCLUDE
++-+ then user
|j| va
| | include
| | calculati
+-+ NOINCLUDE
|k| whic
| |
-+-+ user
-|l| va
-| | e
+| | user
++-+ va
+|l| e
+| |
| |
+-+
|m|
| |
-| |
+-+----------
+--+--+--+
mines the|
ndling of|
ariables.|
-NCLUDE is|
-set, then|
+E is set,|
r‑missing|
alues are|
ed in the|
7 8 9
])
AT_CLEANUP
+
+# Long string variables tend to end in lots of spaces. The ASCII
+# driver didn't handle this very well: it would essentially produce
+# one blank line in a cell for each trailing space. This test
+# checks for regression. See bug #38672.
+AT_SETUP([ASCII driver renders end of line spaces reasonably])
+AT_KEYWORDS([render rendering])
+AT_DATA([input], [dnl
+3 3
+@a
+@b
+@xyzzy @&t@
+@d
+@e
+@f
+@g
+@h
+@i
+])
+AT_CHECK([render-test --width=15 --length=15 input], [0], [dnl
++-+-+-----+
+|a|b|xyzzy|
++-+-+-----+
+|d|e| f|
++-+-+-----+
+|g|h| i|
++-+-+-----+
+])
+AT_CLEANUP