gtk2/gtk/makeenums.awk
Tim Janik cd34fdd047 renamed the newly created gtk_enum_get_values and gtk_enum_set_values to
Tue Jun  9 09:57:09 1998  Tim Janik  <timj@gtk.org>

        * gtk/gtktypeutils.h:
        * gtk/gtktypeutils.c: renamed the newly created gtk_enum_get_values and
        gtk_enum_set_values to gtk_type_enum_get_values and
        gtk_type_enum_set_values respectively, since they are actually type
        system features.

        * gtk/gtktypebuiltins_evals.c: oops, screwed the NULL termination with
        my last commit. ;)
1998-06-09 08:21:20 +00:00

153 lines
2.9 KiB
Awk

BEGIN {
type_name = ""; # GtkEnumType
type_macro = ""; # GTK_TYPE_ENUM_TYPE
type_ident = ""; # _gtk_enum_type
type_flags = 0;
type_counter = 0;
delete value_names; # GTK_ENUM_VALUE
delete value_nicks; # enum-value
VI = 0;
gen_arrays = 0;
gen_defs = 0;
comment_file = "";
for (i = 1; i < ARGC; i++)
{
if (ARGV[i] == "arrays")
gen_arrays = 1;
else if (ARGV[i] == "defs")
gen_defs = 1;
ARGV[i] = "";
}
if (gen_arrays)
printf ("/* generated by makeenums.awk */\n\n");
else if (gen_defs)
printf (";; generated by makeenums.awk ; -*- scheme -*-\n\n");
else
{
printf ("hm? what do you want me to do?\n") > "/dev/stderr";
exit 1;
}
}
function set_type (set_type_1)
{
type_name = set_type_1;
type_macro = "GTK_TYPE";
type_ident = "";
for (i = 0; i < length (type_name); i++)
{
ch = substr (type_name, i + 1, 1);
Ch = toupper (ch);
if (Ch == ch)
{
type_macro = type_macro "_" Ch;
type_ident = type_ident "_" tolower (ch);
}
else
{
type_macro = type_macro Ch;
type_ident = type_ident ch;
}
}
}
function set_value (set_value_1, set_value_2)
{
value_names[VI] = set_value_1;
value_nicks[VI] = tolower (set_value_2);
while (match (value_nicks[VI], "_"))
sub ("_", "-", value_nicks[VI]);
}
function generate_arrays ()
{
if (gen_arrays)
{
printf ("static GtkEnumValue %s_values[] = {\n", type_ident);
for (i = 0; i < VI; i++)
{
printf (" { %s, \"%s\", \"%s\" },\n",
value_names[i], value_names[i], value_nicks[i]);
}
printf (" { 0, NULL, NULL }\n");
printf ("};\n");
}
}
function generate_defs ()
{
if (gen_defs)
{
if (comment_file != "")
{
printf ("\n; enumerations from \"%s\"\n", comment_file);
comment_file = "";
}
printf ("\n(define-%s %s",
type_flags ? "flags" : "enum",
type_name);
for (i = 0; i < VI; i++)
{
printf ("\n (%s %s)",
value_nicks[i], value_names[i]);
}
printf (")\n");
}
}
function basename (basename_1)
{
sub ("\"", "", basename_1);
while (match (basename_1, "/"))
sub (".*/", "", basename_1);
sub ("\"", "", basename_1);
return basename_1;
}
# parse keywords
/G_ENUM_E/ {
if ($3 != "+" || $5 != "+")
printf ("huh? G_ENUM_E keyword without arg?\n") > "/dev/stderr";
else
set_type($4);
type_flags = 0;
generate_defs();
generate_arrays();
VI = 0;
}
/G_ENUM_F/ {
if ($3 != "+" || $5 != "+")
printf ("huh? G_ENUM_F keyword without arg?\n") > "/dev/stderr";
else
set_type($4);
type_flags = 1;
generate_defs();
generate_arrays();
VI = 0;
}
/G_ENUM_V/ {
if ($2 != "+" || $4 != "+" || $6 != "+")
printf ("huh? G_ENUM_V keyword without arg?\n") > "/dev/stderr";
else
set_value($3, $5);
VI += 1;
}
# feature per file comments
/# / {
comment_file = basename($3);
}
END {
printf("\n");
}