dictionary: Make dict_create() take the new dictionary's encoding.
[pspp-builds.git] / src / language / data-io / data-list.c
index 043b424db77a6e3303fd845438ef8ff2911f164c..8ab758849e5b3d0126800741dcd92fe1897fc0c3 100644 (file)
@@ -25,9 +25,9 @@
 #include "data/case.h"
 #include "data/casereader.h"
 #include "data/data-in.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/transformations.h"
 #include "data/variable.h"
@@ -42,6 +42,7 @@
 #include "language/lexer/variable-parser.h"
 #include "libpspp/assertion.h"
 #include "libpspp/compiler.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/misc.h"
 #include "libpspp/pool.h"
@@ -85,7 +86,9 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds)
   struct pool *tmp_pool;
   bool ok;
 
-  dict = in_input_program () ? dataset_dict (ds) : dict_create ();
+  dict = (in_input_program ()
+          ? dataset_dict (ds)
+          : dict_create (get_default_encoding ()));
   parser = data_parser_create (dict);
   reader = NULL;
 
@@ -204,6 +207,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds)
                         }
                       else
                         {
+                          /* XXX should support multibyte UTF-8 characters */
                           lex_error (lexer, NULL);
                           ds_destroy (&delims);
                           goto error;
@@ -237,13 +241,9 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds)
     }
   type = data_parser_get_type (parser);
 
-  if (! ds_is_empty (&encoding))
-    {
-      if ( NULL == fh)
-       msg (MW, _("Encoding should not be specified for inline data. It will be ignored."));
-      else
-       dict_set_encoding (dict, ds_cstr (&encoding));
-    }
+  if (! ds_is_empty (&encoding) && NULL == fh)
+    msg (MW, _("Encoding should not be specified for inline data. It will be "
+               "ignored."));
 
   if (fh == NULL)
     fh = fh_inline_file ();
@@ -330,7 +330,7 @@ parse_fixed (struct lexer *lexer, struct dictionary *dict,
 
       /* Parse everything. */
       if (!parse_record_placement (lexer, &record, &column)
-          || !parse_DATA_LIST_vars_pool (lexer, tmp_pool,
+          || !parse_DATA_LIST_vars_pool (lexer, dict, tmp_pool,
                                         &names, &name_cnt, PV_NONE)
           || !parse_var_placements (lexer, tmp_pool, name_cnt, true,
                                     &formats, &format_cnt))
@@ -422,7 +422,7 @@ parse_free (struct lexer *lexer, struct dictionary *dict,
       size_t name_cnt;
       size_t i;
 
-      if (!parse_DATA_LIST_vars_pool (lexer, tmp_pool,
+      if (!parse_DATA_LIST_vars_pool (lexer, dict, tmp_pool,
                                      &name, &name_cnt, PV_NONE))
        return false;