#!/usr/bin/perl -w # vim:sw=4:et use warnings; use strict; use Getopt::Long; sub isBeagleRunning() { open(IN, "-|") || exec "beagle-ping"; while(<IN>) { if (/^Daemon version:/) { close(IN); return 1; } } close(IN); return 0; } sub formatHTML($$) { my ($query, $hits) = @_; print "<html>\n<body\n<ul>\n"; foreach my $hit(@$hits) { print "<li>$hit</li>\n"; } print "</ul>\n</body>\n</html>\n"; } sub beagleQuery($$$) { my ($words, $method, $maxnum) = @_; my @hits = (); open(IN, "-|") || exec "beagle-query", "--type", "DocbookEntry", "--type", "File", "--max-hits", $maxnum, @$words, "ext:docbook"; while(<IN>) { chop; next if (/^Debug:/); my $uri = $_; $uri = $1 if ($uri =~ /^file:\/\/(.*)$/); print "uri: $uri\n"; my $helpLink = &makeHelpLink($uri); push(@hits, $helpLink) if (!grep { /^$helpLink$/ } @hits); } close(IN); return @hits; } sub makeHelpLink($) { # Try to figure out the name of the application from the path to its index.docbook file my ($path) = @_; my @pathcomponents = split '/', $path; my $appName = $pathcomponents[-2]; my $appName2 = $pathcomponents[-3]; if ($appName eq $appName2 or $appName2 eq "doc" or (-d "/usr/share/locale/$appName2")) { return "<a href=\"help:/$appName\">$appName</a>"; } return "<a href=\"help:/$appName2/$appName\">$appName ($appName2)</a>"; } my $method = "and"; my $maxnum = 100; GetOptions("method=s", \$method, "maxnum=i", \$maxnum); my @hits = ("The Beagle daemon is not running, search is not available"); my @words = @ARGV; if (isBeagleRunning()) { @hits = beagleQuery(\@words, $method, $maxnum); } @hits = ("There are no search results") if ($#hits < 0); formatHTML(\@words, \@hits);