00001 package MapSearch;
00002 use strict;
00003 require Exporter;
00004 use base qw(XML::SAX::Base);
00005 use XML::Parser;
00006 use Data::Dumper;
00007
00008 our @ISA = qw(Exporter);
00009 our @EXPORT = qw(doSearch AddDescSearch AddURLSearch AddAniSearch);
00010 our $VERSION = 0.1;
00011
00012 my @descsearches;
00013 my @urlsearches;
00014 my @anisearches;
00015 my $searchresults;
00016
00017 sub doSearch {
00018
00019 my $parser = new XML::Parser( Style => 'Stream' );
00020 open(XML, 'maps.xml') or die "cannot open file";
00021 $parser->parse(*XML);
00022 close(XML);
00023 return $searchresults;
00024 }
00025
00026 sub StartDocument {
00027 my $expat = shift;
00028 $expat->{finish} = 0;
00029 $searchresults = [];
00030 }
00031
00032 sub StartTag {
00033 my ($expat, $name, %atts) = @_;
00034 if ($name eq 'entry') {
00035 $expat->{CurrEntry} = {};
00036 $expat->{MatchFound} = 0;
00037 } elsif ($name eq 'animated') {
00038 $expat->{CurrEntry}->{images} = [];
00039 }
00040 }
00041
00042 sub Text {
00043
00044 my $expat = shift;
00045 my $text = $expat->{Text};
00046 my $search;
00047 if ($expat->in_element('description')) {
00048 $expat->{CurrEntry}->{description} = $text;
00049 if (!$expat->{MatchFound}) {
00050 foreach $search (@descsearches) {
00051 if ($text =~ m/$search/i) {
00052 $expat->{MatchFound} = 1;
00053 return;
00054 }
00055 }
00056 }
00057 }
00058
00059 elsif ($expat->in_element('static_url')) {
00060 $expat->{CurrEntry}->{url} = $text;
00061 if (!$expat->{MatchFound}) {
00062 foreach $search (@urlsearches) {
00063 if ($text =~ m/$search/i) {
00064 $expat->{MatchFound} = 1;
00065 return;
00066 }
00067 }
00068 }
00069 }
00070 elsif ($expat->in_element('image')) {
00071 push @{$expat->{CurrEntry}->{images}}, $text;
00072 } elsif ($expat->in_element('imgsize')) {
00073 $text =~ s/,/x/;
00074 $expat->{CurrEntry}->{imgsize} = $text;
00075 } elsif ($expat->in_element('base_url')) {
00076 $expat->{CurrEntry}->{animation} = $text;
00077 if (!$expat->{MatchFound}) {
00078 foreach $search (@anisearches) {
00079 if ($text =~ m/$search/i) {
00080 $expat->{MatchFound} = 1;
00081 return;
00082 }
00083 }
00084 }
00085 }
00086 }
00087
00088 sub EndTag {
00089 my ($expat, $name) = @_;
00090
00091 if ($name eq 'entry' && $expat->{MatchFound}) {
00092 push (@$searchresults, $expat->{CurrEntry});
00093 if ($expat->{finish}) {
00094 $expat->finish();
00095 return;
00096 }
00097 }
00098
00099 }
00100
00101 sub AddDescSearch {
00102 push (@descsearches, shift);
00103 }
00104 sub AddURLSearch {
00105 push (@urlsearches, shift);
00106 }
00107 sub AddAniSearch {
00108 push (@anisearches, shift);
00109 }
00110 1;