i18n: Introduce C_ENCODING as replacement for LEGACY_NATIVE.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 13 Feb 2011 19:49:30 +0000 (11:49 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 20 Feb 2011 00:57:01 +0000 (16:57 -0800)
The LEGACY_NATIVE name seems a bit awkward for something that is just the
name of the encoding for strings in C source code, that is, the C locale,
so this commit renames it to C_ENCODING and moves it to i18n.h with the
rest of the encoding-related functions.

In addition, PSPP assumes in various places that the local system has
ASCII-based locales.  I don't think there's much point in pretending to
support EBCDIC, so this commit removes that little bit of support.

14 files changed:
src/data/data-in.c
src/data/data-out.c
src/data/file-handle-def.c
src/language/data-io/print.c
src/language/expressions/helpers.h
src/language/expressions/operations.def
src/language/lexer/value-parser.c
src/language/xforms/recode.c
src/libpspp/i18n.h
src/libpspp/legacy-encoding.c
src/libpspp/legacy-encoding.h
src/output/tab.c
src/ui/gui/text-data-import-dialog.c
src/ui/syntax-gen.c

index 45ff609975225bb399827b3401db67192b45d462..03b25fe7c448c777082d2ebb37a85ccaf7423f64 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 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
@@ -116,7 +116,7 @@ data_in (struct substring input, const char *input_encoding,
       /* We're going to parse these into numbers.  For this purpose we want to
          deal with them in the local "C" encoding.  Any character not in that
          encoding wouldn't be valid anyhow. */
-      dest_encoding = LEGACY_NATIVE;
+      dest_encoding = C_ENCODING;
     }
   else if (cat & (FMT_CAT_BINARY | FMT_CAT_LEGACY))
     {
@@ -130,7 +130,7 @@ data_in (struct substring input, const char *input_encoding,
         {
           /* We want the hex digits in the local "C" encoding, even though the
              result may not be in that encoding. */
-          dest_encoding = LEGACY_NATIVE;
+          dest_encoding = C_ENCODING;
         }
       else
         {
@@ -245,7 +245,7 @@ has_implied_decimals (struct substring input, const char *input_encoding,
       return false;
     }
 
-  s = recode_string (LEGACY_NATIVE, input_encoding,
+  s = recode_string (C_ENCODING, input_encoding,
                      ss_data (input), ss_length (input));
   retval = (format == FMT_Z
             ? strchr (s, '.') == NULL
index 94a6130adb154bd06b61901414e4209498cbf106..ca5fcecef79a0b231a482c4a4bb7c429b3a5e372 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009, 2011 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
@@ -104,10 +104,10 @@ data_out_legacy (const union value *input, const char *encoding,
   assert (fmt_check_output (format));
 
   converters[format->type] (input, format, output);
-  if (0 != strcmp (encoding, LEGACY_NATIVE)
+  if (0 != strcmp (encoding, C_ENCODING)
       && fmt_get_category (format->type) != FMT_CAT_BINARY)
     {
-      char *s  = recode_string (encoding, LEGACY_NATIVE, output, format->w );
+      char *s  = recode_string (encoding, C_ENCODING, output, format->w );
       memcpy (output, s, format->w);
       free (s);
     }
index d025ff6a3a35b4a493b7f6b72f0d3ed61ff461e1..2d69e2586d256a320ac1f47a1fb230669d45281b 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 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
@@ -25,6 +25,7 @@
 
 #include <libpspp/compiler.h>
 #include <libpspp/hmap.h>
+#include <libpspp/i18n.h>
 #include <libpspp/ll.h>
 #include <libpspp/message.h>
 #include <libpspp/str.h>
@@ -260,7 +261,7 @@ const struct fh_properties *
 fh_default_properties (void)
 {
   static const struct fh_properties default_properties
-    = {FH_MODE_TEXT, 1024, 4, LEGACY_NATIVE};
+    = {FH_MODE_TEXT, 1024, 4, C_ENCODING};
   return &default_properties;
 }
 
@@ -333,7 +334,7 @@ const char *
 fh_get_legacy_encoding (const struct file_handle *handle)
 {
   assert (handle->referent & (FH_REF_FILE | FH_REF_INLINE));
-  return (handle->referent == FH_REF_FILE ? handle->encoding : LEGACY_NATIVE);
+  return (handle->referent == FH_REF_FILE ? handle->encoding : C_ENCODING);
 }
 
 /* Returns the scratch file handle associated with HANDLE.
index ada59c3071f1bf6b2f10952e8773beb6144c6d57..a07ca2d8c54baa3f65b54aa9eeb60c005a7e6f01 100644 (file)
@@ -454,7 +454,7 @@ print_trns_proc (void *trns_, struct ccase **c, casenumber case_num UNUSED)
 {
   struct print_trns *trns = trns_;
   bool eject = trns->eject;
-  char encoded_space = recode_byte (trns->encoding, LEGACY_NATIVE, ' ');
+  char encoded_space = recode_byte (trns->encoding, C_ENCODING, ' ');
   int record = 1;
   struct prt_out_spec *spec;
 
@@ -479,11 +479,11 @@ print_trns_proc (void *trns_, struct ccase **c, casenumber case_num UNUSED)
       else
         {
           ds_put_substring (&trns->line, ds_ss (&spec->string));
-          if (0 != strcmp (trns->encoding, LEGACY_NATIVE))
+          if (0 != strcmp (trns->encoding, C_ENCODING))
             {
               size_t length = ds_length (&spec->string);
               char *data = ss_data (ds_tail (&trns->line, length));
-             char *s = recode_string (trns->encoding, LEGACY_NATIVE, data, length);
+             char *s = recode_string (trns->encoding, C_ENCODING, data, length);
              memcpy (data, s, length);
              free (s);
             }
@@ -518,7 +518,7 @@ flush_records (struct print_trns *trns, int target_record,
           else
             leader = '1';
         }
-      line[0] = recode_byte (trns->encoding, LEGACY_NATIVE, leader);
+      line[0] = recode_byte (trns->encoding, C_ENCODING, leader);
 
       if (trns->writer == NULL)
         tab_output_text (TAB_FIX, &line[1]);
index cb59c206a7599334246402cc26265854562d8483..59be40056dcf7cc3f50317e280e42d42ae3858ff 100644 (file)
@@ -22,6 +22,7 @@
 #include <data/vector.h>
 #include <language/expressions/public.h>
 #include <libpspp/compiler.h>
+#include <libpspp/i18n.h>
 #include <libpspp/message.h>
 #include <libpspp/misc.h>
 #include <libpspp/str.h>
index bdb6ed2b911c70af0915e3e689c3308c9dadc67d..207551b7eaf9c16c39bc0cec1c48173b396e3c7f 100644 (file)
@@ -585,9 +585,9 @@ function NUMBER (string s, ni_format f)
 
   if (s.length > f->w)
     s.length = f->w;
-  error = data_in (s, LEGACY_NATIVE, f->type, &out, 0, NULL);
+  error = data_in (s, C_ENCODING, f->type, &out, 0, NULL);
   if (error == NULL)
-    data_in_imply_decimals (s, LEGACY_NATIVE, f->type, f->d, &out);
+    data_in_imply_decimals (s, C_ENCODING, f->type, f->d, &out);
   else
     {
       msg (SE, "Cannot parse `%.*s' as format %s: %s",
@@ -607,7 +607,7 @@ absorb_miss string function STRING (x, no_format f)
   v.f = x;
 
   assert (!fmt_is_string (f->type));
-  s = data_out (&v, LEGACY_NATIVE, f);
+  s = data_out (&v, C_ENCODING, f);
   dst = alloc_string (e, strlen (s));
   strcpy (dst.string, s);
   free (s);
index 51addbbe0b1308dc7ee9d23d29c9f6fdb7810952..649bbf2498c248c57afc17a55edda014ab296e8f 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006, 2009, 2010, 2011 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
@@ -25,6 +25,7 @@
 #include "data/value.h"
 #include "language/lexer/lexer.h"
 #include "libpspp/cast.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/str.h"
 
@@ -106,8 +107,7 @@ parse_number (struct lexer *lexer, double *x, const enum fmt_type *format)
 
       assert (fmt_get_category (*format) != FMT_CAT_STRING);
 
-      if (!data_in_msg (lex_tokss (lexer), LEGACY_NATIVE,
-                        *format, &v, 0, NULL))
+      if (!data_in_msg (lex_tokss (lexer), C_ENCODING, *format, &v, 0, NULL))
         return false;
 
       lex_get (lexer);
index 236b49832e07f0be63b0900a1c3e66733f05711e..62cf387eee9faf30b6afa4cff210c17124e76a26 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010, 2011 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
@@ -34,6 +34,7 @@
 #include "libpspp/assertion.h"
 #include "libpspp/cast.h"
 #include "libpspp/compiler.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/pool.h"
 #include "libpspp/str.h"
@@ -632,7 +633,7 @@ find_src_string (struct recode_trns *trns, const uint8_t *value,
             char *error;
 
             error = data_in (ss_buffer (CHAR_CAST_BUG (char *, value), width),
-                             LEGACY_NATIVE, FMT_F, &uv, 0, encoding);
+                             C_ENCODING, FMT_F, &uv, 0, encoding);
             match = error == NULL;
             free (error);
 
index f1d4d4a25aeebcefbffede949bef6dab0d0b9276..e016eab4a557437f343acb6a8fae5dccfab275f8 100644 (file)
@@ -24,6 +24,11 @@ void  i18n_init (void);
 
 #define UTF8 "UTF-8"
 
+/* The encoding of literal strings in PSPP source code, as seen at execution
+   time.  In fact this is likely to be some extended ASCII encoding, such as
+   UTF-8 or ISO-8859-1, but ASCII is adequate for our purposes. */
+#define C_ENCODING "ASCII"
+
 struct pool;
 
 char recode_byte (const char *to, const char *from, char);
index 18a621970c85da745917dcf2b179c9945862e13e..bbbf8a277ffba9f65fc02b03adc6dc2db2f051ef 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2011 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
@@ -24,7 +24,7 @@ char
 legacy_to_native (const char *from, char c)
 {
   char x;
-  char *s = recode_string (LEGACY_NATIVE, from, &c, 1);
+  char *s = recode_string (C_ENCODING, from, &c, 1);
   x = s[0];
   free (s);
   return x;
@@ -34,7 +34,7 @@ char
 legacy_from_native (const char *to, char c)
 {
   char x;
-  char *s = recode_string (to, LEGACY_NATIVE, &c, 1);
+  char *s = recode_string (to, C_ENCODING, &c, 1);
   x = s[0];
   free (s);
   return x;
index c6ae0ab4aa2bb25faf9f074436aa3bd9637bb137..560cbf87a90bf8226493c65185542642740e7aba 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2011 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
 
 #include <libpspp/compiler.h>
 
-#if 'A' == 0x41
-#define  LEGACY_NATIVE "ASCII"
-#elif 'A' == 0xc1
-#define  LEGACY_NATIVE "EBCDIC-US"
-#else
-#error Cannot detect native character set.
-#endif
-
 char legacy_to_native (const char *from, char) PURE_FUNCTION;
 char legacy_from_native (const char *to, char) PURE_FUNCTION;
 
-
 #endif /* libpspp/legacy-encoding.h */
index e4ff158ccd39c74a5c2cb71c240cb955f9d1f477..fd4685579756dfefda936f95b36597c777262ab4 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 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
@@ -30,6 +30,7 @@
 #include <data/dictionary.h>
 #include <libpspp/assertion.h>
 #include <libpspp/compiler.h>
+#include <libpspp/i18n.h>
 #include <libpspp/misc.h>
 #include <libpspp/pool.h>
 #include <output/driver.h>
@@ -416,7 +417,7 @@ tab_fixed (struct tab_table *table, int c, int r, unsigned char opt,
 #endif
 
   double_value.f = val;
-  s = data_out_pool (&double_value, LEGACY_NATIVE, &f, table->container);
+  s = data_out_pool (&double_value, C_ENCODING, &f, table->container);
 
   table->cc[c + r * table->cf] = s + strspn (s, " ");
   table->ct[c + r * table->cf] = opt;
@@ -458,7 +459,7 @@ tab_double (struct tab_table *table, int c, int r, unsigned char opt,
 #endif
 
   double_value.f = val;
-  s = data_out_pool (&double_value, LEGACY_NATIVE, fmt, table->container);
+  s = data_out_pool (&double_value, C_ENCODING, fmt, table->container);
   table->cc[c + r * table->cf] = s + strspn (s, " ");
   table->ct[c + r * table->cf] = opt;
 }
index 298fd18d95cec244e4f3edf6c0791a52124b987f..e5c48fdb217c83684c640520bd993f2d4a20e4b9 100644 (file)
@@ -32,6 +32,7 @@
 #include "language/data-io/data-parser.h"
 #include "language/lexer/lexer.h"
 #include "libpspp/assertion.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "ui/gui/checkbox-treeview.h"
 #include "ui/gui/descriptives-dialog.h"
@@ -1768,8 +1769,7 @@ parse_field (struct import_assistant *ia,
     {
       char *error;
 
-      error = data_in (field, LEGACY_NATIVE, in->type, &val,
-                       var_get_width (var),
+      error = data_in (field, C_ENCODING, in->type, &val, var_get_width (var),
                        dict_get_encoding (ia->formats.dict));
       if (error != NULL)
         {
index 9221eae4d6a554c09e87275884ab496d35980ba8..d829d80a2bc7662274e98c5040c4cbf547b36e51 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2008, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2010, 2011 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
@@ -27,6 +27,7 @@
 #include "data/value.h"
 #include "libpspp/assertion.h"
 #include "libpspp/cast.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/str.h"
 
@@ -156,8 +157,7 @@ syntax_gen_number (struct string *output,
       s = data_out (&v_in, "FIXME",  format);
 
       /* FIXME: UTF8 encoded strings will fail here */
-      error = data_in (ss_cstr (s), LEGACY_NATIVE,
-                       format->type, &v_out, 0, NULL);
+      error = data_in (ss_cstr (s), C_ENCODING, format->type, &v_out, 0, NULL);
       ok = error == NULL;
       free (error);