[LON-CAPA-cvs] cvs: loncom /xml lontexconvert.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Fri, 19 Mar 2004 17:54:18 -0000
albertel Fri Mar 19 12:54:18 2004 EDT
Modified files:
/loncom/xml lontexconvert.pm
Log:
- fix problem with trying to call &xmlparse('<m>stuff</m>');
Index: loncom/xml/lontexconvert.pm
diff -u loncom/xml/lontexconvert.pm:1.35 loncom/xml/lontexconvert.pm:1.36
--- loncom/xml/lontexconvert.pm:1.35 Tue Mar 9 10:53:18 2004
+++ loncom/xml/lontexconvert.pm Fri Mar 19 12:54:17 2004
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# TeX Conversion Module
#
-# $Id: lontexconvert.pm,v 1.35 2004/03/09 15:53:18 albertel Exp $
+# $Id: lontexconvert.pm,v 1.36 2004/03/19 17:54:17 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -85,6 +85,38 @@
# ================================================================== Conversion
$Apache::lontexconvert::messedup=0;
+
+# we need this routine because &converted can get called from inside
+# of the safespace (through &xmlparse('<m>stuff</m>') which doesn't
+# allow the opcode for alarm, so we need to compile this before we get
+# into the safe space since opcode checks only occur at compile time
+sub convert_real {
+ my ($texstring)=@_;
+ my ($xmlstring,$errorstring);
+ local $SIG{SEGV}=sub { $Apache::lontexconvert::messedup=1; die; };
+ local $SIG{ALRM}=sub {
+ $xmlstring='['.&mt("TeX unconverted due to errors").']';
+ $Apache::lontexconvert::messedup=1;
+ die &mt("TeX unconverted due to errors");
+ };
+ alarm($Apache::lonnet::perlvar{'lonScriptTimeout'});
+ if ($ENV{'browser.mathml'}) {
+ $xmlstring=&tth::ttm($$texstring);
+ $xmlstring=~s/\<math\>/\<math xmlns=\"\&mathns\;\"\>/g;
+ $xmlstring=~s/\<br\>/\<br\/\>/g;
+ $xmlstring=~s/\<p\>/\<p\>\<\/p\>/g;
+ $errorstring.=&tth::ttmerror();
+ } else {
+ $xmlstring=&tth::tth($$texstring);
+ $errorstring.=&tth::ttherror();
+ $xmlstring=~s-</font(\s*)>-</font>-g;
+ }
+ $xmlstring=~s/^\s*//;
+ $xmlstring=~s/\s*$//;
+ alarm(0);
+ return ($xmlstring,$errorstring);
+}
+
sub converted {
my $texstring=shift;
my $xmlstring='['.&mt('UNDISPLAYABLE').']';
@@ -92,28 +124,7 @@
return '['.&mt('TeX unconverted due to previous errors').']';
}
eval(<<'ENDCONV');
- {
- local $SIG{SEGV}=sub { $Apache::lontexconvert::messedup=1; die; };
- local $SIG{ALRM}=sub {
- $xmlstring='['.&mt("TeX unconverted due to errors").']';
- $Apache::lontexconvert::messedup=1;
- die &mt("TeX unconverted due to errors"); };
- alarm($Apache::lonnet::perlvar{'lonScriptTimeout'});
- if ($ENV{'browser.mathml'}) {
- $xmlstring=&tth::ttm($$texstring);
- $xmlstring=~s/\<math\>/\<math xmlns=\"\&mathns\;\"\>/g;
- $xmlstring=~s/\<br\>/\<br\/\>/g;
- $xmlstring=~s/\<p\>/\<p\>\<\/p\>/g;
- $errorstring.=&tth::ttmerror();
- } else {
- $xmlstring=&tth::tth($$texstring);
- $errorstring.=&tth::ttherror();
- $xmlstring=~s-</font(\s*)>-</font>-g;
- }
- $xmlstring=~s/^\s*//;
- $xmlstring=~s/\s*$//;
- alarm(0);
- }
+ ($xmlstring,$errorstring)=&convert_real($texstring)
ENDCONV
if ($@) {
$errorstring.=&mt("Evaluation Error: ").$@;