version 1.444, 2013/06/04 22:20:20
|
version 1.475, 2024/04/14 17:12:28
|
Line 1
|
Line 1
|
# The LearningOnline Network with CAPA |
# The LearningOnline Network with CAPA |
# Tags Default Definition Module |
# Tags Default Definition Module |
# |
# |
# $Id$ |
# $Id$ |
# |
# |
# |
# |
# Copyright Michigan State University Board of Trustees |
# Copyright Michigan State University Board of Trustees |
# |
# |
Line 25
|
Line 25
|
# /home/httpd/html/adm/gpl.txt |
# /home/httpd/html/adm/gpl.txt |
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
## Copyright for TtHfunc and TtMfunc by Ian Hutchinson. |
## Copyright for TtHfunc and TtMfunc by Ian Hutchinson. |
# TtHfunc and TtMfunc (the "Code") may be compiled and linked into |
# TtHfunc and TtMfunc (the "Code") may be compiled and linked into |
# binary executable programs or libraries distributed by the |
# binary executable programs or libraries distributed by the |
# Michigan State University (the "Licensee"), but any binaries so |
# Michigan State University (the "Licensee"), but any binaries so |
# distributed are hereby licensed only for use in the context |
# distributed are hereby licensed only for use in the context |
# of a program or computational system for which the Licensee is the |
# of a program or computational system for which the Licensee is the |
# primary author or distributor, and which performs substantial |
# primary author or distributor, and which performs substantial |
# additional tasks beyond the translation of (La)TeX into HTML. |
# additional tasks beyond the translation of (La)TeX into HTML. |
# The C source of the Code may not be distributed by the Licensee |
# The C source of the Code may not be distributed by the Licensee |
# to any other parties under any circumstances. |
# to any other parties under any circumstances. |
# |
# |
|
|
package Apache::londefdef; |
package Apache::londefdef; |
|
|
use Apache::lonnet; |
use Apache::lonnet; |
use strict; |
use strict; |
Line 50 use Apache::lonlocal;
|
Line 50 use Apache::lonlocal;
|
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use File::Basename; |
use File::Basename; |
use LONCAPA(); |
use LONCAPA; |
# use Data::Dumper; |
# use Data::Dumper; |
|
|
BEGIN { |
BEGIN { |
Line 92 sub start_m {
|
Line 92 sub start_m {
|
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); |
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); |
if ($target eq 'web' || $target eq 'analyze') { |
if ($target eq 'web' || $target eq 'analyze') { |
&Apache::lonxml::debug("M is starting with:$inside:"); |
&Apache::lonxml::debug("M is starting with:$inside:"); |
|
if (!($inside =~ /^\s*\$.*\$\s*$/ || $inside =~ /^\s*\\[([].*\\[)\]]\s*$/)) { |
|
# Non-math LaTeX will not be rendered correctly with MathJax |
|
# and it should be avoided anyway. |
|
# On top of that, MathJax will render math without $, but |
|
# it will fail with tth. This is worth a warning. |
|
# (even though some people might just use latex for printing) |
|
&Apache::lonxml::warning(&mt('Missing $ in [_1].','<m>')); |
|
} elsif (($env{'browser.type'} eq 'safari') && ($env{'form.editxmltext'}) && |
|
(($env{'form.problemmode'} eq 'view') || ($env{'form.problemmode'} eq 'discard'))) { |
|
my $delimiter; |
|
if ($inside =~ /\$$/) { |
|
$delimiter = '$'; |
|
} elsif ($inside =~ /\\([)\]])$/) { |
|
$delimiter = $1; |
|
} |
|
if ($delimiter) { |
|
&Apache::lonxml::warning(&mt('Insert a space between [_1] and [_2].', |
|
$delimiter,'</m>')); |
|
} |
|
} |
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') { |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
Line 174 sub start_html {
|
Line 194 sub start_html {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'edit' || $target eq 'webgrade' ) { |
if ($target eq 'web' || $target eq 'edit' || $target eq 'webgrade' ) { |
# start_body() takes care of emitting the <html> |
# start_body() takes care of emitting the <html> |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
$currentstring .= &latex_header(); |
$currentstring .= &latex_header(); |
Line 197 sub start_head {
|
Line 217 sub start_head {
|
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 210 sub end_head {
|
Line 230 sub end_head {
|
if ($Apache::lonxml::redirection) { |
if ($Apache::lonxml::redirection) { |
$Apache::londefdef::head = &Apache::lonxml::endredirection(); |
$Apache::londefdef::head = &Apache::lonxml::endredirection(); |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 219 sub start_map {
|
Line 239 sub start_map {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 228 sub end_map {
|
Line 248 sub end_map {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 238 sub start_select {
|
Line 258 sub start_select {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$Apache::londefdef::select=0; |
$Apache::londefdef::select=0; |
} |
} |
Line 249 sub end_select {
|
Line 269 sub end_select {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 259 sub start_option {
|
Line 279 sub start_option {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$Apache::londefdef::select++; |
$Apache::londefdef::select++; |
if ($Apache::londefdef::select == 1) { |
if ($Apache::londefdef::select == 1) { |
Line 275 sub end_option {
|
Line 295 sub end_option {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring='}'; |
$currentstring='}'; |
} |
} |
Line 287 sub start_input {
|
Line 307 sub start_input {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 296 sub end_input {
|
Line 316 sub end_input {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 306 sub start_textarea {
|
Line 326 sub start_textarea {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 315 sub end_textarea {
|
Line 335 sub end_textarea {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 325 sub start_form {
|
Line 345 sub start_form {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 334 sub end_form {
|
Line 354 sub end_form {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 344 sub start_title {
|
Line 364 sub start_title {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$Apache::londefdef::title = |
$Apache::londefdef::title = |
&Apache::lonxml::get_all_text('/title',$parser,$style); |
&Apache::lonxml::get_all_text('/title',$parser,$style); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\keephidden{Title of the document: ' |
$currentstring .= '\keephidden{Title of the document: '; |
} |
} |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
$currentstring='<title>'; |
$currentstring='<title>'; |
Line 363 sub end_title {
|
Line 383 sub end_title {
|
# start_title takes care of swallowing the title |
# start_title takes care of swallowing the title |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '}'; |
$currentstring .= '}'; |
} |
} |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
&end_output($target); |
&end_output($target); |
$currentstring='</title>'; |
$currentstring='</title>'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 535 sub end_accessrule {
|
Line 555 sub end_accessrule {
|
if ($args ne '') { |
if ($args ne '') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 544 sub generate_css_links {
|
Line 564 sub generate_css_links {
|
my $css_href = &Apache::lonnet::EXT('resource.0.cssfile'); |
my $css_href = &Apache::lonnet::EXT('resource.0.cssfile'); |
if ($css_href =~ /\S/) { |
if ($css_href =~ /\S/) { |
&Apache::lonxml::extlink($css_href); |
&Apache::lonxml::extlink($css_href); |
$links .= |
$links .= |
'<link rel="stylesheet" type="text/css" href="'.$css_href.'" />'; |
'<link rel="stylesheet" type="text/css" href="'.$css_href.'" />'; |
} |
} |
return $links; |
return $links; |
Line 571 sub start_body {
|
Line 591 sub start_body {
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'}); |
my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'}); |
|
my $text = 'Authoring Space'; |
|
my $href = &Apache::loncommon::authorspace($url); |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($href eq "/priv/$cdom/$cnum/") { |
|
$text = 'Course Authoring Space'; |
|
} |
|
} |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'text' => 'Authoring Space', |
'text' => $text, |
'href' => &Apache::loncommon::authorspace($url), |
'href' => $href, |
}); |
}); |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'text' => 'HTML Editor', |
'text' => 'HTML Editor', |
'href' => '', |
'href' => '', |
}); |
}); |
# breadcrumbs (and tools) will be created |
# breadcrumbs (and tools) will be created |
# in start_page->bodytag->innerregister |
# in start_page->bodytag->innerregister |
} else { |
} else { |
# FIXME Where are we? |
# FIXME Where are we? |
} |
} |
|
|
$currentstring = |
my $args = {'add_entries' => $token->[2], |
|
'force_register' => 1,}; |
|
if ($target eq 'web') { |
|
$args->{'print_suppress'} = 1; |
|
if ($env{'request.use_absolute'}) { |
|
$args->{'use_absolute'} = $env{'request.use_absolute'}; |
|
} |
|
if ($env{'form.only_body'}) { |
|
$args->{'only_body'} = 1; |
|
} |
|
} |
|
$currentstring = |
&Apache::loncommon::start_page($Apache::londefdef::title, |
&Apache::loncommon::start_page($Apache::londefdef::title, |
$Apache::londefdef::head |
$Apache::londefdef::head |
.$extra_head, |
.$extra_head,$args); |
{'add_entries' => $token->[2], |
|
# 'no_title' => 1, |
|
'force_register' => 1}); |
|
|
|
my $header = ''; |
my $header = ''; |
if ($env{'request.state'} ne 'published' && |
if ($env{'request.state'} ne 'published' && |
$env{'request.state'} ne 'construct') { |
$env{'request.state'} ne 'construct') { |
$header=&Apache::lonmenu::constspaceform(); |
$header=&Apache::lonmenu::constspaceform(); |
} |
} |
if ($env{'request.state'} ne 'published') { |
if ($env{'request.state'} ne 'published') { |
$header.=&edit_controls(); |
unless ($env{'form.inhibitmenu'} eq 'yes') { |
|
$header.=&edit_controls(); |
|
} |
} |
} |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$currentstring.=&Apache::loncommon::head_subbox( |
unless ($env{'form.inhibitmenu'} eq 'yes') { |
&Apache::loncommon::CSTR_pageheader() |
$currentstring.=&Apache::loncommon::head_subbox( |
.$header); |
&Apache::loncommon::CSTR_pageheader() |
|
.$header); |
|
} |
} elsif ($env{'request.state'} eq 'edit') { |
} elsif ($env{'request.state'} eq 'edit') { |
$currentstring.=&Apache::loncommon::head_subbox($header); |
$currentstring.=&Apache::loncommon::head_subbox($header); |
} |
} |
Line 618 sub start_body {
|
Line 658 sub start_body {
|
|
|
sub edit_controls { |
sub edit_controls { |
my ($nochgview) = @_; |
my ($nochgview) = @_; |
my $result .= ' |
my ($is_course_doc,$is_supp,$supp_path,$supp_title); |
|
my $result = ' |
<form method="post" action=""> |
<form method="post" action=""> |
<div class="LC_edit_problem_header">'; |
<div class="LC_edit_problem_header">'."\n"; |
unless ($nochgview) { |
unless ($nochgview) { |
$result .= ' |
$result .= ' |
<div class="LC_edit_problem_header_row1">'. |
<div class="LC_edit_problem_header_row1">'. |
Line 629 sub edit_controls {
|
Line 670 sub edit_controls {
|
</div>'; |
</div>'; |
} |
} |
$result .= ' |
$result .= ' |
<div><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" />'; |
<div> |
|
<input type="hidden" name="editmode" value="" /> |
|
<input type="button" name="editordefault" accesskey="e" value="'.&mt('Edit'). |
|
'" onclick="seteditmode(this.form,'."'edit'".');" />'."\n"; |
|
if ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9) { |
|
my $uri = $env{'request.uri'}; |
|
if ($uri =~ /\.(xml|html|htm|xhtml|xhtm)$/) { |
|
my %editors = &Apache::loncommon::permitted_editors($uri); |
|
if ($editors{'daxe'}) { |
|
my $daxeurl = '/daxepage'.$uri; |
|
$result .= '<input type="button" name="editordaxe" value="'.&mt('Edit with Daxe'). |
|
'" onclick="seteditmode(this.form,'."'daxe'".');" />'."\n"; |
|
} |
|
} |
|
} |
if (($env{'request.course.id'}) && ($env{'form.forceedit'})) { |
if (($env{'request.course.id'}) && ($env{'form.forceedit'})) { |
my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'}); |
my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'}); |
if ($url =~ /\.html?$/i) { |
if ($url =~ /\.html?$/i) { |
Line 637 sub edit_controls {
|
Line 692 sub edit_controls {
|
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($url =~ m{^\Q/uploaded/$cdom/$cnum/\E(supplemental|docs)/}) { |
|
if ($1 eq 'supplemental') { |
|
$is_supp = 1; |
|
} |
|
$is_course_doc = 1; |
|
} |
if ($env{'request.filename'} =~ m{/userfiles/supplemental/default|\d+/}) { |
if ($env{'request.filename'} =~ m{/userfiles/supplemental/default|\d+/}) { |
if (&Apache::lonnet::is_course_upload($env{'request.filename'}, |
my $fn=&Apache::lonnet::declutter($env{'request.filename'}); |
$cnum,$cdom)) { |
if (&Apache::lonnet::is_course_upload($fn,$cnum,$cdom)) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['folderpath','title']); |
['folderpath','title']); |
|
$supp_path = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.folderpath'})); |
|
$supp_title = &escape(&HTML::Entities::decode($Apache::lonnet::env{'form.title'})); |
} |
} |
} |
} |
} |
} |
Line 669 sub edit_controls {
|
Line 732 sub edit_controls {
|
</div> |
</div> |
</form> |
</form> |
'; |
'; |
return $result; |
my $setedit_js = &Apache::lonxml::seteditor_javascript($is_course_doc,$is_supp, |
|
$supp_path,$supp_title); |
|
return $setedit_js."\n".$result; |
} |
} |
|
|
sub end_body { |
sub end_body { |
Line 678 sub end_body {
|
Line 743 sub end_body {
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= &Apache::loncommon::end_page({'discussion' => 1}); |
$currentstring .= &Apache::loncommon::end_page({'discussion' => 1}); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}'; |
$currentstring .= '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
# \begin{center} causes a new paragprah spacing that looks odd inside |
# \begin{center} causes a new paragprah spacing that looks odd inside |
# of a table cell. Same at the end of a \center but with a slightly |
# of a table cell. Same at the end of a \center but with a slightly |
# larger space .. hence center_correction and center_end_correction. |
# larger space .. hence center_correction and center_end_correction. |
# |
# |
sub center_correction { return '\vspace*{-6 mm}'; } |
sub center_correction { return '\vspace*{-6 mm}'; } |
sub center_end_correction { return '\vspace*{-7 mm}'; } |
sub center_end_correction { return '\vspace*{-7 mm}'; } |
|
|
#-- <center> tag (end tag required) |
#-- <center> tag (end tag required) |
Line 695 sub start_center {
|
Line 760 sub start_center {
|
my ($target,$token,$tagstack) = @_; |
my ($target,$token,$tagstack) = @_; |
my $currentstring = &end_p(); # Close off any prior para. |
my $currentstring = &end_p(); # Close off any prior para. |
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') { |
if (&is_inside_of($tagstack, "table")) { |
if (&is_inside_of($tagstack, "table")) { |
$currentstring .= ¢er_correction(); |
$currentstring .= ¢er_correction(); |
} |
} |
$currentstring .= '\begin{center}'; |
$currentstring .= '\begin{center}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 709 sub end_center {
|
Line 774 sub end_center {
|
my ($target,$token,$tagstack) = @_; |
my ($target,$token,$tagstack) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = '\end{center}'; |
$currentstring = '\end{center}'; |
if (&is_inside_of($tagstack, "table")) { |
if (&is_inside_of($tagstack, "table")) { |
$currentstring .= ¢er_end_correction(); |
$currentstring .= ¢er_end_correction(); |
} |
} |
Line 725 sub start_b {
|
Line 790 sub start_b {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
&disable_para(); |
&disable_para(); |
$currentstring .= '\textbf{'; |
$currentstring .= '\textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 737 sub end_b {
|
Line 802 sub end_b {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&enable_para(); |
&enable_para(); |
$currentstring = '}'; |
$currentstring = '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 751 sub start_strong {
|
Line 816 sub start_strong {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
&disable_para(); |
&disable_para(); |
$currentstring = '\textbf{'; |
$currentstring = '\textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 763 sub end_strong {
|
Line 828 sub end_strong {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&enable_para(); |
&enable_para(); |
$currentstring = '}'; |
$currentstring = '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 789 sub start_h1 {
|
Line 854 sub start_h1 {
|
} |
} |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
if (not defined $TeXsize) {$TeXsize="large";} |
if (not defined $TeXsize) {$TeXsize="large";} |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
$currentstring.='<subject>'; |
$currentstring.='<subject>'; |
&start_output($target); |
&start_output($target); |
Line 804 sub end_h1 {
|
Line 869 sub end_h1 {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $post='\vskip 0 mm '; |
my $post='\vskip 0 mm '; |
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
my $align=lc(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1)); |
if ($align eq 'center') { |
if ($align eq 'center') { |
$post='\end{center}'; |
$post='\end{center}'; |
} elsif ($align eq 'left') { |
} elsif ($align eq 'left') { |
Line 816 sub end_h1 {
|
Line 881 sub end_h1 {
|
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
&end_output($target); |
&end_output($target); |
$currentstring='</subject>'; |
$currentstring='</subject>'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 838 sub start_h2 {
|
Line 903 sub start_h2 {
|
} |
} |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
if (not defined $TeXsize) {$TeXsize="large";} |
if (not defined $TeXsize) {$TeXsize="large";} |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 859 sub end_h2 {
|
Line 924 sub end_h2 {
|
$post='}'.'\vskip 0 mm '; |
$post='}'.'\vskip 0 mm '; |
} |
} |
$currentstring .= '}}'.$post; |
$currentstring .= '}}'.$post; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 881 sub start_h3 {
|
Line 946 sub start_h3 {
|
} |
} |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
if (not defined $TeXsize) {$TeXsize="large";} |
if (not defined $TeXsize) {$TeXsize="large";} |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 902 sub end_h3 {
|
Line 967 sub end_h3 {
|
$post='}'.'\vskip 0 mm '; |
$post='}'.'\vskip 0 mm '; |
} |
} |
$currentstring .= '}}'.$post; |
$currentstring .= '}}'.$post; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 924 sub start_h4 {
|
Line 989 sub start_h4 {
|
} |
} |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
if (not defined $TeXsize) {$TeXsize="large";} |
if (not defined $TeXsize) {$TeXsize="large";} |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 945 sub end_h4 {
|
Line 1010 sub end_h4 {
|
$post='}'.'\vskip 0 mm '; |
$post='}'.'\vskip 0 mm '; |
} |
} |
$currentstring .= '}}'.$post; |
$currentstring .= '}}'.$post; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 967 sub start_h5 {
|
Line 1032 sub start_h5 {
|
} |
} |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
if (not defined $TeXsize) {$TeXsize="large";} |
if (not defined $TeXsize) {$TeXsize="large";} |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 988 sub end_h5 {
|
Line 1053 sub end_h5 {
|
$post='}'.'\vskip 0 mm '; |
$post='}'.'\vskip 0 mm '; |
} |
} |
$currentstring .= '}}'.$post; |
$currentstring .= '}}'.$post; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1010 sub start_h6 {
|
Line 1075 sub start_h6 {
|
} |
} |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); |
if (not defined $TeXsize) {$TeXsize="large";} |
if (not defined $TeXsize) {$TeXsize="large";} |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
$currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1031 sub end_h6 {
|
Line 1096 sub end_h6 {
|
$post='}'.'\vskip 0 mm '; |
$post='}'.'\vskip 0 mm '; |
} |
} |
$currentstring .= '}}'.$post; |
$currentstring .= '}}'.$post; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1077 sub end_i {
|
Line 1142 sub end_i {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '}'; |
$currentstring .= '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1112 sub start_dfn {
|
Line 1177 sub start_dfn {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\textit{'; |
$currentstring .= '\textit{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1181 sub start_code {
|
Line 1246 sub start_code {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\texttt{'; |
$currentstring .= '\texttt{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1192 sub end_code {
|
Line 1257 sub end_code {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '}'; |
$currentstring .= '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1215 sub end_em {
|
Line 1280 sub end_em {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '}'; |
$currentstring .= '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1238 sub end_q {
|
Line 1303 sub end_q {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '}'; |
$currentstring .= '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1254 sub end_q {
|
Line 1319 sub end_q {
|
my $closing_string = ''; # String required to close <p> |
my $closing_string = ''; # String required to close <p> |
|
|
# Some tags are <p> fragile meaning that <p> inside of them |
# Some tags are <p> fragile meaning that <p> inside of them |
# does not work within TeX mode. This is managed via the |
# does not work within TeX mode. This is managed via the |
# counter below: |
# counter below: |
# |
# |
|
|
Line 1283 sub start_p {
|
Line 1348 sub start_p {
|
|
|
$currentstring .= &end_p(); # close off prior para if in progress. |
$currentstring .= &end_p(); # close off prior para if in progress. |
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
|
if (!defined $align) { |
|
# check inline CSS |
|
$align = &get_css_property('text-align',$parstack,$safeeval); |
|
} |
if ($align eq 'center') { |
if ($align eq 'center') { |
$currentstring .='\begin{center}\par '; |
$currentstring .='\begin{center}\par '; |
$closing_string = '\end{center}'; |
$closing_string = '\end{center}'; |
Line 1290 sub start_p {
|
Line 1359 sub start_p {
|
$currentstring = ¢er_correction().$currentstring; |
$currentstring = ¢er_correction().$currentstring; |
} |
} |
} elsif ($align eq 'right') { |
} elsif ($align eq 'right') { |
$currentstring.="\n".'{\flushright '; |
$currentstring.="\n".'\begin{flushright}'; |
# $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{'; |
# $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{'; |
$closing_string= "}\n"; |
$closing_string= '\end{flushright}'."\n"; |
} elsif ($align eq 'left') { |
} elsif ($align eq 'left') { |
$currentstring.= "\n".'{\flushleft '; |
$currentstring.= "\n".'\begin{flushleft}'; |
# $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{'; |
# $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{'; |
$closing_string = "}\n"; |
$closing_string = '\end{flushleft}'."\n"; |
} else { |
} else { |
$currentstring.='\par '; |
$currentstring.='\par '; |
if (&is_inside_of($tagstack, 'table')) { |
if (&is_inside_of($tagstack, 'table')) { |
Line 1350 sub start_br {
|
Line 1419 sub start_br {
|
if ($signal != 1) { |
if ($signal != 1) { |
$currentstring .= '\strut \\\\ \strut '; |
$currentstring .= '\strut \\\\ \strut '; |
} |
} |
|
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 1372 sub start_big {
|
Line 1441 sub start_big {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '{\large '; |
$currentstring .= '{\large '; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1415 sub start_basefont {
|
Line 1484 sub start_basefont {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
if (defined $basesize) { |
if (defined $basesize) { |
Line 1429 sub end_basefont {
|
Line 1498 sub end_basefont {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
if (defined $basesize) { |
if (defined $basesize) { |
Line 1445 sub start_font {
|
Line 1514 sub start_font {
|
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval); |
my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval); |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
if (defined $fontsize) { |
if (defined $fontsize) { |
Line 1459 sub end_font {
|
Line 1528 sub end_font {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); |
if (defined $fontsize) { |
if (defined $fontsize) { |
Line 1468 sub end_font {
|
Line 1537 sub end_font {
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
#-- <strike> tag (end tag required) |
#-- <strike> tag (end tag required) |
sub start_strike { |
sub start_strike { |
my ($target,$token) = @_; |
my ($target,$token) = @_; |
Line 1477 sub start_strike {
|
Line 1546 sub start_strike {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1488 sub end_strike {
|
Line 1557 sub end_strike {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring=&Apache::lonxml::endredirection(); |
$currentstring=&Apache::lonxml::endredirection(); |
$currentstring=~s/(\S)(\s+)(\S)/$1\}$2\\underline\{$3/g; |
$currentstring=~s/(\S)(\s+)(\S)/$1\}$2\\underline\{$3/g; |
$currentstring=~s/^\s*(\S)/\\underline\{$1/; |
$currentstring=~s/^\s*(\S)/\\underline\{$1/; |
$currentstring=~s/(\S)\s*$/$1\}/; |
$currentstring=~s/(\S)\s*$/$1\}/; |
} |
} |
return $currentstring; |
return $currentstring; |
Line 1503 sub start_s {
|
Line 1572 sub start_s {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1529 sub start_sub {
|
Line 1598 sub start_sub {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\raisebox{-\smallskipamount}{\scriptsize{'; |
$currentstring .= '\raisebox{-\smallskipamount}{\scriptsize{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1552 sub start_sup {
|
Line 1621 sub start_sup {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\raisebox{\smallskipamount}{\scriptsize{'; |
$currentstring .= '\raisebox{\smallskipamount}{\scriptsize{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1576 sub start_hr {
|
Line 1645 sub start_hr {
|
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
# <hr /> can't be inside of <sup><sub> thank you LaTeX. |
# <hr /> can't be inside of <sup><sub> thank you LaTeX. |
# |
# |
my $restart_sub = 0; |
my $restart_sub = 0; |
my $restart_sup = 0; |
my $restart_sup = 0; |
|
|
Line 1586 sub start_hr {
|
Line 1655 sub start_hr {
|
|
|
if (&is_inside_of($tagstack, "sub")) { |
if (&is_inside_of($tagstack, "sub")) { |
$restart_sub = 1; |
$restart_sub = 1; |
$currentstring .= &end_sub($target, $token, $tagstack, |
$currentstring .= &end_sub($target, $token, $tagstack, |
$parstack, $parser, $safeeval); |
$parstack, $parser, $safeeval); |
} |
} |
if (&is_inside_of($tagstack, "sup")) { |
if (&is_inside_of($tagstack, "sup")) { |
Line 1625 sub start_hr {
|
Line 1694 sub start_hr {
|
$currentstring .= &start_sup($target, $token, $tagstack, |
$currentstring .= &start_sup($target, $token, $tagstack, |
$parstack, $parser, $safeeval); |
$parstack, $parser, $safeeval); |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1652 sub start_div {
|
Line 1721 sub start_div {
|
my $currentstring = &end_p(); # Close enclosing para. |
my $currentstring = &end_p(); # Close enclosing para. |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# 4 possible alignments: left, right, center, and -missing-. |
# 4 possible alignments: left, right, center, and -missing-. |
# If inside a table row, we must let the table logic |
# If inside a table row, we must let the table logic |
# do the alignment, however. |
# do the alignment, however. |
# |
# |
|
|
my $endstring = ''; |
my $endstring = ''; |
|
|
Line 1668 sub start_div {
|
Line 1737 sub start_div {
|
$endstring = '\end{center}'; |
$endstring = '\end{center}'; |
if (&is_inside_of($tagstack, "table")) { |
if (&is_inside_of($tagstack, "table")) { |
$currentstring = ¢er_correction().$currentstring; |
$currentstring = ¢er_correction().$currentstring; |
$endstring .= ¢er_end_correction(); |
$endstring .= ¢er_end_correction(); |
} |
} |
} |
} |
elsif ($align eq 'right') { |
elsif ($align eq 'right') { |
Line 1724 sub start_a {
|
Line 1793 sub start_a {
|
if (!&Apache::lonnet::allowed('bre',$linkurl)) { |
if (!&Apache::lonnet::allowed('bre',$linkurl)) { |
if (&Apache::lonnet::is_on_map($url)) { |
if (&Apache::lonnet::is_on_map($url)) { |
&Apache::lonxml::extlink($linkurl); |
&Apache::lonxml::extlink($linkurl); |
|
} elsif ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($linkurl =~ m{^([^/]|/uploaded/$cdom/$cnum/(docs|supplemental)/)}) { |
|
my $cleanhref = &clean_docs_httpref($linkurl,$url,$cdom,$cnum); |
|
if ($cleanhref) { |
|
&Apache::lonxml::extlink($cleanhref); |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 1769 sub start_li {
|
Line 1847 sub start_li {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); |
my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); |
my $value=&Apache::lonxml::get_param('value',$parstack,$safeeval,undef,0); |
my $value=&Apache::lonxml::get_param('value',$parstack,$safeeval,undef,0); |
#FIXME need to support types i and I |
#FIXME need to support types i and I |
if ($type=~/disc/) { |
if ($type=~/disc/) { |
$currentstring .= ' \item[$\bullet$] '; |
$currentstring .= ' \item[$\bullet$] '; |
} elsif ($type=~/circle/) { |
} elsif ($type=~/circle/) { |
Line 1790 sub start_li {
|
Line 1868 sub start_li {
|
$currentstring .= ' \item['.$value.'] '; |
$currentstring .= ' \item['.$value.'] '; |
} else { |
} else { |
$currentstring .= ' \item '; |
$currentstring .= ' \item '; |
} |
} |
$Apache::londefdef::list_index++; |
$Apache::londefdef::list_index++; |
} |
} |
return $currentstring; |
return $currentstring; |
Line 1800 sub end_li {
|
Line 1878 sub end_li {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = &end_p(); # In case there's a <p> in the <li> |
my $currentstring = &end_p(); # In case there's a <p> in the <li> |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1813 sub start_u {
|
Line 1891 sub start_u {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1836 sub start_ul {
|
Line 1914 sub start_ul {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = &end_p(); # Close off enclosing list. |
my $currentstring = &end_p(); # Close off enclosing list. |
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') { |
my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); |
my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); |
$Apache::londefdef::list_index=0; |
$Apache::londefdef::list_index=0; |
if ($TeXtype eq 'disc') { |
if ($TeXtype eq 'disc') { |
$currentstring .= '\renewcommand{\labelitemi}{$\bullet$}'. |
$currentstring .= '\renewcommand{\labelitemi}{$\bullet$}'. |
'\renewcommand{\labelitemii}{$\bullet$}'. |
'\renewcommand{\labelitemii}{$\bullet$}'. |
'\renewcommand{\labelitemiii}{$\bullet$}'. |
'\renewcommand{\labelitemiii}{$\bullet$}'. |
'\renewcommand{\labelitemiv}{$\bullet$}'; |
'\renewcommand{\labelitemiv}{$\bullet$}'; |
} elsif ($TeXtype eq 'circle') { |
} elsif ($TeXtype eq 'circle') { |
$currentstring .= '\renewcommand{\labelitemi}{$\circ$}'. |
$currentstring .= '\renewcommand{\labelitemi}{$\circ$}'. |
'\renewcommand{\labelitemii}{$\circ$}'. |
'\renewcommand{\labelitemii}{$\circ$}'. |
'\renewcommand{\labelitemiii}{$\circ$}'. |
'\renewcommand{\labelitemiii}{$\circ$}'. |
'\renewcommand{\labelitemiv}{$\circ$}'; |
'\renewcommand{\labelitemiv}{$\circ$}'; |
} elsif ($TeXtype eq 'square') { |
} elsif ($TeXtype eq 'square') { |
$currentstring .= '\renewcommand{\labelitemi}{$\diamond$}'. |
$currentstring .= '\renewcommand{\labelitemi}{$\diamond$}'. |
'\renewcommand{\labelitemii}{$\diamond$}'. |
'\renewcommand{\labelitemii}{$\diamond$}'. |
'\renewcommand{\labelitemiii}{$\diamond$}'. |
'\renewcommand{\labelitemiii}{$\diamond$}'. |
'\renewcommand{\labelitemiv}{$\diamond$}'; |
'\renewcommand{\labelitemiv}{$\diamond$}'; |
} |
} |
$currentstring .= '\strut \begin{itemize}'; |
$currentstring .= '\strut \begin{itemize}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1865 sub end_ul {
|
Line 1943 sub end_ul {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = '\end{itemize} \renewcommand{\labelitemi}{$\bullet$}'. |
$currentstring = '\end{itemize} \renewcommand{\labelitemi}{$\bullet$}'. |
'\renewcommand{\labelitemii}{$\bullet$}'. |
'\renewcommand{\labelitemii}{$\bullet$}'. |
'\renewcommand{\labelitemiii}{$\bullet$}'. |
'\renewcommand{\labelitemiii}{$\bullet$}'. |
'\renewcommand{\labelitemiv}{$\bullet$}\strut '; |
'\renewcommand{\labelitemiv}{$\bullet$}\strut '; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1880 sub start_menu {
|
Line 1958 sub start_menu {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$currentstring = " \\begin{itemize} "; |
$currentstring = " \\begin{itemize} "; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1891 sub end_menu {
|
Line 1969 sub end_menu {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = " \\end{itemize}"; |
$currentstring = " \\end{itemize}"; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1903 sub start_dir {
|
Line 1981 sub start_dir {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = &end_p(); # In case there's a <p> prior to the list. |
my $currentstring = &end_p(); # In case there's a <p> prior to the list. |
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') { |
$currentstring .= " \\begin{itemize} "; |
$currentstring .= " \\begin{itemize} "; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1914 sub end_dir {
|
Line 1992 sub end_dir {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = " \\end{itemize}"; |
$currentstring = " \\end{itemize}"; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1926 sub start_ol {
|
Line 2004 sub start_ol {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = &end_p(); # In case there's a <p> prior to the list. |
my $currentstring = &end_p(); # In case there's a <p> prior to the list. |
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') { |
$Apache::londefdef::list_index=0; |
$Apache::londefdef::list_index=0; |
my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); |
my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); |
if ($type eq '1') { |
if ($type eq '1') { |
$currentstring .= '\renewcommand{\labelenumi}{\arabic{enumi}.}'. |
$currentstring .= '\renewcommand{\labelenumi}{\arabic{enumi}.}'. |
'\renewcommand{\labelenumii}{\arabic{enumii}.}'. |
'\renewcommand{\labelenumii}{\arabic{enumii}.}'. |
'\renewcommand{\labelenumiii}{\arabic{enumiii}.}'. |
'\renewcommand{\labelenumiii}{\arabic{enumiii}.}'. |
'\renewcommand{\labelenumiv}{\arabic{enumiv}.}'; |
'\renewcommand{\labelenumiv}{\arabic{enumiv}.}'; |
} elsif ($type eq 'A') { |
} elsif ($type eq 'A') { |
$currentstring .= '\renewcommand{\labelenumi}{\Alph{enumi}.}'. |
$currentstring .= '\renewcommand{\labelenumi}{\Alph{enumi}.}'. |
'\renewcommand{\labelenumii}{\Alph{enumii}.}'. |
'\renewcommand{\labelenumii}{\Alph{enumii}.}'. |
'\renewcommand{\labelenumiii}{\Alph{enumiii}.}'. |
'\renewcommand{\labelenumiii}{\Alph{enumiii}.}'. |
'\renewcommand{\labelenumiv}{\Alph{enumiv}.}'; |
'\renewcommand{\labelenumiv}{\Alph{enumiv}.}'; |
} elsif ($type eq 'a') { |
} elsif ($type eq 'a') { |
Line 1956 sub start_ol {
|
Line 2034 sub start_ol {
|
'\renewcommand{\labelenumiii}{\Roman{enumiii}.}'. |
'\renewcommand{\labelenumiii}{\Roman{enumiii}.}'. |
'\renewcommand{\labelenumiv}{\Roman{enumiv}.}'; |
'\renewcommand{\labelenumiv}{\Roman{enumiv}.}'; |
} |
} |
$currentstring .= '\strut \begin{enumerate}'; |
$currentstring .= '\strut \begin{enumerate}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1965 sub end_ol {
|
Line 2043 sub end_ol {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = '\end{enumerate}\renewcommand{\labelenumi}{\arabic{enumi}.}'. |
$currentstring = '\end{enumerate}\renewcommand{\labelenumi}{\arabic{enumi}.}'. |
'\renewcommand{\labelenumii}{\arabic{enumii}.}'. |
'\renewcommand{\labelenumii}{\arabic{enumii}.}'. |
'\renewcommand{\labelenumiii}{\arabic{enumiii}.}'. |
'\renewcommand{\labelenumiii}{\arabic{enumiii}.}'. |
'\renewcommand{\labelenumiv}{\arabic{enumiv}.}\strut '; |
'\renewcommand{\labelenumiv}{\arabic{enumiv}.}\strut '; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1980 sub start_dl {
|
Line 2058 sub start_dl {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = &end_p(); # In case there's a <p> unclosed prior to the list. |
my $currentstring = &end_p(); # In case there's a <p> unclosed prior to the list. |
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') { |
$currentstring .= '\begin{description}'; |
$currentstring .= '\begin{description}'; |
$Apache::londefdef::DL++; |
$Apache::londefdef::DL++; |
Line 1988 sub start_dl {
|
Line 2066 sub start_dl {
|
$Apache::londefdef::DD[$Apache::londefdef::DL]=0; |
$Apache::londefdef::DD[$Apache::londefdef::DL]=0; |
$Apache::londefdef::DT[$Apache::londefdef::DL]=0; |
$Apache::londefdef::DT[$Apache::londefdef::DL]=0; |
$Apache::londefdef::seenDT[$Apache::londefdef::DL]=0; |
$Apache::londefdef::seenDT[$Apache::londefdef::DL]=0; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1996 sub end_dl {
|
Line 2074 sub end_dl {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } |
if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } |
if ($Apache::londefdef::DD[-1]) { &end_dd(@_); } |
if ($Apache::londefdef::DD[-1]) { &end_dd(@_); } |
Line 2004 sub end_dl {
|
Line 2082 sub end_dl {
|
$currentstring.=' '.$element.' '; |
$currentstring.=' '.$element.' '; |
} |
} |
pop(@Apache::londefdef::description); |
pop(@Apache::londefdef::description); |
$currentstring.='\end{description}'; |
$currentstring.='\end{description}'; |
delete($Apache::londefdef::DD[$Apache::londefdef::DL]); |
delete($Apache::londefdef::DD[$Apache::londefdef::DL]); |
delete($Apache::londefdef::DT[$Apache::londefdef::DL]); |
delete($Apache::londefdef::DT[$Apache::londefdef::DL]); |
delete($Apache::londefdef::seenDT[$Apache::londefdef::DL]); |
delete($Apache::londefdef::seenDT[$Apache::londefdef::DL]); |
$Apache::londefdef::DL--; |
$Apache::londefdef::DL--; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 2018 sub start_dt {
|
Line 2096 sub start_dt {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring=''; |
my $currentstring=''; |
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') { |
if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } |
if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } |
if ($Apache::londefdef::DD[-1]) { &end_dd(@_); } |
if ($Apache::londefdef::DD[-1]) { &end_dd(@_); } |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
$Apache::londefdef::DT[-1]++; |
$Apache::londefdef::DT[-1]++; |
$Apache::londefdef::seenDT[-1]=1; |
$Apache::londefdef::seenDT[-1]=1; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 2033 sub end_dt {
|
Line 2111 sub end_dt {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
if ($Apache::londefdef::DT[-1]) { |
if ($Apache::londefdef::DT[-1]) { |
my $data=&item_cleanup(); |
my $data=&item_cleanup(); |
push(@{$Apache::londefdef::description[-1]},'\item['.$data.'] \strut \vskip 0mm'); |
push(@{$Apache::londefdef::description[-1]},'\item['.$data.'] \strut \vskip 0mm'); |
$Apache::londefdef::DT[-1]--; |
$Apache::londefdef::DT[-1]--; |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
sub item_cleanup { |
sub item_cleanup { |
my $item=&Apache::lonxml::endredirection(); |
my $item=&Apache::lonxml::endredirection(); |
$item=~s/\\begin{center}//g; |
$item=~s/\\begin\{center}//g; |
$item=~s/\\end{center}//g; |
$item=~s/\\end\{center}//g; |
return $item; |
return $item; |
} |
} |
|
|
Line 2056 sub start_dd {
|
Line 2134 sub start_dd {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } |
if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } |
if ($Apache::londefdef::DD[-1]) { &end_dd(@_);} |
if ($Apache::londefdef::DD[-1]) { &end_dd(@_);} |
Line 2067 sub start_dd {
|
Line 2145 sub start_dd {
|
$Apache::londefdef::description[-1]->[-1].=' \strut '; |
$Apache::londefdef::description[-1]->[-1].=' \strut '; |
$Apache::londefdef::DD[-1]++; |
$Apache::londefdef::DD[-1]++; |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 2075 sub end_dd {
|
Line 2153 sub end_dd {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$Apache::londefdef::description[-1]->[-1].= |
$Apache::londefdef::description[-1]->[-1].= |
&Apache::lonxml::endredirection().' \vskip 0mm '; |
&Apache::lonxml::endredirection().' \vskip 0mm '; |
Line 2087 sub end_dd {
|
Line 2165 sub end_dd {
|
#-- <table> tag (end tag required) |
#-- <table> tag (end tag required) |
# <table> also ends any prior <p> that is not closed. |
# <table> also ends any prior <p> that is not closed. |
# but, unless I allow <p>'s to nest, that's the |
# but, unless I allow <p>'s to nest, that's the |
# only way I could think of to allow <p> in |
# only way I could think of to allow <p> in |
# <tr> <th> bodies |
# <tr> <th> bodies |
# |
# |
#list of supported attributes: border,width,TeXwidth,TeXtheme |
#list of supported attributes: border,width,TeXwidth,TeXtheme |
Line 2097 sub start_table {
|
Line 2175 sub start_table {
|
my $textwidth = ''; |
my $textwidth = ''; |
my $currentstring = &end_p(); |
my $currentstring = &end_p(); |
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') { |
&disable_para(); # Can't have paras in a table. |
&disable_para(); # Can't have paras in a table. |
|
|
Line 2165 sub start_table {
|
Line 2243 sub start_table {
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
sub end_table { |
sub end_table { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
|
|
Line 2190 sub start_tr {
|
Line 2268 sub start_tr {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
|
|
my $align = &Apache::lonxml::get_param('align', $parstack, $safeeval, undef, 1); |
my $align = &Apache::lonxml::get_param('align', $parstack, $safeeval, undef, 1); |
Line 2224 sub start_tr {
|
Line 2302 sub start_tr {
|
push @ {$Apache::londefdef::table[-1]{'maxlen'}}, []; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}}, []; |
push @ {$Apache::londefdef::table[-1]{'content'}}, []; |
push @ {$Apache::londefdef::table[-1]{'content'}}, []; |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
sub end_tr { |
sub end_tr { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = &end_p(); # Close any pending <p> in the row. |
my $currentstring = &end_p(); # Close any pending <p> in the row. |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
# In case the user is missing a </td> or </th> tag: |
# In case the user is missing a </td> or </th> tag: |
|
|
if ($Apache::londefdef::TD_redirection) { |
if ($Apache::londefdef::TD_redirection) { |
&end_td_tex($parstack,$parser,$safeeval); |
&end_td_tex($parstack,$parser,$safeeval); |
} |
} |
$Apache::londefdef::table[-1]->end_row(); |
$Apache::londefdef::table[-1]->end_row(); |
|
|
Line 2248 sub end_tr {
|
Line 2326 sub end_tr {
|
|
|
if (0) { |
if (0) { |
if ($Apache::londefdef::TD_redirection) { |
if ($Apache::londefdef::TD_redirection) { |
&end_td_tex($parstack,$parser,$safeeval); |
&end_td_tex($parstack,$parser,$safeeval); |
} |
} |
# Counter columns must be the maximum number of columns seen |
# Counter columns must be the maximum number of columns seen |
# in the table so far so: |
# in the table so far so: |
Line 2267 sub start_td {
|
Line 2345 sub start_td {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$Apache::londefdef::TD_redirection = 1; |
$Apache::londefdef::TD_redirection = 1; |
&tag_check('tr','td',$tagstack,$parstack,$parser,$safeeval); |
&tag_check('tr','td',$tagstack,$parstack,$parser,$safeeval); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
sub tag_check { |
sub tag_check { |
my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_; |
my @ar=@$parstack; |
my @ar=@$parstack; |
for (my $i=$#ar-1;$i>=0;$i--) { |
for (my $i=$#ar-1;$i>=0;$i--) { |
if (lc($$tagstack[$i]) eq $good_tag) { |
if (lc($$tagstack[$i]) eq $good_tag) { |
&start_td_tex($parstack,$parser,$safeeval); |
&start_td_tex($parstack,$parser,$safeeval); |
Line 2299 sub tag_check {
|
Line 2377 sub tag_check {
|
sub cell_config_hash { |
sub cell_config_hash { |
my ($align, $rowspan, $colspan, $width) = @_; |
my ($align, $rowspan, $colspan, $width) = @_; |
if ($rowspan ne '') { |
if ($rowspan ne '') { |
$rowspan =~ s/^\s+|\s+$//g; |
$rowspan =~ s/^\s+|\s+$//g; |
} |
} |
if ($colspan ne '') { |
if ($colspan ne '') { |
$colspan =~ s/^\s+|\s+$//g; |
$colspan =~ s/^\s+|\s+$//g; |
Line 2319 sub cell_config_hash {
|
Line 2397 sub cell_config_hash {
|
} |
} |
return \%config; |
return \%config; |
} |
} |
|
|
sub start_td_tex { |
sub start_td_tex { |
my ($parstack,$parser,$safeeval) = @_; |
my ($parstack,$parser,$safeeval) = @_; |
|
|
Line 2336 sub start_td_tex {
|
Line 2414 sub start_td_tex {
|
|
|
my $table = $Apache::londefdef::table[-1]; |
my $table = $Apache::londefdef::table[-1]; |
$table->add_cell('', $config); |
$table->add_cell('', $config); |
|
|
|
|
#------------------------------------------------ |
#------------------------------------------------ |
# Old table code. |
# Old table code. |
Line 2374 sub end_td_tex {
|
Line 2452 sub end_td_tex {
|
if (0) { |
if (0) { |
my ($parstack,$parser,$safeeval) = @_; |
my ($parstack,$parser,$safeeval) = @_; |
my $current_row = $Apache::londefdef::table[-1]{'row_number'}; |
my $current_row = $Apache::londefdef::table[-1]{'row_number'}; |
my $current_column = $Apache::londefdef::table[-1]{'counter_columns'}; |
my $current_column = $Apache::londefdef::table[-1]{'counter_columns'}; |
my $data = &Apache::lonxml::endredirection(); |
my $data = &Apache::lonxml::endredirection(); |
|
|
# The rowspan array of the table indicates which cells are part of a span. |
# The rowspan array of the table indicates which cells are part of a span. |
Line 2384 sub end_td_tex {
|
Line 2462 sub end_td_tex {
|
# If this and subsequent cells are part of a rowspan, we must |
# If this and subsequent cells are part of a rowspan, we must |
# push along the row until we find one that is not. |
# push along the row until we find one that is not. |
|
|
while ((defined $Apache::londefdef::table[-1]{'rowspan'}[$current_row] [$current_column]) |
while ((defined $Apache::londefdef::table[-1]{'rowspan'}[$current_row] [$current_column]) |
&& ($Apache::londefdef::table[-1]{'rowspan'}[$current_row][$current_column] =~ /[\^\_]/)) { |
&& ($Apache::londefdef::table[-1]{'rowspan'}[$current_row][$current_column] =~ /[\^\_]/)) { |
# Part of a span. |
# Part of a span. |
push @ {$Apache::londefdef::table[-1]{'content'}[-1]}, ''; |
push @ {$Apache::londefdef::table[-1]{'content'}[-1]}, ''; |
$current_column++; |
$current_column++; |
} |
} |
$Apache::londefdef::table[-1]{'counter_columns'} = $current_column; |
$Apache::londefdef::table[-1]{'counter_columns'} = $current_column; |
|
|
|
|
# Get the column and row spans. |
# Get the column and row spans. |
# Colspan can be done via \multicolumn if I can figure out the data structs. |
# Colspan can be done via \multicolumn if I can figure out the data structs. |
Line 2467 sub end_td_tex {
|
Line 2545 sub end_td_tex {
|
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
} |
} |
$data=~s/\\\\\s*$//; |
$data=~s/\\\\\s*$//; |
} else { |
} else { |
$data=~s/^\s+(\S.*)/$1/; |
$data=~s/^\s+(\S.*)/$1/; |
$data=~s/(.*\S)\s+$/$1/; |
$data=~s/(.*\S)\s+$/$1/; |
$data=~s/(\s)+/$1/; |
$data=~s/(\s)+/$1/; |
my ($current_length,$min_length)=(0,0); |
my ($current_length,$min_length)=(0,0); |
Line 2500 sub end_td_tex {
|
Line 2578 sub end_td_tex {
|
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$current_length; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$current_length; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length; |
} |
} |
} |
} |
} |
} |
# Substitute all of the tables nested in this cell in their appropriate places. |
# Substitute all of the tables nested in this cell in their appropriate places. |
|
|
|
|
my $nested_count = $#{$Apache::londefdef::table[-1]{'include'}}; # This one is constant... |
my $nested_count = $#{$Apache::londefdef::table[-1]{'include'}}; # This one is constant... |
for (my $in=0; $in<=$nested_count; $in++) { |
for (my $in=0; $in<=$nested_count; $in++) { |
my $nested = shift @{$Apache::londefdef::table[-1]{'include'}}; |
my $nested = shift @{$Apache::londefdef::table[-1]{'include'}}; |
$nested =~ s/\\end\{tabular\}\\strut\\\\/\\end\{tabular\}/; |
$nested =~ s/\\end\{tabular\}\\strut\\\\/\\end\{tabular\}/; |
# $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
# $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
Line 2545 sub end_td {
|
Line 2623 sub end_td {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$Apache::londefdef::TD_redirection =0; |
$Apache::londefdef::TD_redirection =0; |
&end_td_tex($parstack,$parser,$safeeval); |
&end_td_tex($parstack,$parser,$safeeval); |
Line 2558 sub start_th {
|
Line 2636 sub start_th {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$Apache::londefdef::TD_redirection = 1; |
$Apache::londefdef::TD_redirection = 1; |
&tagg_check('tr','th',$tagstack,$parstack,$parser,$safeeval); |
&tagg_check('tr','th',$tagstack,$parstack,$parser,$safeeval); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
sub tagg_check { |
sub tagg_check { |
my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_; |
my @ar=@$parstack; |
my @ar=@$parstack; |
for (my $i=$#ar-1;$i>=0;$i--) { |
for (my $i=$#ar-1;$i>=0;$i--) { |
if (lc($$tagstack[$i]) eq $good_tag) { |
if (lc($$tagstack[$i]) eq $good_tag) { |
&start_th_tex($parstack,$parser,$safeeval); |
&start_th_tex($parstack,$parser,$safeeval); |
Line 2582 sub tagg_check {
|
Line 2660 sub tagg_check {
|
} |
} |
return ''; |
return ''; |
} |
} |
|
|
sub start_th_tex { |
sub start_th_tex { |
my ($parstack,$parser,$safeeval) = @_; |
my ($parstack,$parser,$safeeval) = @_; |
|
|
Line 2661 sub end_th_tex {
|
Line 2739 sub end_th_tex {
|
push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth; |
push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
} else { |
} else { |
$data=~s/^\s+(\S.*)/$1/; |
$data=~s/^\s+(\S.*)/$1/; |
$data=~s/(.*\S)\s+$/$1/; |
$data=~s/(.*\S)\s+$/$1/; |
$data=~s/(\s)+/$1/; |
$data=~s/(\s)+/$1/; |
my ($current_length,$min_length)=(0,0); |
my ($current_length,$min_length)=(0,0); |
Line 2691 sub end_th_tex {
|
Line 2769 sub end_th_tex {
|
push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0'; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$current_length; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$current_length; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length; |
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length; |
} |
} |
} |
} |
for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { |
for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { |
$data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
$data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
} |
} |
#make data bold |
#make data bold |
Line 2707 sub end_th {
|
Line 2785 sub end_th {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = &end_p(); # Close any open <p> in the row. |
my $currentstring = &end_p(); # Close any open <p> in the row. |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$Apache::londefdef::TD_redirection =0; |
$Apache::londefdef::TD_redirection =0; |
&end_th_tex($parstack,$parser,$safeeval); |
&end_th_tex($parstack,$parser,$safeeval); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
#-- <img> tag (end tag forbidden) |
#-- <img> tag (end tag forbidden) |
# |
# |
# Render the <IMG> tag. |
# Render the <IMG> tag. |
# <IMG> has the following attributes (in addition to the |
# <IMG> has the following attributes (in addition to the |
# standard HTML ones: |
# standard HTML ones: |
# TeXwrap - Governs how the tex target will try to wrap text around |
# TeXwrap - Governs how the tex target will try to wrap text around |
# horizontally aligned images. |
# horizontally aligned images. |
# TeXwidth - The width of the image when rendered for print (mm). |
# TeXwidth - The width of the image when rendered for print (mm). |
# TeXheight - The height of the image when rendered for print (mm) |
# TeXheight - The height of the image when rendered for print (mm) |
# (Note there seems to also be support for this as a % of page size) |
# (Note there seems to also be support for this as a % of page size) |
# |
# |
sub start_img { |
sub start_img { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; |
my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval, |
my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval, |
undef,1); |
undef,1); |
if (! $src && |
if (! $src && |
($target eq 'web' || $target eq 'webgrade' || $target eq 'tex') |
($target eq 'web' || $target eq 'webgrade' || $target eq 'tex') |
) { |
) { |
my $inside = &Apache::lonxml::get_all_text("/img",$parser,$style); |
my $inside = &Apache::lonxml::get_all_text("/img",$parser,$style); |
return ''; |
return ''; |
} |
} |
&Apache::lonxml::extlink($src); |
unless ($src =~ m{^data\:image/gif;base64,}) { |
|
&Apache::lonxml::extlink($src); |
|
} |
my $currentstring = ''; |
my $currentstring = ''; |
my $scaling = .3; |
my $scaling = .3; |
|
|
# Render unto browsers that which are the browser's... |
# Render unto browsers that which are the browser's... |
|
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
my $enc = ('yes' eq |
my $enc = ('yes' eq |
lc(&Apache::lonxml::get_param('encrypturl',$parstack, |
lc(&Apache::lonxml::get_param('encrypturl',$parstack, |
$safeeval))); |
$safeeval))); |
$currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}, |
unless ($src =~ m{^data\:image/gif;base64,}) { |
$enc); |
$currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}, |
|
$enc); |
|
} |
|
|
# and render unto TeX that which is LaTeX |
# and render unto TeX that which is LaTeX |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
Line 2757 sub start_img {
|
Line 2839 sub start_img {
|
# simulate the alignments offered by html. |
# simulate the alignments offered by html. |
# |
# |
# |
# |
my $align = lc(&Apache::lonxml::get_param('align', |
my $align = lc(&Apache::lonxml::get_param('align', |
$parstack, |
$parstack, |
$safeeval, |
$safeeval, |
undef,1)); |
undef,1)); |
Line 2767 sub start_img {
|
Line 2849 sub start_img {
|
# |
# |
&Apache::lonxml::debug("Alignemnt = $align"); |
&Apache::lonxml::debug("Alignemnt = $align"); |
# LaTeX's image/text wrapping is really bad since it wants to |
# LaTeX's image/text wrapping is really bad since it wants to |
# make figures float. |
# make figures float. |
# The user has the optional parameter (applicable only to l/r |
# The user has the optional parameter (applicable only to l/r |
# alignment to use the picins/parpic directive to get wrapped text |
# alignment to use the picins/parpic directive to get wrapped text |
# this is also imperfect.. that's why we give them a choice... |
# this is also imperfect.. that's why we give them a choice... |
Line 2790 sub start_img {
|
Line 2872 sub start_img {
|
|
|
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
|
|
#if original bmp/gif/jpg/png file exist do following: |
#if original bmp/gif/jpg/png/svg file exist do following: |
my $origsrc=$src; |
my $origsrc=$src; |
my ($path,$file) = &get_eps_image($src); |
my ($path,$file) = &get_eps_image($src); |
# &Apache::lonnet::logthis("Image source: $src result: $path $file"); |
# &Apache::lonnet::logthis("Image source: $src result: $path $file"); |
Line 2804 sub start_img {
|
Line 2886 sub start_img {
|
if ($width_param) { $size.='width='.$width_param.' mm,'; } |
if ($width_param) { $size.='width='.$width_param.' mm,'; } |
if ($height_param) { $size.='height='.$height_param.' mm]'; } |
if ($height_param) { $size.='height='.$height_param.' mm]'; } |
# Default size if not able to extract that (e.g. eps image). |
# Default size if not able to extract that (e.g. eps image). |
|
|
# &Apache::lonnet::logthis("Size = $size"); |
# &Apache::lonnet::logthis("Size = $size"); |
|
|
$size='['.$size; |
$size='['.$size; |
$size=~s/,$/]/; |
$size=~s/,$/]/; |
$currentstring .= '\graphicspath{{'.$path.'}}' |
$currentstring .= '\graphicspath{{'.$path.'}}' |
.'\includegraphics'.$size.'{'.$file.'} '; |
.'\includegraphics'.$size.'{'.$file.'} '; |
my $closure; |
my $closure; |
($currentstring, $closure) = &align_latex_image($align, |
($currentstring, $closure) = &align_latex_image($align, |
$latex_rendering, |
$latex_rendering, |
$currentstring, |
$currentstring, |
$width_param, |
$width_param, |
$height_param); |
$height_param); |
$currentstring .= $closure; |
$currentstring .= $closure; |
|
|
} else { |
} else { |
&Apache::lonxml::debug("$src does not exist"); |
&Apache::lonxml::debug("$src does not exist"); |
#original image file doesn't exist so check the alt attribute |
#original image file doesn't exist so check the alt attribute |
my $alt = |
my $alt = |
&Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1); |
&Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1); |
unless ($alt) { |
unless ($alt) { |
$alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src); |
$alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src); |
Line 2837 sub start_img {
|
Line 2919 sub start_img {
|
my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures')); |
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',$only).' '. |
&Apache::edit::browse_or_search('src',undef,'alt',$only,undef,1). |
&Apache::edit::search('src',undef,'alt').'<br />'; |
'<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); |
$currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'<br />'; |
$currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'<br />'; |
Line 2850 sub start_img {
|
Line 2932 sub start_img {
|
['', 'none','parbox', 'parpic', 'wrapfigure'], $token, 2); |
['', 'none','parbox', 'parpic', 'wrapfigure'], $token, 2); |
my $alt= &Apache::lonxml::get_param('alt',$parstack,$safeeval); |
my $alt= &Apache::lonxml::get_param('alt',$parstack,$safeeval); |
my $enc= &Apache::lonxml::get_param('encrypturl',$parstack,$safeeval); |
my $enc= &Apache::lonxml::get_param('encrypturl',$parstack,$safeeval); |
|
|
$currentstring .=&Apache::edit::select_arg('Encrypt URL:','encrypturl', |
$currentstring .=&Apache::edit::select_arg('Encrypt URL:','encrypturl', |
['no','yes'], $token, 2); |
['no','yes'], $token, 2); |
if (($alt=~/\S/) && (lc($enc) eq 'yes')) { |
if (($alt=~/\S/) && (lc($enc) eq 'yes')) { |
Line 2860 sub start_img {
|
Line 2942 sub start_img {
|
my $src= &Apache::lonxml::get_param('src',$parstack,$safeeval); |
my $src= &Apache::lonxml::get_param('src',$parstack,$safeeval); |
my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval); |
my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval); |
my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval); |
my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval); |
|
my $element = &Apache::edit::get_element('src'); |
|
my $text; |
if ($token->[2]{'src'}=~/\$/) { |
if ($token->[2]{'src'}=~/\$/) { |
$currentstring.=&mt('Variable image source'); |
$text = &mt('Variable image source'); |
} elsif ($token->[2]{'src'}=~/\S/) { |
} elsif ($token->[2]{'src'}=~/\S/) { |
$currentstring .= '<img src="'.$src.'" alt="'.$alt.'" '; |
$currentstring .= '<img src="'.$src.'" alt="'.$alt.'" '; |
if ($width) { $currentstring.=' width="'.$width.'" '; } |
if ($width) { $currentstring.=' width="'.$width.'" '; } |
if ($height) { $currentstring.=' height="'.$height.'" '; } |
if ($height) { $currentstring.=' height="'.$height.'" '; } |
$currentstring .= ' />'; |
$currentstring .= ' id="previewimg_'.$element.'" />'; |
} else { |
} else { |
$currentstring.=&mt("No image source specified"); |
$text = &mt("No image source specified"); |
} |
} |
|
$currentstring .= ' <span id="showimg_'.$element.'">'.$text.'</span>'; |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my ($osrc,$owidth,$oheight)= |
my ($osrc,$owidth,$oheight)= |
($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'}); |
($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'}); |
Line 2891 sub start_img {
|
Line 2975 sub start_img {
|
} |
} |
if ($osrc ne $nsrc || (!$nwidth && !$nheight)) { |
if ($osrc ne $nsrc || (!$nwidth && !$nheight)) { |
# changed image or no size specified, |
# changed image or no size specified, |
# if they didn't explicitly change the |
# if they didn't explicitly change the |
# width or height use the ones from the image |
# width or height use the ones from the image |
if ($iwidth && $iheight) { |
if ($iwidth && $iheight) { |
if ($owidth == $nwidth || (!$nwidth && !$nheight)) { |
if ($owidth == $nwidth || (!$nwidth && !$nheight)) { |
Line 2930 sub end_img {
|
Line 3014 sub end_img {
|
#-- <applet> tag (end tag required) |
#-- <applet> tag (end tag required) |
sub start_applet { |
sub start_applet { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
|
|
my $code=&Apache::lonxml::get_param('code',$parstack,$safeeval,undef,1); |
my $code=&Apache::lonxml::get_param('code',$parstack,$safeeval,undef,1); |
&Apache::lonxml::extlink($code); |
&Apache::lonxml::extlink($code); |
my $archive=&Apache::lonxml::get_param('archive',$parstack,$safeeval, |
my $archive=&Apache::lonxml::get_param('archive',$parstack,$safeeval, |
Line 2951 sub start_applet {
|
Line 3035 sub start_applet {
|
|
|
if (&is_inside_of($tagstack, "sub")) { |
if (&is_inside_of($tagstack, "sub")) { |
$restart_sub = 1; |
$restart_sub = 1; |
$currentstring .= &end_sub($target, $token, $tagstack, |
$currentstring .= &end_sub($target, $token, $tagstack, |
$parstack, $parser, $safeeval); |
$parstack, $parser, $safeeval); |
} |
} |
if (&is_inside_of($tagstack, "sup")) { |
if (&is_inside_of($tagstack, "sup")) { |
Line 2983 sub start_applet {
|
Line 3067 sub start_applet {
|
$currentstring .= &start_sup($target, $token, $tagstack, |
$currentstring .= &start_sup($target, $token, $tagstack, |
$parstack, $parser, $safeeval); |
$parstack, $parser, $safeeval); |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 2993 sub end_applet {
|
Line 3077 sub end_applet {
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
#-- <embed> tag (end tag optional/required) |
#-- <embed> tag (end tag optional/required) |
sub start_embed { |
sub start_embed { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1); |
my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1); |
&Apache::lonxml::extlink($src); |
&Apache::lonxml::extlink($src); |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}); |
$currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3071 sub start_param {
|
Line 3155 sub start_param {
|
} |
} |
$currentstring = &Apache::lonenc::encrypt_ref($token,\%toconvert); |
$currentstring = &Apache::lonenc::encrypt_ref($token,\%toconvert); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3079 sub end_param {
|
Line 3163 sub end_param {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3116 sub end_allow {
|
Line 3200 sub end_allow {
|
sub start_frameset { |
sub start_frameset { |
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; # Close any pending para. |
my $currentstring = ''; # Close any pending para. |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = |
$currentstring = |
&Apache::loncommon::start_page($Apache::londefdef::title, |
&Apache::loncommon::start_page($Apache::londefdef::title, |
$Apache::londefdef::head, |
$Apache::londefdef::head, |
{'add_entries' => $token->[2], |
{'add_entries' => $token->[2], |
Line 3146 sub start_xmp {
|
Line 3230 sub start_xmp {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\begin{verbatim}'; |
$currentstring .= '\begin{verbatim}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3170 sub start_pre {
|
Line 3254 sub start_pre {
|
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\begin{verbatim}'; |
$currentstring .= '\begin{verbatim}'; |
&Apache::lonxml::disable_LaTeX_substitutions(); |
&Apache::lonxml::disable_LaTeX_substitutions(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3226 sub end_externallink {
|
Line 3310 sub end_externallink {
|
return $currentstring; |
return $currentstring; |
} |
} |
|
|
#-- <blankspace heigth=""> |
#-- <blankspace height=""> |
sub start_blankspace { |
sub start_blankspace { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = &end_p(); # closes off any unclosed <p> |
my $currentstring = &end_p(); # closes off any unclosed <p> |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1); |
my $howmuch = &Apache::lonxml::get_param('height',$parstack,$safeeval,undef,1); |
$currentstring .= '\vskip '.$howmuch.' '; |
$currentstring .= '\vskip '.$howmuch.' '; |
} |
} |
return $currentstring; |
return $currentstring; |
Line 3251 sub start_abbr {
|
Line 3335 sub start_abbr {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3260 sub end_abbr {
|
Line 3344 sub end_abbr {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3270 sub start_acronym {
|
Line 3354 sub start_acronym {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3279 sub end_acronym {
|
Line 3363 sub end_acronym {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3289 sub start_area {
|
Line 3373 sub start_area {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3298 sub end_area {
|
Line 3382 sub end_area {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3308 sub start_base {
|
Line 3392 sub start_base {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 3317 sub end_base {
|
Line 3401 sub end_base {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3327 sub start_bdo {
|
Line 3411 sub start_bdo {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3336 sub end_bdo {
|
Line 3420 sub end_bdo {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3346 sub start_bgsound {
|
Line 3430 sub start_bgsound {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3355 sub end_bgsound {
|
Line 3439 sub end_bgsound {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3365 sub start_blink {
|
Line 3449 sub start_blink {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3374 sub end_blink {
|
Line 3458 sub end_blink {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3384 sub start_blockquote {
|
Line 3468 sub start_blockquote {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = &end_p(); # Close any unclosed <p> |
my $currentstring = &end_p(); # Close any unclosed <p> |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
$currentstring .= '\begin{quote}'; |
$currentstring .= '\begin{quote}'; |
} |
} |
Line 3396 sub end_blockquote {
|
Line 3480 sub end_blockquote {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
$currentstring = '\end{quote}'; |
$currentstring = '\end{quote}'; |
} |
} |
Line 3409 sub start_button {
|
Line 3493 sub start_button {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3418 sub end_button {
|
Line 3502 sub end_button {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3428 sub start_caption {
|
Line 3512 sub start_caption {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3437 sub end_caption {
|
Line 3521 sub end_caption {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3447 sub start_col {
|
Line 3531 sub start_col {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3456 sub end_col {
|
Line 3540 sub end_col {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3466 sub start_colgroup {
|
Line 3550 sub start_colgroup {
|
my ($target,$token,$tagstack, $parstack, $parser, $safeeval, $style) = @_; |
my ($target,$token,$tagstack, $parstack, $parser, $safeeval, $style) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# TODO: Ensure this tag is in a table: |
# TODO: Ensure this tag is in a table: |
|
|
Line 3496 sub end_colgroup {
|
Line 3580 sub end_colgroup {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3507 sub start_del {
|
Line 3591 sub start_del {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
&disable_para(); |
&disable_para(); |
$currentstring .= '\st{'; |
$currentstring .= '\st{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3519 sub end_del {
|
Line 3603 sub end_del {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&enable_para(); |
&enable_para(); |
$currentstring = '}'; |
$currentstring = '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3532 sub start_fieldset {
|
Line 3616 sub start_fieldset {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3541 sub end_fieldset {
|
Line 3625 sub end_fieldset {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3551 sub start_frame {
|
Line 3635 sub start_frame {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3560 sub end_frame {
|
Line 3644 sub end_frame {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3570 sub start_iframe {
|
Line 3654 sub start_iframe {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
my ($src,$url,$query); |
} |
if ($token->[2]->{'src'}) { |
|
$src = $token->[2]->{'src'}; |
|
} elsif ($token->[2]->{'SRC'}) { |
|
$src = $token->[2]->{'SRC'}; |
|
} |
|
if ($src) { |
|
($url,$query) = ($src =~ /^([^?]+)\??([^?]*)$/); |
|
if ($query =~ /inhibitmenu=yes/) { |
|
$currentstring = $token->[4]; |
|
} else { |
|
my $inhibit; |
|
if ($url =~ m{^[^/.].*\.x?html?$}) { |
|
$inhibit = 1; |
|
} elsif ($url =~ m{^/(uploaded|res)/.*\.x?html?$}) { |
|
$inhibit = 1; |
|
} |
|
if ($inhibit) { |
|
$currentstring = '<iframe '; |
|
foreach my $attrib (@{$token->[3]}) { |
|
if (lc($attrib) eq 'src') { |
|
if ($query) { |
|
$query.='&inhibitmenu=yes'; |
|
} else { |
|
$query = 'inhibitmenu=yes'; |
|
} |
|
$currentstring .= 'src="'.$url.'?'.$query.'" '; |
|
} else { |
|
$currentstring .= lc($attrib).'="'.$token->[2]->{$attrib}.'" '; |
|
} |
|
} |
|
$currentstring =~ s/\s+$//; |
|
if ($token->[4] =~ m{/>$}) { |
|
$currentstring .= ' />'; |
|
} else { |
|
$currentstring .= '>'; |
|
} |
|
} else { |
|
$currentstring = $token->[4]; |
|
} |
|
} |
|
if (($url !~ m{^https?://}) && ($env{'request.course.id'})) { |
|
my $docuri = &Apache::lonnet::hreflocation('',$env{'request.filename'}); |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($url =~ m{^([^/]|/uploaded/)}) { |
|
my $cleanhref = &clean_docs_httpref($url,$docuri,$cdom,$cnum); |
|
if ($cleanhref) { |
|
&Apache::lonxml::extlink($cleanhref); |
|
} |
|
} elsif (($url =~ m{/res/$LONCAPA::domain_re/}) && ($docuri =~ m{^\Q/uploaded/$cdom/$cnum/docs/\E})) { |
|
if (!&Apache::lonnet::allowed('bre',$url)) { |
|
if (&Apache::lonnet::is_on_map($url)) { |
|
&Apache::lonxml::extlink($url); |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
$currentstring = $token->[4]; |
|
} |
|
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3579 sub end_iframe {
|
Line 3723 sub end_iframe {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3589 sub start_ins {
|
Line 3733 sub start_ins {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3598 sub end_ins {
|
Line 3742 sub end_ins {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3608 sub start_isindex {
|
Line 3752 sub start_isindex {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3617 sub end_isindex {
|
Line 3761 sub end_isindex {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3627 sub start_keygen {
|
Line 3771 sub start_keygen {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3636 sub end_keygen {
|
Line 3780 sub end_keygen {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3646 sub start_label {
|
Line 3790 sub start_label {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3655 sub end_label {
|
Line 3799 sub end_label {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3665 sub start_layer {
|
Line 3809 sub start_layer {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3674 sub end_layer {
|
Line 3818 sub end_layer {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3684 sub start_legend {
|
Line 3828 sub start_legend {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3693 sub end_legend {
|
Line 3837 sub end_legend {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3706 sub start_link {
|
Line 3850 sub start_link {
|
my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval, |
my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval, |
undef,1); |
undef,1); |
&Apache::lonxml::extlink($href); |
&Apache::lonxml::extlink($href); |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3715 sub end_link {
|
Line 3859 sub end_link {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3725 sub start_marquee {
|
Line 3869 sub start_marquee {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3734 sub end_marquee {
|
Line 3878 sub end_marquee {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3744 sub start_multicol {
|
Line 3888 sub start_multicol {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = &end_p(); # Close any pending <p> |
my $currentstring = &end_p(); # Close any pending <p> |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3753 sub end_multicol {
|
Line 3897 sub end_multicol {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3763 sub start_nobr {
|
Line 3907 sub start_nobr {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$currentstring='\mbox{'; |
$currentstring='\mbox{'; |
} |
} |
Line 3774 sub end_nobr {
|
Line 3918 sub end_nobr {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring='}'; |
$currentstring='}'; |
} |
} |
Line 3786 sub start_noembed {
|
Line 3930 sub start_noembed {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3795 sub end_noembed {
|
Line 3939 sub end_noembed {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3805 sub start_noframes {
|
Line 3949 sub start_noframes {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3814 sub end_noframes {
|
Line 3958 sub end_noframes {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3824 sub start_nolayer {
|
Line 3968 sub start_nolayer {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3833 sub end_nolayer {
|
Line 3977 sub end_nolayer {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3843 sub start_noscript {
|
Line 3987 sub start_noscript {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3852 sub end_noscript {
|
Line 3996 sub end_noscript {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3862 sub start_object {
|
Line 4006 sub start_object {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3871 sub end_object {
|
Line 4015 sub end_object {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3881 sub start_optgroup {
|
Line 4025 sub start_optgroup {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3890 sub end_optgroup {
|
Line 4034 sub end_optgroup {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3900 sub start_samp {
|
Line 4044 sub start_samp {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$currentstring='\texttt{'; |
$currentstring='\texttt{'; |
} |
} |
Line 3911 sub end_samp {
|
Line 4055 sub end_samp {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring='}'; |
$currentstring='}'; |
} |
} |
Line 3923 sub start_server {
|
Line 4067 sub start_server {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3932 sub end_server {
|
Line 4076 sub end_server {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3942 sub start_spacer {
|
Line 4086 sub start_spacer {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = &end_p(); # Close off any open <p> tag. |
my $currentstring = &end_p(); # Close off any open <p> tag. |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3951 sub end_spacer {
|
Line 4095 sub end_spacer {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
|
my @span_end_stack; # for span tex target |
|
|
#-- <span> tag (end tag required) |
#-- <span> tag (end tag required) |
sub start_span { |
sub start_span { |
my ($target,$token) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} elsif ($target eq 'tex') { |
|
my $endstring = ''; |
|
my $family = &get_css_property('font-family',$parstack,$safeeval); |
|
if ($family eq 'monospace') { |
|
$currentstring .= '\texttt{'; |
|
$endstring .= '}'; |
|
} |
|
my $weight = &get_css_property('font-weight',$parstack,$safeeval); |
|
if ($weight eq 'bold') { |
|
$currentstring .= '\textbf{'; |
|
$endstring .= '}'; |
|
} |
|
my $style = &get_css_property('font-style',$parstack,$safeeval); |
|
if ($style eq 'italic') { |
|
$currentstring .= '\textit{'; |
|
$endstring .= '}'; |
|
} |
|
push(@span_end_stack, $endstring); |
|
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3970 sub end_span {
|
Line 4134 sub end_span {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} elsif ($target eq 'tex') { |
|
my $endstring = pop @span_end_stack; |
|
$currentstring .= $endstring; |
|
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3980 sub start_tbody {
|
Line 4147 sub start_tbody {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# TODO: Ensure this tag is within a table: |
# TODO: Ensure this tag is within a table: |
|
|
Line 3995 sub end_tbody {
|
Line 4162 sub end_tbody {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
if($target eq 'tex') { |
if($target eq 'tex') { |
# TODO: Ensure this tag is within a table: |
# TODO: Ensure this tag is within a table: |
|
|
Line 4011 sub start_tfoot {
|
Line 4178 sub start_tfoot {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# TODO: ensure this is within a table tag. |
# TODO: ensure this is within a table tag. |
my $table = $Apache::londefdef::table[-1]; |
my $table = $Apache::londefdef::table[-1]; |
Line 4025 sub end_tfoot {
|
Line 4192 sub end_tfoot {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# TODO: Ensure this is in side a table |
# TODO: Ensure this is in side a table |
my $table = $Apache::londefdef::table[-1]; |
my $table = $Apache::londefdef::table[-1]; |
$table->end_foot(); |
$table->end_foot(); |
} |
} |
Line 4040 sub start_thead {
|
Line 4207 sub start_thead {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# Assume we're in a table... TODO: Verify that and ignore tag if not. |
# Assume we're in a table... TODO: Verify that and ignore tag if not. |
my $table = $Apache::londefdef::table[-1]; |
my $table = $Apache::londefdef::table[-1]; |
Line 4054 sub end_thead {
|
Line 4221 sub end_thead {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
# TODO: Verify we are in a table and ignore tag if not. |
# TODO: Verify we are in a table and ignore tag if not. |
|
|
Line 4070 sub start_var {
|
Line 4237 sub start_var {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
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') { |
$currentstring = '\textit{'; |
$currentstring = '\textit{'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 4083 sub end_var {
|
Line 4250 sub end_var {
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = '}'; |
$currentstring = '}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 4093 sub start_wbr {
|
Line 4260 sub start_wbr {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 4102 sub end_wbr {
|
Line 4269 sub end_wbr {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 4111 sub end_wbr {
|
Line 4278 sub end_wbr {
|
sub start_hideweboutput { |
sub start_hideweboutput { |
my ($target,$token) = @_; |
my ($target,$token) = @_; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
return ''; |
return ''; |
} |
} |
|
|
Line 4120 sub end_hideweboutput {
|
Line 4287 sub end_hideweboutput {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = &Apache::lonxml::endredirection(); |
$currentstring = &Apache::lonxml::endredirection(); |
} |
} |
return ''; |
return ''; |
} |
} |
|
|
Line 4129 sub end_hideweboutput {
|
Line 4296 sub end_hideweboutput {
|
sub image_replication { |
sub image_replication { |
my $src = shift; |
my $src = shift; |
if (not -e $src) { &Apache::lonnet::repcopy($src); } |
if (not -e $src) { &Apache::lonnet::repcopy($src); } |
#replicates eps or ps |
#replicates eps or ps |
my $epssrc = my $pssrc = $src; |
my $epssrc = my $pssrc = $src; |
$epssrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i; |
$epssrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i; |
$pssrc =~ s/\.(gif|jpg|jpeg|png)$/.ps/i; |
$pssrc =~ s/\.(gif|jpg|jpeg|png)$/.ps/i; |
Line 4152 sub resize_image {
|
Line 4319 sub resize_image {
|
$width_param = $width_param * $scaling; |
$width_param = $width_param * $scaling; |
|
|
#do we have any specified LaTeX size of the picture? |
#do we have any specified LaTeX size of the picture? |
my $toget='TeXwidth'; |
my $toget='TeXwidth'; |
if ($cis) { |
if ($cis) { |
$toget=lc($toget); |
$toget=lc($toget); |
} |
} |
my $TeXwidth = &Apache::lonxml::get_param($toget,$parstack, |
my $TeXwidth = &Apache::lonxml::get_param($toget,$parstack, |
$safeeval,$depth,$cis); |
$safeeval,$depth,$cis); |
Line 4164 sub resize_image {
|
Line 4331 sub resize_image {
|
#do we have any specified web size of the picture? |
#do we have any specified web size of the picture? |
my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval, |
my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval, |
$depth,1); |
$depth,1); |
if ($TeXwidth) { |
if ($TeXwidth) { |
my $old_width_param=$width_param; |
my $old_width_param=$width_param; |
if ($TeXwidth=~/(\d+)\s*\%/) { |
if ($TeXwidth=~/(\d+)\s*\%/) { |
$width_param = $1*$env{'form.textwidth'}/100; |
$width_param = $1*$env{'form.textwidth'}/100; |
} else { |
} else { |
$width_param = $TeXwidth; |
$width_param = $TeXwidth; |
} |
} |
if ($TeXheight) { |
if ($TeXheight) { |
Line 4177 sub resize_image {
|
Line 4344 sub resize_image {
|
$height_param=$TeXwidth/$old_width_param*$height_param; |
$height_param=$TeXwidth/$old_width_param*$height_param; |
} |
} |
} elsif ($TeXheight) { |
} elsif ($TeXheight) { |
$height_param = $TeXheight; |
|
if ($height_param) { |
if ($height_param) { |
$width_param = $TeXheight/$height_param*$width_param; |
$width_param = $TeXheight/$height_param*$width_param; |
} |
} |
|
$height_param = $TeXheight; |
} elsif ($width) { |
} elsif ($width) { |
my $old_width_param=$width_param; |
my $old_width_param=$width_param; |
$width_param = $width*$scaling; |
$width_param = $width*$scaling; |
Line 4202 sub resize_image {
|
Line 4369 sub resize_image {
|
sub image_size { |
sub image_size { |
my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_; |
my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_; |
|
|
#size of image from gif/jpg/jpeg/png |
#size of image from gif/jpg/jpeg/png |
my $ressrc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
my $ressrc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
if (-e $ressrc) { |
if (-e $ressrc) { |
$src = $ressrc; |
$src = $ressrc; |
Line 4215 sub image_size {
|
Line 4382 sub image_size {
|
undef($image); |
undef($image); |
|
|
($height_param, $width_param) = &resize_image($height_param, $width_param, |
($height_param, $width_param) = &resize_image($height_param, $width_param, |
$scaling, $parstack, $safeeval, |
$scaling, $parstack, $safeeval, |
$depth, $cis); |
$depth, $cis); |
|
|
return ($height_param, $width_param); |
return ($height_param, $width_param); |
Line 4244 sub get_eps_image {
|
Line 4411 sub get_eps_image {
|
&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. |
&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. |
} |
} |
&Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); |
&Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); |
my ($spath, $sname, $sext) = &fileparse($src, qr/\.(bmp|gif|png|jpg|jpeg)/i); |
my ($spath, $sname, $sext) = &fileparse($src, qr/\.(bmp|gif|png|jpg|jpeg|svg)/i); |
$src=~s/\.(bmp|gif|png|jpg|jpeg)$/\.eps/i; |
$src=~s/\.(bmp|gif|png|jpg|jpeg|svg)$/\.eps/i; |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
&Apache::lonxml::debug("Filelocation gives: $src"); |
&Apache::lonxml::debug("Filelocation gives: $src"); |
if (! -e $src) { |
if (! -e $src) { |
Line 4301 sub get_eps_image {
|
Line 4468 sub get_eps_image {
|
} |
} |
|
|
sub eps_generation { |
sub eps_generation { |
my ($src,$file,$width_param) = @_; |
my ($src,$file,$width_param) = @_; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat"; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat"; |
if (open(my $tmpfile,">>$filename")) { |
if (open(my $tmpfile,">>$filename")) { |
print $tmpfile "$src\n"; |
print $tmpfile "$src\n"; |
close($tmpfile); |
close($tmpfile); |
} |
} |
Line 4324 sub eps_generation {
|
Line 4491 sub eps_generation {
|
} |
} |
} |
} |
|
|
sub file_path { |
sub file_path { |
my $src=shift; |
my $src=shift; |
my ($file,$path); |
my ($file,$path); |
if ($src =~ m!(.*)/([^/]*)$!) { |
if ($src =~ m!(.*)/([^/]*)$!) { |
$file = $2; |
$file = $2; |
$path = $1.'/'; |
$path = $1.'/'; |
} |
} |
return $file,$path; |
return $file,$path; |
} |
} |
|
|
Line 4356 sub recalc {
|
Line 4523 sub recalc {
|
sub LATEX_length { |
sub LATEX_length { |
my $garbage=shift; |
my $garbage=shift; |
$garbage=~s/^\s+$//; |
$garbage=~s/^\s+$//; |
$garbage=~s/^\s+(\S.*)/$1/;#space before |
$garbage=~s/^\s+(\S.*)/$1/;#space before |
$garbage=~s/(.*\S)\s+$/$1/;#space after |
$garbage=~s/(.*\S)\s+$/$1/;#space after |
$garbage=~s/(\s)+/$1/;#only one space |
$garbage=~s/(\s)+/$1/;#only one space |
$garbage=~s/(\\begin{([^\}]+)}|\\end{([^\}]+)})//g;#remove LaTeX \begin{...} and \end{...} |
$garbage=~s/(\\begin\{([^\}]+)}|\\end\{([^\}]+)})//g;#remove LaTeX \begin{...} and \end{...} |
$garbage=~s/(\$\_\{|\$\_|\$\^{|\$\^|\}\$)//g;#remove $_{,$_,$^{,$^,}$ |
$garbage=~s/(\$\_\{|\$\_|\$\^\{|\$\^|\}\$)//g;#remove $_{,$_,$^{,$^,}$ |
$garbage=~s/([^\\])\$/$1/g;#$ |
$garbage=~s/([^\\])\$/$1/g;#$ |
$garbage=~s/(\\ensuremath\{\_\{|\\ensuremath\{\_|\\ensuremath\{\^{|\\ensuremath\{\^|\})//g;#remove \ensuremath{...} |
$garbage=~s/(\\ensuremath\{\_\{|\\ensuremath\{\_|\\ensuremath\{\^\{|\\ensuremath\{\^|\})//g;#remove \ensuremath{...} |
$garbage=~s/(\\alpha|\\beta|\\gamma|\\delta|\\epsilon|\\verepsilon|\\zeta|\\eta|\\theta|\\vartheta|\\iota|\\kappa|\\lambda|\\mu|\\nu|\\xi|\\pi|\\varpi|\\rho|\\varrho|\\sigma|\\varsigma|\\tau|\\upsilon|\\phi|\\varphi|\\chi|\\psi|\\omega|\\Gamma|\\Delta|\\Theta|\\Lambda|\\Xi|\\Pi|\\Sigma|\\Upsilon|\\Phi|\\Psi|\\Omega)/1/g; |
$garbage=~s/(\\alpha|\\beta|\\gamma|\\delta|\\epsilon|\\verepsilon|\\zeta|\\eta|\\theta|\\vartheta|\\iota|\\kappa|\\lambda|\\mu|\\nu|\\xi|\\pi|\\varpi|\\rho|\\varrho|\\sigma|\\varsigma|\\tau|\\upsilon|\\phi|\\varphi|\\chi|\\psi|\\omega|\\Gamma|\\Delta|\\Theta|\\Lambda|\\Xi|\\Pi|\\Sigma|\\Upsilon|\\Phi|\\Psi|\\Omega)/1/g; |
$garbage=~s/(\\pm|\\mp|\\times|\\div|\\cdot|\\ast|\\star|\\dagger|\\ddagger|\\amalg|\\cap|\\cup|\\uplus|\\sqcap|\\sqcup|\\vee|\\wedge|\\oplus|\\ominus|\\otimes|\\circ|\\bullet|\\diamond|\\lhd|\\rhd|\\unlhd|\\unrhd|\\oslash|\\odot|\\bigcirc|\\Box|\\Diamond|\\bigtriangleup|\\bigtriangledown|\\triangleleft|\\triangleright|\\setminus|\\wr)/1/g; |
$garbage=~s/(\\pm|\\mp|\\times|\\div|\\cdot|\\ast|\\star|\\dagger|\\ddagger|\\amalg|\\cap|\\cup|\\uplus|\\sqcap|\\sqcup|\\vee|\\wedge|\\oplus|\\ominus|\\otimes|\\circ|\\bullet|\\diamond|\\lhd|\\rhd|\\unlhd|\\unrhd|\\oslash|\\odot|\\bigcirc|\\Box|\\Diamond|\\bigtriangleup|\\bigtriangledown|\\triangleleft|\\triangleright|\\setminus|\\wr)/1/g; |
$garbage=~s/(\\le|\\ll|\\leq|\\ge|\\geq|\\gg|\\neq|\\doreq|\\sim|\\simeq|\\subset|\\subseteq|\\sqsubset|\\sqsubseteq|\\in|\\vdash|\\models|\\supset|\\supseteq|\\sqsupset|\\sqsupseteq|\\ni|\\dash|\\perp|\\approx|\\cong|\\equiv|\\propto|\\prec|\\preceq|\\parallel|\\asymp|\\smile|\\frown|\\bowtie|\\succ|\\succeq|\\mid)/1/g; |
$garbage=~s/(\\le|\\ll|\\leq|\\ge|\\geq|\\gg|\\neq|\\doreq|\\sim|\\simeq|\\subset|\\subseteq|\\sqsubset|\\sqsubseteq|\\in|\\vdash|\\models|\\supset|\\supseteq|\\sqsupset|\\sqsupseteq|\\ni|\\dash|\\perp|\\approx|\\cong|\\equiv|\\propto|\\prec|\\preceq|\\parallel|\\asymp|\\smile|\\frown|\\bowtie|\\succ|\\succeq|\\mid)/1/g; |
$garbage=~s/(\\not<|\\\\not\\le|\\not\\prec|\\not\\preceq|\\not\\subset|\\not\\subseteq|\\not\\sqsubseteq|\\not\\in|\\not>|\\not\\ge|\\not\\succ|\\notsucceq|\\not\\supset|\\notsupseteq|\\not\\sqsupseteq|\\notin|\\not=|\\not\\equiv|\\not\\sim|\\not\\simeq|\\not\\approx|\\not\\cong|\\not\\asymp)/1/g; |
$garbage=~s/(\\not<|\\\\not\\le|\\not\\prec|\\not\\preceq|\\not\\subset|\\not\\subseteq|\\not\\sqsubseteq|\\not\\in|\\not>|\\not\\ge|\\not\\succ|\\notsucceq|\\not\\supset|\\notsupseteq|\\not\\sqsupseteq|\\notin|\\not=|\\not\\equiv|\\not\\sim|\\not\\simeq|\\not\\approx|\\not\\cong|\\not\\asymp)/1/g; |
$garbage=~s/(\\leftarrow|\\gets|\\Leftarrow|\\rightarrow|\\to|\\Rightarrow|\\leftrightarrow|\\Leftrightarrow|\\mapsto|\\hookleftarrow|\\leftharpoonup|\\leftkarpoondown|\\rightleftharpoons|\\longleftarrow|\\Longleftarrow|\\longrightarrow|\\Longrightarrow|\\longleftrightarrow|\\Longleftrightarrow|\\longmapsto|\\hookrightarrow|\\rightharpoonup|\\rightharpoondown|\\uparrow|\\Uparrow|\\downarrow|\\Downarrow|\\updownarrow|\\Updownarrow|\\nearrow|\\searrow|\\swarrow|\\nwarrow)/11/g; |
$garbage=~s/(\\leftarrow|\\gets|\\Leftarrow|\\rightarrow|\\to|\\Rightarrow|\\leftrightarrow|\\Leftrightarrow|\\mapsto|\\hookleftarrow|\\leftharpoonup|\\leftkarpoondown|\\rightleftharpoons|\\longleftarrow|\\Longleftarrow|\\longrightarrow|\\Longrightarrow|\\longleftrightarrow|\\Longleftrightarrow|\\longmapsto|\\hookrightarrow|\\rightharpoonup|\\rightharpoondown|\\uparrow|\\Uparrow|\\downarrow|\\Downarrow|\\updownarrow|\\Updownarrow|\\nearrow|\\searrow|\\swarrow|\\nwarrow)/11/g; |
$garbage=~s/(\\aleph|\\hbar|\\imath|\\jmath|\\ell|\\wp|\\Re|\\Im|\\mho|\\prime|\\emptyset|\\nabla|\\surd|\\partial|\\top|\\bot|\\vdash|\\dashv|\\forall|\\exists|\\neg|\\flat|\\natural|\\sharp|\\\||\\angle|\\backslash|\\Box|\\Diamond|\\triangle|\\clubsuit|\\diamondsuit|\\heartsuit|\\spadesuit|\\Join|\\infty)/11/g; |
$garbage=~s/(\\aleph|\\hbar|\\imath|\\jmath|\\ell|\\wp|\\Re|\\Im|\\mho|\\prime|\\emptyset|\\nabla|\\surd|\\partial|\\top|\\bot|\\vdash|\\dashv|\\forall|\\exists|\\neg|\\flat|\\natural|\\sharp|\\\||\\angle|\\backslash|\\Box|\\Diamond|\\triangle|\\clubsuit|\\diamondsuit|\\heartsuit|\\spadesuit|\\Join|\\infty)/11/g; |
$garbage=~s/(\\hat{([^}]+)}|\\check{([^}]+)}|\\dot{([^}]+)}|\\breve{([^}]+)}|\\acute{([^}]+)}|\\ddot{([^}]+)}|\\grave{([^}]+)}|\\tilde{([^}]+)}|\\mathring{([^}]+)}|\\bar{([^}]+)}|\\vec{([^}]+)})/$1/g; |
$garbage=~s/(\\hat\{([^}]+)}|\\check\{([^}]+)}|\\dot\{([^}]+)}|\\breve\{([^}]+)}|\\acute\{([^}]+)}|\\ddot\{([^}]+)}|\\grave\{([^}]+)}|\\tilde\{([^}]+)}|\\mathring\{([^}]+)}|\\bar\{([^}]+)}|\\vec\{([^}]+)})/$1/g; |
#remove some other LaTeX command |
#remove some other LaTeX command |
$garbage=~s|\\(\w+)\\|\\|g; |
$garbage=~s|\\(\w+)\\|\\|g; |
$garbage=~s|\\(\w+)(\s*)|$2|g; |
$garbage=~s|\\(\w+)(\s*)|$2|g; |
$garbage=~s|\+|11|g; |
$garbage=~s|\+|11|g; |
my $value=length($garbage); |
my $value=length($garbage); |
return $value; |
return $value; |
Line 4392 sub align_latex_image {
|
Line 4559 sub align_latex_image {
|
# If there's an alignment specification we need to honor it here. |
# If there's an alignment specification we need to honor it here. |
# For the horizontal alignments, we will also honor the |
# For the horizontal alignments, we will also honor the |
# value of the latex specfication. The default is parbox, |
# value of the latex specfication. The default is parbox, |
# and that's used for illegal values too. |
# and that's used for illegal values too. |
# |
# |
# Even though we set a default alignment value, the user |
# Even though we set a default alignment value, the user |
# could have given us an illegal value. In that case we |
# could have given us an illegal value. In that case we |
# just use the default alignment of bottom.. |
# just use the default alignment of bottom.. |
Line 4405 sub align_latex_image {
|
Line 4572 sub align_latex_image {
|
my $offset = $height/2; |
my $offset = $height/2; |
$currentstring .= '\raisebox{-'.$offset.'mm}{'.$image; |
$currentstring .= '\raisebox{-'.$offset.'mm}{'.$image; |
$closure = '}'; |
$closure = '}'; |
} elsif ($align eq "left") { |
} elsif ($align eq "left") { |
if ($latex_rendering eq "parpic") { |
if ($latex_rendering eq "parpic") { |
$currentstring .= '\parpic[l]{'.$image; |
$currentstring .= '\parpic[l]{'.$image; |
$closure = '}'; |
$closure = '}'; |
} elsif ($latex_rendering eq "parbox") { |
} elsif ($latex_rendering eq "parbox") { |
Line 4415 sub align_latex_image {
|
Line 4582 sub align_latex_image {
|
$closure = '\end{minipage}'; |
$closure = '\end{minipage}'; |
} elsif ($latex_rendering eq "wrapfigure" |
} elsif ($latex_rendering eq "wrapfigure" |
|| $latex_rendering ne 'none') { # wrapfig render |
|| $latex_rendering ne 'none') { # wrapfig render |
$currentstring .= |
$currentstring .= |
'\begin{wrapfigure}{l}{'.$width.'mm}' |
'\begin{wrapfigure}{l}{'.$width.'mm}' |
.'\scalebox{1.0}{'.$image; |
.'\scalebox{1.0}{'.$image; |
$closure = '}\end{wrapfigure}'; |
$closure = '}\end{wrapfigure}'; |
} |
} |
} elsif ($align eq "right") { |
} elsif ($align eq "right") { |
if ($latex_rendering eq "parpic") { |
if ($latex_rendering eq "parpic") { |
$currentstring .= '\parpic[r]{'.$image; |
$currentstring .= '\parpic[r]{'.$image; |
$closure = '}'; |
$closure = '}'; |
Line 4430 sub align_latex_image {
|
Line 4597 sub align_latex_image {
|
$closure = '\end{minipage}'; |
$closure = '\end{minipage}'; |
} elsif ($latex_rendering eq "wrapfigure" |
} elsif ($latex_rendering eq "wrapfigure" |
|| $latex_rendering ne 'none') { # wrapfig render |
|| $latex_rendering ne 'none') { # wrapfig render |
$currentstring .= |
$currentstring .= |
'\begin{wrapfigure}{r}{'.$width.'mm}' |
'\begin{wrapfigure}{r}{'.$width.'mm}' |
.'\scalebox{1.0}{'.$image; |
.'\scalebox{1.0}{'.$image; |
$closure = '}\end{wrapfigure}'; |
$closure = '}\end{wrapfigure}'; |
Line 4463 sub latex_header {
|
Line 4630 sub latex_header {
|
my ($mode) = @_; |
my ($mode) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
|
|
$currentstring .= |
$currentstring .= |
"\n% &Apache::lonxml::londefdef \n" . |
"\n% &Apache::lonxml::londefdef \n" . |
'\documentclass[letterpaper,twoside]{article}\raggedbottom'; |
'\documentclass[letterpaper,twoside]{article}\raggedbottom'; |
if (($env{'form.latex_type'}=~'batchmode') || |
if (($env{'form.latex_type'}=~'batchmode') || |
(!$env{'request.role.adv'}) || |
(!$env{'request.role.adv'}) || |
($mode eq 'batchmode')) {$currentstring .='\batchmode';} |
($mode eq 'batchmode')) {$currentstring .='\batchmode';} |
$currentstring .= '\newcommand{\keephidden}[1]{}'. |
$currentstring .= '\newcommand{\keephidden}[1]{}'. |
'\renewcommand{\deg}{$^{\circ}$}'. |
'\renewcommand{\deg}{$^{\circ}$}'. |
'\usepackage{multirow}'. |
'\usepackage{multirow}'."\n". |
'\usepackage{longtable}'. |
'\usepackage{longtable}'."\n". |
'\usepackage{textcomp}'. |
'\usepackage{textcomp}'."\n". |
'\usepackage{makeidx}'. |
'\usepackage{makeidx}'."\n". |
'\usepackage[dvips]{graphicx}'. |
'\usepackage[dvips]{graphicx}'."\n". |
'\usepackage{wrapfig}'. |
'\usepackage{wrapfig}'."\n". |
'\usepackage{picins}'. |
'\usepackage{picins}'."\n". |
'\usepackage[T1]{fontenc}'."\n". |
'\usepackage[T1]{fontenc}'."\n". |
'\usepackage{lmodern}'."\n". |
'\usepackage{lmodern}'."\n". |
'\usepackage[postscript]{ucs}'."\n". |
'\usepackage[postscript]{ucs}'."\n". |
'\usepackage[utf8x]{inputenc}'."\n". |
'\usepackage[utf8x]{inputenc}'."\n". |
'\usepackage{pifont}' ."\n". |
'\usepackage{pifont}'."\n". |
'\usepackage{latexsym}'."\n". |
'\usepackage{latexsym}'."\n". |
'\usepackage{epsfig}'. |
'\usepackage{epsfig}'."\n". |
"\\usepackage{xtab}\n". |
'\usepackage{xtab}'."\n". |
"\\usepackage{tabularx}\n". |
'\usepackage{tabularx}'."\n". |
"\\usepackage{booktabs}\n". |
'\usepackage{booktabs}'."\n". |
"\\usepackage{array}\n". |
'\usepackage{array}'."\n". |
"\\usepackage{colortbl}\n". |
'\usepackage{colortbl}'."\n". |
"\\usepackage{xcolor}\n". |
'\usepackage{xcolor}'."\n". |
'\usepackage{calc}'. |
'\usepackage{calc}'."\n". |
'\usepackage{amsmath}'. |
'\usepackage{amsmath}'."\n". |
'\usepackage{soul}'. |
'\usepackage{soul}'."\n". |
'\usepackage{amssymb}'. |
'\usepackage{amssymb}'."\n". |
'\usepackage{amsfonts}'. |
'\usepackage{amsfonts}'."\n". |
'\usepackage{amsthm}'. |
'\usepackage{amsthm}'."\n". |
'\usepackage{amscd}' |
'\usepackage{amscd}'."\n". |
.'\usepackage{picins}\usepackage{calc}'."\n". # From lonprintout.pm |
'\usepackage{actuarialangle}'."\n"; |
'\usepackage[T1]{fontenc}'."\n". |
|
'\usepackage{lmodern}'."\n". |
|
'\usepackage[postscript]{ucs}'."\n". |
|
'\usepackage[utf8x]{inputenc}'."\n". |
|
'\usepackage{pifont}' . "\n"; |
|
|
|
if($env{'form.pdfFormFields'} eq 'yes') { |
if($env{'form.pdfFormFields'} eq 'yes') { |
$currentstring .= '\usepackage{hyperref}'. |
$currentstring .= '\usepackage{hyperref}'. |
'\usepackage{eforms}'. |
'\usepackage{eforms}'. |
'\usepackage{tabularx}'; |
'\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}}'. |
$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}}'; |
'\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}}'; |
$currentstring .= '\begin{document}'; |
$currentstring .= '\begin{document}'; |
|
|
return $currentstring; |
return $currentstring; |
|
|
} |
} |
|
|
|
sub clean_docs_httpref { |
|
my ($href,$docuri,$cdom,$cnum) = @_; |
|
if ($docuri eq '') { |
|
$docuri = &Apache::lonnet::hreflocation('',$env{'request.filename'}); |
|
} |
|
if ($cdom eq '') { |
|
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
} |
|
if ($cnum eq '') { |
|
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
} |
|
my $cleanhref; |
|
if ($docuri =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/)(.+/)[^/]+$}) { |
|
my $prefix = $1; |
|
my $relpath = $2; |
|
my ($hrefpath,$fname); |
|
if ($href =~ m{^/}) { |
|
if ($href =~ m{^\Q$prefix\E(.+/)([^/]+)$}) { |
|
$hrefpath = $1; |
|
$fname = $2; |
|
} else { |
|
return $cleanhref; |
|
} |
|
} else { |
|
if ($href =~ m{/}) { |
|
(my $path,$fname) = ($href =~ m{^(.*)/([^/]*)$}); |
|
$hrefpath = $relpath.$path; |
|
if ($path eq '') { |
|
$hrefpath =~ s{/$}{}; |
|
} |
|
} else { |
|
$fname = $href; |
|
$hrefpath = $relpath; |
|
$hrefpath =~ s{/$}{}; |
|
} |
|
} |
|
if ($fname ne '') { |
|
my $cleanrelpath; |
|
foreach my $dir (split(/\//,$hrefpath)) { |
|
next if ($dir eq '.'); |
|
if ($dir eq '..') { |
|
$cleanrelpath =~ s{([^/]+/)$}{}; |
|
} else { |
|
$cleanrelpath .= $dir.'/'; |
|
} |
|
} |
|
if ($cleanrelpath ne '') { |
|
$cleanhref = $prefix.$cleanrelpath.$fname; |
|
} else { |
|
$cleanhref = $prefix.$fname; |
|
} |
|
} |
|
} |
|
return $cleanhref; |
|
} |
|
|
|
# This is retrieving a CSS property from the style attribute of the current element. |
|
# It is not checking <style> elements or linked stylesheets yet. |
|
sub get_css_property { |
|
my ($property,$parstack,$safeeval) = @_; |
|
my $style=&Apache::lonxml::get_param('style',$parstack,$safeeval,undef,1); |
|
my @style_components=split(/;/,$style); |
|
foreach my $css_pair (@style_components) { |
|
my ($name, $value) = split(/:/, $css_pair); |
|
$name =~ s/^\s+|\s+$//g; |
|
$value =~ s/^\s+|\s+$//g; |
|
if ($name eq $property) { |
|
return $value; |
|
} |
|
} |
|
return undef; |
|
} |
|
|
=pod |
=pod |
|
|
=head1 NAME |
=head1 NAME |
Line 4549 described at http://www.lon-capa.org.
|
Line 4783 described at http://www.lon-capa.org.
|
it's initial ht. and wid. This allows sizing of |
it's initial ht. and wid. This allows sizing of |
images that are generated on-the-fly (e.g. gnuplot) |
images that are generated on-the-fly (e.g. gnuplot) |
as well as serving as a utility for image_size. |
as well as serving as a utility for image_size. |
|
|
Parameter: |
Parameter: |
height_param |
height_param |
width_param - Initial picture dimensions. |
width_param - Initial picture dimensions. |
scaling - A scale factor. |
scaling - A scale factor. |
parstack, - the current stack of tag attributes |
parstack, - the current stack of tag attributes |
from the xml parser |
from the xml parser |
safeeval, - pointer to the safespace |
safeeval, - pointer to the safespace |
depth, - from what level in the stack to look for attributes |
depth, - from what level in the stack to look for attributes |
Line 4579 described at http://www.lon-capa.org.
|
Line 4813 described at http://www.lon-capa.org.
|
|
|
=item recalc() |
=item recalc() |
|
|
Converts a measurement in to mm from any of |
Converts a measurement in to mm from any of |
the other valid LaTeX units of measure. |
the other valid LaTeX units of measure. |
If the units of measure are missing from the |
If the units of measure are missing from the |
parameter, it is assumed to be in and returned |
parameter, it is assumed to be in and returned |
with mm units of measure |
with mm units of measure |
|
|
Line 4589 described at http://www.lon-capa.org.
|
Line 4823 described at http://www.lon-capa.org.
|
|
|
=item align_latex_image() |
=item align_latex_image() |
|
|
Wrap image 'stuff' inside of the LaTeX required to implement |
Wrap image 'stuff' inside of the LaTeX required to implement |
alignment: |
alignment: |
align_tex_image(align, latex_rendering, image) |
align_tex_image(align, latex_rendering, image) |
Where: |
Where: |
Line 4604 described at http://www.lon-capa.org.
|
Line 4838 described at http://www.lon-capa.org.
|
|
|
|
|
=item is_inside_of($tagstack, $tag) |
=item is_inside_of($tagstack, $tag) |
This sub returns true if the current state of Xml processing is inside of the tag. |
This sub returns true if the current state of Xml processing is inside of the tag. |
Parameters: |
Parameters: |
tagstack - The tagstack from the parser. |
tagstack - The tagstack from the parser. |
tag - The tag (without the <>'s.). |
tag - The tag (without the <>'s.). |
Line 4613 described at http://www.lon-capa.org.
|
Line 4847 described at http://www.lon-capa.org.
|
I'm in a table.... |
I'm in a table.... |
} |
} |
|
|
|
=item clean_docs_httpref($href,$docuri,$cdom,$cnum) |
|
HTML pages uploaded to a course which contain dependencies either from iframes, |
|
javascript files or objects (FlashPlayerSwf, MediaSrc, XMPSrc, ConfigurationSrc, |
|
and PosterImageSrc) for which dependency is another file uploaded to the same |
|
course. |
|
|
|
Required input: |
|
href - dependency (either a relative URL, or an absolute URL) |
|
Optional inputs: |
|
docuri - URL of HTML page containing the dependency |
|
cdom - Course domain |
|
cnum - CourseID |
|
|
|
Output: |
|
returns an absolute URL constructed from the href provided, and the calling context. |
|
(this will be null, if the URL does not begin: /uploaded/$cdom/$cnum/docs/ or |
|
/uploaded/$cdom/$cnum/supplemental/). |
|
|
=back |
=back |
|
|