Patch #6258.
authorBen Pfaff <blp@gnu.org>
Tue, 6 Nov 2007 06:23:25 +0000 (06:23 +0000)
committerBen Pfaff <blp@gnu.org>
Tue, 6 Nov 2007 06:23:25 +0000 (06:23 +0000)
* command.c (report_state_mismatch): Replace code to construct an
error message from bits and pieces by a switch statement that
hard-codes each possible error.  Makes i18n easier.
Suggested by Chusslove Illich <caslav.ilic@gmx.net>.

* file-handle-def.c (fh_lock): Add comment that TYPE should be
marked with N_() in the caller.  Added these markings to each
caller too.  Should make i18n easier.
Suggested by Chusslove Illich <caslav.ilic@gmx.net>.

src/data/ChangeLog
src/data/file-handle-def.c
src/data/por-file-reader.c
src/data/por-file-writer.c
src/data/scratch-writer.c
src/data/sys-file-reader.c
src/data/sys-file-writer.c
src/language/ChangeLog
src/language/command.c
src/language/data-io/data-reader.c
src/language/data-io/data-writer.c

index 0353c63888fcdb143a9e9ce8d6d7e38d64080d15..16ba1ca11a4ad41f8ad3460e7a8dad51005aad03 100644 (file)
@@ -1,3 +1,12 @@
+2007-11-05  Ben Pfaff  <blp@gnu.org>
+
+       Patch #6258.  Reviewed by John Darrington.
+
+       * file-handle-def.c (fh_lock): Add comment that TYPE should be
+       marked with N_() in the caller.  Added these markings to each
+       caller too.  Should make i18n easier.
+       Suggested by Chusslove Illich <caslav.ilic@gmx.net>.
+
 2007-11-03  Ben Pfaff  <blp@gnu.org>
 
        Allow output files to overwrite input files (bug #21280).
 2007-11-03  Ben Pfaff  <blp@gnu.org>
 
        Allow output files to overwrite input files (bug #21280).
index 872559154469cceebbbf3272aab1702a319b80e8..0f6b142a72cd170758b59912ecfa48dc47cc81fb 100644 (file)
@@ -403,6 +403,10 @@ static unsigned int hash_fh_lock (const void *, const void *);
    and similarly for writing.  If successful, a reference to TYPE
    is retained, so it should probably be a string literal.
 
    and similarly for writing.  If successful, a reference to TYPE
    is retained, so it should probably be a string literal.
 
+   TYPE should be marked with N_() in the caller: that is, the
+   caller should not translate it with gettext, but fh_lock will
+   do so.
+
    ACCESS specifies whether the lock is for reading or writing.
    EXCLUSIVE is true to require exclusive access, false to allow
    sharing with other accessors.  Exclusive read access precludes
    ACCESS specifies whether the lock is for reading or writing.
    EXCLUSIVE is true to require exclusive access, false to allow
    sharing with other accessors.  Exclusive read access precludes
index 668a8429d5839d9f8fb810009ef50d24d25eb169..ce1f562f4f9389f323acacdeff5f606e289f68a7 100644 (file)
@@ -46,6 +46,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* portable_to_local[PORTABLE] translates the given portable
    character into the local character set. */
 
 /* portable_to_local[PORTABLE] translates the given portable
    character into the local character set. */
@@ -261,7 +262,9 @@ pfm_open_reader (struct file_handle *fh, struct dictionary **dict,
     goto error;
 
   /* Lock file. */
     goto error;
 
   /* Lock file. */
-  r->lock = fh_lock (fh, FH_REF_FILE, "portable file", FH_ACC_READ, false);
+  /* TRANSLATORS: this fragment will be interpolated into
+     messages in fh_lock() that identify types of files. */
+  r->lock = fh_lock (fh, FH_REF_FILE, N_("portable file"), FH_ACC_READ, false);
   if (r->lock == NULL)
     goto error;
 
   if (r->lock == NULL)
     goto error;
 
index 3d62078e6942635d00b83b727b03176f4e4a7096..fad89bf7682cbf77a0b7f6a8b270a4ee64c98ede 100644 (file)
@@ -49,6 +49,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* Maximum width of a variable in a portable file. */
 #define MAX_POR_WIDTH 255
 
 /* Maximum width of a variable in a portable file. */
 #define MAX_POR_WIDTH 255
@@ -142,7 +143,9 @@ pfm_open_writer (struct file_handle *fh, struct dictionary *dict,
     }
 
   /* Lock file. */
     }
 
   /* Lock file. */
-  w->lock = fh_lock (fh, FH_REF_FILE, "portable file", FH_ACC_WRITE, true);
+  /* TRANSLATORS: this fragment will be interpolated into
+     messages in fh_lock() that identify types of files. */
+  w->lock = fh_lock (fh, FH_REF_FILE, N_("portable file"), FH_ACC_WRITE, true);
   if (w->lock == NULL)
     goto error;
 
   if (w->lock == NULL)
     goto error;
 
index 70a65ce9b67760ec585c9a54878174f4abc300bf..e4d977fbfcfbef9d90588c0e43cac23041f8b386 100644 (file)
@@ -34,6 +34,8 @@
 
 #include "xalloc.h"
 
 
 #include "xalloc.h"
 
+#define N_(msgid) (msgid)
+
 /* A scratch file writer. */
 struct scratch_writer
   {
 /* A scratch file writer. */
 struct scratch_writer
   {
@@ -60,7 +62,9 @@ scratch_writer_open (struct file_handle *fh,
   size_t dict_value_cnt;
 
   /* Get exclusive write access to handle. */
   size_t dict_value_cnt;
 
   /* Get exclusive write access to handle. */
-  lock = fh_lock (fh, FH_REF_SCRATCH, "scratch file", FH_ACC_WRITE, true);
+  /* TRANSLATORS: this fragment will be interpolated into
+     messages in fh_lock() that identify types of files. */
+  lock = fh_lock (fh, FH_REF_SCRATCH, N_("scratch file"), FH_ACC_WRITE, true);
   if (lock == NULL)
     return NULL;
 
   if (lock == NULL)
     return NULL;
 
index 7c0312d2990e8953f519c507bb77b5bc1dd5b662..b00a7b236a891e97a6752eb9a748d50692e3965c 100644 (file)
@@ -192,7 +192,9 @@ sfm_open_reader (struct file_handle *fh, struct dictionary **dict,
   r->has_long_var_names = false;
   r->opcode_idx = sizeof r->opcodes;
 
   r->has_long_var_names = false;
   r->opcode_idx = sizeof r->opcodes;
 
-  r->lock = fh_lock (fh, FH_REF_FILE, "system file", FH_ACC_READ, false);
+  /* TRANSLATORS: this fragment will be interpolated into
+     messages in fh_lock() that identify types of files. */
+  r->lock = fh_lock (fh, FH_REF_FILE, N_("system file"), FH_ACC_READ, false);
   if (r->lock == NULL)
     goto error;
 
   if (r->lock == NULL)
     goto error;
 
index d25d5e8d62529606474901336cfdb079701c4527..3e0d3499c9cd543450929e1b5dbb628552bc6640 100644 (file)
@@ -53,6 +53,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* Compression bias used by PSPP.  Values between (1 -
    COMPRESSION_BIAS) and (251 - COMPRESSION_BIAS) inclusive can be
 
 /* Compression bias used by PSPP.  Values between (1 -
    COMPRESSION_BIAS) and (251 - COMPRESSION_BIAS) inclusive can be
@@ -184,7 +185,9 @@ sfm_open_writer (struct file_handle *fh, struct dictionary *d,
                                                &w->sfm_var_cnt);
 
   /* Open file handle as an exclusive writer. */
                                                &w->sfm_var_cnt);
 
   /* Open file handle as an exclusive writer. */
-  w->lock = fh_lock (fh, FH_REF_FILE, "system file", FH_ACC_WRITE, true);
+  /* TRANSLATORS: this fragment will be interpolated into
+     messages in fh_lock() that identify types of files. */
+  w->lock = fh_lock (fh, FH_REF_FILE, N_("system file"), FH_ACC_WRITE, true);
   if (w->lock == NULL)
     goto error;
 
   if (w->lock == NULL)
     goto error;
 
index 840278b2b04654734f816b527bc84b5d68e4a76e..65b97e6bc800b6f71c87e342260860863076fe2e 100644 (file)
@@ -1,3 +1,12 @@
+2007-11-05  Ben Pfaff  <blp@gnu.org>
+
+       Patch #6258.  Reviewed by John Darrington.
+
+       * command.c (report_state_mismatch): Replace code to construct an
+       error message from bits and pieces by a switch statement that
+       hard-codes each possible error.  Makes i18n easier.
+       Suggested by Chusslove Illich <caslav.ilic@gmx.net>.
+
 2007-09-22  Ben Pfaff  <blp@gnu.org>
 
        Bug #21128.  Reviewed by John Darrington.
 2007-09-22  Ben Pfaff  <blp@gnu.org>
 
        Bug #21128.  Reviewed by John Darrington.
index 62538c64ff677465e18c25767c79d7aba3bcada3..42580166c60e4fbcd708747d6c53fd8f3de2f293 100644 (file)
@@ -621,32 +621,72 @@ report_state_mismatch (const struct command *command, enum cmd_state state)
   assert (!in_correct_state (command, state));
   if (state == CMD_STATE_INITIAL || state == CMD_STATE_DATA)
     {
   assert (!in_correct_state (command, state));
   if (state == CMD_STATE_INITIAL || state == CMD_STATE_DATA)
     {
-      const char *allowed[3];
-      int allowed_cnt;
-      char *s;
-
-      allowed_cnt = 0;
-      if (command->states & S_INITIAL)
-        allowed[allowed_cnt++] = _("before the active file has been defined");
-      else if (command->states & S_DATA)
-        allowed[allowed_cnt++] = _("after the active file has been defined");
-      if (command->states & S_INPUT_PROGRAM)
-        allowed[allowed_cnt++] = _("inside INPUT PROGRAM");
-      if (command->states & S_FILE_TYPE)
-        allowed[allowed_cnt++] = _("inside FILE TYPE");
-
-      if (allowed_cnt == 1)
-        s = xstrdup (allowed[0]);
-      else if (allowed_cnt == 2)
-        s = xasprintf (_("%s or %s"), allowed[0], allowed[1]);
-      else if (allowed_cnt == 3)
-        s = xasprintf (_("%s, %s, or %s"), allowed[0], allowed[1], allowed[2]);
-      else
-        NOT_REACHED ();
-
-      msg (SE, _("%s is allowed only %s."), command->name, s);
-
-      free (s);
+      switch (command->states)
+        {
+          /* One allowed state. */
+        case S_INITIAL:
+          msg (SE, _("%s is allowed only before the active file has "
+                     "been defined."), command->name);
+          break;
+        case S_DATA:
+          msg (SE, _("%s is allowed only after the active file has "
+                     "been defined."), command->name);
+          break;
+        case S_INPUT_PROGRAM:
+          msg (SE, _("%s is allowed only inside INPUT PROGRAM."),
+               command->name);
+          break;
+        case S_FILE_TYPE:
+          msg (SE, _("%s is allowed only inside FILE TYPE."), command->name);
+          break;
+
+          /* Two allowed states. */
+        case S_INITIAL | S_DATA:
+          NOT_REACHED ();
+        case S_INITIAL | S_INPUT_PROGRAM:
+          msg (SE, _("%s is allowed only before the active file has "
+                     "been defined or inside INPUT PROGRAM."), command->name);
+          break;
+        case S_INITIAL | S_FILE_TYPE:
+          msg (SE, _("%s is allowed only before the active file has "
+                     "been defined or inside FILE TYPE."), command->name);
+          break;
+        case S_DATA | S_INPUT_PROGRAM:
+          msg (SE, _("%s is allowed only after the active file has "
+                     "been defined or inside INPUT PROGRAM."), command->name);
+          break;
+        case S_DATA | S_FILE_TYPE:
+          msg (SE, _("%s is allowed only after the active file has "
+                     "been defined or inside FILE TYPE."), command->name);
+          break;
+        case S_INPUT_PROGRAM | S_FILE_TYPE:
+          msg (SE, _("%s is allowed only inside INPUT PROGRAM "
+                     "or inside FILE TYPE."), command->name);
+          break;
+
+          /* Three allowed states. */
+        case S_DATA | S_INPUT_PROGRAM | S_FILE_TYPE:
+          msg (SE, _("%s is allowed only after the active file has "
+                     "been defined, inside INPUT PROGRAM, or inside "
+                     "FILE TYPE."), command->name);
+          break;
+        case S_INITIAL | S_INPUT_PROGRAM | S_FILE_TYPE:
+          msg (SE, _("%s is allowed only before the active file has "
+                     "been defined, inside INPUT PROGRAM, or inside "
+                     "FILE TYPE."), command->name);
+          break;
+        case S_INITIAL | S_DATA | S_FILE_TYPE:
+          NOT_REACHED ();
+        case S_INITIAL | S_DATA | S_INPUT_PROGRAM:
+          NOT_REACHED ();
+
+          /* Four allowed states. */
+        case S_INITIAL | S_DATA | S_INPUT_PROGRAM | S_FILE_TYPE:
+          NOT_REACHED ();
+
+        default:
+          NOT_REACHED ();
+        }
     }
   else if (state == CMD_STATE_INPUT_PROGRAM)
     msg (SE, _("%s is not allowed inside INPUT PROGRAM."), command->name);
     }
   else if (state == CMD_STATE_INPUT_PROGRAM)
     msg (SE, _("%s is not allowed inside INPUT PROGRAM."), command->name);
index 6113bf744c92b112adf5f89a7fc763832894671c..c4e7183056147e3df88f63de25efd58bf23abff5 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* Flags for DFM readers. */
 enum dfm_reader_flags
 
 /* Flags for DFM readers. */
 enum dfm_reader_flags
@@ -110,7 +111,9 @@ dfm_open_reader (struct file_handle *fh, struct lexer *lexer)
   struct dfm_reader *r;
   struct fh_lock *lock;
 
   struct dfm_reader *r;
   struct fh_lock *lock;
 
-  lock = fh_lock (fh, FH_REF_FILE | FH_REF_INLINE, "data file",
+  /* TRANSLATORS: this fragment will be interpolated into
+     messages in fh_lock() that identify types of files. */
+  lock = fh_lock (fh, FH_REF_FILE | FH_REF_INLINE, N_("data file"),
                   FH_ACC_READ, false);
   if (lock == NULL)
     return NULL;
                   FH_ACC_READ, false);
   if (lock == NULL)
     return NULL;
index b1b955c85478c5f5be2407f7e43b9b33690409ed..32caa1e22d0475a51e9871a9847654410028a980 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* Data file writer. */
 struct dfm_writer
 
 /* Data file writer. */
 struct dfm_writer
@@ -52,7 +53,7 @@ dfm_open_writer (struct file_handle *fh)
   struct dfm_writer *w;
   struct fh_lock *lock;
 
   struct dfm_writer *w;
   struct fh_lock *lock;
 
-  lock = fh_lock (fh, FH_REF_FILE, "data file", FH_ACC_WRITE, false);
+  lock = fh_lock (fh, FH_REF_FILE, N_("data file"), FH_ACC_WRITE, false);
   if (lock == NULL)
     return NULL;
 
   if (lock == NULL)
     return NULL;