lexer: Remove lex_syntax_mode in favor of segmenter_mode.
[pspp] / src / ui / terminal / terminal-opts.c
index 45c503eecacc596c733a780ba7e754e5270c1e14..5a6a8fbd236acc335982f816d5e7d78c8394f74e 100644 (file)
@@ -22,9 +22,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-
 #include "data/settings.h"
-#include "data/file-name.h"
 #include "language/lexer/include-path.h"
 #include "libpspp/argv-parser.h"
 #include "libpspp/assertion.h"
@@ -39,6 +37,7 @@
 #include "output/driver.h"
 #include "output/driver-provider.h"
 #include "output/msglog.h"
+#include "output/pivot-table.h"
 
 #include "gl/error.h"
 #include "gl/localcharset.h"
@@ -57,9 +56,10 @@ struct terminal_opts
     bool has_output_driver;
     bool has_terminal_driver;
     bool has_error_file;
-    enum lex_syntax_mode *syntax_mode;
+    enum segmenter_mode *syntax_mode;
     bool *process_statrc;
     char **syntax_encoding;
+    char *table_look;
   };
 
 enum
@@ -73,6 +73,7 @@ enum
     OPT_INTERACTIVE,
     OPT_SYNTAX_ENCODING,
     OPT_NO_STATRC,
+    OPT_TABLE_LOOK,
     OPT_HELP,
     OPT_VERSION,
     N_TERMINAL_OPTIONS
@@ -89,6 +90,7 @@ static struct argv_option terminal_argv_options[N_TERMINAL_OPTIONS] =
     {"interactive", 'i', no_argument, OPT_INTERACTIVE},
     {"syntax-encoding", 0, required_argument, OPT_SYNTAX_ENCODING},
     {"no-statrc", 'r', no_argument, OPT_NO_STATRC},
+    {"table-look", 0, required_argument, OPT_TABLE_LOOK},
     {"help", 'h', no_argument, OPT_HELP},
     {"version", 'V', no_argument, OPT_VERSION},
   };
@@ -113,31 +115,6 @@ register_output_driver (struct terminal_opts *to)
     }
 }
 
-static void
-parse_output_option (struct terminal_opts *to, const char *option)
-{
-  const char *equals;
-  char *key, *value;
-
-  equals = strchr (option, '=');
-  if (equals == NULL)
-    {
-      error (0, 0, _("%s: output option missing `='"), option);
-      return;
-    }
-
-  key = xmemdup0 (option, equals - option);
-  if (string_map_contains (&to->options, key))
-    {
-      error (0, 0, _("%s: output option specified more than once"), key);
-      free (key);
-      return;
-    }
-
-  value = xmemdup0 (equals + 1, strlen (equals + 1));
-  string_map_insert_nocopy (&to->options, key, value);
-}
-
 static char *
 get_supported_formats (void)
 {
@@ -146,7 +123,6 @@ get_supported_formats (void)
   struct string_set format_set;
   char *format_string;
   const char *format;
-  size_t i;
 
   /* Get supported formats as unordered set. */
   string_set_init (&format_set);
@@ -172,7 +148,7 @@ usage (void)
   char *inc_path = string_array_join (include_path_default (), " ");
 
   printf (_("\
-PSPP, a program for statistical analysis of sample data.\n\
+PSPP, a program for statistical analysis of sampled data.\n\
 Usage: %s [OPTION]... FILE...\n\
 \n\
 Arguments to long options also apply to equivalent short options.\n\
@@ -184,6 +160,7 @@ Output options:\n\
   -O device={terminal|listing}  override device type for previous -o\n\
   -e, --error-file=FILE     append errors, warnings, and notes to FILE\n\
   --no-output               disable default output driver\n\
+  --table-look=FILE         use output style read from FILE\n\
 Supported output formats: %s\n\
 \n\
 Language options:\n\
@@ -237,7 +214,7 @@ terminal_option_callback (int id, void *to_)
       break;
 
     case OPT_OUTPUT_OPTION:
-      parse_output_option (to, optarg);
+      output_driver_parse_option (optarg, &to->options);
       break;
 
     case OPT_NO_OUTPUT:
@@ -247,11 +224,11 @@ terminal_option_callback (int id, void *to_)
       break;
 
     case OPT_BATCH:
-      *to->syntax_mode = LEX_SYNTAX_BATCH;
+      *to->syntax_mode = SEG_MODE_BATCH;
       break;
 
     case OPT_INTERACTIVE:
-      *to->syntax_mode = LEX_SYNTAX_INTERACTIVE;
+      *to->syntax_mode = SEG_MODE_INTERACTIVE;
       break;
 
     case OPT_SYNTAX_ENCODING:
@@ -262,6 +239,10 @@ terminal_option_callback (int id, void *to_)
       *to->process_statrc = false;
       break;
 
+    case OPT_TABLE_LOOK:
+      to->table_look = optarg;
+      break;
+
     case OPT_HELP:
       usage ();
       exit (EXIT_SUCCESS);
@@ -279,12 +260,12 @@ terminal_option_callback (int id, void *to_)
 
 struct terminal_opts *
 terminal_opts_init (struct argv_parser *ap,
-                    enum lex_syntax_mode *syntax_mode, bool *process_statrc,
+                    enum segmenter_mode *syntax_mode, bool *process_statrc,
                     char **syntax_encoding)
 {
   struct terminal_opts *to;
 
-  *syntax_mode = LEX_SYNTAX_AUTO;
+  *syntax_mode = SEG_MODE_AUTO;
   *process_statrc = true;
   *syntax_encoding = "Auto";
 
@@ -302,30 +283,9 @@ terminal_opts_init (struct argv_parser *ap,
   return to;
 }
 
-/* Return true iff the terminal appears to be an xterm with 
-   UTF-8 capabilities */
-static bool
-term_is_utf8_xterm (void)
-{
-  char *s = NULL;
-
-  if ( (s = getenv ("TERM")) && (0 == strcmp ("xterm", s)) )
-    if ( (s = getenv ("XTERM_LOCALE")) )
-      return strcasestr (s, "utf8") || strcasestr (s, "utf-8");
-
-  return false;
-}
-
 void
 terminal_opts_done (struct terminal_opts *to, int argc, char *argv[])
 {
-  if ((0 == strcmp (locale_charset (), "UTF-8"))
-      ||
-      (term_is_utf8_xterm ()) )
-    {
-      string_map_insert (&to->options, "box", "unicode");
-    }
-  
   register_output_driver (to);
   if (!to->has_output_driver)
     {
@@ -338,5 +298,16 @@ terminal_opts_done (struct terminal_opts *to, int argc, char *argv[])
     msglog_create ("-");
 
   string_map_destroy (&to->options);
+
+  if (to->table_look)
+    {
+      struct pivot_table_look *look;
+      char *s = pivot_table_look_read (to->table_look, &look);
+      if (s)
+        error (1, 0, "%s", s);
+      pivot_table_look_set_default (look);
+      pivot_table_look_unref (look);
+    }
+
   free (to);
 }