diff options
Diffstat (limited to 'khelpcenter/searchhandlers/khc_htsearch.pl')
-rwxr-xr-x | khelpcenter/searchhandlers/khc_htsearch.pl | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/khelpcenter/searchhandlers/khc_htsearch.pl b/khelpcenter/searchhandlers/khc_htsearch.pl new file mode 100755 index 000000000..451e858dd --- /dev/null +++ b/khelpcenter/searchhandlers/khc_htsearch.pl @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +use strict; + +use Encode; +use Getopt::Long; + +use open IO => ':utf8'; +use open ':std'; + +my $htsearchpath="/srv/www/cgi-bin/htsearch"; + +my $config; +my $format; +my $method; +my $words; +my $lang; +my $docbook; +my $indexdir; +my $maxnum; + +GetOptions ( + '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" ) ) +{ + 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"; + } +} |