version 1.151, 2003/07/08 18:12:28
|
version 1.162, 2003/08/20 15:22:03
|
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 |
Line 52 use Image::Magick;
|
Line 51 use Image::Magick;
|
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonmeta(); |
use Apache::lonmeta(); |
|
|
|
$Apache::londefdef::TD_redirection=0; |
|
|
BEGIN { |
BEGIN { |
|
|
&Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr','hideweboutput')); |
&Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr','hideweboutput')); |
Line 157 sub start_html {
|
Line 158 sub start_html {
|
&Apache::lonxml::fontsettings(); |
&Apache::lonxml::fontsettings(); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
@Apache::londefdef::table = (); |
@Apache::londefdef::table = (); |
$currentstring .= '\documentclass[letterpaper]{article}'. |
$currentstring .= '\documentclass[letterpaper]{article}'; |
#'\batchmode'. |
if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';} |
'\newcommand{\keephidden}[1]{} |
$currentstring .= '\newcommand{\keephidden}[1]{} |
\renewcommand{\deg}{$^{\circ}$} |
\renewcommand{\deg}{$^{\circ}$} |
\usepackage{longtable} |
\usepackage{longtable} |
\usepackage{textcomp} |
\usepackage{textcomp} |
|
\usepackage{makeidx} |
\usepackage[dvips]{graphicx} |
\usepackage[dvips]{graphicx} |
\usepackage{epsfig}\usepackage{calc} |
\usepackage{epsfig}\usepackage{calc} |
\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}}'; |
\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}} |
|
\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large\textbf{Index}} \newline \setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 364 sub start_meta {
|
Line 367 sub start_meta {
|
$name=~s/\s/\_/gs; |
$name=~s/\s/\_/gs; |
$name=~s/\W//gs; |
$name=~s/\W//gs; |
if ($name) { |
if ($name) { |
$currentstring='<'.$name.'>'. |
$currentstring='<'.$name; |
|
my $display=&Apache::lonxml::get_param |
|
('display',$parstack,$safeeval,undef,1); |
|
if ($display) { |
|
$display=~s/\"/\'/g; |
|
$currentstring.=' display="'.$display.'"'; |
|
} |
|
$currentstring.='>'. |
&Apache::lonxml::get_param |
&Apache::lonxml::get_param |
('content',$parstack,$safeeval,undef,1). |
('content',$parstack,$safeeval,undef,1). |
'</'.$name.'>'; |
'</'.$name.'>'; |
} |
} |
|
my $display=&Apache::lonxml::get_param |
|
('display',$parstack,$safeeval,undef,1); |
|
if ($display) { |
|
$display=&HTML::Entities::encode($display); |
|
$currentstring.='<'.$name.'.display>'.$display. |
|
'</'.$name.'.display>'; |
|
} |
} |
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $content=&Apache::lonxml::get_param('content',$parstack,$safeeval); |
my $content=&Apache::lonxml::get_param('content',$parstack,$safeeval); |
Line 450 sub start_body {
|
Line 467 sub start_body {
|
$currentstring.='<head>'. |
$currentstring.='<head>'. |
&Apache::lonmenu::registerurl(undef,$target).'</head>'; |
&Apache::lonmenu::registerurl(undef,$target).'</head>'; |
} |
} |
|
# Accessibility |
|
if ($ENV{'browser.imagesuppress'} eq 'on') { |
|
delete($token->[2]->{'background'}); |
|
} |
|
if ($ENV{'browser.fontenhance'} eq 'on') { |
|
my $style=''; |
|
foreach my $key (keys(%{$token->[2]})) { |
|
if ($key =~ /^style$/i) { |
|
$style.=$token->[2]->{$key}.';'; |
|
delete($token->[2]->{$key}); |
|
} |
|
} |
|
$token->[2]->{'style'}=$style.'; font-size: x-large;'; |
|
} |
|
if ($ENV{'browser.blackwhite'} eq 'on') { |
|
delete($token->[2]->{'font'}); |
|
delete($token->[2]->{'link'}); |
|
delete($token->[2]->{'alink'}); |
|
delete($token->[2]->{'vlink'}); |
|
delete($token->[2]->{'bgcolor'}); |
|
delete($token->[2]->{'background'}); |
|
} |
|
# Overload loads |
my $onLoad=''; |
my $onLoad=''; |
foreach my $key (keys(%{$token->[2]})) { |
foreach my $key (keys(%{$token->[2]})) { |
if ($key =~ /^onload$/i) { |
if ($key =~ /^onload$/i) { |
Line 1042 sub end_q {
|
Line 1082 sub end_q {
|
|
|
#-- <p> tag |
#-- <p> tag |
sub start_p { |
sub start_p { |
my ($target,$token) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\par '; |
my $signal=1; |
|
foreach my $tag (@$tagstack) {if (lc($tag) eq 'b') {$signal=0;}} |
|
if ($signal) {$currentstring .= '\par ';} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 1165 sub start_font {
|
Line 1207 sub start_font {
|
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web') { |
if ($target eq 'web') { |
my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval); |
my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval); |
if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode++;} |
if ($face=~/symbol/i) { |
|
$Apache::lonxml::prevent_entity_encode++; |
|
} else { |
|
if (($ENV{'browser.fontenhance'} eq 'on') || |
|
($ENV{'browser.blackwhite'} eq 'on')) { return ''; } |
|
} |
$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); |
Line 1357 sub start_a {
|
Line 1404 sub start_a {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $a=&Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1); |
my $a=&Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1); |
$a=~s/([^\\])%/$1\\\%/g; |
my $b=&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); |
$currentstring .= '\ref{'.$a.'}'; |
if ($a=~/\S/) { |
|
$a=~s/([^\\])%/$1\\\%/g; |
|
$currentstring .= '\ref{URI: '.$a.'}'; |
|
} elsif ($b=~/\S/) { |
|
$currentstring .= '\ref{Anchor: '.$b.'}'; |
|
} else { |
|
$currentstring.=''; |
|
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 1625 sub start_dd {
|
Line 1679 sub start_dd {
|
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
if ($$tagstack[-2] eq 'dl') { |
if ($$tagstack[-2] eq 'dl') { |
$currentstring = ' \item [] '; |
$currentstring = ' \item [] '; |
|
} elsif ($$tagstack[-2] eq 'dt') { |
|
$currentstring = ']'; |
} |
} |
} |
} |
return $currentstring; |
return $currentstring; |
Line 1795 sub start_tr {
|
Line 1851 sub start_tr {
|
} |
} |
|
|
sub end_tr { |
sub end_tr { |
my ($target,$token) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
if ($Apache::londefdef::TD_redirection) { |
|
&end_td_tex($parstack,$parser,$safeeval); |
|
} |
push @{ $Apache::londefdef::table[-1]{'TeXlengthrow'} },$Apache::londefdef::table[-1]{'TeXlength'}; |
push @{ $Apache::londefdef::table[-1]{'TeXlengthrow'} },$Apache::londefdef::table[-1]{'TeXlength'}; |
push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'}; |
push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'}; |
} |
} |
Line 1813 sub start_td {
|
Line 1872 sub start_td {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1); |
$Apache::londefdef::TD_redirection = 1; |
if ($what_to_push eq '') { |
&tag_check('tr','td',$tagstack,$parstack,$parser,$safeeval); |
$what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);; |
|
} |
|
push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push; |
|
$Apache::londefdef::table[-1]{'counter_columns'}++; |
|
&Apache::lonxml::startredirection(); |
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
|
sub tag_check { |
|
my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_; |
|
my @ar=@$parstack; |
|
for (my $i=$#ar-1;$i>=0;$i--) { |
|
if (lc($$tagstack[$i]) eq $good_tag) { |
|
&start_td_tex($parstack,$parser,$safeeval); |
|
last; |
|
} elsif (lc($$tagstack[$i]) eq $bad_tag) { |
|
splice @ar, $i+1; |
|
&end_td_tex(\@ar,$parser,$safeeval); |
|
&start_td_tex($parstack,$parser,$safeeval); |
|
last; |
|
} |
|
} |
|
return ''; |
|
} |
|
|
|
sub start_td_tex { |
|
my ($parstack,$parser,$safeeval) = @_; |
|
my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1); |
|
if ($what_to_push eq '') { |
|
$what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);; |
|
} |
|
push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push; |
|
$Apache::londefdef::table[-1]{'counter_columns'}++; |
|
&Apache::lonxml::startredirection(); |
|
return ''; |
|
} |
|
|
|
sub end_td_tex { |
|
my ($parstack,$parser,$safeeval) = @_; |
|
my $current_row = $Apache::londefdef::table[-1]{'row_number'}; |
|
my $data=&Apache::lonxml::endredirection(); |
|
my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
|
if (defined $TeXwidth) { |
|
my $current_length=&recalc($TeXwidth); |
|
$current_length=~/(\d+)/; |
|
$Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; |
|
$Apache::londefdef::table[-1]{'length'} .= '0,'; |
|
} else { |
|
if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) { |
|
my $current_length=&recalc($1); |
|
$current_length=~/(\d+\.?\d*)/; |
|
$Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; |
|
$Apache::londefdef::table[-1]{'length'} .= '0,'; |
|
} else { |
|
$data=~s/^\s+(\S.*)/$1/; |
|
$data=~s/(.*\S)\s+$/$1/; |
|
my $current_length=2*length($data); |
|
$Apache::londefdef::table[-1]{'length'} .= $current_length.','; |
|
$Apache::londefdef::table[-1]{'TeXlength'} .= '0,'; |
|
} |
|
} |
|
for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { |
|
$data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
|
} |
|
@{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{TOBECHANGEDONNUMBER}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; |
|
return''; |
|
} |
|
|
sub end_td { |
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') { |
if ($target eq 'web') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $current_row = $Apache::londefdef::table[-1]{'row_number'}; |
$Apache::londefdef::TD_redirection =0; |
my $data=&Apache::lonxml::endredirection(); |
&end_td_tex($parstack,$parser,$safeeval); |
my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
|
if (defined $TeXwidth) { |
|
my $current_length=&recalc($TeXwidth); |
|
$current_length=~/(\d+)/; |
|
$Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; |
|
$Apache::londefdef::table[-1]{'length'} .= '0,'; |
|
} else { |
|
if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) { |
|
my $current_length=&recalc($1); |
|
$current_length=~/(\d+\.?\d*)/; |
|
$Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; |
|
$Apache::londefdef::table[-1]{'length'} .= '0,'; |
|
} else { |
|
$data=~s/^\s+(\S.*)/$1/; |
|
$data=~s/(.*\S)\s+$/$1/; |
|
my $current_length=2*length($data); |
|
$Apache::londefdef::table[-1]{'length'} .= $current_length.','; |
|
$Apache::londefdef::table[-1]{'TeXlength'} .= '0,'; |
|
} |
|
} |
|
for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { |
|
$data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
|
} |
|
@{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{TOBECHANGEDONNUMBER}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; |
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 1926 sub start_img {
|
Line 2016 sub start_img {
|
my $width_param = ''; |
my $width_param = ''; |
my $height_param = ''; |
my $height_param = ''; |
my $scaling = .3; |
my $scaling = .3; |
|
|
if ($target eq 'web') { |
if ($target eq 'web') { |
if ($ENV{'browser.imagesuppress'} ne 'on') { |
if ($ENV{'browser.imagesuppress'} ne 'on') { |
$currentstring = $token->[4]; |
$currentstring.= $token->[4]; |
} else { |
} else { |
my $alttag= &Apache::lonxml::get_param |
my $alttag= &Apache::lonxml::get_param |
('alt',$parstack,$safeeval,undef,1); |
('alt',$parstack,$safeeval,undef,1); |
Line 1937 sub start_img {
|
Line 2026 sub start_img {
|
$alttag=&Apache::lonmeta::alttag |
$alttag=&Apache::lonmeta::alttag |
($Apache::lonxml::pwd[-1],$src); |
($Apache::lonxml::pwd[-1],$src); |
} |
} |
$currentstring='[IMAGE: '.$alttag.']'; |
$currentstring.='[IMAGE: '.$alttag.']'; |
} |
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
&image_replication($src); |
&image_replication($src); |
|
|
#if original gif/jpg/png file exist do following: |
#if original gif/jpg/png file exist do following: |
if (-e $src) { |
if (-e $src) { |
#defines the default size of image |
#defines the default size of image |
Line 1967 sub start_img {
|
Line 2055 sub start_img {
|
} elsif ($width ne '') { |
} elsif ($width ne '') { |
$width_param = $width*$scaling; |
$width_param = $width*$scaling; |
} |
} |
|
if ($width_param > $ENV{'form.textwidth'}) {$width_param =0.95*$ENV{'form.textwidth'}} |
my $file; |
my $file; |
my $path; |
my $path; |
if ($src =~ m!(.*)/([^/]*)$!) { |
if ($src =~ m!(.*)/([^/]*)$!) { |
Line 2206 sub end_frameset {
|
Line 2295 sub end_frameset {
|
return $currentstring; |
return $currentstring; |
} |
} |
|
|
|
#-- <xmp> |
|
sub start_xmp { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
|
my $currentstring = ''; |
|
if ($target eq 'web') { |
|
$currentstring .= $token->[4]; |
|
} elsif ($target eq 'tex') { |
|
$currentstring .= '\begin{verbatim}'; |
|
} |
|
return $currentstring; |
|
} |
|
|
|
sub end_xmp { |
|
my ($target,$token) = @_; |
|
my $currentstring = ''; |
|
if ($target eq 'web') { |
|
$currentstring .= $token->[2]; |
|
} elsif ($target eq 'tex') { |
|
$currentstring .= '\end{verbatim}'; |
|
} |
|
return $currentstring; |
|
} |
|
|
|
|
#-- <pre> |
#-- <pre> |
sub start_pre { |
sub start_pre { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
Line 2352 sub start_base {
|
Line 2465 sub start_base {
|
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3068 sub end_wbr {
|
Line 3181 sub end_wbr {
|
return $currentstring; |
return $currentstring; |
} |
} |
|
|
|
|
#-- <hideweboutput> tag |
#-- <hideweboutput> tag |
sub start_hideweboutput { |
sub start_hideweboutput { |
my ($target,$token) = @_; |
my ($target,$token) = @_; |