package Sman::Swishe; #$Id: Swishe.pm,v 1.17 2006/07/07 02:28:22 joshr Exp $ use strict; use warnings; use File::Temp qw/ tempfile /; use fields qw(config tempfilestounlink); use Sman; # for $Sman::SMAN_DATA_VERSION # this doesn't need SWISH::API because we're stuffing data # in with the Swish-e exe directly. # call like my $smanswishe = new Sman::Swishe($smanconfig); sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; bless ($self, $class); $self->{config} = shift; # return $self; } # writes a config file to a tmp file, # returns the filename sub WriteConfigFile { my $self = shift; my $tmpdir = $self->{config}->GetConfigData("TMPDIR") || "/tmp"; my ($fh, $filename) = tempfile( "$tmpdir/sman-swish-conf.XXXXX" ); # this is safe. ? push(@ {$self->{tempfilestounlink}}, $filename); # extra work to make sure this file gets deleted. my @names = $self->{config}->GetConfigNames(); for my $n (@names) { #print "Examining $n..\n"; if($n =~ /^SWISHE_(.+)/i) { my ($name, $value) = ($1, $self->{config}->GetConfigData($n)); if ($name =~ m/IndexPointer/) { $value =~ s/%V/$Sman::SMAN_DATA_VERSION/; } print "Config: $name -> '$value'\n" if $self->{config}->GetConfigData("VERBOSE"); print $fh "$name $value\n"; } } print $fh $self->_expandaliasesforswisheconf("TITLEALIASES"); print $fh $self->_expandaliasesforswisheconf("SECALIASES"); print $fh $self->_expandaliasesforswisheconf("DESCALIASES"); print $fh $self->_expandaliasesforswisheconf("MANPAGEALIASES"); close($fh) || die "Failure closing temp config file $filename: $!"; return $filename; } sub _expandaliasesforswisheconf { my ($self, $name) = @_; (my $swishname = $name) =~ s/ALIASES//; # strip off ALIASES $swishname = lc($swishname); $swishname = "swishtitle" if (lc($swishname) eq "title"); # patchup. # our config calls the title prop 'title', to Swish-e its swishtitle. # we did this because swishtitle is Swish-e's default 'title' meta & prop my $val = $self->{config}->GetConfigData($name); if ($val) { return "MetaNameAlias $swishname $val\n" . "PropertyNameAlias $swishname $val\n"; } return ""; } # this is handled here, so user DOESN'T delete the file themself # doesn't get invoked on a CNTRL-C apparently sub DESTROY { my $self = shift; for (@ {$self->{tempfilestounlink}} ) { (-e $_) && (-f $_) && unlink($_) || warn "Couldn't unlink $_: $!"; } } 1; =head1 NAME Sman::Swishe - Sman backend to build an sman index with Swish-e =head1 SYNOPSIS # Sman::Swishe needs an Sman::Config object to build a # Swish-e config file from. my $smanconfig = new Sman::Config(); $smanconfig->ReadDefaultConfigFile(); # now, get Sman::Swishe to write a config file for Swish-e my $smanswishe = new Sman::Swishe($smanconfig); $swisheconfigfile = $smanswishe->WriteConfigFile(); # use the swisheconfigfile to build an index with # (see sman-update), then delete the config file most likely. =head1 DESCRIPTION This module creates a custom config file for Swish-e to build the sman index with. =head1 AUTHOR Josh Rabinowitz =head1 SEE ALSO L =cut