output: Introduce group_item in place of TEXT_ITEM_COMMAND_OPEN and CLOSE.
[pspp] / src / language / command.c
index 0502ff9d00042e473d32d50235aedd4d150d35f1..0a198bc94c4f6015c128477cd9641abc42136030 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012, 2013, 2014 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
@@ -36,7 +36,7 @@
 #include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/str.h"
-#include "output/text-item.h"
+#include "output/group-item.h"
 
 #include "xalloc.h"
 #include "xmalloca.h"
 static inline bool
 cmd_result_is_valid (enum cmd_result result)
 {
-  return (result == CMD_SUCCESS || result == CMD_EOF || result == CMD_FINISH
-          || (result >= CMD_PRIVATE_FIRST && result <= CMD_PRIVATE_LAST)
-          || result == CMD_FAILURE || result == CMD_NOT_IMPLEMENTED
-          || result == CMD_CASCADING_FAILURE);
+  switch (result)
+    {
+    case CMD_SUCCESS:
+    case CMD_EOF:
+    case CMD_FINISH:
+    case CMD_DATA_LIST:
+    case CMD_END_CASE:
+    case CMD_END_FILE:
+    case CMD_FAILURE:
+    case CMD_NOT_IMPLEMENTED:
+    case CMD_CASCADING_FAILURE:
+      return true;
+
+    default:
+      return false;
+    }
 }
 
 /* Returns true if RESULT indicates success,
@@ -138,7 +150,6 @@ cmd_parse_in_state (struct lexer *lexer, struct dataset *ds,
   ds = session_active_dataset (session);
   assert (!proc_is_open (ds));
   unset_cmd_algorithm ();
-  dict_clear_aux (dataset_dict (ds));
   if (!dataset_end_of_command (ds))
     result = CMD_CASCADING_FAILURE;
 
@@ -188,7 +199,7 @@ do_parse_command (struct lexer *lexer,
       result = CMD_FAILURE;
       goto finish;
     }
-  text_item_submit (text_item_create (TEXT_ITEM_COMMAND_OPEN, command->name));
+  group_open_item_submit (group_open_item_create (command->name));
   opened = true;
 
   if (command->function == NULL)
@@ -231,12 +242,12 @@ finish:
     result = lex_end_of_command (lexer);
 
   lex_discard_rest_of_command (lexer);
-  while (lex_token (lexer) == T_ENDCMD)
-    lex_get (lexer);
+  if (result != CMD_EOF && result != CMD_FINISH)
+    while (lex_token (lexer) == T_ENDCMD)
+      lex_get (lexer);
 
   if (opened)
-    text_item_submit (text_item_create (TEXT_ITEM_COMMAND_CLOSE,
-                                        command->name));
+    group_close_item_submit (group_close_item_create ());
 
   return result;
 }
@@ -374,11 +385,11 @@ report_state_mismatch (const struct command *command, enum cmd_state state)
                      "been defined."), command->name);
           break;
         case S_INPUT_PROGRAM:
-          msg (SE, _("%s is allowed only inside INPUT PROGRAM."),
-               command->name);
+          msg (SE, _("%s is allowed only inside %s."),
+               command->name, "INPUT PROGRAM");
           break;
         case S_FILE_TYPE:
-          msg (SE, _("%s is allowed only inside FILE TYPE."), command->name);
+          msg (SE, _("%s is allowed only inside %s."), command->name, "FILE TYPE");
           break;
 
           /* Two allowed states. */
@@ -401,7 +412,8 @@ report_state_mismatch (const struct command *command, enum cmd_state state)
               command->name, "FILE TYPE");
           break;
         case S_INPUT_PROGRAM | S_FILE_TYPE:
-          msg (SE, _("%s is allowed only inside INPUT PROGRAM or inside FILE TYPE."), command->name);
+          msg (SE, _("%s is allowed only inside %s or inside %s."), command->name,
+              "INPUT PROGRAM", "FILE TYPE");
           break;
 
           /* Three allowed states. */
@@ -514,7 +526,7 @@ cmd_erase (struct lexer *lexer, struct dataset *ds UNUSED)
 
   if (settings_get_safer_mode ())
     {
-      msg (SE, _("This command not allowed when the SAFER option is set."));
+      msg (SE, _("This command not allowed when the %s option is set."), "SAFER");
       return CMD_FAILURE;
     }