OurNet-Site
view release on metacpan or search on metacpan
$file = "$_[0].xml";
}
elsif (-e "$_[0].fmt") {
$file = "$_[0].fmt";
}
elsif (-e "$_[0].tt2") {
$file = "$_[0].tt2";
}
else {
foreach my $inc (@INC) {
last if -e ($file = $inc . PATH_SITE . $_[0]);
last if -e ($file = $inc . PATH_SITE . "$_[0].xml");
last if -e ($file = $inc . PATH_SITE . "$_[0].fmt");
last if -e ($file = $inc . PATH_SITE . "$_[0].tt2");
}
};
}
die(ERROR_FILE_NEEDED . $file) if !(-e $file);
$self->parse($file);
$self->{tempdata} = '';
return $self;
}
# ---------------------------------------
# Subroutine geturl($self, $query, $hits)
# ---------------------------------------
sub geturl {
my $self = shift;
my $url = $self->{url}{start};
$url =~ s|_QUERY_|$_[0]|g;
$url =~ s|_HITS_|$_[1]|g;
$url =~ s|\${ query }|$_[0]|g;
$url =~ s|\${ hits }|$_[1]|g;
return $url;
}
# ------------------------------
# Subroutine parse($self, $file)
# ------------------------------
sub parse {
my $self = shift;
open(local *SITEFILE, $_[0]);
if ($_[0] =~ m|\.tt2$|i) {
local $/;
my $content = <SITEFILE>;
require OurNet::Template;
$self->{tmplobj} = OurNet::Template->new();
$self->{tmplobj}->extract($content, undef, $self);
}
elsif ($_[0] =~ m|\.xml$|i) {
local $/;
my $content = <SITEFILE>;
my $xml_cdata_re = '(<!\[CDATA\[)?\015?\012?(.*?)\015?\012?(]]>)?';
$self->{id} = $1 if $content =~ m|<site id="(.*?)">|i;
foreach my $tag ('charset', 'score', 'expression', 'template', 'proc') {
$self->{$tag} = $2 if $content =~ m|<$tag>$xml_cdata_re</$tag>|is;
}
foreach my $tag ('url', 'var', 'name', 'info') {
$self->{$tag}{lc($1)} = $3 while
$content =~ s|<$tag \w+="(.*?)">$xml_cdata_re</$tag>||is;
}
if ($content =~ m|<category>(.*?)</category>|i) {
$self->{category} = [ split(',', $1) ];
}
}
elsif ($_[0] =~ m|(?:.*[/\\])?(.*?)(?:\.fmt)?$|i) {
$self->{id} = $1;
chomp($self->{name}{'en-us'} = <SITEFILE>);
if ($self->{name}{'en-us'} =~ s|\((.+)\)||) {
$self->{info}{'en-us'} = $1;
}
chomp($self->{url}{start} = <SITEFILE>);
if ($self->{url}{start} =~ m|_START_\d+_\d+_|) {
$self->{url}{more} = $self->{url}{start};
$self->{url}{start} =~ s|_START_\d+_(\d+)_|$1|;
}
while (chomp($_ = <SITEFILE>)) {
(m|^---|) ? do {
last;
} :
(m|^\w+://|) ? do {
$self->{url}{backup} = $_;
} :
(m|^MORE\t(.+)|) ? do {
$self->{url}{more} = $1;
} :
(m|^PROC\t(.+)|) ? do {
$self->{proc} = $1;
} :
(m|^VAR\t(.+)|) ? do {
$self->{var}{$1} = <SITEFILE> . $1 . <SITEFILE>;
$self->{var}{$1} =~ s|[\t\015\012]||g;
} :
(m|^SCORE\t(.+)|) ? do {
$self->{score} = $1;
$self->{score} =~ s|\bx\b|_SCORE_|ig;
$self->{score} =~ s|\by\b|_RANK_|ig;
} :
(m|^CHARSET\t(.+)|) ? do {
$self->{charset} = CHARSET_MAP->{uc($1)};
} :
(m|^CHT\t(.+)|) ? do {
$self->{name}{'zh-tw'} = $1;
$self->{info}{'zh-tw'} = $self->{info}{'en-us'};
} :
(m|^CHS\t(.+)|) ? do {
$self->{name}{'zh-cn'} = $1;
$self->{info}{'zh-cn'} = $self->{info}{'en-us'};
} :
(m|^EXPR\t(.+)|) ? do {
$self->{expression} = $1;
} :
(m|^TYPE\t(.+)|) ? do {
$self->{category} = $1;
} : undef;
}
( run in 1.538 second using v1.01-cache-2.11-cpan-39bf76dae61 )