diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | tools/enum.pl | 2 | ||||
-rw-r--r-- | tools/pm/Enum.pm | 30 |
3 files changed, 37 insertions, 5 deletions
@@ -1,5 +1,15 @@ 2006-11-27 Daniel Elstner <danielk@openismus.com> + * tools/enum.pl (parse): Ignore whitespace in front of an enum + typedef. This fixes parsing of HildonTelephoneEditorFormat in + hildon-libs. + * tools/pm/Enum.pm (parse_values): Check whether the enumeration + constants actually have a common module prefix before attempting + to remove it. This fixes the incorrect parsing of inconsistently + named enums in hildon-libs. + +2006-11-27 Daniel Elstner <danielk@openismus.com> + * tools/enum.pl (form_names): Break the loop if the length of the common prefix reaches zero. This fixes the infinite loop when processing the inconsistently named enumeration constants of the diff --git a/tools/enum.pl b/tools/enum.pl index dd35dc3c..8cc6ff90 100644 --- a/tools/enum.pl +++ b/tools/enum.pl @@ -69,7 +69,7 @@ sub parse s/','/\%\%COMMA\%\%/; s/'}'/\%\%RBRACE\%\%/; - if (/^typedef enum/ ) + if (/^\s*typedef enum/ ) { print ";; From $file\n\n" if (!$from); $from=1; 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($) |