#!/usr/bin/perl # # API reference # %byref = ( 'e-popup.xml' => { 'files' => [ 'e-popup.h', 'e-popup.c' ], 'module' => 'e-util' }, 'e-menu.xml' => { 'files' => [ 'e-menu.h', 'e-menu.c' ], 'module' => 'e-util' }, 'e-event.xml' => { 'files' => [ 'e-event.h', 'e-event.c' ], 'module' => 'e-util' }, 'e-config.xml' => { 'files' => [ 'e-config.h', 'e-config.c' ], 'module' => 'e-util' }, 'e-plugin.xml' => { 'files' => [ 'e-plugin.h', 'e-plugin.c' ], 'module' => 'e-util' }, 'em-popup.xml' => { 'files' => [ 'em-popup.h', 'em-popup.c' ], 'module' => 'mail' }, 'em-format.xml' => { 'files' => [ 'em-format-hook.h' , 'em-format-hook.c', 'em-format.h', 'em-format.c', 'em-format-html.h', 'em-format-html.c' ], 'module' => 'mail' }, ); foreach $out (keys %byref) { print "file $out\n"; %data = %{$byref{$out}}; @files = @{$data{'files'}}; $module = $data{'module'}; $files = ""; foreach $file (@files) { $files .= " ../../".$module."/".$file; } system("kernel-doc -docbook $files > $out"); } # # Event reference # %events = ( 'em-events.xml' => { 'files' => [ 'em-folder-view.c', 'em-composer-utils.c', 'mail-folder-cache.c' ], 'module' => 'mail' }, ); foreach $out (keys %events) { print "generating events doc $out\n"; %data = %{$events{$out}}; @files = @{$data{'files'}}; $module = $data{'module'}; open OUT,">$out"; foreach $file (@files) { open IN,"<../../$module/$file"; while () { if (m/\@Event: (.*)/) { $title = $1; $name = $1; $target = ""; while () { if (m/\@Title: (.*)/) { $title = $1; } elsif (m/\@Target: (.*)/) { $target = $1; } elsif (m/\* (.*)/) { $desc.= $1."\n"; } last if (m/\*\//); } if ($target eq "") { print "Warning: No target defined for event $name ($title)\n"; } print OUT < $title Name $name Target $target Description $desc END } } close IN; } close OUT; } # # Generic table builder, still experimental. # sub buildxml { my $type = $_[0]; my $out = $_[1]; my %data = %{$_[2]}; my @files, $module; print "generating doc $out for $type\n"; @files = @{$data{'files'}}; $module = $data{'module'}; open OUT,">$out"; foreach $file (@files) { open IN,"<../../$module/$file"; while () { if (m/\/\*\* \@$type: (.*)/) { my $key = ""; my $val = ""; my $desc = 0; my $title = $1; my %blob = { }; my @blobs = (); while () { if (m/\@(.*): (.*)/) { if ($val ne "") { $blob{$key} = $val; } $key = $1; $val = $2; push @blobs, $key; } elsif (m/\* (.+)/) { $val .= $1."\n"; } else { if ($desc == 0) { if ($val ne "") { $blob{$key} = $val; } $val = ""; $key = ""; } else { $val .= "\n"; } if (m/\*\s*$/) { $desc = 1; } } last if (m/\*\//); } print OUT< $title END foreach $key (@blobs) { print OUT < $key $blob{$key} END } print OUT < END if ($val ne "") { $val =~ s/[\n]+$//gos; $val =~ s/\n\n/\<\/simpara\>\n\/g; print OUT "$val\n"; } print OUT "\n"; } } close IN; } close OUT; } %hooks = ( 'es-hooks.xml' => { 'type' => 'HookClass', 'files' => [ 'es-menu.c', 'es-event.c' ], 'module' => 'shell' }, 'es-menus.xml' => { 'type' => 'HookPoint', 'files' => [ 'e-shell-window.c' ], 'module' => 'shell' }, 'es-events.xml' => { 'type' => 'Event', 'files' => [ 'e-shell.c' ], 'module' => 'shell' }, ); foreach $out (keys %hooks) { %data = %{$hooks{$out}}; &buildxml($data{'type'}, $out, \%data); }