diff options
author | Lee Daniel Crocker <lcrocker@users.mediawiki.org> | 2003-04-14 23:10:40 +0000 |
---|---|---|
committer | Lee Daniel Crocker <lcrocker@users.mediawiki.org> | 2003-04-14 23:10:40 +0000 |
commit | d82c14fb4fbac288b42ca5918b0a72f33ecb1e69 (patch) | |
tree | 382c2ed7e9a167c7520d1e70aad1aef0874bbe8c /texvc.phtml | |
download | mediawikicore-d82c14fb4fbac288b42ca5918b0a72f33ecb1e69.tar.gz mediawikicore-d82c14fb4fbac288b42ca5918b0a72f33ecb1e69.zip |
Initial revision
Notes
Notes:
http://mediawiki.org/wiki/Special:Code/MediaWiki/1284
http://mediawiki.org/wiki/Special:Code/MediaWiki/1286
Diffstat (limited to 'texvc.phtml')
-rw-r--r-- | texvc.phtml | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/texvc.phtml b/texvc.phtml new file mode 100644 index 000000000000..7467f8132035 --- /dev/null +++ b/texvc.phtml @@ -0,0 +1,155 @@ +<? +gobal $IP; +include( "./LocalSettings.php" ); +include( "$IP/Setup.php" ); +header( "Content-type: text/xml; charset={$wgInputEncoding}" ); +print "<"; +print "?xml version=\"1.0\" encoding=\"utf-8\"?"; +print ">"; +?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head><title>texvc</title></head><body> +<? +print "<form method=\"post\" action=\"{$wgServer}{$wgScriptPath}/texvc_cgi.phtml\">" +?> +<textarea name='math' rows='10' cols='80'><? + global $math; + $math = preg_replace ("/\\\\\\\\/", '\\', $math); + print $math; +?></textarea><br /><input type="submit" value="Preview" name="preview" /></form> +<? +function xlinkToMathImage ( $tex, $outputhash ) +{ + global $wgMathPath; + return "<img src=\"".$wgMathPath."/".$outputhash.".png\" alt=\"".wfEscapeHTML($tex)."\" />"; +} + +function texvc_cgi_renderMath( $tex ) +{ + global $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding; + $mf = wfMsg( "math_failure" ); + $munk = wfMsg( "math_unknown_error" ); + + $image = ""; + $outhtml = ""; + $outtex = ""; + + $fname = "texvc_cgi_renderMath"; + + $md5 = md5($tex); + $md5_sql = mysql_escape_string(pack("H32", $md5)); + $sql = "SELECT math_outputhash,math_html_conservativeness,math_html,math_mathml FROM math WHERE math_inputhash = '".$md5_sql."'"; + + $res = wfQuery( $sql, $fname ); + if ( wfNumRows( $res ) == 0 ) + { + $cmd = "./math/texvc ".escapeshellarg($wgTmpDirectory)." ". + escapeshellarg($wgMathDirectory)." ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding); + $contents = `$cmd`; + + if (strlen($contents) == 0) + return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>"; + $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 = ''; + $sql_mathml = 'NULL'; + } else if ($retval == "X") { + $outhtml = ''; + $mathml = substr ($contents, 33); + $sql_html = 'NULL'; + $sql_mathml = "'".mysql_escape_string($mathml)."'"; + $conservativeness = 0; + } else if ($retval == "+") { + $outhtml = ''; + $mathml = ''; + $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 "<h3>".$mf." (".$errmsg.substr($contents, 1)."): ".wfEscapeHTML($tex)."</h3>"; + } + + $outmd5 = substr ($contents, 1, 32); + if (!preg_match("/^[a-f0-9]{32}$/", $outmd5)) + return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>"; + + $outmd5_sql = mysql_escape_string(pack("H32", $outmd5)); + + $sql = "INSERT INTO math VALUES ('".$md5_sql."', '".$outmd5_sql."', ".$conservativeness.", ".$sql_html.", ".$sql_mathml.")"; + + $res = wfQuery( $sql, $fname ); +// we don't really care if it fails + } else { + $rpage = wfFetchObject ( $res ); + $outmd5 = unpack ("H32md5", $rpage->math_outputhash); + $outmd5 = $outmd5 ['md5']; + $outhtml = $rpage->math_html; + $conservativeness = $rpage->math_html_conservativeness; + $mathml = $rpage->math_mathml; + } + if ($mathml == '') + $mathml = "<h3>Failed to generate MathML</h3>"; + else + $mathml = "<h3>MathML</h3><math xmlns=\"http://www.w3.org/1998/Math/MathML\">$mathml</math>"; + $image = "<h3>Image</h3>" . xlinkToMathImage ( $tex, $outmd5 ); + $cmd = "./math/texvc_tex ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding); + $outtex = `$cmd`; + + if ( $outhtml == '' ) + $outhtml = "<h3>Failed to generate HTML</h3>"; + else + if ( $conservativeness == 2) + $outhtml = "<h3>HTML (conservative)</h3>" . $outhtml; + else if ( $conservativeness == 1) + $outhtml = "<h3>HTML (moderate)</h3>" . $outhtml; + else + $outhtml = "<h3>HTML (liberal)</h3>" . $outhtml; + + if ( $outtex == '' ) + $outtex = "<h3>Failed to generate TeX</h3>"; + else + $outtex = "<h3>TeX</h3>" . wfEscapeHTML($outtex); + + return $outtex . $outhtml . $mathml . $image; +} + +global $math; +if ($math != '') + print texvc_cgi_renderMath($math); +?> +</body></html> |