can't be inside of thank you LaTeX.
+ #
+ my $restart_sub = 0;
+ my $restart_sup = 0;
+
+ # Since and are simple tags it's ok to turn off/on
+ # using the start_ stop_ functions.. those tags only care about
+ # $target.
+
+ if (&is_inside_of($tagstack, "sub")) {
+ $restart_sub = 1;
+ $currentstring .= &end_sub($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+ if (&is_inside_of($tagstack, "sup")) {
+ $restart_sup = 1;
+ $currentstring .= &end_sup($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+
my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
if (defined $LaTeXwidth) {
if ($LaTeXwidth=~/^%/) {
@@ -1478,6 +1545,16 @@ sub start_hr {
}
$currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['.
$LaTeXwidth.'][b]{\hrulefill}'.$post.'}\vskip 0 mm ';
+ # Turn stuff back on that we can't be inside of.
+
+ if ($restart_sub) {
+ $currentstring .= &start_sub($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+ if ($restart_sup) {
+ $currentstring .= &start_sup($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
}
return $currentstring;
}
@@ -1508,6 +1585,9 @@ sub start_div {
}
if ($target eq 'tex') {
# 4 possible alignments: left, right, center, and -missing-.
+ # If inside a table row, we must let the table logic
+ # do the alignment, however.
+ #
my $endstring = '';
@@ -1518,6 +1598,7 @@ sub start_div {
$endstring = '\end{center}';
if (&is_inside_of($tagstack, "table")) {
$currentstring = ¢er_correction().$currentstring;
+ $endstring .= ¢er_end_correction();
}
}
elsif ($align eq 'right') {
@@ -1573,10 +1654,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;
- $currentstring .= ' ({\tt URI:'.&Apache::lonxml::latex_special_symbols($href).'})';
- } elsif ($name =~ /\S/) {
+ # 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/) && ($anchorprint=~/^on|anchorprint|yes|1$/i)) {
$currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})';
} else {
$currentstring.='';
@@ -1951,11 +2040,11 @@ sub start_table {
} else {
$TeXwidth = $textwidth;
}
- } else {
- $Apache::londefdef::table[-1]{'forcedtablewidth'} = 1;
}
+ # if the width is specified as a % it is converted to an absolute width.
+ # otherwise.. just plugged right in the hash
+
if ($TeXwidth=~/%/) {
- $Apache::londefdef::table[-1]{'percent'}=1;
$TeXwidth=~/(\d+)/;
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100;
} else {
@@ -1966,7 +2055,6 @@ sub start_table {
if ($Apache::londefdef::table[-1]{'width'} > $textwidth) {
$Apache::londefdef::table[-1]{'width'} = $textwidth;
}
-
#table's border
my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval);
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0);
@@ -2006,6 +2094,7 @@ sub end_table {
if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
+ my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval);
my $inmemory = '';
my $output = '';
my $WARNING='';
@@ -2102,11 +2191,12 @@ sub end_table {
my @fwidth=@{$Apache::londefdef::table[-1]{'TeXlen'}[0]};#final width array
my @adjust=();
#step 1. adjustment by maximum value
- my $space_neeeded=0;
+ my $space_needed=0;
for (my $jn=0;$jn<=$#max_len;$jn++) {
- $space_neeeded=$space_neeeded+$max_len[$jn];
+ $space_needed=$space_needed+$max_len[$jn];
}
- if ($space_neeeded<=$available_space) {
+ if ($space_needed<=$available_space) {
+
for (my $jn=0;$jn<=$#max_len;$jn++) {
if ($fwidth[$jn]==0) {
$fwidth[$jn]=$max_len[$jn];
@@ -2114,11 +2204,11 @@ sub end_table {
}
} else {
#step 2. adjustment by minimum value (estimation)
- $space_neeeded=0;
+ $space_needed=0;
for (my $jn=0;$jn<=$#min_len;$jn++) {
- $space_neeeded+=$min_len[$jn];
+ $space_needed+=$min_len[$jn];
}
- if ($space_neeeded>$available_space) {
+ if ($space_needed>$available_space) {
$WARNING=' \textbf{NOT ENOUGH SPACE FOR TABLE} ';
for (my $jn=0;$jn<=$#max_len;$jn++) {
if ($fwidth[$jn]==0) {
@@ -2135,7 +2225,7 @@ sub end_table {
}
}
if ($how_many_to_scale>0) {
- my $space_to_adjust=($space_neeeded-$available_space)/$how_many_to_scale;
+ my $space_to_adjust=($space_needed-$available_space)/$how_many_to_scale;
foreach my $jn (@to_scale) {
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
$Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/;
@@ -2157,7 +2247,7 @@ sub end_table {
}
} else {
#step 3. adjustment over minimal + corrections
- my $enlarge_coef=$available_space/$space_neeeded;
+ my $enlarge_coef=$available_space/$space_needed;
my $acsessive=0;
for (my $jn=0;$jn<=$#min_len;$jn++) {
$adjust[$jn]=$min_len[$jn]*$enlarge_coef;
@@ -2190,16 +2280,19 @@ sub end_table {
}
}
}
- #use all available width if it is defined in % or as TeXwidth
- if (($Apache::londefdef::table[-1]{'percent'}==1) || ($Apache::londefdef::table[-1]{'forcetablewidth'}==1)) {
- my $current=0;
- for (my $i=0;$i<=$#fwidth;$i++) {
- $current+=$fwidth[$i];
- }
- my $coef=$Apache::londefdef::table[-1]{'width'}/$current;
- for (my $i=0;$i<=$#fwidth;$i++) {
- $fwidth[$i]*=$coef;
- }
+ # use all available width or specified width as if not specified,
+ # the specified width gets defaulted to the available width.
+
+ my $current=0;
+ for (my $i=0;$i<=$#fwidth;$i++) {
+ $current+=$fwidth[$i];
+ }
+ if ($current == 0) {
+ $current = $Apache::londefdef::table[-1]{'width'};
+ }
+ my $coef=$Apache::londefdef::table[-1]{'width'}/$current;
+ for (my $i=0;$i<=$#fwidth;$i++) {
+ $fwidth[$i]*=$coef;
}
#removing of empty columns if allowed
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0);
@@ -2220,15 +2313,7 @@ sub end_table {
$Apache::londefdef::table[-1]{'content'}=\@cleaned_table;
@fwidth=@cleaned_header;
}
- # At this time we must be sure the table does not overhang the total width
- # this can happen due to our 'average width' adjustment.
- # Total the column widths and see if they are larger than the avail width;
- # If so scale them down in proportion to their percentage of total width.
-
- my $current_total_width = 0;
- for (my $col = 0; $col < $#fwidth; $col++) {
- $current_total_width = $current_total_width + $fwidth[$col];
- }
+
#construct header of the table
my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'};
@@ -2257,6 +2342,10 @@ sub end_table {
# Do the appropriate magic if this has a colspan
#
+ my $border_char = "";
+ if ($border) {
+ $border_char = "|";
+ }
my $spanwidth = 0;
if ($colspan > 1) {
for (my $spancol = $jn; $spancol < $jn + $colspan; $spancol++) {
@@ -2266,12 +2355,12 @@ sub end_table {
$colspan
."}";
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output .= '{|c|}{';
+ $output .= '{'.$border_char.'c'.$border_char.'}{';
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
- $output .= '{|r|}{';
+ $output .= '{'.$border_char.'r'.$border_char.'}{';
}
else {
- $output .= "{|p{$spanwidth mm}|}{";
+ $output .= '{'.$border_char."p{$spanwidth mm}".$border_char.'}{';
}
} else {
@@ -2287,10 +2376,10 @@ sub end_table {
if ($rowspan > 1) {
if ($colspan == 1) {
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output .= '\multicolumn{1}{|c|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'c'.$border_char.'}{';
$multirow_aligned = 1;
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
- $output .= '\multicolumn{1}{|r|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'r'.$border_char.'}{';
$multirow_aligned = 1;
}
}
@@ -2327,9 +2416,9 @@ sub end_table {
#
if ($colspan == 1 && $rowspan == 1) {
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output .= '\multicolumn{1}{|c|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'c'.$border_char.'}{';
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
- $output .= '\multicolumn{1}{|r|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'r'.$border_char.'}{';
}
}
@@ -2956,9 +3045,10 @@ sub start_img {
# And here's where the semi-quote breaks down: allow the user
# to edit the beast as well by rendering the problem for edit:
} elsif ($target eq 'edit') {
+ my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures'));
$currentstring .=&Apache::edit::tag_start($target,$token);
$currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
- &Apache::edit::browse('src',undef,'alt').' '.
+ &Apache::edit::browse('src',undef,'alt',$only).' '.
&Apache::edit::search('src',undef,'alt').' ';
$currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).' ';
$currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5);
@@ -2977,11 +3067,14 @@ sub start_img {
my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval);
my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
-
- $currentstring .= '[2]{'src'}=~/\$/) {
+ $currentstring.='Variable image source';
+ } else {
+ $currentstring .= '[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});
@@ -3064,6 +3157,29 @@ sub start_applet {
$currentstring='[APPLET: '.$alttag.']';
}
} elsif ($target eq 'tex') {
+ # Turn off some stuff we can't be inside thank you LaTeX
+
+
+ my $restart_sub = 0;
+ my $restart_sup = 0;
+
+ # Since and are simple tags it's ok to turn off/on
+ # using the start_ stop_ functions.. those tags only care about
+ # $target.
+
+ if (&is_inside_of($tagstack, "sub")) {
+ $restart_sub = 1;
+ $currentstring .= &end_sub($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+ if (&is_inside_of($tagstack, "sup")) {
+ $restart_sup = 1;
+ $currentstring .= &end_sup($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+
+ # Now process the applet; just replace it with its alt attribute.
+
my $alttag= &Apache::lonxml::get_param('alt',$parstack,
$safeeval,undef,1);
unless ($alttag) {
@@ -3074,6 +3190,17 @@ sub start_applet {
}
$currentstring.='\begin{center} \fbox{Java Applet: '.$alttag.
'.}\end{center}';
+
+ # Turn stuff back on that we can't be inside of.
+
+ if ($restart_sub) {
+ $currentstring .= &start_sub($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+ if ($restart_sup) {
+ $currentstring .= &start_sup($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
}
return $currentstring;
}
@@ -4427,6 +4554,12 @@ sub align_latex_image {
my ($align, $latex_rendering, $image, $width, $height) = @_;
my $currentstring; # The 1/2 wrapped image.
my $closure; # The closure of the wrappage.
+
+ # if it's none just return it back
+ if ($latex_rendering eq 'none') {
+ return ($image,'');
+ }
+
# If there's an alignment specification we need to honor it here.
# For the horizontal alignments, we will also honor the
# value of the latex specfication. The default is parbox,