output: Implement styling for footnotes.
[pspp] / tests / output / render-test.c
index 03e4238e4142762349c1b3112666ae71b9ce0016..e5eea91d94fefd0b2f9ae921e87699bf3b5eb5bf 100644 (file)
@@ -39,7 +39,8 @@
 static int transpose;
 
 /* --emphasis: ASCII driver emphasis option. */
-static char *emphasis;
+static bool bold;
+static bool underline;
 
 /* --box: ASCII driver box option. */
 static char *box;
@@ -143,8 +144,8 @@ configure_drivers (int width, int length, int min_break)
   if (min_break >= 0)
     string_map_insert_nocopy (&options, xstrdup ("min-hbreak"),
                               xasprintf ("%d", min_break));
-  if (emphasis != NULL)
-    string_map_insert (&options, "emphasis", emphasis);
+  if (bold || underline)
+    string_map_insert (&options, "emphasis", "true");
   if (box != NULL)
     string_map_insert (&options, "box", box);
 
@@ -281,7 +282,23 @@ parse_options (int argc, char **argv)
           break;
 
         case OPT_EMPHASIS:
-          emphasis = optarg;
+          if (!strcmp (optarg, "bold"))
+            {
+              bold = true;
+              underline = false;
+            }
+          else if (!strcmp (optarg, "underline"))
+            {
+              bold = false;
+              underline = true;
+            }
+          else if (!strcmp (optarg, "none"))
+            {
+              bold = underline = false;
+            }
+          else
+            error (1, 0, "argument to --emphasis must be \"bold\" or "
+                   "\"underline\" or \"none\"");
           break;
 
         case OPT_BOX:
@@ -353,6 +370,7 @@ read_table (FILE *stream)
   int n_input = 0;
   int nr, nc, hl, hr, ht, hb;
   int r, c;
+  size_t n_footnotes = 0;
 
   if (fgets (buffer, sizeof buffer, stream) == NULL
       || (n_input = sscanf (buffer, "%d %d %d %d %d %d",
@@ -425,17 +443,17 @@ read_table (FILE *stream)
                 break;
 
               case '(':
-                opt &= ~TAB_ALIGNMENT;
+                opt &= ~TAB_HALIGN;
                 opt |= TAB_LEFT;
                 break;
 
               case ')':
-                opt &= ~TAB_ALIGNMENT;
+                opt &= ~TAB_HALIGN;
                 opt |= TAB_RIGHT;
                 break;
 
               case '|':
-                opt &= ~TAB_ALIGNMENT;
+                opt &= ~TAB_HALIGN;
                 opt |= TAB_CENTER;
                 break;
 
@@ -454,7 +472,13 @@ read_table (FILE *stream)
               tab_joint_text (tab, c, r, c + cs - 1, r + rs - 1, opt,
                               content);
             else
-              tab_footnote (tab, c, r, "%s", content);
+              {
+                char marker[2] = { 'a' + n_footnotes, '\0' };
+                struct footnote *f = tab_create_footnote (
+                  tab, n_footnotes, content, marker, NULL);
+                tab_add_footnote (tab, c, r, f);
+                n_footnotes++;
+              }
         }
 
   return &tab->table;
@@ -478,7 +502,8 @@ draw (FILE *stream)
         continue;
 
       if (sscanf (buffer, "%d %d %d %[^\n]", &x, &y, &emph, text) == 4)
-        ascii_test_write (ascii_driver, text, x, y, emph ? TAB_EMPH : 0);
+        ascii_test_write (ascii_driver, text, x, y, emph ? bold : false,
+                          emph ? underline : false);
       else if (sscanf (buffer, "set-length %d %d", &y, &length) == 2)
         ascii_test_set_length (ascii_driver, y, length);
       else