X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/69c350c69e70bddb040dfc5d90b0368376a6389e..489e97ede850a8de01ca3bd653dce9c25dcd54a1:/src/main.c diff --git a/src/main.c b/src/main.c index 3909cb0..fce8cb0 100644 --- a/src/main.c +++ b/src/main.c @@ -142,42 +142,6 @@ make_bases (void) ptypebase = remove_sep (((Class *)class)->ptype); } -static char * -get_type (const Type *t, gboolean postfix_to_stars) -{ - char *s; - int i; - int extra; - GString *gs; - - s = remove_sep(t->name); - gs = g_string_new(s); - g_free(s); - - extra = 0; - if (postfix_to_stars) { - const char *p; - /*XXX: this is ugly perhaps we can do this whole postfix thing - in a nicer way, we just count the number of '[' s and from - that we deduce the number of dimensions, so that we can print - that many stars */ - for (p = t->postfix; p && *p; p++) - if(*p == '[') extra++; - } - g_string_append_c(gs, ' '); - - if (t->pointer != NULL) { - g_string_append (gs, t->pointer); - for (i=0; i < extra; i++) - g_string_append_c (gs, '*'); - g_string_append_c (gs, ' '); - } - - s = gs->str; - g_string_free (gs, FALSE); - return s; -} - static char * get_gtk_doc (const char *id) { @@ -1591,6 +1555,21 @@ make_argument (Argument *a) #define value_for_print(str, alt) (str != NULL ? str : alt) +static char * +make_me_type (const char *type, const char *alt) +{ + if (type == NULL) + return g_strdup (alt); + /* HACK! just in case someone made this + * work with 2.0.0 by using the TYPE + * macro directly */ + if ((strstr (type, "_TYPE_") != NULL || + strstr (type, "TYPE_") == type) && + strchr (type, ':') == NULL) + return g_strdup (type); + return make_pre_macro (type, "TYPE"); +} + static void make_property (Property *p) { @@ -1645,7 +1624,7 @@ make_property (Property *p) g_string_append (flags, ")"); - if (strcmp (p->gtktype, "CHAR") == 0) + if (strcmp (p->gtktype, "CHAR") == 0) { out_printf (out, "\tparam_spec = g_param_spec_char\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1661,7 +1640,7 @@ make_property (Property *p) value_for_print (p->maximum, "127"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "UCHAR") == 0) + } else if (strcmp (p->gtktype, "UCHAR") == 0) { out_printf (out, "\tparam_spec = g_param_spec_uchar\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1677,7 +1656,7 @@ make_property (Property *p) value_for_print (p->maximum, "0xFF"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "BOOLEAN") == 0) + } else if (strcmp (p->gtktype, "BOOLEAN") == 0) { out_printf (out, "\tparam_spec = g_param_spec_boolean\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1689,7 +1668,7 @@ make_property (Property *p) value_for_print (p->blurb, "NULL"), value_for_print (p->default_value, "FALSE"), flags->str); - else if (strcmp (p->gtktype, "INT") == 0) + } else if (strcmp (p->gtktype, "INT") == 0) { out_printf (out, "\tparam_spec = g_param_spec_int\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1705,7 +1684,7 @@ make_property (Property *p) value_for_print (p->maximum, "G_MAXINT"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "UINT") == 0) + } else if (strcmp (p->gtktype, "UINT") == 0) { out_printf (out, "\tparam_spec = g_param_spec_uint\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1721,7 +1700,7 @@ make_property (Property *p) value_for_print (p->maximum, "G_MAXUINT"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "LONG") == 0) + } else if (strcmp (p->gtktype, "LONG") == 0) { out_printf (out, "\tparam_spec = g_param_spec_long\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1737,7 +1716,7 @@ make_property (Property *p) value_for_print (p->maximum, "G_MAXLONG"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "ULONG") == 0) + } else if (strcmp (p->gtktype, "ULONG") == 0) { out_printf (out, "\tparam_spec = g_param_spec_ulong\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1753,7 +1732,7 @@ make_property (Property *p) value_for_print (p->maximum, "G_MAXULONG"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "UNICHAR") == 0) + } else if (strcmp (p->gtktype, "UNICHAR") == 0) { out_printf (out, "\tparam_spec = g_param_spec_unichar\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1765,7 +1744,9 @@ make_property (Property *p) value_for_print (p->blurb, "NULL"), value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "ENUM") == 0) + } else if (strcmp (p->gtktype, "ENUM") == 0) { + char *type = make_me_type (p->extra_gtktype, + "G_TYPE_ENUM"); out_printf (out, "\tparam_spec = g_param_spec_enum\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1776,10 +1757,13 @@ make_property (Property *p) p->name, value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), - value_for_print (p->extra_gtktype, "G_TYPE_ENUM"), + type, value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "FLAGS") == 0) + g_free (type); + } else if (strcmp (p->gtktype, "FLAGS") == 0) { + char *type = make_me_type (p->extra_gtktype, + "G_TYPE_FLAGS"); out_printf (out, "\tparam_spec = g_param_spec_flags\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1790,10 +1774,11 @@ make_property (Property *p) p->name, value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), - value_for_print (p->extra_gtktype, "G_TYPE_FLAGS"), + type, value_for_print (p->default_value, "0"), flags->str); - else if (strcmp (p->gtktype, "FLOAT") == 0) + g_free (type); + } else if (strcmp (p->gtktype, "FLOAT") == 0) { out_printf (out, "\tparam_spec = g_param_spec_float\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1809,7 +1794,7 @@ make_property (Property *p) value_for_print (p->maximum, "G_MAXFLOAT"), value_for_print (p->default_value, "0.0"), flags->str); - else if (strcmp (p->gtktype, "DOUBLE") == 0) + } else if (strcmp (p->gtktype, "DOUBLE") == 0) { out_printf (out, "\tparam_spec = g_param_spec_double\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1825,7 +1810,7 @@ make_property (Property *p) value_for_print (p->maximum, "G_MAXDOUBLE"), value_for_print (p->default_value, "0.0"), flags->str); - else if (strcmp (p->gtktype, "STRING") == 0) + } else if (strcmp (p->gtktype, "STRING") == 0) { out_printf (out, "\tparam_spec = g_param_spec_string\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1837,7 +1822,9 @@ make_property (Property *p) value_for_print (p->blurb, "NULL"), value_for_print (p->default_value, "NULL"), flags->str); - else if (strcmp (p->gtktype, "PARAM") == 0) + } else if (strcmp (p->gtktype, "PARAM") == 0) { + char *type = make_me_type (p->extra_gtktype, + "G_TYPE_PARAM"); out_printf (out, "\tparam_spec = g_param_spec_param\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1847,9 +1834,12 @@ make_property (Property *p) p->name, value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), - value_for_print (p->extra_gtktype, "G_TYPE_PARAM"), + type, flags->str); - else if (strcmp (p->gtktype, "BOXED") == 0) + g_free (type); + } else if (strcmp (p->gtktype, "BOXED") == 0) { + char *type = make_me_type (p->extra_gtktype, + "G_TYPE_BOXED"); out_printf (out, "\tparam_spec = g_param_spec_boxed\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1859,9 +1849,10 @@ make_property (Property *p) p->name, value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), - value_for_print (p->extra_gtktype, "G_TYPE_BOXED"), + type, flags->str); - else if (strcmp (p->gtktype, "POINTER") == 0) + g_free (type); + } else if (strcmp (p->gtktype, "POINTER") == 0) { out_printf (out, "\tparam_spec = g_param_spec_pointer\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1872,7 +1863,7 @@ make_property (Property *p) value_for_print (p->blurb, "NULL"), flags->str); /* FIXME: VALUE_ARRAY */ - else if (strcmp (p->gtktype, "CLOSURE") == 0) + } else if (strcmp (p->gtktype, "CLOSURE") == 0) { out_printf (out, "\tparam_spec = g_param_spec_pointer\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1882,7 +1873,9 @@ make_property (Property *p) value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), flags->str); - else if (strcmp (p->gtktype, "OBJECT") == 0) + } else if (strcmp (p->gtktype, "OBJECT") == 0) { + char *type = make_me_type (p->extra_gtktype, + "G_TYPE_BOXED"); out_printf (out, "\tparam_spec = g_param_spec_object\n" "\t\t(\"%s\" /* name */,\n" "\t\t %s /* nick */,\n" @@ -1892,12 +1885,14 @@ make_property (Property *p) p->name, value_for_print (p->nick, "NULL"), value_for_print (p->blurb, "NULL"), - value_for_print (p->extra_gtktype, "G_TYPE_OBJECT"), + type, flags->str); - else + g_free (type); + } else { error_printf (GOB_ERROR, p->line_no, "%s type is not supported by properties", p->gtktype); + } s = g_strdup (p->name); g_strup (s);