summaryrefslogtreecommitdiff
path: root/gtk/makeenums.awk
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>1998-06-08 03:38:24 +0000
committerTim Janik <timj@src.gnome.org>1998-06-08 03:38:24 +0000
commit207eecc4240b2b296ad2f88c6377d19765135b84 (patch)
treeda3c726c0d2fe1fc400fe0458b56708353bd213e /gtk/makeenums.awk
parent1e32cc3d6370b72add69c4a3c0ee4ecb8ca5b712 (diff)
downloadgtk+-207eecc4240b2b296ad2f88c6377d19765135b84.tar.gz
wrapped enum definitions with glib macros.
Mon Jun 8 02:52:37 1998 Tim Janik <timj@gtk.org> * gdk/gdkprivate.h: * gdk/gdktypes.h: * gtk/gtkprivate.h: * gtk/gtkwidget.h: * gtk/gtkobject.h: wrapped enum definitions with glib macros. * reworked enum value array generation code. gtk.defs is a generated file now.
Diffstat (limited to 'gtk/makeenums.awk')
-rw-r--r--gtk/makeenums.awk185
1 files changed, 105 insertions, 80 deletions
diff --git a/gtk/makeenums.awk b/gtk/makeenums.awk
index be9df4076b..0e90e18eea 100644
--- a/gtk/makeenums.awk
+++ b/gtk/makeenums.awk
@@ -1,105 +1,130 @@
BEGIN {
- in_def=0;
- TI=0;
- delete type_names;
- delete type_nicks;
- delete type_flags;
- n_defs = 0;
-}
-
-(init == 0) {
- printf ("/* generated by makeenums.awk from \"%s\" */\n\n", FILENAME);
- init=1;
-}
-
-";" {
- sub (";.*", "");
-}
-
-/\(/ {
- if (in_def == 0)
+ 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;
+
+ for (i = 1; i < ARGC; i++)
{
- if ($1 == "(define-enum")
- {
- in_def = 1;
- type_flags[TI]=0;
- }
- else if ($1 == "(define-flags")
- {
- in_def = 1;
- type_flags[TI]=1;
- }
+ 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
- in_def += 1;
+ {
+ printf ("hm? what do you want me to do?\n") > "/dev/stderr";
+ exit 1;
+ }
}
-(in_def == 1) {
- VI = 0;
- delete value_names;
- delete value_nicks;
-
- type_nicks[TI] = $2;
- type_names[TI] = "GTK_TYPE";
- for (i = 0; i < length(type_nicks[TI]); i++)
+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_nicks[TI], i + 1, 1);
- Ch = toupper(ch);
+ ch = substr (type_name, i + 1, 1);
+ Ch = toupper (ch);
if (Ch == ch)
- type_names[TI] = type_names[TI] "_" Ch;
+ {
+ type_macro = type_macro "_" Ch;
+ type_ident = type_ident "_" tolower (ch);
+ }
else
- type_names[TI] = type_names[TI] Ch;
+ {
+ type_macro = type_macro Ch;
+ type_ident = type_ident ch;
+ }
}
}
-(in_def == 2) {
- value_nicks[VI] = tolower ($1);
- value_names[VI] = $2;
- kill_pat="[^-A-z0123456789_]+";
- while (match (value_nicks[VI],kill_pat))
- sub(kill_pat,"",value_nicks[VI]);
- while (match (value_names[VI],kill_pat))
- sub(kill_pat,"",value_names[VI]);
+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]);
}
-/\)/ {
- if (in_def > 0)
+function generate_arrays ()
+{
+ if (gen_arrays)
{
- while (match($0,")"))
+ printf ("static GtkEnumValue enum_values_%s[] = {\n", type_name);
+ for (i = 0; i < VI; i++)
{
- sub(")","");
- if (in_def == 2)
- VI += 1;
- if (in_def == 1)
- {
- TI += 1;
- }
- in_def -= 1;
+ printf (" { %s, \"%s\", \"%s\" },\n",
+ value_names[i], value_names[i], value_nicks[i]);
}
-
- if (in_def == 0)
+ printf ("};\n");
+ }
+}
+
+function generate_defs ()
+{
+ if (gen_defs)
+ {
+ printf ("\n(define-%s %s",
+ type_flags ? "flags" : "enum",
+ type_name);
+ for (i = 0; i < VI; i++)
{
- printf ("static GtkEnumValue enum_values_%s[] = {\n", type_nicks[TI-1]);
- for (j = 0; value_names[j] != ""; j++)
- {
- printf (" { %s, \"%s\", \"%s\" },\n",
- value_names[j], value_names[j], value_nicks[j]);
- }
- printf (" { 0, NULL, NULL },\n");
- printf ("};\n");
+ printf ("\n (%s %s)",
+ value_nicks[i], value_names[i]);
}
+ printf (")\n");
}
}
+# 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;
+}
+
END {
-# printf("%u{\n", TI);
- for (i = 0; i < TI; i++)
- {
-# printf(" { %s, \"%s\", %s, %s_values },\n",
-# type_names[i], type_nicks[i],
-# type_flags[i] ? "TRUE" : "FALSE",
-# tolower(type_nicks[i]));
- }
-# printf("};\n");
+ printf("\n");
}