Generate list of infos and infolists hooked for documentation (via docgen.pl script)

This commit is contained in:
Sebastien Helleu 2008-09-02 17:31:28 +02:00
parent 95b636c24c
commit 94c9b21450

View File

@ -83,7 +83,7 @@ weechat::config_set_plugin("path", $default_path)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# get list of commands in a hash with 3 indexes: plugin, command, info_name # get list of commands in a hash with 3 indexes: plugin, command, xxx
sub get_commands sub get_commands
{ {
my %commands; my %commands;
@ -110,7 +110,7 @@ sub get_commands
return %commands; return %commands;
} }
# get list of config options in a hash with 4 indexes: config, section, option, info_name # get list of config options in a hash with 4 indexes: config, section, option, xxx
sub get_options sub get_options
{ {
my %options; my %options;
@ -148,11 +148,51 @@ sub get_options
return %options; return %options;
} }
# get list of infos hooked by plugins in a hash with 3 indexes: plugin, info_name, xxx
sub get_infos_hooked
{
my %infos_hooked;
my $infolist = weechat::infolist_get("hook", "", "info");
while (weechat::infolist_next($infolist))
{
my $info_name = weechat::infolist_string($infolist, "info_name");
my $plugin = weechat::infolist_string($infolist, "plugin_name");
$plugin = "weechat" if ($plugin eq "");
$infos_hooked{$plugin}{$info_name}{"description"} = weechat::infolist_string($infolist, "description");
}
weechat::infolist_free($infolist);
return %infos_hooked;
}
# get list of infolists hooked by plugins in a hash with 3 indexes: plugin, infolist_name, xxx
sub get_infolists_hooked
{
my %infolists_hooked;
my $infolist = weechat::infolist_get("hook", "", "infolist");
while (weechat::infolist_next($infolist))
{
my $infolist_name = weechat::infolist_string($infolist, "infolist_name");
my $plugin = weechat::infolist_string($infolist, "plugin_name");
$plugin = "weechat" if ($plugin eq "");
$infolists_hooked{$plugin}{$infolist_name}{"description"} = weechat::infolist_string($infolist, "description");
}
weechat::infolist_free($infolist);
return %infolists_hooked;
}
# build XML doc files (command /docgen) # build XML doc files (command /docgen)
sub docgen sub docgen
{ {
my %plugin_commands = get_commands(); my %plugin_commands = get_commands();
my %plugin_options = get_options(); my %plugin_options = get_options();
my %infos_hooked = get_infos_hooked();
my %infolists_hooked = get_infolists_hooked();
# xml header (comment) for all files # xml header (comment) for all files
my $xml_header = my $xml_header =
@ -174,6 +214,8 @@ sub docgen
{ {
my $num_files_commands_written = 0; my $num_files_commands_written = 0;
my $num_files_options_written = 0; my $num_files_options_written = 0;
my $num_files_infos_hooked_written = 0;
my $num_files_infolists_hooked_written = 0;
setlocale(LC_MESSAGES, $locale.".UTF-8"); setlocale(LC_MESSAGES, $locale.".UTF-8");
my $d = Locale::gettext->domain_raw("weechat"); my $d = Locale::gettext->domain_raw("weechat");
@ -269,13 +311,74 @@ sub docgen
weechat::print("", weechat::prefix("error")."docgen error: unable to write file '$filename'"); weechat::print("", weechat::prefix("error")."docgen error: unable to write file '$filename'");
} }
} }
# write infos hooked
foreach my $plugin (keys %infos_hooked)
{
$filename = $dir.$plugin."_infos_hooked.xml";
if (open(FILE, ">".$filename))
{
print FILE $xml_header;
foreach my $info (sort keys %{$infos_hooked{$plugin}})
{
my $description = $infos_hooked{$plugin}{$info}{"description"};
$description = $d->get($description) if ($description ne "");
print FILE "<row>\n";
print FILE " <entry>".$info."</entry>\n";
print FILE " <entry>".$description."</entry>\n";
print FILE "</row>\n";
}
#weechat::print("", "docgen: file ok: '$filename'");
$num_files_written++;
$num_files_infos_hooked_written++;
close(FILE);
}
else
{
weechat::print("", weechat::prefix("error")."docgen error: unable to write file '$filename'");
}
}
# write infolists hooked
foreach my $plugin (keys %infolists_hooked)
{
$filename = $dir.$plugin."_infolists_hooked.xml";
if (open(FILE, ">".$filename))
{
print FILE $xml_header;
foreach my $info (sort keys %{$infolists_hooked{$plugin}})
{
my $description = $infolists_hooked{$plugin}{$info}{"description"};
$description = $d->get($description) if ($description ne "");
print FILE "<row>\n";
print FILE " <entry>".$info."</entry>\n";
print FILE " <entry>".$description."</entry>\n";
print FILE "</row>\n";
}
#weechat::print("", "docgen: file ok: '$filename'");
$num_files_written++;
$num_files_infolists_hooked_written++;
close(FILE);
}
else
{
weechat::print("", weechat::prefix("error")."docgen error: unable to write file '$filename'");
}
}
} }
else else
{ {
weechat::print("", weechat::prefix("error")."docgen error: directory '$dir' does not exist"); weechat::print("", weechat::prefix("error")."docgen error: directory '$dir' does not exist");
} }
my $total = $num_files_commands_written + $num_files_options_written; my $total = $num_files_commands_written + $num_files_options_written
weechat::print("", "docgen: ".$locale.": ".$total." files written (".$num_files_commands_written." commands, ".$num_files_options_written." options)"); + $num_files_infos_hooked_written + $num_files_infolists_hooked_written;
weechat::print("", "docgen: ".$locale.": ".$total." files written ("
.$num_files_commands_written." cmd, "
.$num_files_options_written." opt, "
.$num_files_infos_hooked_written." infos, "
.$num_files_infolists_hooked_written." infolists)");
} }
weechat::print("", "docgen: total: ".$num_files_written." files written"); weechat::print("", "docgen: total: ".$num_files_written." files written");
setlocale(LC_MESSAGES, ""); setlocale(LC_MESSAGES, "");