lexer: Reimplement for better testability and internationalization.
[pspp-builds.git] / src / ui / gui / psppire-dict.c
index c82395f2ebdc047e1f8678b9e9d6873df2452207..91bfed2597be89d297be3c00c7c4d36a021945d6 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2004, 2006, 2007, 2009  Free Software Foundation
+   Copyright (C) 2004, 2006, 2007, 2009, 2010, 2011  Free Software Foundation
 
    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
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
+
+#include "ui/gui/psppire-dict.h"
+
 #include <string.h>
 #include <stdlib.h>
-
 #include <gtk/gtk.h>
-#include <ui/gui/psppire-marshal.h>
-
-#include "psppire-dict.h"
-#include <data/dictionary.h>
-#include <data/missing-values.h>
-#include <data/value-labels.h>
-#include <data/variable.h>
-#include <libpspp/i18n.h>
-
-#include "helper.h"
-#include "message-dialog.h"
 
+#include "data/dictionary.h"
+#include "data/identifier.h"
+#include "data/missing-values.h"
+#include "data/value-labels.h"
+#include "data/variable.h"
+#include "libpspp/i18n.h"
+#include "libpspp/message.h"
+#include "ui/gui/helper.h"
+#include "ui/gui/psppire-marshal.h"
+#include "ui/gui/psppire-var-ptr.h"
+
+#include <gettext.h>
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
 
 enum  {
   BACKEND_CHANGED,
@@ -352,7 +357,14 @@ auto_generate_var_name (PsppireDict *dict)
   gint d = 0;
   static gchar name[10];
 
-  while (g_snprintf (name, 10, "VAR%05d",d++),
+  /* TRANSLATORS: This string must be a valid variable name.  That means:
+     - The string must be at most 64 bytes (not characters) long.
+     - The string may not contain whitespace.
+     - The first character may not be '$'
+     - The first character may not be a digit
+     - The final charactor may not be '.' or '_'
+   */
+  while (g_snprintf (name, 10, _("VAR%05d"), d++),
         psppire_dict_lookup_var (dict, name))
     ;
 
@@ -414,7 +426,7 @@ psppire_dict_set_name (PsppireDict* d, gint idx, const gchar *name)
   g_assert (d);
   g_assert (PSPPIRE_IS_DICT (d));
 
-  if ( ! var_is_valid_name (name, false))
+  if ( ! dict_id_is_valid (d->dict, name, false))
     return FALSE;
 
   if ( idx < dict_get_var_cnt (d->dict))
@@ -516,7 +528,7 @@ gboolean
 psppire_dict_check_name (const PsppireDict *dict,
                         const gchar *name, gboolean report)
 {
-  if ( ! var_is_valid_name (name, report ) )
+  if ( ! dict_id_is_valid (dict->dict, name, report ) )
     return FALSE;
 
   if (psppire_dict_lookup_var (dict, name))
@@ -648,7 +660,7 @@ tree_model_column_type (GtkTreeModel *model, gint index)
       return G_TYPE_STRING;
       break;
     case DICT_TVM_COL_VAR:
-      return G_TYPE_POINTER;
+      return PSPPIRE_VAR_PTR_TYPE;
       break;
     default:
       g_return_val_if_reached ((GType)0);
@@ -765,8 +777,8 @@ tree_model_get_value (GtkTreeModel *model, GtkTreeIter *iter,
       }
       break;
     case DICT_TVM_COL_VAR:
-      g_value_init (value, G_TYPE_POINTER);
-      g_value_set_pointer (value, var);
+      g_value_init (value, PSPPIRE_VAR_PTR_TYPE);
+      g_value_set_boxed (value, var);
       break;
     default:
       g_return_if_reached ();
@@ -824,7 +836,7 @@ gboolean
 psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
                         const gchar *name)
 {
-  if ( ! var_is_valid_name (name, false))
+  if ( ! dict_id_is_valid (dict->dict, name, false))
     return FALSE;
 
   /* Make sure no other variable has this name */
@@ -856,7 +868,7 @@ psppire_dict_dump (const PsppireDict *dict)
     {
       const struct variable *v = psppire_dict_get_variable (dict, i);
       int di = var_get_dict_index (v);
-      g_print ("\"%s\" idx=%d, fv=%d\n",
+      g_print ("`%s' idx=%d, fv=%d\n",
               var_get_name(v),
               di,
               var_get_case_index(v));