File:  [LON-CAPA] / loncom / xml / style.pl
Revision 1.2: download - view: text, annotated - select for diffs
Thu Jun 29 19:31:09 2000 UTC (23 years, 10 months ago) by sakharuk
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_X, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, version_1_1_3, version_1_1_2, version_1_1_1, version_1_1_0, version_1_0_99_3, version_1_0_99_2, version_1_0_99_1, version_1_0_99, version_1_0_3, version_1_0_2, version_1_0_1, version_1_0_0, version_0_99_5, version_0_99_4, version_0_99_3, version_0_99_2, version_0_99_1, version_0_99_0, version_0_6_2, version_0_6, version_0_5_1, version_0_5, version_0_4, stable_2002_spring, stable_2002_july, stable_2002_april, stable_2001_fall, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, conference_2003, bz6209-base, bz6209, bz5969, bz2851, STABLE, PRINT_INCOMPLETE_base, PRINT_INCOMPLETE, HEAD, GCI_3, GCI_2, GCI_1, BZ5971-printing-apage, BZ5434-fox, BZ4492-merge, BZ4492-feature_horizontal_radioresponse
*** empty log message ***

    1: #!/usr/local/bin/perl 
    2: 
    3: use strict;
    4: use HTML::TokeParser;
    5: use IO::File;
    6: 
    7: {
    8:   my @content_of_style;
    9:   my $content_style_string;
   10:  
   11:   my $target = 'web';
   12: 
   13: # read style file and put the content in string 
   14:   {
   15:       my $filesty=IO::File->new('/home/sasha/final/attempt2.sty')
   16: 	  || die "Couldn't open style file for reading: $!\n";
   17:       @content_of_style = <$filesty>;   
   18:   }
   19:   $content_style_string = join(' ',@content_of_style);
   20: 
   21: # Call styleparser to parser syle string and create hash
   22: 
   23:   my %style_for_target = &styleparser($target,$content_style_string);
   24:      
   25: }
   26: 
   27: # style subroutine 
   28: # create a table for defined target
   29: # from the information from Style File
   30: 
   31: sub styleparser {
   32: 
   33:   my ($target,$content_style_string) = @_;
   34:   my @target_list = ('target','web','tex','edit','modified','rat','answer','metadis');
   35:   my @value_style = ();
   36:   my $current_key = '';
   37:   my $current_value = '';
   38:   my $stoken;
   39:   my $flag;                  
   40:   my $iele;
   41:   my $flag_target;
   42: 
   43:   my $pstyle = HTML::TokeParser->new(\$content_style_string);
   44: 
   45:   while ($stoken = $pstyle->get_token) {
   46: # start for tag definition
   47:       if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {
   48: # new key in hash
   49: 	  $current_key = $stoken->[2]{name};
   50: 	  $flag = 0;
   51: # metadata output
   52: 	  if ($target eq 'meta') {
   53: 	      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag') { 
   54: 		  if ($stoken->[0] eq 'S' and $stoken->[1] eq 'meta') {
   55: 		      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'meta') {
   56: 			  $current_value .= $stoken->[1];
   57: 		      }
   58: 		  }
   59: 	      }
   60: 	  } else {
   61: # render output
   62: 	      while ($stoken = $pstyle->get_token and $stoken->[1] ne 'render') {
   63: 		  if ($stoken->[1] eq 'definetag') {
   64: 		      $flag = 1;
   65: 		      last;
   66: 		  }
   67: 	      }
   68: 	      if ($flag == 0) { 
   69: 		  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag'
   70: 			 and $stoken->[1] ne 'render') {
   71: # if token not equal to target $flag_target=0 
   72: 		      $flag_target = 0;
   73: 		      for (my $i=0; $i<$#target_list; $i++) {
   74: 			  if ($stoken->[1] eq $target_list[$i]) {
   75: 			      $flag_target = 1;
   76: 			  }
   77: 		      }
   78: 		      if ($flag_target == 0) {
   79: # target not found
   80: 			  if ($stoken->[0] eq 'T') {
   81: 			      $current_value .= $stoken->[1];
   82: 			  } elsif ($stoken->[0] eq 'S') {
   83: 			      my $flagelem = 0;    
   84: 			      for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
   85: 				  if ($stoken->[1] eq $value_style[$i]) {
   86: 				      $flagelem = 1;
   87: 				      $iele = $i + 1;
   88: 				      last;
   89: 				  }
   90: 			      }
   91: 			      if ($flagelem == 0) {
   92: 				  $current_value .= $stoken->[4]; 
   93: 			      } else {
   94: 				  $current_value .= $value_style[$iele];
   95: 			      }
   96: 			  } elsif ($stoken->[0] eq 'E') {
   97: 			      my $flagelem = 0;    
   98: 			      for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
   99: 				  if ($stoken->[1] eq $value_style[$i]) {
  100: 				      $flagelem = 1;
  101: 				      $iele = $i + 1;
  102: 				      last;
  103: 				  }
  104: 			      }
  105: 			      if ($flagelem == 0) {
  106: 				  $current_value .= $stoken->[2];
  107: 			      } else {
  108: 				  $current_value .= $value_style[$iele];
  109: 			      }                 
  110: 			  } 
  111: 		      } else {
  112: # target found
  113: 			  if ($stoken->[0] eq 'S' and $stoken->[1] eq 'target') {
  114: # target defined via <target> tag
  115: 			    if (defined $stoken->[2]{dest}) {
  116: 			      if (index($stoken->[2]{dest},$target) == -1) {
  117: 				  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
  118: 				  }			
  119: 			      } elsif (index($stoken->[2]{dest},$target) != -1) {
  120: 				  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
  121: 				      if ($stoken->[0] eq 'T') {
  122: 					  $current_value .= $stoken->[1];
  123: 				      } elsif ($stoken->[0] eq 'S') {
  124: 					  my $flagelem = 0;    
  125: 					  for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
  126: 					      if ($stoken->[1] eq $value_style[$i]) {
  127: 						  $flagelem = 1;
  128: 						  $iele = $i + 1;
  129: 						  last;
  130: 					      }
  131: 					  }
  132: 					  if ($flagelem == 0) {
  133: 					      $current_value .= $stoken->[4]; 
  134: 					  } else {
  135: 					      $current_value .= $value_style[$iele];
  136: 					  }
  137: 				      } elsif ($stoken->[0] eq 'E') {
  138: 					  my $flagelem = 0;    
  139: 					  for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
  140: 					      if ($stoken->[1] eq $value_style[$i]) {
  141: 						  $flagelem = 1;
  142: 						  $iele = $i + 1;
  143: 						  last;
  144: 					      }
  145: 					  }
  146: 					  if ($flagelem == 0) {
  147: 					      $current_value .= $stoken->[2];
  148: 					  } else {
  149: 					      $current_value .= $value_style[$iele];
  150: 					  }        
  151: 				      }
  152: 				  } 
  153: 			      }
  154: 			    } else {
  155: 			      if (index($stoken->[2]{excl},$target) != -1) {
  156: 				  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
  157: 				  }			
  158: 			      } elsif (index($stoken->[2]{excl},$target) == -1) {
  159: 				  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'target') {
  160: 				      if ($stoken->[0] eq 'T') {
  161: 					  $current_value .= $stoken->[1];
  162: 				      } elsif ($stoken->[0] eq 'S') {
  163: 					  my $flagelem = 0;    
  164: 					  for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
  165: 					      if ($stoken->[1] eq $value_style[$i]) {
  166: 						  $flagelem = 1;
  167: 						  $iele = $i + 1;
  168: 						  last;
  169: 					      }
  170: 					  }
  171: 					  if ($flagelem == 0) {
  172: 					      $current_value .= $stoken->[4]; 
  173: 					  } else {
  174: 					      $current_value .= $value_style[$iele];
  175: 					  }
  176: 				      } elsif ($stoken->[0] eq 'E') {
  177: 					  my $flagelem = 0;    
  178: 					  for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
  179: 					      if ($stoken->[1] eq $value_style[$i]) {
  180: 						  $flagelem = 1;
  181: 						  $iele = $i + 1;
  182: 						  last;
  183: 					      }
  184: 					  }
  185: 					  if ($flagelem == 0) {
  186: 					      $current_value .= $stoken->[2];
  187: 					  } else {
  188: 					      $current_value .= $value_style[$iele];
  189: 					  }        
  190: 				      }
  191: 				  } 
  192: 			      }
  193: 
  194: 
  195: 			    }
  196: 			  } elsif ($stoken->[1] ne $target) {
  197: #target defined via short-form tag
  198: 			      my $tempo_token = $stoken->[1];
  199: 			      while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempo_token) {
  200: 			      }
  201: 			  } else {
  202: 			      my $tempo_token = $stoken->[1];
  203: 			      while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempo_token) {
  204: 				  if ($stoken->[0] eq 'T') {
  205: 				      $current_value .= $stoken->[1];
  206: 				  } elsif ($stoken->[0] eq 'S') {
  207: 				      my $flagelem = 0;    
  208: 				      for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
  209: 					  if ($stoken->[1] eq $value_style[$i]) {
  210: 					      $flagelem = 1;
  211: 					      $iele = $i + 1;
  212: 					      last;
  213: 					  }
  214: 				      }
  215: 				      if ($flagelem == 0) {
  216: 					  $current_value .= $stoken->[4]; 
  217: 				      } else {
  218: 					  $current_value .= $value_style[$iele];
  219: 				      }
  220: 				  } elsif ($stoken->[0] eq 'E') {
  221: 				      my $flagelem = 0;    
  222: 				      for (my $i=$#value_style-1;$i>=0;$i=$i-2) {
  223: 					  if ($stoken->[1] eq $value_style[$i]) {
  224: 					      $flagelem = 1;
  225: 					      $iele = $i + 1;
  226: 					      last;
  227: 					  }
  228: 				      }
  229: 				      if ($flagelem == 0) {
  230: 					  $current_value .= $stoken->[2];
  231: 				      } else {
  232: 					  $current_value .= $value_style[$iele];
  233: 				      }        
  234: 				  }                                                                                    
  235: 			      }           
  236: 			  }
  237: 		      }
  238: 		  }
  239: 
  240: 	      }
  241: 	  }    
  242:       }    
  243:       $current_value =~ s/(\s)+/$1/g;
  244:       if ($current_value ne ' ' and $current_value ne '' ) {  
  245: 	  push (@value_style,lc $current_key,$current_value);
  246:       }
  247:       $current_key = '';
  248:       $current_value = '';         
  249:   }  
  250:   my %style_for_target = @value_style;   
  251: # check printing
  252:   while (($current_key,$current_value) = each %style_for_target) {
  253:       print "$current_key => $current_value\n";
  254:   }
  255: # return result
  256:   return %style_for_target; 
  257: }
  258: 

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