+
+our $name;
+
+sub wrtoplevel () {
+ print "module $name(){ ////toplevel\n";
+ my $cs = $count{$name};
+ my $total = 0; $total += $_ foreach values %$cs;
+ my $rowsz = ceil(sqrt($total));
+ my $nrows = ceil($total / $rowsz);
+ my $ix = 0;
+ print "// total=$total, rowsz=$rowsz, nrows=$nrows\n";
+ foreach my $ndots (sort keys %$cs) {
+ my $c = $cs->{$ndots};
+ print <<END;
+ union(){
+ \$ndots = $ndots;
+END
+ while ($c--) {
+ my $xy = sprintf "[ %5.1f, %5.1f ]",
+ $ix / $nrows - 0.5 * $rowsz,
+ $ix % $nrows - 0.5 * $nrows;
+ print " translate(token_pitch * $xy) Token_L();\n";
+ $ix++;
+ }
+ print <<END;
+ };
+END
+ }
+ print "}\n";
+}
+
+foreach $name (sort keys %count) {
+ wrtoplevel();
+}
+
+STDOUT->error and die $!;