Annotation of loncom/xml/style.pm, revision 1.5

1.1       sakharuk    1: # The LearningOnline Network with CAPA
                      2: # Style Parser Module 
                      3: #
1.4       sakharuk    4: # last modified 06/29/00 by Alexander Sakharuk
1.1       sakharuk    5: 
1.2       albertel    6: package Apache::style; 
1.1       sakharuk    7: 
                      8: use strict;
                      9: use HTML::TokeParser;
                     10: 
                     11: sub styleparser {
                     12: 
                     13:   my ($target,$content_style_string) = @_;
1.4       sakharuk   14:   my @target_list = ('target','web','tex','edit','modified','rat','answer','metadis');
1.1       sakharuk   15:   my @value_style = ();
                     16:   my $current_key = '';
                     17:   my $current_value = '';
                     18:   my $stoken;
                     19:   my $flag;                  
                     20:   my $iele;
1.4       sakharuk   21:   my $flag_target;
1.1       sakharuk   22: 
                     23:   my $pstyle = HTML::TokeParser->new(\$content_style_string);
                     24: 
                     25:   while ($stoken = $pstyle->get_token) {
1.4       sakharuk   26: # start for tag definition
1.1       sakharuk   27:    if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {
1.4       sakharuk   28: # new key in hash
                     29:      $current_key = $stoken->[2]{name};
                     30:      $flag = 0;
                     31: # metadata output
                     32:      if ($target eq 'meta') {
                     33:        while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag') { 
                     34: 	    if ($stoken->[0] eq 'S' and $stoken->[1] eq 'meta') {
                     35: 	      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'meta') {
                     36: 		   $current_value .= $stoken->[1];
                     37: 	      }
                     38: 	    }
1.1       sakharuk   39:        }
1.4       sakharuk   40:      } else {
                     41: # render output
                     42:      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'render') {
                     43: 	  if ($stoken->[1] eq 'definetag') {
                     44: 	    $flag = 1;
                     45: 	    last;
                     46: 	  }
1.1       sakharuk   47:      }
1.4       sakharuk   48:       if ($flag == 0) { 
                     49: 	while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag'
                     50: 	       and $stoken->[1] ne 'render') {
                     51: # if token not equal to target $flag_target=0 
                     52: 	      $flag_target = 0;
                     53: 	      for (my $i=0; $i<$#target_list; $i++) {
                     54: 		 if ($stoken->[1] eq $target_list[$i]) {
                     55: 		   $flag_target = 1;
                     56: 		 }
                     57: 	      }
                     58: 	      if ($flag_target == 0) {
                     59: # target not found
                     60: 			  my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
                     61: 			  $current_value .= $tempo_out;
                     62: 	      } else {
                     63: # target found
                     64: 		  if ($stoken->[0] eq 'S' and $stoken->[1] eq 'target') {
                     65: # target defined via <target> tag
                     66: 		    if (defined $stoken->[2]{dest}) {
                     67: 		      if (index($stoken->[2]{dest},$target) == -1) {
                     68: 			while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
                     69: 			}			
                     70: 		      } elsif (index($stoken->[2]{dest},$target) != -1) {
                     71: 			  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
                     72: 			    my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
                     73: 			    $current_value .= $tempo_out;
                     74: 			  } 
                     75: 		      }
                     76: 		    } else {
                     77: 		       if (index($stoken->[2]{excl},$target) != -1) {
                     78: 			 while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
                     79: 			 }			
                     80: 		       } elsif (index($stoken->[2]{excl},$target) == -1) {
                     81: 			   while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
                     82: 			     my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
                     83: 			     $current_value .= $tempo_out;
                     84: 			   } 
                     85: 		       }
                     86: 
                     87: 
                     88: 		    }
                     89: 		  } elsif ($stoken->[1] ne $target) {
                     90: #target defined via short-form tag
                     91: 		      my $tempo_token = $stoken->[1];
                     92: 			while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempo_token) {
                     93: 		      }
                     94: 		  } else {
                     95: 		      my $tempo_token = $stoken->[1];
                     96: 			while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempo_token) {
                     97: 			   my $tempo_out =  &test($stoken->[0],$stoken->[1],$stoken->[2],$stoken->[4],@value_style);
                     98: 			     $current_value .= $tempo_out;                                                           
                     99: 			}           
                    100: 		  }
                    101: 	      }
                    102: 	}
1.1       sakharuk  103: 
                    104:       }
1.4       sakharuk  105:      }    
1.1       sakharuk  106:    }    
                    107:    $current_value =~ s/(\s)+/$1/g;
1.5     ! sakharuk  108:    if ($current_value ne '' ) {  
1.1       sakharuk  109:        push (@value_style,lc $current_key,$current_value);
1.4       sakharuk  110:    }
                    111:    $current_key = '';
                    112:    $current_value = '';         
1.1       sakharuk  113:   }  
                    114:   my %style_for_target = @value_style;   
1.4       sakharuk  115: # check printing
1.5     ! sakharuk  116: #  while (($current_key,$current_value) = each %style_for_target) {
        !           117: #      print "$current_key => $current_value\n";
        !           118: #  }
1.4       sakharuk  119: # return result
1.1       sakharuk  120:   return %style_for_target; 
1.4       sakharuk  121: }
                    122: 
                    123: sub test {
                    124: 
                    125:     my ($zeroth,$first,$second,$fourth,@value_style) = @_;
                    126:     my $current_value = '';
                    127:     my $num;
                    128:     my $flag;
                    129: 	
                    130: 	if ($zeroth eq 'T') {
                    131: 	    $current_value .= $first;
                    132: 	} elsif ($zeroth eq 'S') {
                    133: 	    $flag = 0;    
                    134: 	    for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
                    135: 		if ($first eq $value_style[$i]) {
                    136: 		    $flag = 1;
                    137: 		    $num = $i + 1;
                    138: 		    last;
                    139: 		}
                    140: 	    }
                    141: 	    if ($flag == 0) {
                    142: 		$current_value .= $fourth; 
                    143: 	    } else {
                    144: 		$current_value .= $value_style[$num];
                    145: 	    }
                    146: 	} elsif ($zeroth eq 'E') {
                    147: 	    $flag = 0;    
                    148: 	    for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
                    149: 		if ($first eq $value_style[$i]) {
                    150: 		    $flag = 1;
                    151: 		    $num = $i + 1;
                    152: 		    last;
                    153: 		}
                    154: 	    }
                    155: 	    if ($flag == 0) {
                    156: 		$current_value .= $second;
                    157: 	    } else {
                    158: 		$current_value .= $value_style[$num];
                    159: 	    }                 
                    160: 	} 
                    161:     return $current_value;
1.1       sakharuk  162: }
                    163: 
                    164: 1;
                    165: __END__

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