--- loncom/homework/matchresponse.pm	2004/07/02 08:20:55	1.42
+++ loncom/homework/matchresponse.pm	2005/01/10 19:21:57	1.49
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Full matching style response
 #
-# $Id: matchresponse.pm,v 1.42 2004/07/02 08:20:55 albertel Exp $
+# $Id: matchresponse.pm,v 1.49 2005/01/10 19:21:57 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -110,6 +110,7 @@ sub start_itemgroup {
     } elsif ($target eq 'web' or $target eq 'tex') {
 	$Apache::matchresponse::itemtable{'location'}=
 	    &Apache::lonxml::get_param('location',$parstack,$safeeval);
+	$Apache::matchresponse::TeXitemgroupwidth=&Apache::lonxml::get_param('TeXitemgroupwidth',$parstack,$safeeval,undef,0);
     }
     return $result;
 }
@@ -349,7 +350,16 @@ sub grade_response {
 	$itemstr;
     $Apache::lonhomework::results{"resource.$part.$id.submissiongrading"}=
 	$gradestr;
-    if (!$Apache::lonhomework::scantronmode) {
+    if ($Apache::lonhomework::type eq 'survey') {
+	if ($ignored == 0) {
+	    my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED';
+	    &Apache::response::handle_previous(\%previous,$ad);
+	} elsif ($wrong==0 && $right==0) {
+	} else {
+	    my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='MISSING_ANSWER';
+	    &Apache::response::handle_previous(\%previous,$ad);
+	}
+    } elsif (!$Apache::lonhomework::scantronmode) {
 	my $ad;
 	if ($wrong==0 && $ignored==0) {
 	    $ad='EXACT_ANS';
@@ -459,9 +469,9 @@ sub displayfoils {
 	    my $text=$Apache::response::foilgroup{$name.'.text'};
 	    if ($target ne 'tex') {
 		if ($Apache::lonhomework::type ne 'exam') {
-		    $question.='<br />'.$optionlist.$text."\n";
+		    $question.="<br />\n".$optionlist.$text;
 		} else {
-		    $question.='<br />'.$text."\n";
+		    $question.="<br />\n".$text;
 		}
 		if ($Apache::lonhomework::type eq 'exam') {
 		    my @blank;
@@ -487,25 +497,47 @@ sub displayfoils {
 	$result=$question.$result;
     } elsif ($result=&itemdisplay('right')) {
 	if ($target ne 'tex') {
-	    $result='<table><tr><td>'.$question.'</td><td>'.$result.
-		'</td></tr></table>';
+	    #remove the first <br />
+	    $question=~s|<br />||;
+	    $result='<table><tr><td valign="top">'.$question.
+		'</td><td valign="top">'.$result.'</td></tr></table>';
 	} else {
 	    my $tabsize=&Apache::londefdef::recalc($ENV{'form.textwidth'});
-	    $tabsize=~/(\d+\.?\d*)/;
-	    $tabsize=$1/2.1;
-	    $tabsize.=' mm ';
-	    $result='\setlength{\tabcolsep}{1 mm}\begin{tabular}{p{'.$tabsize.'}p{'.$tabsize.'}}\begin{minipage}{'.$tabsize.'}'.$question.'\end{minipage}&\begin{minipage}{'.$tabsize.'}'.$result.'\end{minipage}\end{tabular}';
+	    my ($lefttabsize,$righttabsize)=(0,0);
+	    if ($Apache::matchresponse::TeXitemgroupwidth ne '') {
+		$Apache::matchresponse::TeXitemgroupwidth=~/(\d*.?\d*)/;
+		$lefttabsize=$tabsize*$1/100;	
+		$righttabsize=0.95*($tabsize-$lefttabsize);
+	    } else {
+		$tabsize=~/(\d+\.?\d*)/;
+		$lefttabsize=$1/2.1;
+		$righttabsize=0.95*($1-$lefttabsize);
+	    }
+	    $lefttabsize.=' mm ';
+	    $righttabsize.=' mm ';
+	    $result='\setlength{\tabcolsep}{1 mm}\begin{tabular}{p{'.$righttabsize.'}p{'.$lefttabsize.'}}\begin{minipage}{'.$righttabsize.'}'.$question.'\end{minipage}&\begin{minipage}{'.$lefttabsize.'}'.$result.'\end{minipage}\end{tabular}';
 	}
     } elsif ($result=&itemdisplay('left')) {
 	if ($target ne 'tex') {
-	    $result='<table><tr><td>'.$result.'</td><td>'.$question.
-		'</td></tr></table>';
+	    #remove the first <br />
+	    $question=~s|<br />||;
+	    $result='<table><tr><td valign="top">'.$result.
+		'</td><td valign="top">'.$question.'</td></tr></table>';
 	} else {
 	    my $tabsize=&Apache::londefdef::recalc($ENV{'form.textwidth'});
-	    $tabsize=~/(\d+\.?\d*)/;
-	    $tabsize=$1/2.1;
-	    $tabsize.=' mm ';
-	    $result='\setlength{\tabcolsep}{1 mm}\begin{tabular}{p{'.$tabsize.'}p{'.$tabsize.'}}\begin{minipage}{'.$tabsize.'}'.$result.'\end{minipage}&\begin{minipage}{'.$tabsize.'}'.$question.'\end{minipage}\end{tabular}';
+	    my ($lefttabsize,$righttabsize)=(0,0);
+	    if ($Apache::matchresponse::TeXitemgroupwidth ne '') {
+		$Apache::matchresponse::TeXitemgroupwidth=~/(\d*.?\d*)/;
+		$lefttabsize=$tabsize*$1/100;	
+		$righttabsize=0.95*($tabsize-$lefttabsize);
+	    } else {
+		$tabsize=~/(\d+\.?\d*)/;
+		$lefttabsize=$1/2.1;
+		$righttabsize=0.95*($1-$lefttabsize);
+	    }
+	    $lefttabsize.=' mm ';
+	    $righttabsize.=' mm ';
+	    $result='\setlength{\tabcolsep}{1 mm}\begin{tabular}{p{'.$lefttabsize.'}p{'.$righttabsize.'}}\begin{minipage}{'.$lefttabsize.'}'.$result.'\end{minipage}&\begin{minipage}{'.$righttabsize.'}'.$question.'\end{minipage}\end{tabular}';
 	}
     }
     if ($target ne 'tex') {$result.="<br />";} else {$result.=' \\\\ ';}
@@ -568,6 +600,9 @@ sub start_foil {
     my $result='';
     if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
 	&Apache::lonxml::startredirection;
+	if ($target eq 'analyze') {
+	    &Apache::response::check_if_computed($token,$parstack,$safeeval,'value');
+	}
     } elsif ($target eq 'edit') {
 	$result=&Apache::edit::tag_start($target,$token,"Foil");
 	my $level='-2';
@@ -601,13 +636,20 @@ sub end_foil {
     if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
 	$text=&Apache::lonxml::endredirection;
     }
+
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
 	$target eq 'tex' || $target eq 'analyze') {
+	if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') {
+	    $text='\vskip 5mm $\triangleright$ '.$text;
+	}
 	my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
 	if ($value ne 'unused') {
 	    my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
 	    &Apache::lonxml::debug("Got a name of :$name:");
-	    if (!$name) { $name=$Apache::lonxml::curdepth; }
+	    if (!$name) {
+		&Apache::lonxml::error("Foils without names exist. This can cause problems to malfunction.");
+		$name=$Apache::lonxml::curdepth;
+	    }
 	    &Apache::lonxml::debug("Using a name of :$name:");
 	    if (defined($Apache::response::foilnames{$name})) {
 		&Apache::lonxml::error(&mt("Foil name <b><tt>[_1]</tt></b> appears more than once. Foil names need to be unique.",$name));
@@ -619,28 +661,12 @@ sub end_foil {
 		 && !&Apache::response::showallfoils() ) {
 		push @{ $Apache::response::conceptgroup{'names'} }, $name;
 		$Apache::response::conceptgroup{"$name.value"} = $value;
-		if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') {
-		    $Apache::response::conceptgroup{"$name.text"} = ' $\triangleright$ '.$text;
-		} else {
-		    $Apache::response::conceptgroup{"$name.text"} = $text;
-		}
+		$Apache::response::conceptgroup{"$name.text"} = $text;
 		$Apache::response::conceptgroup{"$name.location"} = $location;
 	    } else {
 		push @{ $Apache::response::foilgroup{'names'} }, $name;
 		$Apache::response::foilgroup{"$name.value"} = $value;
-		if ($Apache::lonhomework::type eq 'exam') {
-		    if ($target eq 'tex') {
-			$Apache::response::foilgroup{"$name.text"} = '\vskip 5 mm $\triangleright$ '.$text;
-		    } else {
-			$Apache::response::foilgroup{"$name.text"} = $text;
-		    }
-		} else {
-		    if ($target eq 'tex') {
-			$Apache::response::foilgroup{"$name.text"} = $text;
-		    } else {
-			$Apache::response::foilgroup{"$name.text"} = $text;
-		    }
-		}
+		$Apache::response::foilgroup{"$name.text"} = $text;
 		$Apache::response::foilgroup{"$name.location"} = $location;
 	    }
 	}