From f9c2362e434b2d190296f8a41a7aa68c50474923 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Fri, 28 Oct 2011 15:38:52 -0400 Subject: [PATCH] glib-mkenums: add --identifier-prefix and --symbol-prefix args Allow passing --identifier-prefix and --symbol-prefix to glib-mkenums, with the same meanings as in g-ir-scanner, to allow fixing up the enum name parsing globally rather than needing to add a /<* *>/ override to each enum. https://bugzilla.gnome.org/show_bug.cgi?id=661797 --- docs/reference/gobject/glib-mkenums.xml | 24 ++++++++++++++ gobject/glib-mkenums.in | 43 ++++++++++++++++++------- 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/docs/reference/gobject/glib-mkenums.xml b/docs/reference/gobject/glib-mkenums.xml index 7b2ec79a2..ec91fec3c 100644 --- a/docs/reference/gobject/glib-mkenums.xml +++ b/docs/reference/gobject/glib-mkenums.xml @@ -117,6 +117,30 @@ where section may be file-header, + + prefix + +Indicates what portion of the enum name should be intepreted as the +prefix (eg, the "Gtk" in +"GtkDirectionType"). Normally this will be figured +out automatically, but you may need to override the default if your +namespace is capitalized oddly. + + + + + prefix + +Indicates what prefix should be used to correspond to the identifier +prefix in related C function names (eg, the "gtk" +in "gtk_direction_type_get_type". Equivalently, +this is the lowercase version of the prefix component of the enum +value names (eg, the "GTK" in +"GTK_DIR_UP". The default value is the identifier +prefix, converted to lowercase. + + + diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in index af0304d92..34440aa04 100755 --- a/gobject/glib-mkenums.in +++ b/gobject/glib-mkenums.in @@ -143,16 +143,18 @@ sub usage { print "Help Options:\n"; print " -h, --help Show this help message\n\n"; print "Utility Options:\n"; - print " --fhead Output file header\n"; - print " --fprod Per input file production\n"; - print " --ftail Output file trailer\n"; - print " --eprod Per enum text (produced prior to value itarations)\n"; - print " --vhead Value header, produced before iterating over enum values\n"; - print " --vprod Value text, produced for each enum value\n"; - print " --vtail Value tail, produced after iterating over enum values\n"; - print " --comments Comment structure\n"; - print " --template file Template file\n"; - print " -v, --version Print version informations\n\n"; + print " --identifier-prefix Identifier prefix\n"; + print " --symbol-prefix Symbol prefix\n"; + print " --fhead Output file header\n"; + print " --fprod Per input file production\n"; + print " --ftail Output file trailer\n"; + print " --eprod Per enum text (produced prior to value itarations)\n"; + print " --vhead Value header, produced before iterating over enum values\n"; + print " --vprod Value text, produced for each enum value\n"; + print " --vtail Value tail, produced after iterating over enum values\n"; + print " --comments Comment structure\n"; + print " --template file Template file\n"; + print " -v, --version Print version informations\n\n"; print "Production text substitutions:\n"; print " \@EnumName\@ PrefixTheXEnum\n"; print " \@enum_name\@ prefix_the_xenum\n"; @@ -171,6 +173,8 @@ sub usage { } # production variables: +my $idprefix = ""; # "G", "Gtk", etc +my $symprefix = ""; # "g", "gtk", etc, if not just lc($idprefix) my $fhead = ""; # output file header my $fprod = ""; # per input file production my $ftail = ""; # output file trailer @@ -233,6 +237,8 @@ while ($_=$ARGV[0],/^-/) { shift; last if /^--$/; if (/^--template$/) { read_template_file (shift); } + elsif (/^--identifier-prefix$/) { $idprefix = shift } + elsif (/^--symbol-prefix$/) { $symprefix = shift } elsif (/^--fhead$/) { $fhead = $fhead . shift } elsif (/^--fprod$/) { $fprod = $fprod . shift } elsif (/^--ftail$/) { $ftail = $ftail . shift } @@ -380,7 +386,7 @@ while (<>) { $enumname_prefix = $enumlong; $enumname_prefix =~ s/_$enumshort$//; - } else { + } elsif (!$symprefix && !$idprefix) { # enumname is e.g. GMatchType $enspace = $enumname; $enspace =~ s/^([A-Z][a-z]*).*$/$1/; @@ -401,6 +407,21 @@ while (<>) { if (defined($option_lowercase_name)) { $enumsym = $option_lowercase_name; } + } else { + $enumshort = $enumname; + if ($idprefix) { + $enumshort =~ s/^${idprefix}//; + } else { + $enumshort =~ s/^[A-Z][a-z]*//; + } + $enumshort =~ s/([^A-Z])([A-Z])/$1_$2/g; + $enumshort =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g; + $enumshort = uc($enumshort); + + $enumname_prefix = $symprefix && uc($symprefix) || uc($idprefix); + + $enumlong = $enumname_prefix . "_" . $enumshort; + $enumsym = lc($enumlong); } if ($firstenum) {