[glib] glib-mkenums: add --identifier-prefix and --symbol-prefix args



commit f9c2362e434b2d190296f8a41a7aa68c50474923
Author: Dan Winship <danw gnome org>
Date:   Fri Oct 28 15:38:52 2011 -0400

    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 7b2ec79..ec91fec 100644
--- a/docs/reference/gobject/glib-mkenums.xml
+++ b/docs/reference/gobject/glib-mkenums.xml
@@ -118,6 +118,30 @@ where section may be <literal>file-header</literal>,
 </varlistentry>
 
 <varlistentry>
+<term><option>--identifier-prefix</option> <replaceable>prefix</replaceable></term>
+<listitem><para>
+Indicates what portion of the enum name should be intepreted as the
+prefix (eg, the "<literal>Gtk</literal>" in
+"<literal>GtkDirectionType</literal>"). Normally this will be figured
+out automatically, but you may need to override the default if your
+namespace is capitalized oddly.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--symbol-prefix</option> <replaceable>prefix</replaceable></term>
+<listitem><para>
+Indicates what prefix should be used to correspond to the identifier
+prefix in related C function names (eg, the "<literal>gtk</literal>"
+in "<literal>gtk_direction_type_get_type</literal>". Equivalently,
+this is the lowercase version of the prefix component of the enum
+value names (eg, the "<literal>GTK</literal>" in
+"<literal>GTK_DIR_UP</literal>". The default value is the identifier
+prefix, converted to lowercase.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
 <term><option>--help</option></term>
 <listitem><para>
 Print brief help and exit.
diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in
index af0304d..34440aa 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 <text>        Output file header\n";
-    print "  --fprod <text>        Per input file production\n";
-    print "  --ftail <text>        Output file trailer\n";
-    print "  --eprod <text>        Per enum text (produced prior to value itarations)\n";
-    print "  --vhead <text>        Value header, produced before iterating over enum values\n";
-    print "  --vprod <text>        Value text, produced for each enum value\n";
-    print "  --vtail <text>        Value tail, produced after iterating over enum values\n";
-    print "  --comments <text>     Comment structure\n";
-    print "  --template file       Template file\n";
-    print "  -v, --version         Print version informations\n\n";
+    print "  --identifier-prefix <text>   Identifier prefix\n";
+    print "  --symbol-prefix <text>       Symbol prefix\n";
+    print "  --fhead <text>               Output file header\n";
+    print "  --fprod <text>               Per input file production\n";
+    print "  --ftail <text>               Output file trailer\n";
+    print "  --eprod <text>               Per enum text (produced prior to value itarations)\n";
+    print "  --vhead <text>               Value header, produced before iterating over enum values\n";
+    print "  --vprod <text>               Value text, produced for each enum value\n";
+    print "  --vtail <text>               Value tail, produced after iterating over enum values\n";
+    print "  --comments <text>            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) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]