4 typedef GtkWidget *(*GDoDemoFunc) (GtkWidget *do_widget);
6 typedef struct _Demo Demo;
22 ($basename = $file) =~ s/\.c$//;
24 open INFO_FILE, $file or die "Cannot open '$file'\n";
26 $title =~ s@^\s*/\*\s*@@;
28 if ($title =~ /^(.*)::(.*)$/) {
38 print "GtkWidget *do_$basename (GtkWidget *do_widget);\n";
40 push @demos, {"name" => $basename, "title" => $title, "file" => "$file $extra",
41 "func" => "do_$basename"};
44 # generate a list of 'parent names'
45 foreach $href (@demos) {
46 if ($href->{"title"} =~ m|^([-\w\s]+)/[-\w\s]+$|) {
51 if (defined @parents) {
52 foreach $foo (@parents) {
53 if ($foo eq $parent_name) {
63 push @parents, $parent_name;
65 $tmp = (defined @child_arrays)?($#child_arrays + 1):0;
66 push @child_arrays, "child$tmp";
68 push @demos, {"name" => "NULL", "title" => $parent_name, "file" => "NULL",
73 if (defined @parents) {
75 for ($i = 0; $i <= $#parents; $i++) {
78 print "\nDemo ", $child_arrays[$i], "[] = {\n";
81 for ($j = 0; $j <= $#demos; $j++) {
84 if (!defined $demos[$j]) {
88 if ($demos[$j]{"title"} =~ m|^$parents[$i]/([-\w\s]+)$|) {
95 print qq ( { "$demos[$j]{name}", "$1", "$demos[$j]{file}", $demos[$j]{func}, NULL });
98 $demos[$j]{"title"} = "foo";
103 print qq ( { NULL } );
112 $a->{"title"} cmp $b->{"title"};
115 # sort the child arrays
116 if (defined @child_arrays) {
117 for ($i = 0; $i <= $#child_arrays; $i++) {
118 @foo_old = @{$child_arrays[$i]};
120 @{$child_arrays[$i]} = sort {
121 $a->{"title"} cmp $b->{"title"};
127 print "\nDemo gtk_demos[] = {\n";
130 foreach $href (@demos) {
134 if ($href->{title} eq "foo") {
144 if (defined @parents) {
145 for ($i = 0; $i <= $#parents; $i++) {
146 if ($parents[$i] eq $href->{title}) {
148 if ($href->{file} eq 'NULL') {
149 print qq ( { NULL, "$href->{title}", NULL, $href->{func}, $child_arrays[$i] });
151 print qq ( { "$href->{name}", "$href->{title}", "$href->{file}", $href->{func}, $child_arrays[$i] });
164 print qq ( { "$href->{name}", "$href->{title}", "$href->{file}", $href->{func}, NULL });
168 print qq ( { NULL } );