Applied patch #6428
[pspp-builds.git] / src / ui / gui / var-display.c
1 #include <config.h>
2 #include "var-display.h"
3
4 #include <data/variable.h>
5 #include <stdlib.h>
6
7 #include <gettext.h>
8 #define _(msgid) gettext (msgid)
9 #define N_(msgid) msgid
10
11 #include "helper.h"
12
13 const static gchar none[] = N_("None");
14
15 gchar *
16 name_to_string (const struct variable *var, GError **err)
17 {
18   const char *name = var_get_name (var);
19   g_assert (name);
20
21   return pspp_locale_to_utf8 (name, -1, err);
22 }
23
24
25 gchar *
26 label_to_string (const struct variable *var, GError **err)
27 {
28   const char *label = var_get_label (var);
29
30   if ( ! label ) return g_strdup (none);
31
32   return pspp_locale_to_utf8 (label, -1, err);
33 }
34
35 gchar *
36 measure_to_string (const struct variable *var, GError **err)
37 {
38   const gint measure = var_get_measure (var);
39
40   g_assert (measure < n_MEASURES);
41   return g_locale_to_utf8 (gettext (measures[measure]),
42                            -1, 0, 0, err);
43 }
44
45
46 gchar *
47 missing_values_to_string (const struct variable *pv, GError **err)
48 {
49   const struct fmt_spec *fmt =  var_get_print_format (pv);
50   gchar *s;
51   const struct missing_values *miss = var_get_missing_values (pv);
52   if ( mv_is_empty (miss))
53     return g_locale_to_utf8 (gettext (none), -1, 0, 0, err);
54   else
55     {
56       if ( ! mv_has_range (miss))
57         {
58           GString *gstr = g_string_sized_new (10);
59           const int n = mv_n_values (miss);
60           gchar *mv[4] = {0,0,0,0};
61           gint i;
62           for (i = 0 ; i < n; ++i )
63             {
64               union value v;
65               mv_get_value (miss, &v, i);
66               mv[i] = value_to_text (v, *fmt);
67               if ( i > 0 )
68                 g_string_append (gstr, ", ");
69               g_string_append (gstr, mv[i]);
70               g_free (mv[i]);
71             }
72           s = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
73           g_string_free (gstr, TRUE);
74         }
75       else
76         {
77           GString *gstr = g_string_sized_new (10);
78           gchar *l, *h;
79           union value low, high;
80           mv_get_range (miss, &low.f, &high.f);
81
82           l = value_to_text (low, *fmt);
83           h = value_to_text (high, *fmt);
84
85           g_string_printf (gstr, "%s - %s", l, h);
86           g_free (l);
87           g_free (h);
88
89           if ( mv_has_value (miss))
90             {
91               gchar *ss = 0;
92               union value v;
93               mv_get_value (miss, &v, 0);
94
95               ss = value_to_text (v, *fmt);
96
97               g_string_append (gstr, ", ");
98               g_string_append (gstr, ss);
99               free (ss);
100             }
101           s = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
102           g_string_free (gstr, TRUE);
103         }
104
105       return s;
106     }
107 }