/[webpac]/trunk2/lib/WebPAC/Tree.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk2/lib/WebPAC/Tree.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 459 by dpavlin, Mon Sep 20 19:13:27 2004 UTC revision 460 by dpavlin, Tue Sep 21 20:43:43 2004 UTC
# Line 5  use strict; Line 5  use strict;
5    
6  use Carp;  use Carp;
7  use Log::Log4perl qw(get_logger :levels);  use Log::Log4perl qw(get_logger :levels);
8    use YAML;
9    
10  =head1 NAME  =head1 NAME
11    
# Line 75  Returns code or C<false> if code has to Line 76  Returns code or C<false> if code has to
76    
77  Lookup value which will be called C<$v900> from now on.  Lookup value which will be called C<$v900> from now on.
78    
79   my $v900 = $t->{'lookup_v900'}->($code,$start_code);   my $v900 = $t->{'lookup_v900'}->($code);
80    
81  =item lookup_term  =item lookup_term
82    
# Line 93  Lookup mfn value, used to create hyperli Line 94  Lookup mfn value, used to create hyperli
94    
95  Returns children for next iteration of tree generation or undef.  Returns children for next iteration of tree generation or undef.
96    
97   my $next_lvl = $t->{'have_children'}->($code,$v900,$start_code);   my $next_lvl = $t->{'have_children'}->($code,$v900);
98    
99  =item have_children_at_level  =item have_children_at_level
100    
101  Returns children for next iteration and next level.  Returns children for next iteration and next level.
102    
103   my ($level,$next_lvl) = $t->{'have_children_at_level'}->($code,$v900,$start_code);   my ($level,$next_lvl) = $t->{'have_children_at_level'}->($code,$v900);
104    
105  It's safe to return undef just for next level data (C<$next_lvl> in example  It's safe to return undef just for next level data (C<$next_lvl> in example
106  above) to stop recursion.  above) to stop recursion.
# Line 155  sub new { Line 156  sub new {
156          $self->{'show_ids'} = [];          $self->{'show_ids'} = [];
157          $self->{'hide_ids'} = [];          $self->{'hide_ids'} = [];
158    
159          my $html = $self->unroll(0,'');          my $html = $self->unroll(0,());
160    
161          my $html_file = $self->{'dir'}.'/'.$self->{'html'};          my $html_file = $self->{'dir'}.'/'.$self->{'html'};
162    
# Line 185  sub new { Line 186  sub new {
186    
187  Generate tree recursively.  Generate tree recursively.
188    
189   my $html = $tree->unroll($level,$start_code);   my $html = $tree->unroll($level,$data_arr);
190    
191  =cut  =cut
192    
193  sub unroll {  sub unroll {
194          my $self = shift;          my $self = shift;
195    
196          my ($level,$start_code) = @_;          my ($level,$data_arr) = @_;
197    
198          my $log = $self->_get_logger();          my $log = $self->_get_logger();
199    
# Line 204  sub unroll { Line 205  sub unroll {
205          my $next_level = $level + 1;          my $next_level = $level + 1;
206    
207          $log->logconfess("need level") unless (defined($level));          $log->logconfess("need level") unless (defined($level));
208          $log->logconfess("need start_code") unless (defined($start_code));          #$log->logconfess("need data_arr") unless (defined($data_arr));
209    
210          my $tree = $self->{'tree'};          my $tree = $self->{'tree'};
211    
# Line 213  sub unroll { Line 214  sub unroll {
214          # all levels passed?          # all levels passed?
215          return if (! defined($tree->[$level]));          return if (! defined($tree->[$level]));
216    
217          $log->debug("unroll level $level, start code $start_code");          $log->debug("unroll level $level");
218    
219          my $html;          my $html;
220    
221          foreach my $code ($tree->[$level]->{'code_arr'}->($start_code)) {          foreach my $code ($tree->[$level]->{'code_arr'}->($data_arr)) {
222    
223                  if ($code = $tree->[$level]->{'filter_code'}->($code)) {                  if ($code = $tree->[$level]->{'filter_code'}->($code)) {
224                                    
225                          $log->debug("# $level filter passed code $code");                          $log->debug("# $level filter passed code $code");
226    
227                          my $v900 = $tree->[$level]->{'lookup_v900'}->($code,$start_code) || $log->warn("can't lookup_v900($code,$start_code)");                          my $v900 = $tree->[$level]->{'lookup_v900'}->($code) || $log->warn("can't lookup_v900($code)") && return;
228                          $log->debug("# $level lookup_v900($code,$start_code) = $v900");                          $log->debug("# $level lookup_v900($code) = $v900");
229    
230                          my $term = $tree->[$level]->{'lookup_term'}->($code,$v900) || $log->warn("can't lookup_term($code,$v900)");                          my $term = $tree->[$level]->{'lookup_term'}->($code,$v900) || $log->warn("can't lookup_term($code,$v900)") && return;
231                          $log->debug("# $level lookup_term($code,$v900) = $term");                          $log->debug("# $level lookup_term($code,$v900) = $term");
232    
233                          my $mfn  = $tree->[$level]->{'lookup_mfn'}->($code,$v900)  || $log->warn("can't lookup_mfn($code,$v900)");                          my $mfn  = $tree->[$level]->{'lookup_mfn'}->($code,$v900)  || $log->warn("can't lookup_mfn($code,$v900)") && return;
234                          $log->debug("# $level lookup_mfn($code,$v900) = $mfn");                          $log->debug("# $level lookup_mfn($code,$v900) = $mfn");
235    
236                          $log->debug("$code -> $v900 : $term [$mfn]");                          $log->debug("$code -> $v900 : $term [$mfn]");
237    
238                          my ($link_start,$link_end) = ('','');                          my ($link_start,$link_end) = ('','');
239                    
240                          my $have_children = $tree->[$level]->{'have_children'}->($code,$v900,$start_code);                          my $have_children = $tree->[$level]->{'have_children'}->($code,$v900);
241    
242                          if (! $have_children) {                          if (! $have_children) {
243                                  $log->debug("# $level doesn't have_children($code,$v900,$start_code)");                                  $log->debug("# $level doesn't have_children($code,$v900)");
244                                  ($next_level,$have_children) = $tree->[$level]->{'have_children_at_level'}->($code,$v900,$start_code) if ($tree->[$level]->{'have_children_at_level'});                                  ($next_level,$have_children) = $tree->[$level]->{'have_children_at_level'}->($code,$v900) if ($tree->[$level]->{'have_children_at_level'});
245                                  $log->debug("# $level have_children($code,$v900,$start_code) on level $next_level") if ($have_children);                                  $log->debug("# $level have_children($code,$v900) on level $next_level") if ($have_children);
246    
247                          }                          }
248    

Legend:
Removed from v.459  
changed lines
  Added in v.460

  ViewVC Help
Powered by ViewVC 1.1.26