--- m/menu.pl 2001/06/28 10:55:30 1.1 +++ m/menu.pl 2001/11/07 12:09:58 1.8 @@ -4,39 +4,78 @@ use DBI; use Image::Magick; -use constant TYPE_NONE => scalar 0; -use constant TYPE_BULLET => scalar 1; -use constant TYPE_LINE => scalar 2; +use constant TYPE_NONE => scalar 2; +use constant TYPE_BULLET => scalar 3; +use constant TYPE_LINE => scalar 1; +use constant TYPE_BLUEDOT => scalar 4; + +# size of menu image +my $w=125; +my $h_base=13; +my $h; + +my $dir="/data/pliva-si/m"; + +my %iso2utf_tab = ( +'¹' => 0x0161, 'ð' => 0x0111, 'è' => 0x010d, 'æ' => 0x0107, '¾' => 0x017e, +'©' => 0x0160, 'Ð' => 0x0110, 'È' => 0x010c, 'Æ' => 0x0106, '®' => 0x017d +); + +sub iso2utf { + local($_)=@_; + + sub utf8 { + local($_)=@_; + return $_ < 0x80 ? chr($_) : + $_ < 0x800 ? chr($_>>6&0x3F|0xC0) . chr($_&0x3F|0x80) : + chr($_>>12&0x0F|0xE0).chr($_>>6&0x3F|0x80).chr($_&0x3F|0x80); + } + s/([¹ðè澩ÐÈÆ®])/utf8($iso2utf_tab{$1})/ge; + return $_; +} sub dump_gif { my ($text, $type, $file) = @_; $type ||= TYPE_NONE; - $file ||= $text; + $file ||= "$text-$type"; $file =~ s/[^a-zA-Z0-9\-]/_/g; + $file = lc($file); print "$text" unless ($file eq "-"); + my $tmp=$text; + my $nl=1; + $tmp =~ s/\\n/$nl++/gie; + $h=$h_base*$nl; my $image = Image::Magick->new; - $image->Set('size' => '125x13'); + $image->Set('size' => "${w}x${h}"); $image->Read('xc:#283880'); + $text=~tr/šðžèæŠÐŽÈÆ/¹ð¾èæ©Ð®ÈÆ/; # 1250 -> iso8859-2 + $text=iso2utf($text); if ($type == TYPE_BULLET) { - $image->Annotate('text' => $text, 'geometry' => '+17+1', - 'font' => "\@arialbd.ttf", 'pointsize' => 11, - 'pen' => '#FFFFFF', 'align' => 'left'); - $image->Blur('radius' => 1); + $image->Annotate('text' => $text, 'geometry' => '+17+10', + 'font' => "\@$dir/arialbd.ttf", 'pointsize' => 11, + 'fill' => '#ffffff', 'align' => 'left'); +# $image->Annotate('text' => $text, 'geometry' => '+17+1', +# 'font' => "\@$dir/arialbd.ttf", 'pointsize' => 11, +# 'pen' => '#FFFFFF', 'align' => 'left'); +# $image->Blur('radius' => 0.1); $image->Draw('primitive' => 'rectangle', 'stroke' => '#00D000', 'fill' => '#00D000', 'antialias' => 1, 'points' => '7,4 10,7'); + } elsif ($type == TYPE_BLUEDOT) { + $image->Annotate('text' => $text, 'geometry' => '+17+10', + 'font' => "\@$dir/arialbd.ttf", 'pointsize' => 11, + 'fill' => '#ffffff', 'align' => 'left'); + $image->Draw('primitive' => 'rectangle', 'stroke' => '#00b2dc', + 'fill' => '#00b2dc', 'antialias' => 1, 'points' => + '7,4 10,7'); } else { - $image->Annotate('text' => $text, 'geometry' => '+3+0', - 'font' => "\@arialbd.ttf", 'pointsize' => 11, - 'pen' => '#FFFFFF', 'align' => 'left'); - $image->Blur('radius' => 1); if ($type == TYPE_LINE) { $image->Draw('primitive' => 'line', 'stroke' => '#00FF00', 'fill' => '#00FF00', - 'antialias' => 1, 'points' => '1,11 63,11'); + 'antialias' => 1, 'points' => '1,'.($h-2).' 63,'.($h-2)); my ($br, $bg, $bb) = (0x00, 0xFF, 0x00); my ($er, $eg, $eb) = (0x28, 0x38, 0x80); - my $range = 125 - 64; + my $range = $w - 64; for (my $i = 0; $i < $range; $i++) { my $j = $i + 64; my $color = sprintf("#%02X%02X%02X", @@ -46,43 +85,39 @@ ); $image->Draw('primitive' => 'point', 'stroke' => $color, + 'fill' => $color, 'antialias' => 1, - 'points' => "$j,11"); + 'points' => "$j,".($h-2)); } } + $image->Annotate('text' => $text, 'geometry' => '+3+10', + 'font' => "\@$dir/arialbd.ttf", 'pointsize' => 11, + 'fill' => '#FFFFFF', 'align' => 'left'); +# $image->Blur('radius' => 1); } - # $image->Resize('geometry' => '125x15', - # 'filter' => 'Lanczos', 'blur' => '1.8'); - #$image->Scale('geometry' => '50%'); - # $image->Draw('stroke' => '#CCCCCC', 'primitive' => 'line', - # 'points' => '0,14 118,14', 'linewidth' => 1); - # $image->Draw('stroke' => '#cccccc', 'primitive' => 'line', - # 'points' => '118,14 118,7', 'linewidth' => 2); print " -> " unless ($file eq "-"); $file .= ".gif" unless ($file eq "-"); - $image->Write('filename' => "gif:$file", 'colors' => 256, + $image->Write('filename' => "gif:$dir/$file", 'colors' => 256, 'interlace' => "none", 'compress' => 'lzw'); print "$file\n" unless ($file eq "-"); return "$file"; } -print "Content-Type: image/gif\n\n"; -dump_gif("NOVOSTI", TYPE_LINE, "-"); -exit $?; +#print "Content-Type: image/gif\n\n"; +#dump_gif("NOVOSTI", TYPE_LINE, "-"); +#exit $?; -my $dbh = DBI->connect("DBI:Pg:dbname=corp", "", "") || +# +my $dbh = DBI->connect("DBI:Pg:dbname=plivasi", "dpavlin", "") || die $DBI::errstr; -my $sth = $dbh->prepare("SELECT section,item,url FROM menu") || +my $sth = $dbh->prepare("SELECT section,item,url,level,num FROM menu") || die $dbh->errstr(); $sth->execute() || die $sth->errstr(); while (my @arr = $sth->fetchrow_array()) { - if (0) { - dump_gif($arr[1], TYPE_BULLET); - } else { - $dbh->do("UPDATE menu SET file='".dump_gif($arr[1], TYPE_BULLET). - "' WHERE item='$arr[1]'"); - } + my $sql="UPDATE menu SET file='".dump_gif($arr[1], $arr[3])."',w=$w,h=$h WHERE num=$arr[4]"; + $dbh->do($sql); } $sth->finish; $dbh->disconnect; exit $?; +