OSDN Git Service

Add Bluray support
[handbrake-jp/handbrake-jp-git.git] / gtk / src / ini_to_plist.c
1 #include <glib.h>
2 #include <glib-object.h>
3 #include <glib/gstdio.h>
4 #include <string.h>
5 #include "values.h"
6 #include "plist.h"
7
8 gboolean
9 string_is_true(const gchar *str)
10 {
11         return (strcmp(str, "enable") == 0);
12 }
13
14 gboolean
15 string_is_bool(const gchar *str)
16 {
17         return (strcmp(str, "enable") == 0) || (strcmp(str, "disable") == 0);
18 }
19
20 GType
21 guess_type(const gchar *str)
22 {
23         gchar *end;
24         gdouble dval;
25
26         if (*str == 0)
27                 return G_TYPE_STRING;
28         if (string_is_bool(str))
29                 return G_TYPE_BOOLEAN;
30         dval = g_strtod(str, &end);
31         if (*end == 0)
32         {
33                 if (strchr(str, '.') == NULL)
34                         return G_TYPE_INT64;
35                 else
36                         return G_TYPE_DOUBLE;
37         }
38
39         return G_TYPE_STRING;
40 }
41
42 void
43 set_value(GValue *gval, const gchar *str, GType gtype)
44 {
45         if (gtype == G_TYPE_STRING)
46         {
47                 g_value_set_string(gval, str);
48         }
49         else if (gtype == G_TYPE_INT64)
50         {
51                 gint64 val = g_strtod(str, NULL);
52                 g_value_set_int64(gval, val);
53         }
54         else if (gtype == G_TYPE_DOUBLE)
55         {
56                 gdouble val = g_strtod(str, NULL);
57                 g_value_set_double(gval, val);
58         }
59         else if (gtype == G_TYPE_BOOLEAN)
60         {
61                 if (string_is_true(str))
62                         g_value_set_boolean(gval, TRUE);
63                 else
64                         g_value_set_boolean(gval, FALSE);
65         }
66 }
67
68 int
69 main(gint argc, gchar *argv[])
70 {
71         GKeyFile *kf;
72         gchar **groups;
73         gchar **keys;
74         gint ii, jj;
75         GValue *top;
76         GValue *dict;
77
78         g_type_init();
79         top = ghb_dict_value_new();
80         kf = g_key_file_new();
81         g_key_file_load_from_file(kf, argv[1], 0, NULL);
82         groups = g_key_file_get_groups(kf, NULL);
83         for (ii = 0; groups[ii]; ii++)
84         {
85                 dict = ghb_dict_value_new();
86                 ghb_dict_insert(top, , g_strdup(groups[ii]), dict);
87                 keys = g_key_file_get_keys(kf, groups[ii], NULL, NULL);
88                 for (jj = 0; keys[jj]; jj++)
89                 {
90                         gchar *str;
91                         GValue *gval;
92                         GType gtype;
93
94                         str = g_key_file_get_string(kf, groups[ii], keys[jj], NULL);
95                         gtype = guess_type(str);
96                         gval = g_malloc0(sizeof(GValue));
97                         g_value_init(gval, gtype);
98                         set_value(gval, str, gtype);
99                         ghb_dict_insert(dict, g_strdup(keys[jj]), gval);
100                 }
101         }
102         ghb_plist_write_file("a_p_list", top);
103 }
104