#!/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!: ")).""; } $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__