#! /usr/bin/perl -w

# NB depends on kdelibs3

$kdeversion = $ENV{KDE_SESSION_VERSION};

if ($kdeversion == 4) {
    $kshell = "kshell4";
    $kdeconfig = "kde4-config";
} else {
    $kshell = "kshell";
    $kdeconfig = "kde-config";
}

system "$kshell khelpcenter > /dev/null" if $#ARGV < 0;

foreach $filename (@ARGV) {

	if ($filename =~ s|^(g?help:)?/+usr/share/gnome/help/([^/]*)/([^/]*)/\2.xml((\?[^/]*)?)$|help:$2$4|) {
		$base = $2;
		$lang = $3;
		$search = $4;
		$search =~ s/^\?//;

		if ($filename =~ m|^help:[^/]*\?[^/]*$|) {
			$cache_file = "/usr/share/gnome/help/$base/$lang/$base.cache.bz2";
			if (!-f $cache_file) {
				$cache_base = `$kdeconfig --path cache`;
				chomp($cache_base);
				$cache_dir = "$cache_base/usr/share/gnome/help/$base/$lang";
				$cache_file = "$cache_dir/$base.cache.bz2";
				if (!-f $cache_file) {
					$orig_file = "/usr/share/gnome/help/$base/$lang/$base.xml";
					system ("mkdir -m700 -p $cache_dir");
					system ("meinproc --cache $cache_file $orig_file > /dev/null");
				}
			}
			$/ = "<";
			open XML, "bunzip2 -c $cache_file |";
			while ($line = <XML>) {
				if ($line =~ m|^FILENAME\s[^>]*filename="([^>\"]*)"|) {
					$html_filename = "help:$base/$1";
					if ($1 eq "$search.html") {
						$filename = $html_filename;
						last;
					}
				}
				if ($line =~ m|^a\s[^>]*name="([^>\"]*)"|) {
					if ($1 eq $search) {
						$filename = "$html_filename#$1";
						last;
					}
				}
			}
			close XML;
		}
	}

	system "$kshell khelpcenter $filename > /dev/null";
}
