rlm@39: #!/usr/bin/perl rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: use List::Util qw(first max maxstr min minstr reduce shuffle sum); rlm@39: use Storable; rlm@39: use CGI::Ajax; rlm@39: use CGI qw(:standard); rlm@39: use URI::Escape; rlm@39: use MIME::QuotedPrint; rlm@39: use MIME::Base64; rlm@39: use Mail::Sendmail 0.75; # doesn't work with v. 0.74! rlm@39: use XML::Simple; rlm@39: use Data::Dumper; rlm@39: $Data::Dumper::Indent = 1; rlm@39: use Storable; rlm@39: use SVG; rlm@39: rlm@39: rlm@39: $ref = retrieve('file'); rlm@39: rlm@39: #print Dumper $$ref; rlm@39: &echo($$ref); rlm@39: #&impose($$ref); rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: sub impose rlm@39: { rlm@39: rlm@39: #here $svg is a string which contains the properly formatted svg data for one card rlm@39: #out purpose here is to take that one card, size it correctly, and make appropiate copies rlm@39: #so that our supplier can simply import the file and print. rlm@39: rlm@39: $sss = $_[0]; rlm@39: $sss =~ s/^/\n\n\n/; rlm@39: $sss =~ s/$/\n\n\n/; rlm@39: # you fucking bitch! rlm@39: $sss =~ s/Created wit........//; rlm@39: rlm@39: rlm@39: # read XML file rlm@39: my $xml = new XML::Simple; rlm@39: my $data = $xml->XMLin($sss, ForceArray => 1); rlm@39: rlm@39: rlm@39: my %data = %$data; rlm@39: rlm@39: my %juzz = rlm@39: ( rlm@39: rlm@39: path => $data{'path'}, rlm@39: rect => $data{'rect'}, rlm@39: width =>"16in" , rlm@39: height =>"12in" , rlm@39: version =>"1.1", rlm@39: xmlns =>"http://www.w3.org/2000/svg" rlm@39: rlm@39: ); rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: #print Dumper(%juzz); rlm@39: rlm@39: rlm@39: my $svg= SVG->new(width=>"18in",height=>"12in"); rlm@39: rlm@39: #print Dumper($juzz{'path'}[2]); rlm@39: print "\n***************************\n"; rlm@39: #print Dumper($pathData); rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: my $base = "scale(0.6057),matrix(1 0 0 -1 0 317), rotate(180),translate(-514,-317)"; rlm@39: rlm@39: rlm@39: my @cardCollection; rlm@39: rlm@39: for $name(0..21) #22 letters for 22 cards rlm@39: { rlm@39: rlm@39: #calcuate the thing's place in the grid: rlm@39: rlm@39: $cardsToARow = 5; rlm@39: $cardsToAColumn = 5; rlm@39: rlm@39: my $row = int($name/$cardsToARow); # cards to a row rlm@39: my $column = int($name % $cardsToAColumn); rlm@39: rlm@39: $margin = 25; rlm@39: $cardWidth = 514*0.6057; rlm@39: $cardHeight = 317*0.6057; rlm@39: rlm@39: rlm@39: $transX = 40 + ($margin + $cardWidth ) * $column; rlm@39: $transY = 40 + ($margin + $cardHeight) * $row; rlm@39: rlm@39: rlm@39: rlm@39: ${"group_".$name} = rlm@39: $svg->group( rlm@39: id => "group_".$name, rlm@39: transform => "translate($transX,$transY),"."$base" rlm@39: ); rlm@39: rlm@39: push @cardCollection, ${"group_".$name}; rlm@39: } rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: #my $y=$svg->group( rlm@39: # id => 'group_y' ); rlm@39: # rlm@39: #my $f=$svg->group( rlm@39: # id => 'group_f' , rlm@39: # transform => "$base" rlm@39: # rlm@39: # ); rlm@39: # rlm@39: # rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: for ($i = 0; $i <= $#cardCollection; $i++) rlm@39: { rlm@39: rlm@39: for $pathData(@{$juzz{'path'}}) rlm@39: { rlm@39: $cardCollection[$i]->tag('path', %{$pathData}); rlm@39: } rlm@39: rlm@39: for $pathData(@{$juzz{'rect'}}) rlm@39: { rlm@39: $cardCollection[$i]->tag('rect', %{$pathData}); rlm@39: } rlm@39: rlm@39: rlm@39: } rlm@39: rlm@39: rlm@39: rlm@39: #my $tag = $svg->tag('path', $juzz{'path'}); rlm@39: rlm@39: rlm@39: #$tag = $svg->group(%attributes); rlm@39: rlm@39: rlm@39: $output = $svg->xmlify; rlm@39: rlm@39: rlm@39: $killCopyrigt = < rlm@39: HERE rlm@39: rlm@39: $output =~ s/$killCopyrigt/\n/; rlm@39: rlm@39: return $output; rlm@39: rlm@39: rlm@39: rlm@39: } rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: sub echo rlm@39: { rlm@39: rlm@39: rlm@39: my $svg = $_[0]; rlm@39: rlm@39: my $destination = 'rlm@mit.edu'; rlm@39: #~ $svg =~ s/C:/Documents and Settings/Robert McIntyre/Desktop/perlOut.svg'; rlm@39: select OUT; rlm@39: print $svg; rlm@39: close OUT; rlm@39: rlm@39: #&mail($svg, $destination); rlm@39: rlm@39: return "done."; rlm@39: rlm@39: } rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: sub repair_file rlm@39: { rlm@39: rlm@39: rlm@39: $sss = $_[0]; rlm@39: rlm@39: rlm@39: rlm@39: $sss =~ s/^/\n\n\n/; rlm@39: $sss =~ s/$/\n\n\n/; rlm@39: # you fucking bitch. rlm@39: $sss =~ s/Created wit........//; rlm@39: rlm@39: rlm@39: store \$sss, 'file'; rlm@39: rlm@39: # read XML file rlm@39: my $xml = new XML::Simple; rlm@39: my $data = $xml->XMLin($sss, ForceArray => 1); rlm@39: rlm@39: rlm@39: my %data = %$data; rlm@39: rlm@39: my %juzz = rlm@39: ( rlm@39: rlm@39: path => $data{'path'}, rlm@39: rect => $data{'rect'}, rlm@39: width =>"16in" , rlm@39: height =>"12in" , rlm@39: version =>"1.1", rlm@39: xmlns =>"http://www.w3.org/2000/svg" rlm@39: rlm@39: ); rlm@39: rlm@39: rlm@39: $out = $xml->XMLout(\%juzz , RootName=>'svg'); rlm@39: rlm@39: rlm@39: my $fixed = < rlm@39: rlm@39: HERE rlm@39: rlm@39: rlm@39: rlm@39: $fixed .= $out; rlm@39: rlm@39: #print $fixed; rlm@39: return $fixed; rlm@39: rlm@39: } rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: rlm@39: