Diff for /loncom/homework/structuretags.pm between versions 1.497.2.1 and 1.498

version 1.497.2.1, 2011/12/12 11:19:53 version 1.498, 2011/12/10 17:53:45
Line 960  sub reset_problem_globals { Line 960  sub reset_problem_globals {
     undef(%Apache::lonhomework::history);      undef(%Apache::lonhomework::history);
     undef(%Apache::lonhomework::results);      undef(%Apache::lonhomework::results);
     undef($Apache::inputtags::part);      undef($Apache::inputtags::part);
       if ($type eq 'Task') {
           undef($Apache::inputtags::slot_name);
       }
 #don't undef this, lonhomework.pm takes care of this, we use this to   #don't undef this, lonhomework.pm takes care of this, we use this to 
 #detect if we try to do 2 problems in one file  #detect if we try to do 2 problems in one file
 #   undef($Apache::lonhomework::parsing_a_problem);  #   undef($Apache::lonhomework::parsing_a_problem);
Line 1539  sub end_block { Line 1542  sub end_block {
     }      }
     return $result;      return $result;
 }  }
 #  
 #  <languageblock [include='lang1,lang2...'] [exclude='lang1,lang2...']>  
 #  ...  
 #  </languageblock>  
 #  
 #   This declares the intent to provide content that can be rendered in the  
 #   set of languages in the include specificatino but not in the exclude  
 #   specification.  If a currently preferred language is in the include list  
 #   the content in the <languageblock>...</languageblock> is rendered  
 #   If the currently preferred language is in the exclude list,  
 #   the content in the <languageblock>..></languageblock is not rendered.  
 #  
 #   Pathalogical case handling:  
 #     - Include specified, without the preferred language but exclude  specified  
 #       also without the preferred langauge results in rendering the block.  
 #     - Exclude specified without include and excluden not containing a   
 #       preferred language renders the block.  
 #     - Include and exclude both specifying the preferred language does not  
 #       render the block.  
 #     - If neither include/exclude is specified, the block gets rendered.  
 #  
 #  This tag has no effect when target is in {edit, modified}  
 #  
 sub start_languageblock {  sub start_languageblock {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
     my $result = '';      my $result;
   
     if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $include = $token->[2]->{'include'};   my $include = $token->[2]->{'include'};
  my $exclude = $token->[2]->{'exclude'};   my $exclude = $token->[2]->{'exclude'};
         my @preferred_languages=&Apache::lonlocal::preferred_languages();          my @preferred_languages=&Apache::lonlocal::preferred_languages();
   # This should not even happen, since we should at least have the server language
         # This should not even happen, since we should at least have the server language          if (!$preferred_languages[0]) { $preferred_languages[0]='en'; }
   # Now loop over all languages in order of preference
         if (!$preferred_languages[0]) {   
     $preferred_languages[0]='en';   
  }  
   
         # Now loop over all languages in order of preference  
   
         foreach my $preferred_language (@preferred_languages) {          foreach my $preferred_language (@preferred_languages) {
   # If the languageblock has no arguments, show the contents
     # If neither include/nor exlude is present the block is going             $result=1;
     # to get rendered.  
   
            my $render=1;  
            my $found=0;             my $found=0;
              # Do we have an include argument?
    #  If include is specified,  don't render the block  
    #  unless the preferred language is included in the set.  
   
    if ($include) {     if ($include) {
               $render=0;  # If include is specified, by default, don't render the block
                 $result=0;
               foreach my $included_language (split(/\,/,$include)) {                foreach my $included_language (split(/\,/,$include)) {
   # ... but if my preferred language is included, render it
                  if ($included_language eq $preferred_language) {                   if ($included_language eq $preferred_language) {
                     $render=1;                       $result=1; 
                     $found=1;                       $found=1; 
     last; # Only need to find the first.  
                  }                   }
               }                }
    }     }
            # Do we have an exclude argument?  # Do we have an exclude argument?
    # If so, and one of the languages matches a preferred language  
    # inhibit rendering the block.  Note that in the pathalogical case the  
    # author has specified a preferred language in both the include and exclude  
    # attribte exclude is preferred.    
   
            if ($exclude) {             if ($exclude) {
               $render=1;                $result=1;
               foreach my $excluded_language (split(/\,/,$exclude)) {                foreach my $excluded_language (split(/\,/,$exclude)) {
                  if ($excluded_language eq $preferred_language) {                   if ($excluded_language eq $preferred_language) {
                     $render=0;                      $result=0;
                     $found=1;                      $found=1;
     last; # Only need to find the first.  
                  }                   }
               }                }
    }     }
            if ($found) {              if ($found) { last; }
        last; # Done on any match of include or exclude.  
    }  
         }          }
  # If $render not true skip the entire block until </languageblock>   if ( ! $result ) {
  #  
   
  if ( ! $render ) {  
     my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser,      my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser,
    $style);     $style);
     &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");      &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
  }   }
  # If $render is true, we've not skipped the contents of the <languageglock>   $result='';
  # and the normal loncapa processing flow will render it as a matter of course.  
   
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result .=&Apache::edit::tag_start($target,$token);   $result .=&Apache::edit::tag_start($target,$token);
  $result .=&Apache::edit::text_arg(&mt('Include Language:'),'include',   $result .=&Apache::edit::text_arg(&mt('Include Language:'),'include',

Removed from v.1.497.2.1  
changed lines
  Added in v.1.498


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