--- loncom/xml/londefdef.pm 2008/02/14 22:37:46 1.381 +++ loncom/xml/londefdef.pm 2008/11/24 18:55:01 1.397 @@ -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.397 2008/11/24 18:55:01 jms 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='
'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'
occured while attempting to convert this TeX:
';
+	    my $errormsg='
'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'
occurred while attempting to convert this TeX:
';
 	    $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,27 @@ 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{amscd}';
+
+        if($env{'form.pdfFormFields'} eq 'yes') {
+            $currentstring .= '\usepackage{hyperref}'.
+                              '\usepackage{eforms}'.
+                              '\usepackage{tabularx}';
+        } 
+
+        $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 +603,16 @@ sub start_body {
 }
 
 sub edit_controls {
-    my $result .= (<
+
+
-
-EDITBUTTON +
'; return $result; } @@ -1654,14 +1672,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 +2026,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 +2119,10 @@ sub end_table { my $WARNING=''; #width of columns from TeXwidth attributes + # Protect against unbalanced 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 +2525,8 @@ sub end_table { pop @Apache::londefdef::table; undef @Apache::londefdef::table; } + } + &enable_para(); } return $currentstring; } @@ -2997,7 +3026,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"); @@ -4275,27 +4304,9 @@ sub image_replication { } return ''; } -# -# Get correct sizing parameter for an image given -# it's initial ht. and wid. This allows sizing of -# images that are generated on-the-fly (e.g. gnuplot) -# as well as serving as a utility for image_size. -# -# Parameter: -# height_param -# width_param - Initial picture dimensions. -# scaling - A scale factor. -# parstack, - the current stack of tag attributes -# from the xml parser -# safeeval, - pointer to the safespace -# depth, - from what level in the stack to look for attributes -# (assumes -1 if unspecified) -# cis - look for attrubutes case insensitively -# (assumes false) -# -# Returns: -# height, width - new dimensions. -# + + + sub resize_image { my ($height_param, $width_param, $scaling, $parstack, $safeeval, $depth, $cis) = @_; @@ -4398,8 +4409,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 +4471,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{/\./}{/}; @@ -4485,11 +4496,8 @@ sub file_path { } return $file,$path; } -# Converts a measurement in to mm from any of -# the other valid LaTeX units of measure. -# If the units of measure are missing from the -# parameter, it is assumed to be in and returned -# with mm units of measure + + sub recalc { my $argument = shift; if (not $argument=~/(mm|cm|in|pc|pt)/) {return $argument.' mm';} @@ -4533,19 +4541,7 @@ sub LATEX_length { return $value; } -# Wrap image 'stuff' inside of the LaTeX required to implement -# alignment: -# align_tex_image(align, latex_rendering, image) -# Where: -# align - The HTML alignment specification. -# latex_rendering - rendering hint for latex. -# image - The LaTeX needed to insert the image itsef. -# width,height - dimensions of the image. -# Returns: -# The 1/2 wrapped image and the stuff required to close the -# wrappage. This allows e.g. randomlabel to insert more stuff -# into the closure. -# + sub align_latex_image { my ($align, $latex_rendering, $image, $width, $height) = @_; my $currentstring; # The 1/2 wrapped image. @@ -4612,16 +4608,7 @@ sub align_latex_image { return ($currentstring, $closure); } -# is_inside_of $tagstack $tag -# This sub returns true if the current state of Xml processing -# is inside of the tag. -# Parameters: -# tagstack - The tagstack from the parser. -# tag - The tag (without the <>'s.). -# Sample usage: -# if (is_inside_of($tagstack "table")) { -# # I'm in a table.... -# } + sub is_inside_of { my ($tagstack, $tag) = @_; my @stack = @$tagstack; @@ -4634,5 +4621,106 @@ sub is_inside_of { } +=pod + +=head1 NAME + +Apache::londefdef.pm + +=head1 SYNOPSIS + +Tags Default Definition Module + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + + +=head1 NOTABLE SUBROUTINES + +=over + +=item start_hideweboutput() + +=item end_hideweboutput() + +=item image_replication() + +=item resize_image() + + Get correct sizing parameter for an image given + it's initial ht. and wid. This allows sizing of + images that are generated on-the-fly (e.g. gnuplot) + as well as serving as a utility for image_size. + + Parameter: + height_param + width_param - Initial picture dimensions. + scaling - A scale factor. + parstack, - the current stack of tag attributes + from the xml parser + safeeval, - pointer to the safespace + depth, - from what level in the stack to look for attributes + (assumes -1 if unspecified) + cis - look for attrubutes case insensitively + (assumes false) + + Returns: + height, width - new dimensions. + +=item image_size() + +=item image_width() + +=item image_height() + +=item get_eps_image() + +=item eps_generation() + +=item file_path() + +=item recalc() + + Converts a measurement in to mm from any of + the other valid LaTeX units of measure. + If the units of measure are missing from the + parameter, it is assumed to be in and returned + with mm units of measure + +=item LATEX_length() + +=item align_latex_image() + + Wrap image 'stuff' inside of the LaTeX required to implement + alignment: + align_tex_image(align, latex_rendering, image) + Where: + align - The HTML alignment specification. + latex_rendering - rendering hint for latex. + image - The LaTeX needed to insert the image itsef. + width,height - dimensions of the image. + Returns: + The 1/2 wrapped image and the stuff required to close the + wrappage. This allows e.g. randomlabel to insert more stuff + into the closure. + + +=item is_inside_of($tagstack, $tag) + This sub returns true if the current state of Xml processing is inside of the tag. + Parameters: + tagstack - The tagstack from the parser. + tag - The tag (without the <>'s.). + Sample usage: + if (is_inside_of($tagstack "table")) { + I'm in a table.... + } + + + +=back + +=cut + + 1; __END__