Diff for /loncom/homework/optionresponse.pm between versions 1.130 and 1.134

version 1.130, 2005/12/06 10:03:57 version 1.134, 2006/03/15 00:08:53
Line 114  sub start_foilgroup { Line 114  sub start_foilgroup {
         <td>Delete an Option:          <td>Delete an Option:
   <select name="$Apache::lonxml::curdepth.deleteopt">$optionlist</select>    <select name="$Apache::lonxml::curdepth.deleteopt">$optionlist</select>
 ENDTABLE  ENDTABLE
       $result.= &Apache::edit::checked_arg('Print options:','texoptions',
    [ ['nochoice','Don\'t show option list'] ]
    ,$token);
     $result.= &Apache::edit::end_row();      $result.= &Apache::edit::end_row();
     $result.= &Apache::edit::start_spanning_row();      $result.= &Apache::edit::start_spanning_row();
     $result.= $insertlist.'<br />';      $result.= $insertlist.'<br />';
Line 137  ENDTABLE Line 140  ENDTABLE
       }        }
       $optchanged=1;        $optchanged=1;
     }      }
     if ($optchanged) {      my $rebuildtag = &Apache::edit::get_new_args($token,$parstack,$safeeval,
    ('texoptions'));
       if ($optchanged || $rebuildtag ) {
       $result = "<foilgroup options=\"(";        $result = "<foilgroup options=\"(";
       foreach my $option (@options) {        foreach my $option (@options) {
  $option=~s/\'/\\\'/g;   $option=~s/\'/\\\'/g;
Line 145  ENDTABLE Line 150  ENDTABLE
  $result .="'".$option."',";   $result .="'".$option."',";
       }        }
       chop $result;        chop $result;
       $result.=')">';        $result.=')" ';
         $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';
         $result .= '>';
     } # else nothing changed so just use the default mechanism      } # else nothing changed so just use the default mechanism
   }    }
   if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {    if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
Line 407  sub displayfoils { Line 414  sub displayfoils {
       foreach my $option (@opt) {        foreach my $option (@opt) {
   my $escopt=&HTML::Entities::encode($option,'\'"&<>');    my $escopt=&HTML::Entities::encode($option,'\'"&<>');
   if ($option eq $lastopt) {    if ($option eq $lastopt) {
       $optionlist.="<option value='".$escopt."' selected=\"on\">$option</option>\n";        $optionlist.="<option value='".$escopt."' selected=\"selected\">$option</option>\n";
   } else {    } else {
       $optionlist.="<option value='".$escopt."'>$option</option>\n";        $optionlist.="<option value='".$escopt."'>$option</option>\n";
   }    }
Line 474  sub displayfoils { Line 481  sub displayfoils {
 }  }
   
   
   #  Correct a single option list element.
   #  - For embedded <display></display> tags,
   #    we pass literally the stuff between them.
   #  - For everything else, we run through latex_special_symbols
   #    so that any symbols that have meaning to LaTeX will be
   #    correctly escaped.
   #
   sub correct_option {
       my $option = shift;
   
   
       # There's probably a beter way with perl if I was
       # more of a regexp wiz..(RF).
   
       my $strlen = length($option);
       my $here   = 0; # Where to start searching for <display></display>
       my $result =""; # The return string is built here.
       
       while ($here < $strlen) {
    # look for an opening <display> tag:
   
    my $openloc = index($option, "<display>", $here);
    if ($openloc == -1) {
       # No more... operate with latex_special_symbols on
       # the rest of the string.
   
       $result .= &Apache::lonxml::latex_special_symbols(substr($option, $here));
       return $result;
    } else {
       # Need to pass the string up to the <display> tag 
       # through l_s_s ...
       $result .= &Apache::lonxml::latex_special_symbols(substr($option, $here, $openloc-$here));
    }
    # look for the closing </display> tag...
    # We're a bit stupid..or tolerant...
    # in that if the user forgets the </display> tag
    # we infer they intended one at the end of the option.
    $openloc += 9; # 9 chars in <display>
   
    my $closeloc = index($option, "</display>", $openloc); # 9 chars in <display>
    if ($closeloc == -1) {
       $closeloc = $strlen + 9;                             # 10chars in </display> faked off end. 
    }
    #  Pass from openloc through closeloc without any interpretation:
   
    &Apache::lonnet::logthis("Segment inside display: $openloc through $closeloc");
    $result .= substr($option, $openloc, $closeloc - $openloc);
    $here    = $closeloc + 10;                               # Next search is after the </display> 
       }
   
       return $result;
   
       # return &Apache::lonxml::latex_special_symbols($option);
   }
   
   #  Correct the option list elements so that if there
   #  are special symbosl that have meaning to LaTeX
   #  they get fixed up to display correctly.
   
 sub optionlist_correction {  sub optionlist_correction {
     my ($TeXlayout,@options) = @_;      my ($TeXlayout,@options) = @_;
     my $texoptionlist='\\item [] Choices: ';      my $texoptionlist='\\item [] Choices: ';
Line 481  sub optionlist_correction { Line 547  sub optionlist_correction {
     if (scalar(@options) > 0) {      if (scalar(@options) > 0) {
  foreach my $option (@options) {   foreach my $option (@options) {
     $texoptionlist.='{\bf '.      $texoptionlist.='{\bf '.
  &Apache::lonxml::latex_special_symbols($option).   &correct_option($option).
  '}';   '}';
     if ($TeXlayout eq 'vertical') {      if ($TeXlayout eq 'vertical') {
  $texoptionlist.=' \vskip 0 mm ',   $texoptionlist.=' \vskip 0 mm ',
Line 549  sub bubbles { Line 615  sub bubbles {
     $head.='lr';      $head.='lr';
  } else {   } else {
     $line=~s/\&\s*$//;      $line=~s/\&\s*$//;
     $result.='\vskip -2 mm\noindent\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';      $result.='\vskip -2 mm\noindent\setlength{\tabcolsep}{2 mm}\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';
     $line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';;      $line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';;
     $head ='lr';      $head ='lr';
     $current_length = (length($opt[$ind])+length($alphabet[$ind]))*2;      $current_length = (length($opt[$ind])+length($alphabet[$ind]))*2;

Removed from v.1.130  
changed lines
  Added in v.1.134


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