#!/usr/bin/perl
BEGIN{ $ENV{'PATH'} = "/usr/bin:/bin:/usr/local/bin:/home/jj/bin";
$ENV{'LC_CTYPE'} = 'pt_PT';}
use locale;
use lib "/home/jj/lib/perl5/site_perl";
use ddmf;
use CGI qw(:all :cgi-lib);
# use jspell;
use Data::Dumper;
my $PRO='/home/jj/svn/minicorpora/proverbios/proverbio';
my $PIR='/home/jj/svn/main/dpl/example/piropos';
my $filename='/home/jj/svn/main/dpl/example/calao.dic';
my $d1 = mkdbddmf($filename,{lang=>"pt"});
my $d4 = mkmttab($PIR,{sep=>":",lang=>"pt"},
"name","isa","local");
my $d2 = mkmttab($PRO,{sep=>":",lang=>"pt"},
"name","isa","local","inf","from");
my $d3 = new ddmf::comparsetff([ $d1 , $d2, $d4]) ,
$N= "\n";
# my $aux = $d3->consulta("_meta");
# $pream = $aux->{"_meta"};
$pream = $d1->{h}{"!meta"};
# my $paux = Dumper($pream);
print
header(-charset => 'UTF-8'), $N,
start_html(-title=>$pream->{"title"},
-author=>$pream->{author}{email},
-meta=>{'keywords'=>'dicionários'.$pream->{keywords},
'copyright'=>$pream->{copyright}},
-BGCOLOR=>'white');
# print $paux;
print body2(font({size=>"+2"},(strong($pream->{"title"}), (param)? '...['. param('k') . "]" : ""))),$N;
if(param('todo')){
procquery ( n(param('k'))); }
elsif(param('k')){
param('todo','procurar');
procquery ( n(param('k'))); }
else{ mkformcon();}
$pream->{'introduction'}=~ s/\+daci!(.*?)!(.*?)!/a({href=>url."?k=$2"},$1)/ge;
$pream->{'introduction'}=~ s/\\section\*?\{(.*?)\}/p(b($1))/ge;
my $src= "";
if (!param()){
if ($pream->{starting}){
$src.= $pream->{'starting'}
}
if ($pream->{volunteer}){
$src.= p(b("Pedido de ajuda!: "))."
";
my $vol=$pream->{volunteer};
for( ref($vol) ? (@$vol) : ($vol)){
s/\+daci!(.*?)!(.*?)!/a({href=>url."?k=$2"},$1)/ge;
$src.= li("$_");
}
$src.= "
";
}
$src.= p(b("Introdução: ")).
$pream->{'introduction'}.
a({href=>url()."?todo=inserirf"},q{Sempre que se lembrar
de uma expressão idiomática, de um termo calão}).
q{ (por mais carroceiro que seja!) que não encontre aqui...,};
$src.= p(b("Fontes: "),
ul( map {li(a({href=> $_},$_))} @{$pream->{sources}}))
if $pream->{sources};
$src.= p(b("Documentação variada: "),
ul( map {li(a({href=> $_->{url}},$_->{name}))} @{$pream->{doc}}))
if defined $pream->{doc};
}
print hr, $N,
$src,
end_html,$N;
sub procquery {
my $a=shift;
$ll=();
if(param('todo') eq "procurar" and $a){
$ll= $d3->consulta($a);
show(); }
elsif(param('todo') eq "cancelar") {
mkformcon(); }
elsif(param('todo') eq "inserirf") {
mkformin(); }
elsif(param('todo') eq "inserir") {
param('todo','procurar');
mkformcon();
lognewterm(); }
else {
mkformcon();}
}
sub show {
if (%$ll) {
logit( "+");
mkformcon();
for $term (keys %$ll){
chomp $term;
print p, body2(strong($term)),$N;
$elem = $ll->{$term} ;
if(ref($elem) eq "ARRAY"){
for (@$elem){ print body1( font({size=>"-1"},htmlstr($_))),"\n" ; } }
else{
print body1( font({size=>"-1"},htmlstr($elem))),"\n" ; }
} }
else{
logit("-");
print h3("Caramba essa não conheço...Dê-me uma ajuda...");
mkformin();
}
}
sub body1{table( {
style=>q{ background :#EEEEEE;
color: #000000;
margin: 0;
padding-left: 6px;
margin-bottom:3px;
},
WIDTH => "99%",
}, Tr(td( @_ ))) ;
}
sub body2{table( {
style=>q{ background : orange;
color: white;
margin: 0;
padding-left: 6px;
},
WIDTH => "99%",
}, Tr(td( @_ ))) ;
}
sub logit{my $a=shift;
my @t= gmtime(time);
open(LOG,">> $filename.log") or warn "can open log file\n";
print LOG "${\($t[4]+1)}/$t[3] - $a",param('k'),qq{ - $ENV{"REMOTE_HOST"} \n};
close LOG;
}
sub lognewterm{
my $x;
my @t= gmtime(time);
my $par = Vars();
open(LOG,">> $filename.newterms") or die "can open log file\n";
print LOG "\n## ${\($t[4]+1)}/$t[3] - $ENV{'REMOTE_HOST'} ($par->{'from:nome'}<$par->{'from:email'}>)";
print LOG ("\n$par->{k}") if $par->{k};
print LOG (" < $par->{':isa'}") if $par->{':isa'};
print LOG ("\n +\"$par->{'ex:frase'}\"") if $par->{'ex:frase'};
print LOG ("=$par->{'ex:paraf'}") if $par->{'ex:paraf'};
print LOG ("\n ++l($par->{':local'})") if $par->{':local'};
print LOG ("\n + {nivel = $par->{':nivel'}}") if $par->{':nivel'};
for (split(/\s*,\s*/,$par->{':syn'})){
print LOG ("\n | $_ ") if $par->{':syn'};}
print LOG ("\n : $par->{':semantica'};\n") if $par->{':semantica'};
# for (param){
# next if $_ eq "todo";
# ($x = $_) =~ s/^://;
# print LOG " $x = ",param($_), ";\n" if param($_) ;}
close LOG;
}
sub n{my $a=shift;
$a =~ s/^\s*//;
$a =~ s/\s*$//;
# $a =~ s/ /;/g ;
$a;
}
sub trans{ my ($todo,$arg)=@_; $arg=~s/ +/+/g;
sprintf('%s?todo=%s&k=%s',url(),$todo,$arg);}
sub mkformin{
param('todo','inserir');
print start_form('POST',url),
body1(font({SIZE=>"-1"},
mkform( [{k => strong("Inserir")},
@{$pream->{skell}}]),
submit('todo','inserir'),
submit('todo','cancelar'))),
end_form,$N;
}
sub mkform{
my ($a,$b) = @_;
table(mkform1($a,$b))
}
sub mkform1{
my ($a,$b) = @_;
if(ref($a) eq "ARRAY" and ref($a->[0]) eq "HASH"){
return join("\n", map { mkform1($_,$b) } @{$a})
}
else{
my %x = %$a;
my $dd ;
return join("\n",
map { $dd = $x{$_};
if (ref($dd) eq "HASH") {mkform1($dd,$_);}
elsif(ref($dd) eq "ARRAY" and
ref($dd->[0]) eq "HASH"){mkform1($dd,$_)}
elsif(ref($dd) eq "ARRAY"){ Tr(td(["$b $_ " , popup_menu("$b:$_", $dd)])); }
elsif($b eq "" && $_ eq "k") { Tr(td(["$b $dd ", textfield(-size=> 45, ##FIXME
-name=> "$_")]));}
else { Tr(td(["$b $dd ", textfield(-size=> 45,
-name=> "$b:$_")]));}
} (keys %x) )
}
}
sub mkformcon{
$op=["procurar","inserirf"];
print
start_form('POST',url),$N,p,
textfield('k'),$N, popup_menu('todo', $op),$N, submit,
end_form,$N ;
}
sub tipo {
$tag=shift;
if ($tag eq "syn") {"term"}
elsif ($tag eq "url") {"url"}
else {"none"}
}
sub htmlstr {
my $a = shift;
my $l = shift || "none";
if (!ref($a) and $l eq "none") { "$a\n"; }
elsif (!ref($a) and $l eq "term") {
my $b= $a;
$a =~s/!//g;
$a =~s/[ ,()*]+/+/g;
a({href=>url."?k=$a"},"$b"). "\n"; }
elsif (!ref($a) and $l eq "url") {a({href=>$a},"$a"). "\n"; }
elsif (ref($a) eq "ARRAY" and @$a) {
ol( li([map { htmlstr($_,$l)} @$a] )) ; }
elsif (ref($a) eq "ARRAY") { "" }
elsif (ref($a) eq "HASH" and %$a ) {
"\n" .
join("\t",map { dt(b($_),"--\n",
htmlstr($a->{$_},tipo($_)))} keys %$a ).
"
";
}
elsif (ref($a) eq "HASH") {
a({href => trans('inserirf',$term)}, '... acrescentar informação');
}
else { "$a ?? \n"; }
}
exit 0;
__END__