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).
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.
 
+   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
index 668a8429d5839d9f8fb810009ef50d24d25eb169..ce1f562f4f9389f323acacdeff5f606e289f68a7 100644 (file)
@@ -46,6 +46,7 @@
 
 #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. */
@@ -261,7 +262,9 @@ pfm_open_reader (struct file_handle *fh, struct dictionary **dict,
     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;
 
index 3d62078e6942635d00b83b727b03176f4e4a7096..fad89bf7682cbf77a0b7f6a8b270a4ee64c98ede 100644 (file)
@@ -49,6 +49,7 @@
 
 #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
@@ -142,7 +143,9 @@ pfm_open_writer (struct file_handle *fh, struct dictionary *dict,
     }
 
   /* 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;
 
index 70a65ce9b67760ec585c9a54878174f4abc300bf..e4d977fbfcfbef9d90588c0e43cac23041f8b386 100644 (file)
@@ -34,6 +34,8 @@
 
 #include "xalloc.h"
 
+#define N_(msgid) (msgid)
+
 /* 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. */
-  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;
 
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->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;
 
index d25d5e8d62529606474901336cfdb079701c4527..3e0d3499c9cd543450929e1b5dbb628552bc6640 100644 (file)
@@ -53,6 +53,7 @@
 
 #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
@@ -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->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;
 
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.
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)
     {
-      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);
index 6113bf744c92b112adf5f89a7fc763832894671c..c4e7183056147e3df88f63de25efd58bf23abff5 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* 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;
 
-  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;
index b1b955c85478c5f5be2407f7e43b9b33690409ed..32caa1e22d0475a51e9871a9847654410028a980 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
+#define N_(msgid) (msgid)
 
 /* 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;
 
-  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;