summaryrefslogtreecommitdiffstats
path: root/khelpcenter/searchhandlers/khc_htsearch.pl.in
diff options
context:
space:
mode:
Diffstat (limited to 'khelpcenter/searchhandlers/khc_htsearch.pl.in')
-rw-r--r--khelpcenter/searchhandlers/khc_htsearch.pl.in117
1 files changed, 117 insertions, 0 deletions
diff --git a/khelpcenter/searchhandlers/khc_htsearch.pl.in b/khelpcenter/searchhandlers/khc_htsearch.pl.in
new file mode 100644
index 000000000..28113bec2
--- /dev/null
+++ b/khelpcenter/searchhandlers/khc_htsearch.pl.in
@@ -0,0 +1,117 @@
+#!/usr/bin/perl
+
+use strict;
+
+use Encode;
+use Getopt::Long;
+
+use open IO => ':utf8';
+use open ':std';
+
+my $htsearchpath="@HTDIG_SEARCH_BINARY@";
+my $config;
+my $format;
+my $method;
+my $words;
+my $lang;
+my $docbook;
+my $indexdir;
+my $maxnum;
+
+GetOptions (
+ 'binary=s' => \$htsearchpath,
+ 'config=s' => \$config,
+ 'format=s' => \$format,
+ 'method=s' => \$method,
+ 'words=s' => \$words,
+ 'lang=s' => \$lang,
+ 'docbook' => \$docbook,
+ 'indexdir=s' => \$indexdir,
+ 'maxnum=s' => \$maxnum
+);
+
+if ( !$indexdir ) {
+ print STDERR "No index dir given.\n";
+ exit 1;
+}
+
+if ( !$lang ) { $lang = "en"; }
+
+my $charset = langCharset( $lang );
+
+$words = encode( $charset, $words );
+
+if ( !open( HTSEARCH, "-|", "$htsearchpath", "-c", "$indexdir/$config.conf",
+ "format=$format&method=$method&words=$words&matchesperpage=$maxnum&exclude=[index.html]" ) )
+{
+ print "Can't execute htsearch at '$htsearchpath'.\n";
+ exit 1;
+}
+
+my ($body,$liststart,$ref,$link,$error,$errorOut);
+
+while( <HTSEARCH> ) {
+ if ( !$body ) {
+ print;
+ if ( /^<body/ ) { $body = 1; }
+ }
+ if ( /^<h3>/ ) {
+ print;
+ print "<ul>\n";
+ $liststart = 1;
+ }
+ if ( /^<img src.*<a href="(.*)">(.*)<\/a>/ ) {
+ $ref = $1;
+ $link = $2;
+
+ print STDERR "REF: $ref LINK: $link\n";
+
+ $ref =~ s/file:\/\/localhost//;
+
+ $ref =~ s/http:\/\/localhost\//file:\//;
+
+ if ( $docbook ) {
+ $ref =~ /help:\/\/(.*)\/index.docbook/;
+ my $app = $1;
+ $ref = "help:$app";
+
+ $link =~ s/apptitle/$app/;
+ }
+
+ print " <li><a href=\"$ref\">$link</a></li>\n";
+ }
+ if ( /^<h1>ht:\/\/Dig error/ ) {
+ $error = 1;
+ print "Htdig error:\n";
+ }
+ if ( $error && /^<pre>/ ) {
+ $errorOut = 1;
+ }
+ if ( $errorOut ) {
+ print;
+ if ( /^<\/pre>/ ) { $errorOut = 0; }
+ }
+}
+
+close HTSEARCH;
+
+if ( $liststart ) { print "</ul>\n"; }
+
+print "</body></html>\n";
+
+if ( $? != 0 ) { exit $?; }
+
+1;
+
+# Return charset used for given language
+sub langCharset( $ )
+{
+ my $lang = shift;
+ if ( $lang eq "cz" || $lang eq "hu" ) {
+ return "latin2";
+ } elsif ( $lang eq "kr" ) {
+ return "utf8";
+ } else {
+ return "latin1";
+ }
+}