lexer: Improve translatability of lex_error().
[pspp] / src / language / dictionary / numeric.c
index f661d69a122b2d34fdcef8fb89c26f43583a62ae..41f3c79a67b8bcc3ea5b1194f770a93535f86713 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2010 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
@@ -21,6 +21,7 @@
 #include <data/dictionary.h>
 #include <data/procedure.h>
 #include <data/variable.h>
+#include <data/format.h>
 #include <language/command.h>
 #include <language/lexer/format-parser.h>
 #include <language/lexer/lexer.h>
@@ -42,13 +43,13 @@ cmd_numeric (struct lexer *lexer, struct dataset *ds)
   char **v;
   size_t nv;
 
-  /* Format spec for variables to create.  f.type==-1 if default is to
-     be used. */
-  struct fmt_spec f;
-
   do
     {
-      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NONE))
+      /* Format spec for variables to create.  f.type==-1 if default is to
+        be used. */
+      struct fmt_spec f;
+
+      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NO_DUPLICATE))
        return CMD_FAILURE;
 
       /* Get the optional format specification. */
@@ -56,6 +57,10 @@ cmd_numeric (struct lexer *lexer, struct dataset *ds)
        {
          if (!parse_format_specifier (lexer, &f))
            goto fail;
+
+         if ( ! fmt_check_output (&f))
+           goto fail;
+
          if (fmt_is_string (f.type))
            {
               char str[FMT_STRING_LEN_MAX + 1];
@@ -122,7 +127,7 @@ cmd_string (struct lexer *lexer, struct dataset *ds)
 
   do
     {
-      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NONE))
+      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NO_DUPLICATE))
        return CMD_FAILURE;
 
       if (!lex_force_match (lexer, '(')