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

version 1.497.2.1, 2011/12/12 11:19:53 version 1.512.2.3, 2013/06/05 15:37:26
Line 61  use Apache::lonlocal; Line 61  use Apache::lonlocal;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::londefdef;  use Apache::londefdef;
 use Apache::lonenc();  use Apache::lonenc();
   use Apache::loncommon();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
Line 69  BEGIN { Line 70  BEGIN {
     &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));      &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));
 }  }
   
   
   #---------------------------------------------------------------------------------
   # 
   #  This section of code deals with hyphenation management.
   #  We must do three things:
   #  - keep track fo the desired languages to alter the header.
   #  - provide hyphenation selection as needed by each language that appears in the
   #    text.
   #  - Provide the header text needed to make available the desired hyphenations.
   #
   #
   
   # Hash whose keys are the languages encountered in the document/resource.
   #
   
   my %languages_required;
   ##
   #   Given a language selection as input returns a chunk of LaTeX that
   #   selects the required hyphenator.
   #
   #  @param language - the language being selected.
   #  @return string
   #  @retval The LaTeX needed to select the hyphenation appropriate to the language. 
   #   
   sub select_hyphenation {
       my $language  = shift;
   
       $language = &Apache::loncommon::latexlanguage($language); # Translate -> latex language.
   
       # If there is no latex language there's not much we can do:
   
       if ($language) {
    &require_language($language);
    my $babel_hyphenation = "\\selectlanguage{$language}";
   
    return $babel_hyphenation;
       } else {
    return '';
       }
   }
   ##
   # Selects hyphenation based on the current problem metadata.
   # This requires that
   # - There is a language metadata item set for the problem.
   # - The language has a latex/babel hyphenation.
   #
   # @note: Uses &Apache::lonxml::request to locate the Uri associated with
   #        this problem.
   # @return string (possibly empty).
   # @retval If not empty an appropriate \selectlanguage{} directive.
   #
   sub select_metadata_hyphenation {
       my $uri      = $Apache::lonxml::request->uri;
       my $language = &Apache::lonnet::metadata($uri, 'language'); 
       my $latex_language = &Apache::loncommon::latexhyphenation($language);
       if ($latex_language) {
    return '\selectlanguage{'.$latex_language."}\n";
       }
       return ''; # no latex hyphenation or no lang metadata.
   }
   
   
   ##
   #  Clears the set of languages required by the document being rendered.
   #
   sub clear_required_languages {
       %languages_required = ();
   }
   ##
   # Allows an external client of this module to register a need for a language:
   #
   # @param LaTeX language required:
   #
   sub require_language {
       my $language = shift;
       $languages_required{$language} = 1;
   }
   
   ##
   # Provides the header for babel that indicates the languages
   # the document requires.
   # @return string
   # @retval \usepackage[lang1,lang2...]{babel}
   # @retval ''   if there are no languages_required.
   sub languages_header {
       my $header    ='';
       my @languages = (keys(%languages_required));
   
       # Only generate the header if there are languages:
   
       if (scalar @languages) {
    my $language_list = join(',', (@languages));
    $header  = '\usepackage['.$language_list."]{babel}\n";
       }
       return $header;
   }
   
   #----------------------------------------------------------------------------------
   
 sub start_web {  sub start_web {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target ne 'edit' && $target ne 'modified') {      if ($target ne 'edit' && $target ne 'modified') {
Line 279  sub page_start { Line 379  sub page_start {
     } elsif (!defined($found{'body'})       } elsif (!defined($found{'body'}) 
      && $env{'request.state'} eq 'construct') {       && $env{'request.state'} eq 'construct') {
  if ($target eq 'web' || $target eq 'edit') {   if ($target eq 'web' || $target eq 'edit') {
         # Breadcrumbs for Construction Space          # Breadcrumbs for Authoring Space
         &Apache::lonhtmlcommon::clear_breadcrumbs();          &Apache::lonhtmlcommon::clear_breadcrumbs();
         &Apache::lonhtmlcommon::add_breadcrumb({          &Apache::lonhtmlcommon::add_breadcrumb({
             'text'  => 'Construction Space',              'text'  => 'Authoring Space',
             'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),              'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),
         });          });
         # breadcrumbs (and tools) will be created           # breadcrumbs (and tools) will be created 
Line 353  sub page_start { Line 453  sub page_start {
         }          }
  $form_tag_start.='>'."\n";   $form_tag_start.='>'."\n";
   
  my $symb=&Apache::lonnet::symbread();  
  if ($symb =~ /\S/) {   if ($symb =~ /\S/) {
     $symb=      $symb=
  &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb));   &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb));
Line 890  sub firstaccess_msg { Line 989  sub firstaccess_msg {
  my $foldertitle=&Apache::lonnet::gettitle($map);   my $foldertitle=&Apache::lonnet::gettitle($map);
           
  &Apache::lonxml::debug("map is $map title is $foldertitle");   &Apache::lonxml::debug("map is $map title is $foldertitle");
  $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'   $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.',$foldertitle)."</h2>"
                              .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'                               .'<p>'.&mt('Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
                              ,$foldertitle,$time)."</h2>";                               ,$foldertitle,$time)."</p>";
     } elsif ($interval[1] eq 'course') {      } elsif ($interval[1] eq 'course') {
  my $course = $env{'course.'.$env{'request.course.id'}.'.description'};   my $course = $env{'course.'.$env{'request.course.id'}.'.description'};
         $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'          $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.',$course)."</h2>"
                              .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'                               .'<p>'.&mt('Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
                              ,$course,$time)."</h2>";                               ,$course,$time)."</p>";
     } else {      } else {
  my $title=&Apache::lonnet::gettitle($symb);   my $title=&Apache::lonnet::gettitle($symb);
         $result .= "<h2>".&mt('This resource "[_1]" is open for a limited time.'          $result .= "<h2>".&mt('This resource "[_1]" is open for a limited time.',$title)."</h2>"
                              .' Once you click the "Show Resource" button below you have [_2] to complete this resource "[_1]".'                               .'<p>'.&mt('Once you click the "Show Resource" button below you have [_2] to complete this resource "[_1]".'
                              ,$title,$time)."</h2>";                               ,$title,$time)."</p>";
     }      }
     my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     my $buttontext = &mt('Show Resource');      my $buttontext = &mt('Show Resource');
Line 960  sub reset_problem_globals { Line 1059  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 1057  sub start_problem { Line 1159  sub start_problem {
     &Apache::run::run($expression,$safeeval);      &Apache::run::run($expression,$safeeval);
     my $status;      my $status;
     my $accessmsg;      my $accessmsg;
       my $resource_due;
   
     my $name= &get_resource_name($parstack,$safeeval);      my $name= &get_resource_name($parstack,$safeeval);
     my ($result,$form_tag_start);      my ($result,$form_tag_start,$slot_name,$slot);
   
       if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
           $target eq 'tex') {
           if ($env{'form.markaccess'}) {
               my @interval=&Apache::lonnet::EXT("resource.0.interval");
               &Apache::lonnet::set_first_access($interval[1]);
           }
   
           ($status,$accessmsg,$slot_name,$slot) =
               &Apache::lonhomework::check_slot_access('0','problem');
           push (@Apache::inputtags::status,$status);
       }
   
     if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex'      if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex'
  || $target eq 'edit') {   || $target eq 'edit') {
  ($result,$form_tag_start) =   ($result,$form_tag_start) =
Line 1072  sub start_problem { Line 1188  sub start_problem {
     if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }      if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }
     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 'tex') {
  if ($env{'form.markaccess'}) {  
     my @interval=&Apache::lonnet::EXT("resource.0.interval");  
     &Apache::lonnet::set_first_access($interval[1]);  
  }  
   
         ($status,$accessmsg,my $slot_name,my $slot) =  
             &Apache::lonhomework::check_slot_access('0','problem');  
         push (@Apache::inputtags::status,$status);  
   
  #handle rand seed in construction space   #handle rand seed in construction space
  my $rndseed=&setup_rndseed($safeeval,$target);   my $rndseed=&setup_rndseed($safeeval,$target);
Line 1129  sub start_problem { Line 1237  sub start_problem {
     ( $status eq 'BANNED') ||      ( $status eq 'BANNED') ||
     ( $status eq 'UNAVAILABLE') ||      ( $status eq 'UNAVAILABLE') ||
     ( $status eq 'NOT_IN_A_SLOT') ||      ( $status eq 'NOT_IN_A_SLOT') ||
               ( $status eq 'NOTRESERVABLE') ||
               ( $status eq 'RESERVABLE') ||
               ( $status eq 'RESERVABLE_LATER') ||
     ( $status eq 'INVALID_ACCESS')) {      ( $status eq 'INVALID_ACCESS')) {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
        $style);         $style);
     if ( $target eq "web" ) {      if ( $target eq "web" ) {
  my $msg;   my $msg;
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';      $msg.='<p class="LC_error">'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</p>';
                 } elsif ($status eq 'NOT_IN_A_SLOT') {                  } elsif ($status eq 'NOT_IN_A_SLOT') {
                     $msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>';                      $msg.='<p class="LC_warning">'.&mt('You are not currently signed up to work at this time and/or place.').'</p>';
                   } elsif (($status eq 'RESERVABLE') || ($status eq 'RESERVABLE_LATER') ||
                            ($status eq 'NOTRESERVABLE')) {
                       $msg.='<p class="LC_warning">'.&mt('Access requires reservation to work at specific time/place.').'</p>';
  } elsif ($status ne 'NOT_YET_VIEWED') {   } elsif ($status ne 'NOT_YET_VIEWED') {
     $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';      $msg.='<p class="LC_warning">'.&mt('Not open to be viewed').'</p>';
  }                  }
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {   if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
     $msg.=&mt('The problem ').$accessmsg;      $msg.=&mt('The problem ').$accessmsg;
  } elsif ($status eq 'UNCHECKEDOUT') {   } elsif ($status eq 'UNCHECKEDOUT') {
Line 1149  sub start_problem { Line 1263  sub start_problem {
     $msg.=&firstaccess_msg($accessmsg,$symb);      $msg.=&firstaccess_msg($accessmsg,$symb);
  } elsif ($status eq 'NOT_IN_A_SLOT') {   } elsif ($status eq 'NOT_IN_A_SLOT') {
     $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");      $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
                   } elsif ($status eq 'RESERVABLE') {
                       $msg.=&mt('Available to make a reservation.').' '.&mt('Reservation window closes [_1].',
                                 &Apache::lonnavmaps::timeToHumanString($accessmsg,'end')).
                             '<br />'.
                             &Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
                   } elsif ($status eq 'RESERVABLE_LATER') {
                       $msg.=&mt('Window to make a reservation will open [_1].',
                                 &Apache::lonnavmaps::timeToHumanString($accessmsg,'start'));
                   } elsif ($status eq 'NOTRESERVABLE') {
                       $msg.=&mt('Not available to make a reservation.');  
  }   }
  $result.=$msg.'<br />';   $result.=$msg.'<br />';
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
Line 1173  sub start_problem { Line 1297  sub start_problem {
  'problem');   'problem');
     }      }
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
     if ($status eq 'CAN_ANSWER'       if ($status eq 'CAN_ANSWER') {
  && $slot_name ne ''                  $resource_due = &Apache::lonhomework::due_date(0, $env{'request.symb'});
  && $Apache::lonhomework::history{'resource.0.checkedin'} eq '') {                  if ($slot_name ne '') {
  # unproctored slot access, self checkin                      my $checked_in =
  &Apache::bridgetask::check_in('problem',undef,undef,                          $Apache::lonhomework::history{'resource.0.checkedin'};
       $slot_name);                      if ($checked_in eq '') {
     }                          # unproctored slot access, self checkin
                           &Apache::bridgetask::check_in('problem',undef,undef,
                                                         $slot_name);
                           $checked_in =
                               $Apache::lonhomework::results{"resource.0.checkedin"};
                       }
                       if ((ref($slot) eq 'HASH') && ($checked_in ne '')) {
                           if ($slot->{'starttime'} < time()) {
                               if (!$resource_due) {
                                   $resource_due = $slot->{'endtime'};
                               } elsif ($slot->{'endtime'} < $resource_due) {
                                   $resource_due = $slot->{'endtime'};
                               }
                           }
                       }
                   }
                   if ($resource_due) {
                       my $time_left = $resource_due - time();
                       if ($resource_due && ($time_left > 0) && ($target eq 'web')) {
                           $result .= &Apache::lonhtmlcommon::set_due_date($resource_due);
                       }
                   }
               }
     $result.="\n $form_tag_start \t".      $result.="\n $form_tag_start \t".
       '<input type="hidden" name="submitted" value="yes" />';        '<input type="hidden" name="submitted" value="yes" />';
     # create a page header and exit      # create a page header and exit
Line 1209  sub start_problem { Line 1355  sub start_problem {
             }              }
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     $result .= 'INSERTTEXFRONTMATTERHERE';      $result .= 'INSERTTEXFRONTMATTERHERE';
       $result .= &select_metadata_hyphenation();
       
   
  }   }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
Line 1265  sub end_problem { Line 1413  sub end_problem {
  }   }
  my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');   my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');
  my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';   my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';
    &clear_required_languages();
  my $toc_line='\vskip 1 mm\noindent '.$startminipage.   my $toc_line='\vskip 1 mm\noindent '.$startminipage.
     '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';      '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';
   
Line 1362  sub end_problem { Line 1511  sub end_problem {
  $result.="</form>";   $result.="</form>";
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
  $result.= &Apache::loncommon::end_page({'discussion' => 1});                  #
                   # Closing </body></html> not added by end_page().
                   # Added separately at end of this routine, after added
                   # <script></script> so document will be valid xhtml.
                   #
    $result.= &Apache::loncommon::end_page({'discussion' => 1,
    'notbody'    => 1});
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $endminipage = '';   my $endminipage = '';
  if (not $env{'form.problem_split'}=~/yes/) {   if (not $env{'form.problem_split'}=~/yes/) {
Line 1413  sub end_problem { Line 1568  sub end_problem {
   
     &reset_problem_globals('problem');      &reset_problem_globals('problem');
   
       #
       # This shouild be just above the return so that the
       # time put in the javascript is as late as possible in the
       # computation:
       #
       if ($target eq 'web') {
           $result .= &Apache::lonhtmlcommon::set_compute_end_time();
           #
           # Closing tags delayed so any <script></script> tags 
           # not in head can appear inside body, for valid xhtml.
           # 
           $result .= "</body>\n</html>";
       }
     return $result;      return $result;
 }  }
   
Line 1581  sub start_languageblock { Line 1749  sub start_languageblock {
   
         # Now loop over all languages in order of preference          # Now loop over all languages in order of preference
   
    my $render;
         foreach my $preferred_language (@preferred_languages) {          foreach my $preferred_language (@preferred_languages) {
   
     # If neither include/nor exlude is present the block is going      # If neither include/nor exlude is present the block is going
     # to get rendered.      # to get rendered.
   
            my $render=1;  
            my $found=0;             my $found=0;
                         $render=1;
   
    #  If include is specified,  don't render the block     #  If include is specified,  don't render the block
    #  unless the preferred language is included in the set.     #  unless the preferred language is included in the set.
   
Line 1657  sub end_languageblock { Line 1826  sub end_languageblock {
     }      }
     return $result;      return $result;
 }  }
   #  languagblock specific tags:
 {  {
     my %available_texts;      # For chunks of a resource that has translations, this hash contains
       # the translations available indexed by language name.
       #
   
       my %available_texts;       
   
       # <translated> starts a block of a resource that has multiple translations.
       # See the <lang> tag as well.
       # When </translated> is encountered if there is a translation for the 
       # currently preferred language, that is rendered inthe web/tex/webgrade
       # targets.  Otherwise, the default text is rendered.
       #
       # Note that <lang> is only registered for the duration of the 
       #  <translated>...</translated> block 
       #
       # Pathalogical case handling:
       #   - If there is no <lang> that specifies a 'default' and there is no
       #     translation that matches a preferred language, nothing is rendered.
       #   - Nested <translated>...</translated> might be linguistically supported by
       #     XML due to the stack nature of tag registration(?) however the rendered
       #     output will be incorrect because there is only one %available_texts
       #     has and end_translated clears it.
       #   - Material outside of a <lang>...</lang> block within the
       #     <translated>...<translated> block won't render either e.g.:
       #    <translated>
       #      The following will be in your preferred langauge:
       #      <lang which='en'>
       #         This section in english
       #      </lang>
       #      <lang which='sgeiso'>
       #         Hier es ist auf Deutsch.
       #      </lang>
       #      <lang which='sfriso'>
       #         En Francais
       #      </lang>
       #    </translated>
       #
       #    The introductory text prior to the first <lang> tag is not rendered.
       #
     sub start_translated {      sub start_translated {
  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
  &Apache::lonxml::register('Apache::structuretags',('lang'));   &Apache::lonxml::register('Apache::structuretags',('lang'));
Line 1678  sub end_languageblock { Line 1885  sub end_languageblock {
     my @possibilities = keys(%available_texts);      my @possibilities = keys(%available_texts);
     my $which =       my $which = 
  &Apache::loncommon::languages(\@possibilities) || 'default';   &Apache::loncommon::languages(\@possibilities) || 'default';
     $result = $available_texts{$which};      if ($target eq 'tex') {
    $result = &select_hyphenation($which);
       }
       $result .= $available_texts{$which};
       if ($target eq 'tex') {
    $result .= &select_metadata_hyphenation(); # Restore original language.
       }
  }   }
  undef(%available_texts);   undef(%available_texts);
  &Apache::lonxml::deregister('Apache::structuretags',('lang'));   &Apache::lonxml::deregister('Apache::structuretags',('lang'));
  return $result;   return $result;
     }      }
   
       # <lang [which='language-name'] [other='lang1,lang2...']>  
       #  Specifies that the block contained within it is a translation 
       #  for a specific language specified by the 'which' attribute. The
       #   'other' attribute can be used by itself or in conjunction with
       #   which to specify this tag _may_ be used as a translation for some
       #   list of languages. e.g.:  <lang which='senisoUS' other='senisoCA,senisoAU,seniso'>
       #   specifying that the block provides a translation for US (primary)
       #   Canadian, Australian and UK Englush.
       #   
       # Comment: this seems a bit silly why not just support a list of languages
       #           e.g. <lang which='l1,l2...'> and ditch the other attribute?
       #
       #  Effect:
       #    The material within the <lang>..</lang> block is stored in the
       #    specified set of $available_texts hash entries, the appropriate one
       #    is selected at </translated> time.
       #
       #  Pathalogical case handling:
       #    If a language occurs multiple times within a <translated> block,
       #    only the last one is rendered e.g.:
       #
       #    <translated>
       #       <lang which='senisoUS', other='senisoCA,senisoAU,seniso'>
       #          Red green color blindness is quite common affecting about 7.8% of 
       #          the male population, but onloy about .65% of the female population.
       #       </lang>
       #          Red green colour blindness is quite common affecting about 7.8% of 
       #          the male population, but onloy about .65% of the female population.
       #       <lang which='seniso', other='senisoCA,senisoAU'>
       #     </translated>
       #
       #    renders the correct spelling of color (colour) for people who have specified
       #    a preferred language that is one of the British Commonwealth languages
       #    even though those are also listed as valid selections for the US english
       #    <lang> block.
       #
     sub start_lang {      sub start_lang {
  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
  if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||   if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
Line 1716  sub end_languageblock { Line 1964  sub end_languageblock {
  }   }
  return '';   return '';
     }      }
 }  } # end langauge block specific tags.
   
   
 sub start_instructorcomment {  sub start_instructorcomment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
Line 2294  sub end_startouttext { Line 2543  sub end_startouttext {
                  .'<td><span class="LC_nobreak">'.&mt('Delete?').' '                   .'<td><span class="LC_nobreak">'.&mt('Delete?').' '
                  .&Apache::edit::deletelist($target,$token)                   .&Apache::edit::deletelist($target,$token)
                  .'</span></td>'                   .'</span></td>'
          .'<td align="left"><span id="math_'.$areaid.'" />'           .'<td align="left"><span id="math_'.$areaid.'">'
  .&Apache::lonhtmlcommon::dragmath_button($areaid,1)   .&Apache::lonhtmlcommon::dragmath_button($areaid,1)
  .'<span></td>'   .'</span></td>'
  .'<td>'   .'<td>'
  .&Apache::edit::insertlist($target,$token)   .&Apache::edit::insertlist($target,$token)
  .'</td>'   .'</td>'

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


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