[Git]Ignore work files.
[synaesthesia.git] / convert.pl
blobe51316fd1050de14c53d0dbbc9a37f095a693490
1 #Utility to convert from xfig to C
3 # 1. In xfig, export as metafont (hey, it works, don't knock it)
4 # 2. Run perl <icons.mf >icons.h
7 $max = 0.0;
8 $min = 1000000000000.0;
9 $list = [];
11 $minY = 100000000000000.0;
12 $maxY = 0.0;
14 while($_ = <STDIN>) {
15 if (/\(([0-9.]*), ([0-9.]*)\)/) {
16 @{$list} = (@{$list}, [$1,$2]);
17 if ($1 < $min) { $min = $1 }
18 if ($1 > $max) { $max = $1 }
19 if ($2 < $minY) { $minY = $2 }
20 if ($2 > $maxY) { $maxY = $2 }
22 elsif (@{$list}) {
23 @all = (@all, [$min, $max, $list]);
24 $list = [];
25 $max = 0.0;
26 $min = 1000000000000.0;
30 $scale = 1.0 / ($maxY - $minY);
32 @all = sort { $a->[0] <=> $b->[0] } @all;
34 @all = (@all, [1e10,1e10,[]]);
36 $offset = 1000000.0;
37 $lastEnd = -100.0;
38 @lines = ();
39 @widths = ();
40 $numIcon = 0;
41 foreach $i (@all) {
42 if ($i->[0] > $lastEnd and @lines) {
43 print "double Icon".$numIcon."[][4] = {\n";
44 $numIcon++;
46 #$offset = $i->[0];
48 foreach $line (@lines) {
49 $count = 0;
50 $xx = ($line->[0]+$line->[2]) / 2.0;
51 $yy = ($line->[1]+$line->[3]) / 2.0;
52 foreach $line2 (@lines) {
53 if ($line != $line2 and
54 $line2->[1] <= $yy and
55 $line2->[3] > $yy) {
56 $x =
57 $line2->[0] +
58 ($line2->[2]-$line2->[0])/($line2->[3]-$line2->[1])
59 * ($yy - $line2->[1]);
60 if ($x < $xx) {
61 $count ++;
65 #print $count;
66 if ($count%2 != 0) {
67 print " {".
68 ($line->[0])*$scale .",".
69 (1.0-($line->[1]-$minY)*$scale) .",".
70 ($line->[2])*$scale .",".
71 (1.0-($line->[3]-$minY)*$scale) ."},\n";
72 } else {
73 print " {".
74 ($line->[2])*$scale .",".
75 (1.0-($line->[3]-$minY)*$scale) .",".
76 ($line->[0])*$scale .",".
77 (1.0-($line->[1]-$minY)*$scale) ."},\n";
81 print " {0,0,0,0}\n};\n\n";
83 @lines = ();
85 @widths = (@widths, ($lastEnd-$offset)*$scale);
86 $offset = 1000000000.0;
89 if ($lastEnd < $i->[1]) {
90 $lastEnd = $i->[1];
92 if ($offset > $i->[0]) {
93 $offset = $i->[0];
96 for($j=1;$j<(@{$i->[2]});$j++) {
97 $list = [$i->[2]->[$j-1]->[0] - $offset , $i->[2]->[$j-1]->[1] ,
98 $i->[2]->[$j]->[0] - $offset , $i->[2]->[$j]->[1]];
99 if ($list->[1] > $list->[3]) {
100 $list = [$list->[2],$list->[3],$list->[0],$list->[1]];
102 #print join(",",@{$list}) . "\n";
103 if ($list->[1] != $list->[3]) {
104 @lines = (@lines, $list);
109 print "typedef double LineType[4];\n";
110 print "typedef LineType *IconType;\n";
111 print "IconType Icons[] = {\n";
112 for($i = 0;$i < $numIcon;$i++) {
113 print " Icon$i,\n";
115 print "};\n\n";
117 print "double IconWidths[] = {\n";
118 foreach $i (@widths) { print " $i,\n"; }
119 print "};\n";