--- loncom/xml/londefdef.pm 2003/10/16 15:29:45 1.182
+++ loncom/xml/londefdef.pm 2003/10/24 21:25:50 1.187
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.182 2003/10/16 15:29:45 sakharuk Exp $
+# $Id: londefdef.pm,v 1.187 2003/10/24 21:25:50 albertel Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -50,6 +50,7 @@ use Apache::File();
use Image::Magick;
use Apache::lonmenu();
use Apache::lonmeta();
+use Apache::Constants qw(:common);
$Apache::londefdef::TD_redirection=0;
@@ -159,7 +160,7 @@ sub start_html {
&tth::tthoptions('-L -u0');
}
}
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'edit') {
$currentstring = &Apache::lonxml::xmlbegin().
&Apache::lonxml::fontsettings();
} elsif ($target eq 'tex') {
@@ -344,7 +345,7 @@ sub start_title {
}
if ($target eq 'meta') {
$currentstring='
';
- &start_output();
+ &start_output($target);
}
return $currentstring;
}
@@ -358,7 +359,7 @@ sub end_title {
$currentstring .= '}';
}
if ($target eq 'meta') {
- &end_output();
+ &end_output($target);
$currentstring='';
}
return $currentstring;
@@ -654,7 +655,7 @@ sub start_h1 {
$currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
} elsif ($target eq 'meta') {
$currentstring='';
- &start_output();
+ &start_output($target);
}
return $currentstring;
}
@@ -676,7 +677,7 @@ sub end_h1 {
}
$currentstring .= '}}'.$post;
} elsif ($target eq 'meta') {
- &end_output();
+ &end_output($target);
$currentstring='';
}
return $currentstring;
@@ -1322,7 +1323,7 @@ sub start_sub {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\$_{ ";
+ $currentstring .= "\$_{";
}
return $currentstring;
}
@@ -1333,7 +1334,7 @@ sub end_sub {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= " }\$";
+ $currentstring .= "}\$";
}
return $currentstring;
}
@@ -1345,7 +1346,7 @@ sub start_sup {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\$^{ ";
+ $currentstring .= "\$^{";
}
return $currentstring;
}
@@ -1356,7 +1357,7 @@ sub end_sup {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= " }\$";
+ $currentstring .= "}\$";
}
return $currentstring;
}
@@ -1994,14 +1995,11 @@ sub end_td_tex {
$newdata=~s/\\vskip \d*\.?\d*\s*mm/THISISJUSTTEMPORARYSEPARATOR/g;
my @newdata=split(/THISISJUSTTEMPORARYSEPARATOR/,$newdata);
foreach my $elementdata (@newdata) {
- $elementdata=~s/^\s+(\S.*)/$1/;
- $elementdata=~s/(.*\S)\s+$/$1/;
- $elementdata=~s/(\s)+/$1/;
- my $lengthnewdata=1.8*length($elementdata);
+ my $lengthnewdata=1.8*LATEX_length($elementdata);
if ($lengthnewdata>$current_length) {$current_length=$lengthnewdata;}
}
} else {
- $current_length=1.8*length($data);
+ $current_length=1.8*LATEX_length($data);
}
$Apache::londefdef::table[-1]{'length'} .= $current_length.',';
$Apache::londefdef::table[-1]{'TeXlength'} .= '0,';
@@ -2181,6 +2179,44 @@ sub start_img {
# tag will care about replication
}
}
+ } elsif ($target eq 'edit') {
+ $currentstring .=&Apache::edit::tag_start($target,$token);
+ $currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
+ &Apache::edit::browse('src',undef,'alt').' '.
+ &Apache::edit::search('src',undef,'alt').'
';
+ $currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'
';
+ $currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5);
+ $currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'
';
+ $currentstring .=&Apache::edit::text_arg('TeXwidth (mm):','TeXwidth',$token,5);
+ $currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);
+ $currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
+ my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval);
+ my $alt=&Apache::lonxml::get_param('alt',$parstack,$safeeval);
+ my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval);
+ my $height=&Apache::lonxml::get_param('height',$parstack,$safeeval);
+ $currentstring .= '[2]{'width'} && !$token->[2]{'height'}) {
+ $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+ &image_replication($src);
+ if (-e $src) {
+ my $image = Image::Magick->new;
+ my ($width, $height, $size, $format) = $image->Ping($src);
+ if ($width && $height) {
+ $token->[2]{'width'} =$width;
+ $token->[2]{'height'}=$height;
+ $constructtag=1;
+ }
+ }
+ }
+ if ($constructtag) {$currentstring=&Apache::edit::rebuild_tag($token);}
}
return $currentstring;
}
@@ -3297,18 +3333,14 @@ sub end_hideweboutput {
sub image_replication {
my $src = shift;
- if (not -e $src) {
- #replicates image itself
- &Apache::lonnet::repcopy($src);
- #replicates eps or ps
- my $newsrc = $src;
- $newsrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i;
- if (not -e $newsrc) {
- if (&Apache::lonnet::repcopy($newsrc) ne 'OK') {
- $newsrc =~ s/\.eps$/\.ps/;
- &Apache::lonnet::repcopy($newsrc);
- }
- }
+ if (not -e $src) { &Apache::lonnet::repcopy($src); }
+ #replicates eps or ps
+ my $epssrc = my $pssrc = $src;
+ $epssrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i;
+ $pssrc =~ s/\.(gif|jpg|jpeg|png)$/.ps/i;
+ if (not -e $epssrc && not -e $pssrc) {
+ my $result=&Apache::lonnet::repcopy($epssrc);
+ if ($result ne OK) { &Apache::lonnet::repcopy($pssrc); }
}
return '';
}
@@ -3331,5 +3363,26 @@ sub recalc {
return $value.' mm';
}
+sub LATEX_length {
+ my $garbage=shift;
+ $garbage=~s/^\s+(\S.*)/$1/;
+ $garbage=~s/(.*\S)\s+$/$1/;
+ $garbage=~s/(\s)+/$1/;
+ $garbage=~s/(\\begin{([^\}]+)}|\\end{([^\}]+)})//g;
+ $garbage=~s/(\$\_\{|\$\_|\$\^{|\$\^|\}\$|\$)//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/(\\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/(\\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)/1/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)/ /g;
+ $garbage=~s/(\\hat{([^}]+)}|\\check{([^}]+)}|\\dot{([^}]+)}|\\breve{([^}]+)}|\\acute{([^}]+)}|\\ddot{([^}]+)}|\\grave{([^}]+)}|\\tilde{([^}]+)}|\\mathring{([^}]+)}|\\bar{([^}]+)}|\\vec{([^}]+)})/$1/g;
+ my $value=length($garbage);
+ return $value;
+}
+
+
+
+
1;
__END__