6 my($grid_Y_size)=225; # xfig
7 my($grid_X_size)=225; # xfig
14 open INPUT, $filename;
16 while (defined($line=<INPUT>)) {
19 my($event,$date,$id,$type,$father,@name) = split(/\s+/,$line);
21 $Cat{$id}{name}="@name ";
22 $Cat{$id}{name}=~s/\"//g;
23 $Cat{$id}{father}=$father;
24 $Cat{$id}{type}=$type;
25 $Cat{$id}{date}=$date;
34 my($filename,$Cat)=@_;
37 open INPUT, $filename;
39 while (defined($line=<INPUT>)) {
41 if($line =~ /^11\s/) {
42 my($event,$date,$type,$id,$state) = split(/\s+/,$line);
43 push @{$$Cat{$id}{state}}, [$date,$state];
45 if($line =~ /^12\s/) {
46 my($event,$date,$type,$id) = split(/\s+/,$line);
47 push @{$$Cat{$id}{state}}, [$date];
59 foreach $cat (keys %$Cat) {
60 if($$Cat{$cat}{father} eq $root) {
61 push @childs, build_cat_tree($cat,$Cat);
63 # print "$$Cat{$cat}{name}\t\t $Cat{$cat}{father}\n";
66 return [$root,@childs];
70 my($tree,$cat_list)=@_;
71 my($root) = shift @$tree;
74 push @$cat_list,$root;
77 build_cat_list($u,$cat_list);
79 unshift @$tree, $root;
83 sub set_cat_position {
84 my($Cat,$cat_list)=@_;
87 foreach $cat (@$cat_list) {
88 $$Cat{$cat}{Y_min} = $i;
89 $$Cat{$cat}{Y_max} = $i+1;
97 $fig->{object} = 'compound'; # Compound
98 $fig->{elements} = [];
99 $fig->{version} = 3.2;
100 $fig->{orientation} = 'Landscape';
101 $fig->{justification} = 'Center';
102 $fig->{units} = 'Metric';
103 $fig->{papersize} = 'A4';
104 $fig->{magnification} = '100.00';
105 $fig->{multiplepage} = 'Single';
106 $fig->{transparent} = '-2';
107 $fig->{resolution} = '1200';
108 $fig->{coordsystem} = '2';
109 $fig->{filename} = $filename;
116 foreach $cat (keys %$Cat) {
117 next unless (defined($$Cat{$cat}{Y_min}) &&
118 defined($$Cat{$cat}{Y_max}));
119 my($text) = new XFig ('text');
120 $text->{'text'} = $cat;
121 $text->{'y'} = ($$Cat{$cat}{Y_min}+$$Cat{$cat}{Y_max})/2*$grid_Y_size+68;
124 foreach $cat (keys %$Cat) {
125 next unless (defined($$Cat{$cat}{Y_min}) &&
126 defined($$Cat{$cat}{Y_max}));
129 foreach $e (@{$$Cat{$cat}{state}}) {
130 my($new_date,$state) = ($$e[0],$$e[1]);
131 if(defined($state)) {
134 my($old_event) = pop @states;
135 my($old_date) = $$old_event[0];
136 $state = $$old_event[1];
138 my($line) = new XFig ('polyline');
140 $line->{'subtype'} = 1; # line
141 $line->{'points'} = [ [$old_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size],
142 [$new_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size],
143 [$new_date*$grid_X_size, $$Cat{$cat}{Y_max}*$grid_Y_size],
144 [$old_date*$grid_X_size, $$Cat{$cat}{Y_max}*$grid_Y_size] ];
145 $line->{'areafill'} = 20;
147 $line->{'fillcolor'} = 1;
148 } elsif ($state eq "E") {
149 $line->{'fillcolor'} = 2;
150 } elsif ($state eq "B") {
151 $line->{'fillcolor'} = 3;
152 } elsif ($state eq "C") {
153 $line->{'fillcolor'} = 4;
162 my($Cat) = read_cat($ARGV[0]);
163 my($cat_tree)=build_cat_tree("0",$Cat);
164 read_event($ARGV[0],$Cat);
165 # print Dumper($cat_tree);
166 # print Dumper($Cat);
168 build_cat_list($cat_tree,$cat_list);
171 print "@$cat_list \n";
173 set_cat_position($Cat,$cat_list);
175 my($fig)=create_fig("toto.fig");
178 system "fig2dev -L pdf toto.fig toto.pdf";