You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
4.3 KiB
173 lines
4.3 KiB
Index: khelpcenter/searchhandlers/khc_beagle_search.pl
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ khelpcenter/searchhandlers/khc_beagle_search.pl
|
|
@@ -0,0 +1,88 @@
|
|
+#!/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);
|
|
Index: khelpcenter/searchhandlers/khc_beagle_index.pl
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ khelpcenter/searchhandlers/khc_beagle_index.pl
|
|
@@ -0,0 +1,49 @@
|
|
+#!/usr/bin/perl
|
|
+# vim:sw=4:et
|
|
+
|
|
+use warnings;
|
|
+
|
|
+sub getKDEDocDir()
|
|
+{
|
|
+ my $prefix = `kde-config --prefix`;
|
|
+ chomp $prefix;
|
|
+
|
|
+ $prefix = "/opt/kde" if (not defined($prefix));
|
|
+ return "$prefix/share/doc";
|
|
+}
|
|
+
|
|
+sub addRoot()
|
|
+{
|
|
+ my $kdedocdir = &getKDEDocDir;
|
|
+
|
|
+ open (IN, "-|") || exec "beagle-config", "indexing", "ListRoots";
|
|
+
|
|
+ my $kdedoc_found = 0;
|
|
+ while(<IN>) {
|
|
+ if (/^$kdedocdir/o) {
|
|
+ $kdedoc_found = 1;
|
|
+ last;
|
|
+ }
|
|
+ }
|
|
+ close(IN);
|
|
+
|
|
+ if (not $kdedoc_found) {
|
|
+ `beagle-config indexing AddRoot $kdedocdir`;
|
|
+ `beagle-config indexing AddRoot $kdedocdir-bundle`;
|
|
+ }
|
|
+}
|
|
+
|
|
+sub createExistsFile($$)
|
|
+{
|
|
+ my ($idir, $ident) = @_;
|
|
+
|
|
+ open(OUT, ">", "$idir/$idir");
|
|
+ close(OUT);
|
|
+}
|
|
+
|
|
+my $idir = $ARGV[0];
|
|
+my $ident = $ARGV[1];
|
|
+
|
|
+if (addRoot) {
|
|
+ createExistsFile($idir, $ident);
|
|
+}
|
|
Index: khelpcenter/searchhandlers/docbook.desktop
|
|
===================================================================
|
|
--- khelpcenter/searchhandlers/docbook.desktop.orig
|
|
+++ khelpcenter/searchhandlers/docbook.desktop
|
|
@@ -2,5 +2,5 @@
|
|
|
|
DocumentTypes=text/docbook
|
|
|
|
-SearchCommand=khc_htsearch.pl --docbook --indexdir=%d --config=%i --words=%w --method=%o --maxnum=%m --lang=en
|
|
-IndexCommand=khc_docbookdig.pl --indexdir=%d --docpath=%p --identifier=%i
|
|
+SearchCommand=khc_beagle_search.pl --method=%o --maxnum=%m %w
|
|
+IndexCommand=khc_beagle_index.pl %d %i
|
|
Index: khelpcenter/searchhandlers/Makefile.am
|
|
===================================================================
|
|
--- khelpcenter/searchhandlers/Makefile.am.orig
|
|
+++ khelpcenter/searchhandlers/Makefile.am
|
|
@@ -3,7 +3,7 @@ searchhandlers_DATA = htdig.desktop man.
|
|
searchhandlersdir = $(kde_datadir)/khelpcenter/searchhandlers
|
|
|
|
kde_bin_SCRIPTS = khc_htdig.pl khc_htsearch.pl khc_mansearch.pl \
|
|
- khc_docbookdig.pl
|
|
+ khc_docbookdig.pl khc_beagle_search.pl khc_beagle_index.pl
|
|
|
|
htdigdata_DATA = htdig_long.html
|
|
|