version 1.359, 2007/03/13 13:38:43
|
version 1.369, 2007/06/22 00:11:32
|
Line 128 sub start_m {
|
Line 128 sub start_m {
|
#&Apache::lonxml::debug("M is ends with:$currentstring:"); |
#&Apache::lonxml::debug("M is ends with:$currentstring:"); |
$Apache::lonxml::post_evaluate=0; |
$Apache::lonxml::post_evaluate=0; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
$currentstring = $inside; |
$currentstring = $inside; |
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); |
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); |
if ($eval eq 'on') { |
if ($eval eq 'on') { |
Line 135 sub start_m {
|
Line 136 sub start_m {
|
} |
} |
if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';} |
if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';} |
# detect simple math mode entry exits, and convert them |
# detect simple math mode entry exits, and convert them |
# to use \ensuremath |
# to use \ensuremath ... unless there's a \verb inside. |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
if (! ($currentstring=~/\\verb/)) { |
$currentstring=~s/^(\s*)\$/$1/; |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
$currentstring=~s/\$(\s*)$/$1/; |
$currentstring=~s/^(\s*)\$/$1/; |
$currentstring='\ensuremath{'.$currentstring.'}'; |
$currentstring=~s/\$(\s*)$/$1/; |
|
$currentstring='\ensuremath{'.$currentstring.'}'; |
|
} |
} |
} |
$Apache::lonxml::post_evaluate=0; |
$Apache::lonxml::post_evaluate=0; |
} |
} |
Line 478 sub start_accessrule {
|
Line 481 sub start_accessrule {
|
('realm',$parstack,$safeeval,undef,1); |
('realm',$parstack,$safeeval,undef,1); |
my $role=&Apache::lonxml::get_param |
my $role=&Apache::lonxml::get_param |
('role',$parstack,$safeeval,undef,1); |
('role',$parstack,$safeeval,undef,1); |
$realm=~s/\s+//g; |
my ($dom,$crs,$sec)=split(/\_/,$realm); |
$realm=~s/\//\_/g; |
$dom = &LONCAPA::clean_domain($dom); |
$realm=~s/^\_//; |
my $type=&Apache::lonxml::get_param |
$realm=~s/\W/\;/g; |
('type',$parstack,$safeeval,undef,1); |
$role=~s/\s+//g; |
if ($type eq 'user') { |
$role=~s/\//\_/g; |
$crs = &LONCAPA::clean_username($crs); |
$role=~s/\W/\;/g; |
} else { |
|
$crs = &LONCAPA::clean_courseid($crs); |
|
} |
|
$sec =~s/\W//; |
|
$realm = $dom; |
|
if ($crs =~ /\S/) { $realm .= '_'.$crs; } |
|
if ($sec =~ /\S/) { $realm .= '_'.$sec; } |
|
$role=~s/\W//g; |
|
|
if ($target eq 'web') { |
if ($target eq 'web') { |
my $args=''; |
my $args=''; |
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } |
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } |
Line 495 sub start_accessrule {
|
Line 506 sub start_accessrule {
|
} |
} |
} |
} |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
$currentstring='<rule>'.$eff.':'.$realm.':'.$role.'</rule>'; |
$currentstring='<rule>'.$eff.':'.$realm.':'.$role.':'.$type.'</rule>'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 513 sub end_accessrule {
|
Line 524 sub end_accessrule {
|
return $currentstring; |
return $currentstring; |
} |
} |
|
|
|
sub generate_css_links { |
|
my $links; |
|
my $css_href = &Apache::lonnet::EXT('resource.0.cssfile'); |
|
if ($css_href =~ /\S/) { |
|
&Apache::lonxml::extlink($css_href); |
|
$links .= |
|
'<link rel="stylesheet" type="text/css" href="'.$css_href.'" />'; |
|
} |
|
return $links; |
|
} |
|
|
#-- <body> tag (end tag required) |
#-- <body> tag (end tag required) |
sub start_body { |
sub start_body { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
Line 527 sub start_body {
|
Line 549 sub start_body {
|
if (&is_inside_of($tagstack, "head")) { |
if (&is_inside_of($tagstack, "head")) { |
&end_head(@_); |
&end_head(@_); |
} |
} |
|
|
|
my $extra_head = &generate_css_links(); |
|
|
$currentstring = |
$currentstring = |
&Apache::loncommon::start_page($Apache::londefdef::title, |
&Apache::loncommon::start_page($Apache::londefdef::title, |
$Apache::londefdef::head, |
$Apache::londefdef::head |
|
.$extra_head, |
{'add_entries' => $token->[2], |
{'add_entries' => $token->[2], |
'no_title' => 1, |
'no_title' => 1, |
'force_register' => 1}); |
'force_register' => 1}); |
Line 1458 sub start_hr {
|
Line 1484 sub start_hr {
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
|
# <hr /> can't be inside of <sup><sub> thank you LaTeX. |
|
# |
|
my $restart_sub = 0; |
|
my $restart_sup = 0; |
|
|
|
# Since <sub> and <sup> 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); |
my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
if (defined $LaTeXwidth) { |
if (defined $LaTeXwidth) { |
if ($LaTeXwidth=~/^%/) { |
if ($LaTeXwidth=~/^%/) { |
Line 1478 sub start_hr {
|
Line 1525 sub start_hr {
|
} |
} |
$currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['. |
$currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['. |
$LaTeXwidth.'][b]{\hrulefill}'.$post.'}\vskip 0 mm '; |
$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; |
return $currentstring; |
} |
} |
Line 1575 sub end_a {
|
Line 1632 sub end_a {
|
&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); |
&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); |
if ($href =~ /\S/) { |
if ($href =~ /\S/) { |
$href =~ s/([^\\])%/$1\\\%/g; |
$href =~ s/([^\\])%/$1\\\%/g; |
$currentstring .= ' ({\tt URI:'.&Apache::lonxml::latex_special_symbols($href).'})'; |
# 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/) { |
$currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})'; |
$currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})'; |
} else { |
} else { |
Line 1951 sub start_table {
|
Line 2012 sub start_table {
|
} else { |
} else { |
$TeXwidth = $textwidth; |
$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=~/%/) { |
if ($TeXwidth=~/%/) { |
$Apache::londefdef::table[-1]{'percent'}=1; |
|
$TeXwidth=~/(\d+)/; |
$TeXwidth=~/(\d+)/; |
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100; |
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100; |
} else { |
} else { |
Line 1966 sub start_table {
|
Line 2027 sub start_table {
|
if ($Apache::londefdef::table[-1]{'width'} > $textwidth) { |
if ($Apache::londefdef::table[-1]{'width'} > $textwidth) { |
$Apache::londefdef::table[-1]{'width'} = $textwidth; |
$Apache::londefdef::table[-1]{'width'} = $textwidth; |
} |
} |
|
|
#table's border |
#table's border |
my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); |
my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
Line 2107 sub end_table {
|
Line 2167 sub end_table {
|
$space_neeeded=$space_neeeded+$max_len[$jn]; |
$space_neeeded=$space_neeeded+$max_len[$jn]; |
} |
} |
if ($space_neeeded<=$available_space) { |
if ($space_neeeded<=$available_space) { |
|
|
for (my $jn=0;$jn<=$#max_len;$jn++) { |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
if ($fwidth[$jn]==0) { |
if ($fwidth[$jn]==0) { |
$fwidth[$jn]=$max_len[$jn]; |
$fwidth[$jn]=$max_len[$jn]; |
Line 2190 sub end_table {
|
Line 2251 sub end_table {
|
} |
} |
} |
} |
} |
} |
#use all available width if it is defined in % or as TeXwidth |
# use all available width or specified width as if not specified, |
if (($Apache::londefdef::table[-1]{'percent'}==1) || ($Apache::londefdef::table[-1]{'forcetablewidth'}==1)) { |
# the specified width gets defaulted to the available width. |
my $current=0; |
|
for (my $i=0;$i<=$#fwidth;$i++) { |
my $current=0; |
$current+=$fwidth[$i]; |
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++) { |
my $coef=$Apache::londefdef::table[-1]{'width'}/$current; |
$fwidth[$i]*=$coef; |
for (my $i=0;$i<=$#fwidth;$i++) { |
} |
$fwidth[$i]*=$coef; |
} |
} |
#removing of empty columns if allowed |
#removing of empty columns if allowed |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
Line 2948 sub start_img {
|
Line 3009 sub start_img {
|
# And here's where the semi-quote breaks down: allow the user |
# And here's where the semi-quote breaks down: allow the user |
# to edit the beast as well by rendering the problem for edit: |
# to edit the beast as well by rendering the problem for edit: |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
|
my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures')); |
$currentstring .=&Apache::edit::tag_start($target,$token); |
$currentstring .=&Apache::edit::tag_start($target,$token); |
$currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70). |
$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').'<br />'; |
&Apache::edit::search('src',undef,'alt').'<br />'; |
$currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'<br />'; |
$currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'<br />'; |
$currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5); |
$currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5); |
Line 3056 sub start_applet {
|
Line 3118 sub start_applet {
|
$currentstring='[APPLET: '.$alttag.']'; |
$currentstring='[APPLET: '.$alttag.']'; |
} |
} |
} elsif ($target eq 'tex') { |
} 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 <sub> and <sup> 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, |
my $alttag= &Apache::lonxml::get_param('alt',$parstack, |
$safeeval,undef,1); |
$safeeval,undef,1); |
unless ($alttag) { |
unless ($alttag) { |
Line 3066 sub start_applet {
|
Line 3151 sub start_applet {
|
} |
} |
$currentstring.='\begin{center} \fbox{Java Applet: '.$alttag. |
$currentstring.='\begin{center} \fbox{Java Applet: '.$alttag. |
'.}\end{center}'; |
'.}\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; |
return $currentstring; |
} |
} |