--- loncom/homework/optionresponse.pm 2006/03/09 01:04:43 1.133
+++ loncom/homework/optionresponse.pm 2006/03/15 00:08:53 1.134
@@ -1,7 +1,7 @@
# LearningOnline Network with CAPA
# option list style responses
#
-# $Id: optionresponse.pm,v 1.133 2006/03/09 01:04:43 albertel Exp $
+# $Id: optionresponse.pm,v 1.134 2006/03/15 00:08:53 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -481,6 +481,65 @@ sub displayfoils {
}
+# Correct a single option list element.
+# - For embedded 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
+ my $result =""; # The return string is built here.
+
+ while ($here < $strlen) {
+ # look for an opening tag:
+
+ my $openloc = index($option, "", $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 tag
+ # through l_s_s ...
+ $result .= &Apache::lonxml::latex_special_symbols(substr($option, $here, $openloc-$here));
+ }
+ # look for the closing tag...
+ # We're a bit stupid..or tolerant...
+ # in that if the user forgets the tag
+ # we infer they intended one at the end of the option.
+ $openloc += 9; # 9 chars in
+
+ my $closeloc = index($option, "", $openloc); # 9 chars in
+ if ($closeloc == -1) {
+ $closeloc = $strlen + 9; # 10chars in 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
+ }
+
+ 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 {
my ($TeXlayout,@options) = @_;
my $texoptionlist='\\item [] Choices: ';
@@ -488,7 +547,7 @@ sub optionlist_correction {
if (scalar(@options) > 0) {
foreach my $option (@options) {
$texoptionlist.='{\bf '.
- &Apache::lonxml::latex_special_symbols($option).
+ &correct_option($option).
'}';
if ($TeXlayout eq 'vertical') {
$texoptionlist.=' \vskip 0 mm ',