Merge 'psppsheet' into 'master'.
[pspp] / src / output / ascii.c
index 756235c5cbf6cae7183e19d4a287ff6566840c7a..78626cf13ff45912d7d0c5b689fefc1ba35a512f 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011, 2012, 2013 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
@@ -120,13 +120,14 @@ static const ucs4_t unicode_box_chars[N_BOX] =
     0x2564, 0x256a, 0x256c,
     0x2564, 0x256a, 0x256c,
     0x2554, 0x2560, 0x2560,
+    0x2560, 0x256c, 0x256c,
     0x2566, 0x256c, 0x256c,
   };
 
 static inline int
 make_box_index (int left, int right, int top, int bottom)
 {
-  return ((right * 3 + bottom) * 3 + left) * 3 + top;
+  return ((right * RENDER_N_LINES + bottom) * RENDER_N_LINES + left) * RENDER_N_LINES + top;
 }
 
 /* How to emphasize text. */
@@ -857,6 +858,7 @@ ascii_layout_cell (struct ascii_driver *a, const struct table_cell *cell,
       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; )
@@ -892,25 +894,27 @@ ascii_layout_cell (struct ascii_driver *a, const struct table_cell *cell,
             }
           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];