165 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!@PERL@ -w
 | |
| 
 | |
| print <<EOT;
 | |
| typedef	GtkWidget *(*GDoDemoFunc) (GtkWidget *do_widget);
 | |
| 
 | |
| typedef struct _Demo Demo;
 | |
| 
 | |
| struct _Demo 
 | |
| {
 | |
|   gchar *name;
 | |
|   gchar *title;
 | |
|   gchar *filename;
 | |
|   GDoDemoFunc func;
 | |
|   Demo *children;
 | |
| };
 | |
| 
 | |
| EOT
 | |
| 
 | |
| for $file (@ARGV) {
 | |
|     my %demo;
 | |
|     
 | |
|     ($basename = $file) =~ s/\.c$//;
 | |
| 
 | |
|     open INFO_FILE, $file or die "Cannot open '$file'\n";
 | |
|     $title = <INFO_FILE>;
 | |
|     $title =~ s@^\s*/\*\s*@@;
 | |
|     $title =~ s@\s*$@@;
 | |
| 
 | |
|     close INFO_FILE;
 | |
| 
 | |
|     print "GtkWidget *do_$basename (GtkWidget *do_widget);\n";
 | |
| 
 | |
|     push @demos, {"name" => $basename, "title" => $title, "file" => $file,
 | |
| 		  "func"  => "do_$basename"};
 | |
| }
 | |
| 
 | |
| # generate a list of 'parent names'
 | |
| foreach $href (@demos) {
 | |
|     if ($href->{"title"} =~ m|^([-\w\s]+)/[-\w\s]+$|) {
 | |
| 	my $parent_name = $1;
 | |
| 	my $do_next = 0;
 | |
| 
 | |
| 	# parent detected
 | |
| 	if (@parents) {
 | |
| 	    foreach $foo (@parents) {
 | |
| 		if ($foo eq $parent_name) {
 | |
| 		    $do_next = 1;
 | |
| 		}
 | |
| 	    }
 | |
| 	    
 | |
| 	    if ($do_next) {
 | |
| 		next;
 | |
| 	    }
 | |
| 	}
 | |
| 
 | |
| 	push @parents, $parent_name;
 | |
| 
 | |
| 	$tmp = (@child_arrays)?($#child_arrays + 1):0;
 | |
| 	push @child_arrays, "child$tmp";
 | |
| 
 | |
| 	push @demos, {"name" => "NULL", "title" => $parent_name, "file" => "NULL",
 | |
| 		      "func" => "NULL"};
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (@parents) {
 | |
|     $i = 0;
 | |
|     for ($i = 0; $i <= $#parents; $i++) {
 | |
| 	$first = 1;
 | |
| 	
 | |
| 	print "\nDemo ", $child_arrays[$i], "[] = {\n";
 | |
| 	
 | |
| 	$j = 0;
 | |
| 	for ($j = 0; $j <= $#demos; $j++) {
 | |
| 	    $href = $demos[$j];
 | |
| 	    
 | |
| 	    if (!$demos[$j]) {
 | |
| 		next;
 | |
| 	    }
 | |
| 	    
 | |
| 	    if ($demos[$j]{"title"} =~ m|^$parents[$i]/([-\w\s]+)$|) {
 | |
| 		if ($first) {
 | |
| 		    $first = 0;
 | |
| 		} else {
 | |
| 		    print ",\n";
 | |
| 		}
 | |
| 		
 | |
| 		print qq (  { "$demos[$j]{name}", "$1", "$demos[$j]{file}", $demos[$j]{func}, NULL });
 | |
| 
 | |
| 		# hack ... ugly
 | |
| 		$demos[$j]{"title"} = "foo";
 | |
| 	    }
 | |
| 	}
 | |
| 
 | |
| 	print ",\n";
 | |
| 	print qq (  { NULL } );
 | |
| 	print "\n};\n";
 | |
|     }   
 | |
| }
 | |
| 
 | |
| # sort @demos
 | |
| @demos_old = @demos;
 | |
| 
 | |
| @demos = sort {
 | |
|     $a->{"title"} cmp $b->{"title"};
 | |
| } @demos_old;
 | |
| 
 | |
| # sort the child arrays
 | |
| if (@child_arrays) {
 | |
|     for ($i = 0; $i <= $#child_arrays; $i++) {
 | |
| 	@foo_old = @{$child_arrays[$i]};
 | |
| 
 | |
| 	@{$child_arrays[$i]} = sort {
 | |
| 	    $a->{"title"} cmp $b->{"title"};
 | |
| 	} @foo_old;
 | |
|     }
 | |
| }
 | |
| 
 | |
| # toplevel
 | |
| print "\nDemo gtk_demos[] = {\n";
 | |
| 
 | |
| $first = 1;
 | |
| foreach $href (@demos) {
 | |
|     $handled = 0;
 | |
| 
 | |
|     # ugly evil hack
 | |
|     if ($href->{title} eq "foo") {
 | |
| 	next;
 | |
|     }
 | |
| 
 | |
|     if ($first) {
 | |
| 	$first = 0;
 | |
|     } else {
 | |
| 	print ", \n";
 | |
|     }
 | |
| 
 | |
|     if (@parents) {
 | |
| 	for ($i = 0; $i <= $#parents; $i++) {
 | |
| 	    if ($parents[$i] eq $href->{title}) {
 | |
| 
 | |
| 		if ($href->{file} eq 'NULL') {
 | |
| 		    print qq (  { NULL, "$href->{title}", NULL, $href->{func}, $child_arrays[$i] });
 | |
| 		} else {
 | |
| 		    print qq (  { "$href->{name}", "$href->{title}", "$href->{file}", $href->{func}, $child_arrays[$i] });
 | |
| 		}
 | |
| 		
 | |
| 		$handled = 1;
 | |
| 		last;
 | |
| 	    }
 | |
| 	}
 | |
|     }
 | |
|     
 | |
|     if ($handled) {
 | |
| 	next;
 | |
|     }
 | |
|     
 | |
|     print qq (  { "$href->{name}", "$href->{title}", "$href->{file}", $href->{func}, NULL });
 | |
| }
 | |
| 
 | |
| print ",\n";
 | |
| print qq (  { NULL } );
 | |
| print "\n};\n";
 | |
| 
 | |
| exit 0;
 | 
