Diff for /loncom/xml/style.pm between versions 1.10 and 1.19

version 1.10, 2001/03/26 17:32:30 version 1.19, 2003/09/22 13:01:57
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Style Parser Module (new version)  # Style Parser Module (new version)
 #  #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
   # Copyright for TtHfunc and TtMfunc by Ian Hutchinson. 
   # TtHfunc and TtMfunc (the "Code") may be compiled and linked into 
   # binary executable programs or libraries distributed by the 
   # Michigan State University (the "Licensee"), but any binaries so 
   # distributed are hereby licensed only for use in the context
   # of a program or computational system for which the Licensee is the 
   # primary author or distributor, and which performs substantial 
   # additional tasks beyond the translation of (La)TeX into HTML.
   # The C source of the Code may not be distributed by the Licensee
   # to any other parties under any circumstances.
   #
 # written 01/08/01 by Alexander Sakharuk  # written 01/08/01 by Alexander Sakharuk
 #  #
   
Line 11  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*\"([^\"]*)\"/;      push(@values,$current_value);
  $current_key = $1;   } elsif (($target eq 'meta') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'meta')) {
  push @keys,$current_key;      $allow=1;
 # &Apache::lonxml::debug("$current_key\n");          } elsif (($target eq 'meta') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'meta')) {
  my $b_position =  index($entry,'<'.$target.'>',0);      $allow=0;
  my $e_position =  index($entry,'</'.$target.'>',$b_position);   } elsif (($target ne 'meta') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'render')) {
  my $target_length = length($target) + 2;      $allow=1;
  if ($b_position > -1) {   } elsif (($target ne 'meta') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'render')) {
     my $entry_target = substr($entry,$b_position+$target_length,$e_position-$b_position-$target_length);      $allow=0;
     my $pstyle = HTML::TokeParser->new(\$entry_target);   } elsif (($target ne 'meta') && ($target ne 'web') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'web')) {
     while ($stoken = $pstyle->get_token) {      $allow=0;
  if ($stoken->[0] eq 'T') {   } elsif (($target ne 'meta') && ($target ne 'web') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'web')) {
     $current_value .= $stoken->[1];      $allow=1;
  } elsif ($stoken->[0] eq 'S') {   } elsif (($target ne 'meta') && ($target ne 'tex') && ($stoken->[0] eq 'S') && ($stoken->[1] eq 'tex')) {
     my $number = &testkey($stoken->[0],$stoken->[1],@keys);      $allow=0;
     if ($number != -1) {   } elsif (($target ne 'meta') && ($target ne 'tex') && ($stoken->[0] eq 'E') && ($stoken->[1] eq 'tex')) {
  $current_value .= &testvalue($number,$stoken->[0],$stoken->[2],@values);      $allow=1;
     } else {   } elsif (($stoken->[0] eq 'S') && ($stoken->[1] eq 'target') && (not $stoken->[2]->{'name'}=~/(^\s*$target\s*,|,\s*$target\s*,|,\s*$target\s*$|^\s*$target\s*$)/)) {
  $current_value .= $stoken->[4];      $allow=0;
     }    } elsif (($stoken->[0] eq 'E') && ($stoken->[1] eq 'target')) {
         } else {      $allow=1;
     my $number = &testkey($stoken->[0],$stoken->[1],@keys);    } elsif (($target ne 'meta') && ($stoken->[0] eq 'S') && ($stoken->[1] eq $target)) {
     if ($number != -1) {      $allow=1;
  $current_value .= &testvalue($number,$stoken->[0],$stoken->[2],@values);   } elsif (($target ne 'meta') && ($stoken->[0] eq 'E') && ($stoken->[1] eq $target)) {
     } else {   } elsif (($stoken->[0] eq 'S') && ($stoken->[1] eq 'target') && ($stoken->[2]->{'name'}=~/(^\s*$target\s*,|,\s*$target\s*,|,\s*$target\s*$|^\s*$target\s*$)/)) {
  $current_value .= $stoken->[2];      $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_value =~ s/\n//g;  
  push @values,$current_value;  
 # &Apache::lonxml::debug("a:$current_value $#values \n");  
  $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,lc $keys[$i],$values[$i];    push @style_array,$keys[$i],$values[$i]; 
     }      }
     my %style_for_target =  @style_array;      my %style_for_target =  @style_array;
       return %style_for_target; 
 # check printing  
     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) = @_; 
Line 110  sub testvalue { Line 148  sub testvalue {
     my ($number,$zeroth,$second,@values) = @_;         my ($number,$zeroth,$second,@values) = @_;   
     my $current_content = $values[$number];      my $current_content = $values[$number];
     if ($zeroth eq 'S') {      if ($zeroth eq 'S') {
     my %tempo_hash = %$second;   my %tempo_hash = %$second;
     while ((my $current_k,my $current_v) = each %tempo_hash) {   while ((my $current_k,my $current_v) = each %tempo_hash) {
         $current_content =~ s/\$$current_k/$current_v/g;      $current_content =~ s/\$$current_k/$current_v/g;
     }   }
     } elsif ($zeroth eq 'E') {      } elsif ($zeroth eq 'E') {
         $current_content = $values[$number];   $current_content = $values[$number];
     }      }
     return $current_content;      return $current_content;
 }  }

Removed from v.1.10  
changed lines
  Added in v.1.19


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