aboutsummaryrefslogblamecommitdiffstats
path: root/doc/devel/build-eplugin-manual.pl
blob: 3a99e902231a512cd45ccfa502fc03fa55a9c62f (plain) (tree)

























                                                       
                            
                                                       

                                    


























                                                                   



                                                                                              
 































































                                                                                  
 








                                            
             





                                            


                                                                                









                                          
                            



























                                                   






                                                                















                                                                 



                                                    


                          
                
   
             
                    














                                                       



                                          



                                         



















                                                                                                                                               







                                           

                                                                                                                       
#!/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' },

       'e-import.xml' =>
       { 'files' => [ 'e-import.h', 'e-import.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 (<IN>) {
#       if (m/\@Event: (.*)/) {
#       $title = $1;
#       $name = $1;
#       $target = "";
#       while (<IN>) {
#           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 <<END;
#   <sect2>
#     <title>$title</title>
#     <informaltable>
#       <tgroup cols="2">
#         <colspec colnum="1" colname="field" colwidth="1*"/>
#         <colspec colnum="2" colname="value" colwidth="4*"/>
#         <tbody valign="top">
#       <row>
#         <entry>Name</entry>
#         <entry><constant>$name</constant></entry>
#       </row>
#       <row>
#         <entry>Target</entry>
#         <entry>
#           <link
#             linkend="$module-hooks-event-$target">$target</link>
#         </entry>
#       </row>
#       <row>
#         <entry>Description</entry>
#         <entry>
#         <simpara>
#         $desc
#         </simpara>
#         </entry>
#       </row>
#         </tbody>
#       </tgroup>
#     </informaltable>
#   </sect2>
# END
#       }
#   }
#   close IN;
#     }
#     close OUT;
# }

#
# Generic table builder, still experimental.
#

sub buildxml {
    my $type = $_[0];
    my $out = $_[1];
    my %data = %{$_[2]};
    my @files, $module;
    my $line;

    print "generating doc $out for $type\n";
    @files = @{$data{'files'}};
    $module = $data{'module'};
    open OUT,">$out";
    foreach $file (@files) {
    my $line = 0;

    open IN,"<../../$module/$file" || die ("Cannot open \"$module/$file\"");
    while (<IN>) {
        if (m/\/\*\* \@$type: (.*)/) {
        my $key = "";
        my $val = "";
        my $desc = 0;
        my $title = $1;
        my %blob = { };
        my @blobs = ();

        while (<IN>) {
            $line++;
            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<<END;
    <sect2>
      <title>$title</title>
END
        if ($val ne "") {
            $val =~ s/[\n]+$//gos;
            $val =~ s/\n\n/\<\/simpara\>\n\<simpara\>/g;
            print OUT "<simpara>$val</simpara>\n";
        }
        print OUT <<END;
      <informaltable>
        <tgroup cols="2">
          <colspec colnum="1" colname="field" colwidth="1*"/>
          <colspec colnum="2" colname="value" colwidth="4*"/>
          <tbody valign="top">
END

        foreach $key (@blobs) {
            print OUT <<END;
        <row>
          <entry>$key</entry>
          <entry>$blob{$key}</entry>
        </row>
END
}
        print OUT <<END;
        <row>
          <entry>Defined</entry>
          <entry>$module/$file:$line</entry>
        </row>
          </tbody>
        </tgroup>
      </informaltable>
    </sect2>
END
        }
        $line++;
    }
    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-importers.xml' =>
        { 'type' => 'HookClass',
          'files' => [ 'e-import.c' ],
          'module' => 'e-util' },
       'es-events.xml' =>
        { 'type' => 'Event',
          'files' => [ 'e-shell.c' ],
          'module' => 'shell' },
       'em-events.xml' =>
        { 'type' => 'Event',
          'files' => [ 'em-folder-view.c', 'em-composer-utils.c', 'mail-folder-cache.c' ],
          'module' => 'mail' },
       'em-popups.xml' =>
        { 'type' => 'HookPoint-EMPopup',
          'files' => [ 'em-folder-tree.c', 'em-folder-view.c', 'em-format-html-display.c', '../composer/e-msg-composer-attachment-bar.c' ],
          'module' => 'mail' },
       'ecal-popups.xml' =>
        { 'type' => 'HookPoint-ECalPopup',
          'files' => [ 'gui/e-calendar-view.c', 'gui/calendar-component.c', 'gui/e-calendar-view.c', 'gui/tasks-component.c' ],
          'module' => 'calendar' },
       'em-configs.xml' =>
        { 'type' => 'HookPoint-EMConfig',
          'files' => [ 'em-mailer-prefs.c', 'em-account-editor.c', 'em-folder-properties.c', 'em-composer-prefs.c' ],
          'module' => 'mail' },
       'em-menus.xml' =>
        { 'type' => 'HookPoint-EMMenu',
          'files' => [ 'em-folder-browser.c', 'em-message-browser.c' ],
          'module' => 'mail' },
        );

foreach $out (keys %hooks) {
    %data = %{$hooks{$out}};

    &buildxml($data{'type'}, $out, \%data);
}

# this works on my system; you need the docbook-xsl-stylesheets package and xsltproc
system("xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/current/html/tldp-sections.xsl evolution-plugin-manual.xml");