Diff for /loncom/xml/style.pm between versions 1.3 and 1.6

version 1.3, 2000/06/28 13:28:05 version 1.6, 2000/10/26 14:01:40
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Style Parser Module   # Style Parser Module 
 #  #
 # last modified 06/23/00 by Alexander Sakharuk  # last modified 06/29/00 by Alexander Sakharuk
   
 package Apache::style;   package Apache::style; 
   
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
   
 #============================================================= style subroutine   
   
 sub styleparser {  sub styleparser {
   
   my ($target,$content_style_string) = @_;    my ($target,$content_style_string) = @_;
     my @target_list = ('target','web','tex','edit','modified','rat','answer','metadis');
 #------------------------------------------- target redefinition (if necessary)   
       
   my @target_string = '';  
   my $element;  
      
   ($element,@target_string) = split ('&&',$target);  
   
   map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;  
      
   $target = $element;  
      
 #-------------------------------------------- create a table for defined target  
 #----------------------------------------- from the information from Style File  
   
   my @value_style = ();    my @value_style = ();
   my $current_key = '';    my $current_key = '';
   my $current_value = '';    my $current_value = '';
   my $stoken;    my $stoken;
   my $flag;                      my $flag;                  
   my $iele;    my $iele;
     my $flag_target;
   
   my $pstyle = HTML::TokeParser->new(\$content_style_string);    my $pstyle = HTML::TokeParser->new(\$content_style_string);
   
   while ($stoken = $pstyle->get_token) {    while ($stoken = $pstyle->get_token) {
 #----------------------------------------------------- start for tag definition  # start for tag definition
    if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {     if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {
 #-------------------------------------------------------------- new key in hash  # new key in hash
     $current_key = $stoken->[2]{name};       $current_key = $stoken->[2]{name};
     $flag = 0;       $flag = 0;
 #-------------------------------------------------------------- metadata output  # metadata output
     if ($target eq 'meta') {       if ($target eq 'meta') {
      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag') {          while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag') { 
        if ($stoken->[0] eq 'S' and $stoken->[1] eq 'meta') {      if ($stoken->[0] eq 'S' and $stoken->[1] eq 'meta') {
         while ($stoken = $pstyle->get_token and $stoken->[1] ne 'meta') {        while ($stoken = $pstyle->get_token and $stoken->[1] ne 'meta') {
     $current_value .= $stoken->[1];                     if ($stoken->[0] eq 'T') {
         }                              $current_value .= $stoken->[1];
        }     } elsif ($stoken->[0] eq 'S') {
      }                              $current_value .= $stoken->[4];
     } else {     } else {
 #--------------------------------------------------------------- outtext output                              $current_value .= $stoken->[2];
      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'render') {  
    if ($stoken->[1] eq 'definetag') {  
      $flag = 1;  
              last;  
    }  
       }  
      if ($flag == 0) {   
        while ($stoken = $pstyle->get_token and $stoken->[0] ne 'S') {  
     $current_value .= $stoken->[1];  
        }  
       while ($stoken->[1] ne 'definetag') {  
        if ($stoken->[0] eq 'S' and $stoken->[1] eq $target) {  
  while ($stoken = $pstyle->get_token) {  
  if ($stoken->[1] ne $target) {  
    if ($stoken->[0] eq 'S') {  
        my $flagelem = 0;  
                for (my $i=$#value_style-1;$i>0;$i=$i-2) {  
    if ($stoken->[1] eq $value_style[$i]) {  
        $flagelem = 1;  
                        $iele = $i+1;  
                        last;  
    }  
        }  
        if ($flagelem == 0) {  
          $current_value .= $stoken->[4];  
             } else {  
    $current_value .= $value_style[$iele];  
        }  
    }   
            if ($stoken->[0] eq 'E') {  
        my $flagelem = 0;  
                for (my $i=$#value_style-1;$i>0;$i=$i-2) {  
    if ('/'.$stoken->[1] eq $value_style[$i]) {  
        $flagelem = 1;  
                        $iele = $i+1;  
                        last;  
    }     }
        }        }
        if ($flagelem == 0) {      }
                  $current_value .= $stoken->[2];  
             } else {  
    $current_value .= $value_style[$iele];  
        }  
    }   
            if ($stoken->[0] eq 'T') {  
              $current_value .= $stoken->[1];   
    }                   
  }  else {        
  last;  
  }  
         }  
        } elsif ($stoken->[0] eq 'S' and $stoken->[1] ne $target) {  
   my $tempotempo = $stoken->[1];  
    while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempotempo) {  
    }  
        }         }
        } else {
        while ($stoken = $pstyle->get_token) {  # render output
         if ($stoken->[0] eq 'T') {       while ($stoken = $pstyle->get_token and $stoken->[1] ne 'render') {
           $current_value .= $stoken->[1];    if ($stoken->[1] eq 'definetag') {
  }       $flag = 1;
         if ($stoken->[0] eq 'E') {      last;
   last;    }
  }        }
         if ($stoken->[0] eq 'S') {        if ($flag == 0) { 
   last;   while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag'
          and $stoken->[1] ne 'render') {
   # if token not equal to target $flag_target=0 
         $flag_target = 0;
         for (my $i=0; $i<$#target_list; $i++) {
    if ($stoken->[1] eq $target_list[$i]) {
      $flag_target = 1;
    }
         }
         if ($flag_target == 0) {
   # target not found
     my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
     $current_value .= $tempo_out;
         } else {
   # target found
     if ($stoken->[0] eq 'S' and $stoken->[1] eq 'target') {
   # target defined via <target> tag
       if (defined $stoken->[2]{dest}) {
         if (index($stoken->[2]{dest},$target) == -1) {
    while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
    }
         } elsif (index($stoken->[2]{dest},$target) != -1) {
     while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
       my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
       $current_value .= $tempo_out;
     } 
         }
       } else {
          if (index($stoken->[2]{excl},$target) != -1) {
    while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
    }
          } elsif (index($stoken->[2]{excl},$target) == -1) {
      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
        my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
        $current_value .= $tempo_out;
      } 
          }
   
   
       }
     } elsif ($stoken->[1] ne $target) {
   #target defined via short-form tag
         my $tempo_token = $stoken->[1];
    while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempo_token) {
         }
     } else {
         my $tempo_token = $stoken->[1];
    while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempo_token) {
      my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
        $current_value .= $tempo_out;                                                           
    }           
     }
         }
  }   }
        }       
       
       }        }
      }       }    
     }  
       
    }         }    
    $current_value =~ s/(\s)+/$1/g;     $current_value =~ s/(\s)+/$1/g;
      if ($current_value ne ' ' and $current_value ne '' ) {       if ($current_value ne '' ) {  
        push (@value_style,lc $current_key,$current_value);         push (@value_style,lc $current_key,$current_value);
      }     }
      $current_key = '';     $current_key = '';
      $current_value = '';              $current_value = '';         
   
   }      }  
   my %style_for_target = @value_style;       my %style_for_target = @value_style;   
 #--------------------------------------------------------------- check printing  # check printing
 #  while (($current_key,$current_value) = each %style_for_target) {  #  while (($current_key,$current_value) = each %style_for_target) {
 #       print "$current_key => $current_value\n";  #      print "$current_key => $current_value\n";
 #  }  #  }
 #---------------------------------------------------------------- return result  # return result
   return %style_for_target;     return %style_for_target; 
 }  }
   
   sub test {
   
       my ($zeroth,$first,$second,$fourth,@value_style) = @_;
       my $current_value = '';
       my $num;
       my $flag;
   
    if ($zeroth eq 'T') {
       $current_value .= $first;
    } elsif ($zeroth eq 'S') {
       $flag = 0;    
       for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
    if ($first eq $value_style[$i]) {
       $flag = 1;
       $num = $i + 1;
       last;
    }
       }
       if ($flag == 0) {
    $current_value .= $fourth; 
       } else {
    $current_value .= $value_style[$num];
       }
    } elsif ($zeroth eq 'E') {
       $flag = 0;    
       for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
    if ($first eq $value_style[$i]) {
       $flag = 1;
       $num = $i + 1;
       last;
    }
       }
       if ($flag == 0) {
    $current_value .= $second;
       } else {
    $current_value .= $value_style[$num];
       }                 
    } 
       return $current_value;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.3  
changed lines
  Added in v.1.6


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