Diff for /loncom/xml/style.pm between versions 1.17 and 1.18

version 1.17, 2003/06/09 21:46:11 version 1.18, 2003/09/19 17:46:59
Line 46  use HTML::TokeParser; Line 46  use HTML::TokeParser;
   
 sub styleparser {  sub styleparser {
   
     my ($target,$content_style_string) = @_;      my ($target,$content_style_string)=@_;
     my $current_key = '';  
     my $current_value = '';  
     my @keys = ();      my @keys = ();
     my @values = ();      my @values = ();
     my @style_array = ();      my @style_array = ();
     my $stoken;      my $current_value;
       my $allow=0;
     my $b_pos;      my $pstyle = HTML::TokeParser->new(\$content_style_string);
     my $e_pos;      while (my $stoken = $pstyle->get_token) {
     my $entry;   if (($stoken->[0] eq 'S') && ($stoken->[1] eq 'definetag')) {
       push @keys,$stoken->[2]->{'name'};
     $b_pos = index($content_style_string,'<definetag',0);              $current_value='';
     while ($b_pos != -1) {      $allow=0;
  $e_pos = index($content_style_string,'</definetag',$b_pos);   } elsif (($stoken->[0] eq 'E') && ($stoken->[1] eq 'definetag')) {
  $entry = substr($content_style_string,$b_pos,$e_pos-$b_pos+12);             $current_value =~ s/(\s)+/$1/g;
  $_ = $entry;      $current_value =~ s/\n//g;
  m/<definetag\s+name\s*=\s*\"([^\"]*)\"/;  
  $current_key = $1;  
  push @keys,$current_key;  
 # &Apache::lonxml::debug("$current_key\n");  
  my $b_position =  index($entry,'<'.$target.'>',0);  
  my $e_position =  index($entry,'</'.$target.'>',$b_position);  
  my $target_length = length($target) + 2;  
  if ($b_position > -1) {  
     my $entry_target = substr($entry,$b_position+$target_length,$e_position-$b_position-$target_length);  
     my $pstyle = HTML::TokeParser->new(\$entry_target);  
     while ($stoken = $pstyle->get_token) {  
  if ($stoken->[0] eq 'T') {  
     $current_value .= $stoken->[1];  
  } elsif ($stoken->[0] eq 'S') {  
     my $number=-1;  
     if ($stoken->[1] ne "$current_key") {  
  $number = &testkey($stoken->[0],$stoken->[1],@keys);  
     }  
     if ($number != -1) {  
  $current_value .= &testvalue($number,$stoken->[0],$stoken->[2],@values);  
     } else {  
  $current_value .= $stoken->[4];  
     }  
         } else {  
     my $number=-1;  
     if (('/'.$stoken->[1]) ne "$current_key") {  
  $number = &testkey($stoken->[0],$stoken->[1],@keys);  
     }  
     if ($number != -1) {  
  $current_value .= &testvalue($number,$stoken->[0],$stoken->[2],@values);  
     } else {  
  $current_value .= $stoken->[2];  
     }  
         }  
     }  
  }  
         $current_value =~ s/\n//g;  
 ###########  
 # $current_value =~ s/^\s*//g;  
 # $current_value =~ s/\s*$//g;  
 # $current_value =~ s/\( (\w)/($1/g;  
 ###########  
  if ($current_value) {  
     push(@values,$current_value);      push(@values,$current_value);
     #&Apache::lonxml::debug("a:$current_value: $#values \n");   } elsif (($target eq 'meta') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'meta')) {
  } else {      $allow=1;
     pop(@keys);          } elsif (($target eq 'meta') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'meta')) {
       $allow=0;
    } elsif (($target ne 'meta') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'render')) {
       $allow=1;
    } elsif (($target ne 'meta') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'render')) {
       $allow=0;
    } elsif (($target ne 'meta') && ($target ne 'web') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'web')) {
       $allow=0;
    } elsif (($target ne 'meta') && ($target ne 'web') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'web')) {
       $allow=1;
    } elsif (($target ne 'meta') && ($target ne 'tex') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'tex')) {
       $allow=0;
    } elsif (($target ne 'meta') && ($target ne 'tex') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'tex')) {
       $allow=1;
    } elsif (($stoken->[0] eq 'S') && ($stoken->[1] eq 'target') && ($stoken->[2]->{'name'} ne $target)) {
       $allow=0;
    } elsif (($stoken->[0] eq 'E') && ($stoken->[1] eq 'target')) {
       $allow=1;
     } elsif (($target ne 'meta') && ($stoken->[0] eq 'S') && ($stoken->[1] eq $target)) {
       $allow=1;
    } elsif (($target ne 'meta') && ($stoken->[0] eq 'E') && ($stoken->[1] eq $target)) {
    } elsif (($stoken->[0] eq 'S') && ($stoken->[1] eq 'target') && ($stoken->[2]->{'name'} eq $target)) {
       $allow=1;
    } elsif ($allow) { 
       if ($stoken->[0] eq 'T') {
    $current_value .= $stoken->[1];
       } elsif ($stoken->[0] eq 'S') {
    my $number=-1;
    if ($stoken->[1] ne $keys[-1]) {
       $number = &testkey($stoken->[0],$stoken->[1],@keys);
    }
    if ($number != -1) {
       $current_value .= &testvalue($number,$stoken->[0],$stoken->[2],@values);
    } else {
       $current_value .= $stoken->[4];
    }
       } elsif ($stoken->[0] eq 'E') {
    my $number=-1;
    if (('/'.$stoken->[1]) ne $keys[-1]) {
       $number = &testkey($stoken->[0],$stoken->[1],@keys);
    }
    if ($number != -1) {
       $current_value .= &testvalue($number,$stoken->[0],$stoken->[2],@values);
    } else {
       $current_value .= $stoken->[2];
    }
       }
  }   }
  $current_key = '';  
  $current_value ='';  
  $b_pos = index($content_style_string,'<definetag',$b_pos+1);  
     }      }
   
     for (my $i=0; $i<=$#keys; $i++) {      for (my $i=0; $i<=$#keys; $i++) {
  push @style_array,$keys[$i],$values[$i];    push @style_array,$keys[$i],$values[$i]; 
     }      }
     my %style_for_target =  @style_array;      my %style_for_target =  @style_array;
 # check printing      return %style_for_target; 
 #    foreach $current_key (sort keys %style_for_target) {  
 # &Apache::lonxml::debug("$current_key => $style_for_target{$current_key}\n");  
 #    }  
 # return result  
   return %style_for_target;   
   
 }  }
   
   
 sub testkey {  sub testkey {
   
     my ($zeroth,$first,@keys) = @_;       my ($zeroth,$first,@keys) = @_; 

Removed from v.1.17  
changed lines
  Added in v.1.18


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>