From 0b41ef6a58e07ce360b99964cdad0d3c5e440faf Mon Sep 17 00:00:00 2001 From: Mike Kestner Date: Wed, 28 Jan 2004 21:44:25 +0000 Subject: [PATCH] 2004-01-28 Mike Kestner * gtk/gtk-api.xml : regen * parser/gapi2xml.pl : fix signals parsing where a STRUCT_OFFSET is not present in the signal_new call. * parser/gapi_pp.pl : ignore #ident lines. * vte/vte-api.xml : regen [Fixes #53189] svn path=/trunk/gtk-sharp/; revision=22583 --- ChangeLog | 9 +++++ gtk/gtk-api.xml | 34 +++++----------- parser/gapi2xml.pl | 97 +++++++++++++++++++++++++++++++++------------- parser/gapi_pp.pl | 2 +- vte/vte-api.xml | 89 +++++++++++++++++++++++++++++++----------- 5 files changed, 155 insertions(+), 76 deletions(-) diff --git a/ChangeLog b/ChangeLog index 861ea4cc7..f4cbd814d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-01-28 Mike Kestner + + * gtk/gtk-api.xml : regen + * parser/gapi2xml.pl : fix signals parsing where a STRUCT_OFFSET + is not present in the signal_new call. + * parser/gapi_pp.pl : ignore #ident lines. + * vte/vte-api.xml : regen + [Fixes #53189] + 2004-01-27 Mike Kestner * gtk/SelectionData.custom : guard against null in get_Text. diff --git a/gtk/gtk-api.xml b/gtk/gtk-api.xml index 59b097f24..e2542990d 100644 --- a/gtk/gtk-api.xml +++ b/gtk/gtk-api.xml @@ -1251,9 +1251,12 @@ - + - + + + + @@ -4485,12 +4488,6 @@ - - - - - - @@ -4733,12 +4730,6 @@ - - - - - - @@ -7549,12 +7540,6 @@ - - - - - - @@ -9581,9 +9566,10 @@ - + - + + @@ -9870,9 +9856,9 @@ - + - + diff --git a/parser/gapi2xml.pl b/parser/gapi2xml.pl index a429cba96..c792e4748 100755 --- a/parser/gapi2xml.pl +++ b/parser/gapi2xml.pl @@ -70,7 +70,7 @@ while ($line = ) { $types{$3} = $1 . $2; } elsif ($line =~ /typedef\s+enum\s+(\w+)\s+(\w+);/) { $etypes{$1} = $2; - } elsif ($line =~ /(typedef\s+)?\benum\b/) { + } elsif ($line =~ /^(typedef\s+)?\benum\b/) { $edef = $line; while ($line = ) { $edef .= $line; @@ -147,16 +147,25 @@ while ($line = ) { if ($fdef !~ /^_/) { $fdefs{$fname} = $fdef; } - } elsif ($line =~ /G_TYPE_CHECK_(\w+)_CAST.*,\s*(\w+),\s*(\w+)/) { - if ($1 eq "INSTANCE") { - $objects{$2} = $3 . $objects{$2}; - } else { - $objects{$2} .= ":$3"; + } elsif ($line =~ /CHECK_(\w*)CAST/) { + $cast_macro = $line; + while ($line =~ /\\$/) { + $line = ; + $cast_macro .= $line; + } + $cast_macro =~ s/\\\n\s*//g; + $cast_macro =~ s/\s+/ /g; + if ($cast_macro =~ /G_TYPE_CHECK_(\w+)_CAST.*,\s*(\w+),\s*(\w+)/) { + if ($1 eq "INSTANCE") { + $objects{$2} = $3 . $objects{$2}; + } else { + $objects{$2} .= ":$3"; + } + } elsif ($cast_macro =~ /GTK_CHECK_CAST.*,\s*(\w+),\s*(\w+)/) { + $objects{$1} = $2 . $objects{$1}; + } elsif ($cast_macro =~ /GTK_CHECK_CLASS_CAST.*,\s*(\w+),\s*(\w+)/) { + $objects{$1} .= ":$2"; } - } elsif ($line =~ /GTK_CHECK_CAST.*,\s*(\w+),\s*(\w+)/) { - $objects{$1} = $2 . $objects{$1}; - } elsif ($line =~ /GTK_CHECK_CLASS_CAST.*,\s*(\w+),\s*(\w+)/) { - $objects{$1} .= ":$2"; } elsif ($line =~ /INSTANCE_GET_INTERFACE.*,\s*(\w+),\s*(\w+)/) { $ifaces{$1} = $2; } elsif ($line =~ /^BUILTIN\s*\{\s*\"(\w+)\".*GTK_TYPE_BOXED/) { @@ -300,7 +309,9 @@ foreach $type (sort(keys(%objects))) { # Extract parent and fields from the struct if ($instdef =~ /^struct/) { $instdef =~ /\{(.*)\}/; - @fields = split(/;/, $1); + $fieldstr = $1; + $fieldstr =~ s|/\*.*?\*/||g; + @fields = split(/;/, $fieldstr); $fields[0] =~ /(\w+)/; $obj_el->setAttribute('parent', "$1"); addFieldElems($obj_el, @fields[1..$#fields]); @@ -446,7 +457,7 @@ sub addFieldElems addReturnElem($elem, $1); addParamsElem($elem, $3); } elsif ($field =~ /(unsigned )?(\S+)\s+(.+)/) { - $type = $1 . $2; $symb = $3; + my $type = $1 . $2; $symb = $3; foreach $tok (split (/,\s*/, $symb)) { if ($tok =~ /(\w+)\s*\[(.*)\]/) { $elem = addNameElem($parent, 'field', $1); @@ -762,6 +773,35 @@ sub addPropElem $prop_elem->setAttribute('construct-only', "true") if ($mode =~ /CONS/); } +sub parseTypeToken +{ + my ($tok) = @_; + + if ($tok =~ /G_TYPE_(\w+)/) { + my $type = $1; + if ($type eq "NONE") { + return "void"; + } elsif ($type eq "INT") { + return "gint32"; + } elsif ($type eq "UINT") { + return "guint32"; + } elsif ($type eq "ENUM" || $type eq "FLAGS") { + return "gint32"; + } elsif ($type eq "STRING") { + return "gchar*"; + } elsif ($type eq "OBJECT") { + return "GObject*"; + } else { + return "g" . lc ($type); + } + } else { + $tok =~ s/_TYPE//; + $tok =~ s/\|.*STATIC_SCOPE//; + $tok =~ s/\s+//g; + return StudlyCaps (lc($tok)); + } +} + sub addSignalElem { my ($spec, $class, $node) = @_; @@ -782,21 +822,22 @@ sub addSignalElem $method = $1; } else { @args = split(/,/, $spec); - $args[7] =~ s/_TYPE//; $args[7] =~ s/\s+//g; - addReturnElem($sig_elem, StudlyCaps(lc($args[7]))); - $parmcnt = ($args[8] =~ /\d+/); - if ($parmcnt > 0) { - $parms_elem = $doc->createElement('parameters'); - $sig_elem->appendChild($parms_elem); - for (my $idx = 0; $idx < $parmcnt; $idx++) { - $arg = $args[9+$idx]; - $arg =~ s/_TYPE//; $arg =~ s/\s+//g; - $arg = StudlyCaps(lc($arg)); - $parm_elem = $doc->createElement('parameter'); - $parms_elem->appendChild($parm_elem); - $parm_elem->setAttribute('name', "p$idx"); - $parm_elem->setAttribute('type', $arg); - } + my $rettype = parseTypeToken ($args[7]); + addReturnElem($sig_elem, $rettype); + $parmcnt = $args[8]; + $parmcnt =~ s/.*(\d+).*/\1/; + $parms_elem = $doc->createElement('parameters'); + $sig_elem->appendChild($parms_elem); + $parm_elem = $doc->createElement('parameter'); + $parms_elem->appendChild($parm_elem); + $parm_elem->setAttribute('name', "inst"); + $parm_elem->setAttribute('type', "$inst*"); + for (my $idx = 0; $idx < $parmcnt; $idx++) { + my $argtype = parseTypeToken ($args[9+$idx]); + $parm_elem = $doc->createElement('parameter'); + $parms_elem->appendChild($parm_elem); + $parm_elem->setAttribute('name', "p$idx"); + $parm_elem->setAttribute('type', $argtype); } return; } @@ -846,7 +887,7 @@ sub parseInitFunc } until ($init_lines[$linenum] =~ /\)\s*;/); addPropElem ($prop, $obj_el); $propcnt++; - } elsif ($line =~ /g(tk)?_signal_new/) { + } elsif ($line =~ /\bg.*_signal_new/) { my $sig = $line; do { $sig .= $init_lines[++$linenum]; diff --git a/parser/gapi_pp.pl b/parser/gapi_pp.pl index d37f7375e..74939a7d2 100755 --- a/parser/gapi_pp.pl +++ b/parser/gapi_pp.pl @@ -11,7 +11,7 @@ # 2003 Novell, Inc. $eatit_regex = "^#if.*(__cplusplus|DEBUG|DISABLE_(DEPRECATED|COMPAT)|ENABLE_BROKEN|COMPILATION)"; -$ignoreit_regex = '^\s+\*|#\s*include|#\s*else|#\s*endif|#\s*undef|G_(BEGIN|END)_DECLS|extern|GDKVAR|GTKVAR|GTKMAIN_C_VAR|GTKTYPEUTILS_VAR|VARIABLE|GTKTYPEBUILTIN'; +$ignoreit_regex = '^\s+\*|#ident|#\s*include|#\s*else|#\s*endif|#\s*undef|G_(BEGIN|END)_DECLS|extern|GDKVAR|GTKVAR|GTKMAIN_C_VAR|GTKTYPEUTILS_VAR|VARIABLE|GTKTYPEBUILTIN'; foreach $arg (@ARGV) { if (-d $arg && -e $arg) { diff --git a/vte/vte-api.xml b/vte/vte-api.xml index 857e30c12..e29933365 100644 --- a/vte/vte-api.xml +++ b/vte/vte-api.xml @@ -33,6 +33,14 @@ + + + + + + + + @@ -47,21 +55,46 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -85,162 +118,171 @@ - + - + - + - + - + + + - + + + - + - + - + - + - + - + - + - + - + - + + + + + - + - + - + - + - + - + + @@ -639,5 +681,6 @@ + \ No newline at end of file