[gtk-doc] scan: improve gtype detection
- From: Stefan Kost <stefkost src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-doc] scan: improve gtype detection
- Date: Sat, 27 Aug 2011 07:51:52 +0000 (UTC)
commit 73aeebbd61912cafeb569208eb62d04c6ac062de
Author: Stefan Sauer <ensonic users sf net>
Date: Fri Aug 26 19:04:37 2011 +0200
scan: improve gtype detection
Run code that detects a gtype and moves the standard symbols to the standard
section in a loop to e.g. handle enums defined in the same header.
gtkdoc-scan.in | 73 ++++++++++++++++++++++++++++++++-----------------------
1 files changed, 42 insertions(+), 31 deletions(-)
---
diff --git a/gtkdoc-scan.in b/gtkdoc-scan.in
index 2c5e284..30c51af 100755
--- a/gtkdoc-scan.in
+++ b/gtkdoc-scan.in
@@ -829,46 +829,57 @@ sub ScanHeader {
}
}
- @TRACE@("Scanning $input_file done\n\n\n");
+ @TRACE@("Scanning $input_file done\n");
# sort the symbols
$list=join("\n",sort(split("\n",$list)))."\n";
-
# Try to separate the standard macros and functions, placing them at the
# end of the current section, in a subsection named 'Standard'.
- my ($class) = "";
+ # do this in a loop to catch object, enums and flags
+ my ($class,$lclass);
my ($standard_decl) = "";
- if ($list =~ m/^\S+_IS_(\S*)_CLASS/m) {
- $class = $1;
- } elsif ($list =~ m/^\S+_IS_(\S*)/m) {
- $class = $1;
- }
-
- if ($class ne "") {
- if ($list =~ s/^\S+_IS_$class\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_TYPE_$class\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_.*_get_type\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_${class}_CLASS\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_IS_${class}_CLASS\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_${class}_GET_CLASS\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_${class}_GET_IFACE\n//m) { $standard_decl .= $&; }
- if ($list =~ s/^\S+_${class}_GET_INTERFACE\n//m) { $standard_decl .= $&; }
-
- # We do this one last, otherwise it tends to be caught by the IS_$class macro
- if ($list =~ s/^\S+_$class\n//m) { $standard_decl = $& . $standard_decl; }
-
- if ($standard_decl ne "") {
- $list .= "<SUBSECTION Standard>\n$standard_decl";
- }
-
- if ($list ne "") {
- $$section_list{$file_basename} .= "<SECTION>\n<FILE>$file_basename</FILE>\n$list</SECTION>\n\n";
+ do {
+ if ($list =~ m/^\S+_IS_(\S*)_CLASS/m) {
+ $class = $1;
+ $lclass = lc($class);
+ @TRACE@("Found gobject class '$class'\n");
+ } elsif ($list =~ m/^\S+_IS_(\S*)/m) {
+ $class = $1;
+ $lclass = lc($class);
+ @TRACE@("Found gobject class '$class'\n");
+ } elsif ($list =~ m/^\S+_(\S*)_get_type\n/m) {
+ $lclass = $1;
+ $class = uc($lclass);
+ @TRACE@("Found gobject class '$class'\n");
+ } else {
+ $class = $lclass = "";
}
- } else {
- if ($list ne "") {
- $$section_list{$file_basename} .= "<SECTION>\n<FILE>$file_basename</FILE>\n$list</SECTION>\n\n";
+
+ if ($class ne "") {
+ while ($list =~ s/^\S+_IS_$class\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_TYPE_$class\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_${lclass}_get_type\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_${class}_CLASS\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_IS_${class}_CLASS\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_${class}_GET_CLASS\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_${class}_GET_IFACE\n//m) { $standard_decl .= $&; }
+ while ($list =~ s/^\S+_${class}_GET_INTERFACE\n//m) { $standard_decl .= $&; }
+
+ # We do this one last, otherwise it tends to be caught by the IS_$class macro
+ while ($list =~ s/^\S+_$class\n//m) { $standard_decl .= $&; }
+
+ @TRACE@("Decl '".join(",",split("\n",$list))."'\n");
+ @TRACE@("Std '".join(",",split("\n",$standard_decl))."'\n");
}
+ } while ($class ne "");
+ if ($standard_decl ne "") {
+ # sort the symbols
+ $standard_decl=join("\n",sort(split("\n",$standard_decl)))."\n";
+ $list .= "<SUBSECTION Standard>\n$standard_decl";
+ }
+ if ($list ne "") {
+ $$section_list{$file_basename} .= "<SECTION>\n<FILE>$file_basename</FILE>\n$list</SECTION>\n\n";
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]