";
?>
texvc
"
?>
";
}
function texvc_cgi_renderMath( $tex )
{
global $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding;
$dbr =& wfGetDB( DB_SLAVE );
$mf = wfMsg( "math_failure" );
$munk = wfMsg( "math_unknown_error" );
$image = "";
$outhtml = "";
$outtex = "";
$fname = "texvc_cgi_renderMath";
$md5 = md5($tex);
$md5_sql = pack("H32", $md5);
$mathTable = $dbr->tableName( 'math' );
$rpage = $dbr->getArray( 'math', array('math_outputhash','math_html_conservativeness','math_html','math_mathml'),
array( 'math_inputhash' => $md5_sql ) );
if ( $rpage === false )
{
$cmd = "./math/texvc ".wfEscapeShellArg($wgTmpDirectory)." ".
wfEscapeShellArg($wgMathDirectory)." ".wfEscapeShellArg($tex)." ".wfEscapeShellArg($wgInputEncoding);
$contents = `$cmd`;
if (strlen($contents) == 0)
return "".$mf." (".$munk."): ".wfEscapeHTML($tex)."
";
$retval = substr ($contents, 0, 1);
if (($retval == "C") || ($retval == "M") || ($retval == "L")) {
if ($retval == "C")
$conservativeness = 2;
else if ($retval == "M")
$conservativeness = 1;
else
$conservativeness = 0;
$outdata = substr ($contents, 33);
$i = strpos($outdata, "\000");
$outhtml = substr($outdata, 0, $i);
$mathml = substr($outdata, $i+1);
#$sql_html = "'".mysql_escape_string($outhtml)."'";
#$sql_mathml = "'".mysql_escape_string($mathml)."'";
} else if (($retval == "c") || ($retval == "m") || ($retval == "l")) {
$outhtml = substr ($contents, 33);
if ($retval == "c")
$conservativeness = 2;
else if ($retval == "m")
$conservativeness = 1;
else
$conservativeness = 0;
#$sql_html = "'".mysql_escape_string($outhtml)."'";
$mathml = NULL;
#$sql_mathml = 'NULL';
} else if ($retval == "X") {
$outhtml = NULL;
$mathml = substr ($contents, 33);
#$sql_html = 'NULL';
#$sql_mathml = "'".mysql_escape_string($mathml)."'";
$conservativeness = 0;
} else if ($retval == "+") {
$outhtml = NULL;
$mathml = NULL;
#$sql_html = 'NULL';
#$sql_mathml = 'NULL';
$conservativeness = 0;
} else {
if ($retval == "E")
$errmsg = wfMsg( "math_lexing_error" );
else if ($retval == "S")
$errmsg = wfMsg( "math_syntax_error" );
else if ($retval == "F")
$errmsg = wfMsg( "math_unknown_function" );
else
$errmsg = $munk;
return "".$mf." (".$errmsg.substr($contents, 1)."): ".wfEscapeHTML($tex)."
";
}
$outmd5 = substr ($contents, 1, 32);
if (!preg_match("/^[a-f0-9]{32}$/", $outmd5))
return "".$mf." (".$munk."): ".wfEscapeHTML($tex)."
";
$outmd5_sql = pack("H32", $outmd5);
# Someone may have inserted the same hash since the SELECT, but that's no big deal, just ignore errors
$dbw =& wfGetDB( DB_MASTER );
$dbw->insertArray( 'math',
array(
'math_inputhash' => $md5_sql,
'math_outputhash' => $outmd5_sql,
'math_html_conservativeness' => $conservativeness,
'math_html' => $outhtml,
'math_mathml' => $mathml,
), $fname, array( 'IGNORE' )
);
// we don't really care if it fails
} else {
$rpage = $dbr->fetchObject ( $res );
$outmd5 = unpack ("H32md5", $rpage->math_outputhash);
$outmd5 = $outmd5 ['md5'];
$outhtml = $rpage->math_html;
$conservativeness = $rpage->math_html_conservativeness;
$mathml = $rpage->math_mathml;
}
if ( is_null( $mathml ) || $mathml === '' )
$mathml = "Failed to generate MathML
";
else
$mathml = "MathML
";
$image = "Image
" . xlinkToMathImage ( $tex, $outmd5 );
$cmd = "./math/texvc_tex ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding);
$outtex = `$cmd`;
if ( is_null( $outhtml ) || $outhtml === '' )
$outhtml = "Failed to generate HTML
";
else
if ( $conservativeness == 2)
$outhtml = "HTML (conservative)
" . $outhtml;
else if ( $conservativeness == 1)
$outhtml = "HTML (moderate)
" . $outhtml;
else
$outhtml = "HTML (liberal)
" . $outhtml;
if ( $outtex == '' )
$outtex = "Failed to generate TeX
";
else
$outtex = "TeX
" . wfEscapeHTML($outtex);
return $outtex . $outhtml . $mathml . $image;
}
global $math;
if ($math != '')
print texvc_cgi_renderMath($math);
?>