--- loncom/xml/londefdef.pm	2008/02/14 22:37:46	1.381
+++ loncom/xml/londefdef.pm	2009/04/11 01:12:58	1.396.2.2
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.381 2008/02/14 22:37:46 www Exp $
+# $Id: londefdef.pm,v 1.396.2.2 2009/04/11 01:12:58 raeburn Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -46,6 +46,7 @@ use Apache::File();
 use Image::Magick;
 use Apache::lonmenu();
 use Apache::lonmeta();
+use Apache::lonlocal;
 use Apache::Constants qw(:common);
 use File::Basename;
 use LONCAPA();
@@ -106,13 +107,13 @@ sub start_m {
 	my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
 	if ($eval eq 'on') {
 	    $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
-	    #&Apache::lonxml::debug("M is evaulated to:$inside:");
+	    #&Apache::lonxml::debug("M is evaluated to:$inside:");
 	}
 	my $tex = $inside;
 	my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval);
 	$currentstring = &Apache::lontexconvert::converted(\$inside,$display);
 	if ($Apache::lontexconvert::errorstring) {
-	    my $errormsg='<pre>'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'</pre> occured while attempting to convert this TeX: <pre>';
+	    my $errormsg='<pre>'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'</pre> occurred while attempting to convert this TeX: <pre>';
 	    $tex = &HTML::Entities::encode($tex,'<>&"');
 	    my ($linenumber) =
 		($Apache::lontexconvert::errorstring =~ /Line (\d+)/);
@@ -138,7 +139,7 @@ sub start_m {
 	# detect simple math mode entry exits, and convert them
         # to use \ensuremath ... unless there's a \verb inside.
 	if (! ($currentstring=~/\\verb/)) {
-	    if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) {
+	    if ($currentstring=~/^\s*\$[^\$].*\$\s*$/) {
 		$currentstring=~s/^(\s*)\$/$1/;
 		$currentstring=~s/\$(\s*)$/$1/;
 		$currentstring='\ensuremath{'.$currentstring.'}';
@@ -200,14 +201,20 @@ sub start_html {
                           '\usepackage[dvips]{graphicx}'.
 			  '\usepackage{wrapfig}'.
 			  '\usepackage{picins}'.
+			  '\usepackage[T1]{fontenc}'."\n".
+                          '\usepackage{lmodern}'."\n".
+			  '\usepackage[postscript]{ucs}'."\n".
+			  '\usepackage[utf8x]{inputenc}'."\n".
+			  '\usepackage{pifont}' ."\n".
+			  '\usepackage{latexsym}'."\n".
                           '\usepackage{epsfig}'.
                           '\usepackage{calc}'.
                           '\usepackage{amsmath}'.
                           '\usepackage{amssymb}'.
                           '\usepackage{amsfonts}'.
-                          '\usepackage{amsthm}'.
-                          '\usepackage{amscd}'.
-                          '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'.
+                          '\usepackage{amsthm}';
+
+        $currentstring .= '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'.
                           '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large\textbf{Index}} \newline \setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}';
     }
     return $currentstring;
@@ -589,12 +596,16 @@ sub start_body {
 }
 
 sub edit_controls {
-    my $result .= (<<EDITBUTTON);
+    my $result .= '
 <form method="post">
-<input type="submit" name="editmode" accesskey="e" value="Edit" />
+<div class="LC_edit_problem_header">
+<div class="LC_edit_problem_header_row1">'.
+&Apache::lonxml::renderingoptions().'
+<input type="submit" name="changeproblemmode" value="'.&mt('Change View').'" />
+</div>
+<div class="LC_edit_problem_header_edit_row"><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" /></div></div>
 </form>
-<br />
-EDITBUTTON
+<br />';
     return $result;
 }
 
@@ -1639,6 +1650,26 @@ sub start_a {
 	my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval,
 					    undef,1);
 	$currentstring=&Apache::lonenc::encrypt_ref($token,{'href'=>$href});
+        if ($href =~ /\S/) {
+            if ($href !~ m{^https?://}) {
+                my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'});
+                my $linkurl;
+                if ($href =~ m{^/uploaded/}) {
+                    $linkurl = $href;
+                } elsif ($href =~ m{^[^/]}) {
+                    my $path = $url;
+                    $path  =~ s{[^/]*$}{};
+                    $linkurl = $path.$href;
+                }
+                if ($linkurl =~ m{^/uploaded/}) {
+                    if (!&Apache::lonnet::allowed('bre',$linkurl)) {
+                        if (&Apache::lonnet::is_on_map($url)) {
+                            &Apache::lonxml::extlink($linkurl);
+                        }
+                    }
+                }
+            }
+        }
     }
     return $currentstring;
 }
@@ -1654,14 +1685,18 @@ sub end_a {
 	    &Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1);
 	my $name =
 	    &Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1);
-	if ($href =~ /\S/) {
+        my $uriprint =
+            &Apache::lonxml::get_param('uriprint',$parstack,$safeeval,undef,1);
+        my $anchorprint =
+            &Apache::lonxml::get_param('anchorprint',$parstack,$safeeval,undef,1);
+	if (($href =~ /\S/) && ($uriprint=~/^on|uriprint|yes|1$/i)) {
 	    $href =~ s/([^\\])%/$1\\\%/g;
 	    # Substitute special symbols... and allow line breaks at each /
 	    #
 	    $href = &Apache::lonxml::latex_special_symbols($href);
 	    $href =~ s/\//\/\\-/g;              # Map / to /\- to allow hyphenation.
 	    $currentstring .= ' ({\tt URI:'.$href.'})';
-	} elsif ($name =~ /\S/) {
+	} elsif (($name =~ /\S/) && ($anchorprint=~/^on|anchorprint|yes|1$/i)) {
 	    $currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})';
 	} else {
 	    $currentstring.='';
@@ -2004,6 +2039,7 @@ sub start_table {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring .= $token->[4];     
     } elsif ($target eq 'tex') {
+	&disable_para();	# Can't have paras in a table.
 	push(@Apache::londefdef::table, {}); 
 	$Apache::londefdef::table[-1]{'row_number'} = -1;
         #maximum table's width (default coincides with text line length)
@@ -2096,6 +2132,10 @@ sub end_table {
 	my $WARNING='';
         #width of columns from TeXwidth attributes
 
+	# Protect against unbalanced </table> tag.
+
+	if (scalar(@Apache::londefdef::table) > 0) {
+
 	for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
 	    for (my $jn=0;$jn<=$Apache::londefdef::table[-1]{'counter_columns'};$jn++) {
 		if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]<$Apache::londefdef::table[-1]{'TeXlen'}[$in][$jn]) {
@@ -2498,6 +2538,8 @@ sub end_table {
 	    pop @Apache::londefdef::table;
 	    undef @Apache::londefdef::table;
 	}
+	}
+	&enable_para();
     }
     return $currentstring;
 }
@@ -2997,7 +3039,7 @@ sub start_img {
 
 	# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src");
 
-	#if original gif/jpg/png file exist do following:
+	#if original bmp/gif/jpg/png file exist do following:
 	my $origsrc=$src;
 	my ($path,$file) = &get_eps_image($src);
 	# &Apache::lonnet::logthis("Image source: $src result: $path $file");
@@ -4398,8 +4440,8 @@ sub get_eps_image {
 	&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal.
     }
     &Apache::lonxml::debug("get_eps_image: Original image: $orig_src");
-    my ($spath, $sname, $sext) = &fileparse($src, qr/\.(gif|png|jpg|jpeg)/i);
-    $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;
+    my ($spath, $sname, $sext) = &fileparse($src, qr/\.(bmp|gif|png|jpg|jpeg)/i);
+    $src=~s/\.(bmp|gif|png|jpg|jpeg)$/\.eps/i;
     $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
     &Apache::lonxml::debug("Filelocation gives: $src");
     if (! -e $src) {
@@ -4460,7 +4502,7 @@ sub eps_generation {
     my $temp_file = Apache::File->new('>>'.$filename); 
     print $temp_file "$src\n";
     my $newsrc = $src;
-    $newsrc =~ s/(\.gif|\.jpg|\.jpeg)$/\.eps/i;
+    $newsrc =~ s/(\.bmp|\.gif|\.jpg|\.jpeg)$/\.eps/i;
     $newsrc=~s{/home/httpd/html/res}{};
     $newsrc=~s{/home/($LONCAPA::username_re)/public_html/}{/$1/};
     $newsrc=~s{/\./}{/};