summaryrefslogtreecommitdiff
path: root/tools/pm/Enum.pm
diff options
context:
space:
mode:
Diffstat (limited to 'tools/pm/Enum.pm')
-rw-r--r--tools/pm/Enum.pm30
1 files changed, 26 insertions, 4 deletions
diff --git a/tools/pm/Enum.pm b/tools/pm/Enum.pm
index e928bead..47485e15 100644
--- a/tools/pm/Enum.pm
+++ b/tools/pm/Enum.pm
@@ -79,6 +79,10 @@ sub parse_values($$)
{
my ($self, $value) = @_;
+ my $elem_names = [];
+ my $elem_values = [];
+ my $common_prefix = undef;
+
# break up the value statements
foreach(split(/\s*'*[()]\s*/, $value))
{
@@ -88,17 +92,35 @@ sub parse_values($$)
{
my ($name, $value) = ($1, $2);
- # cut off the module prefix, e.g. GTK_
- $name =~ s/^[^_]+_//;
+ # detect whether there is module prefix common to all names, e.g. GTK_
+ my $prefix = $1 if ($name =~ /^([^_]+_)/);
+
+ if (not defined($common_prefix))
+ {
+ $common_prefix = $prefix;
+ }
+ elsif ($prefix ne $common_prefix)
+ {
+ $common_prefix = "";
+ }
- push(@{$$self{elem_names}}, $name);
- push(@{$$self{elem_values}}, $value);
+ push(@$elem_names, $name);
+ push(@$elem_values, $value);
}
else
{
GtkDefs::error("Unknown value statement ($_) in $$self{c_type}\n");
}
}
+
+ if ($common_prefix)
+ {
+ # cut off the module prefix, e.g. GTK_
+ s/^$common_prefix// foreach (@$elem_names);
+ }
+
+ $$self{elem_names} = $elem_names;
+ $$self{elem_values} = $elem_values;
}
sub beautify_values($)