diff options
Diffstat (limited to 'texvc.phtml')
-rw-r--r-- | texvc.phtml | 254 |
1 files changed, 133 insertions, 121 deletions
diff --git a/texvc.phtml b/texvc.phtml index 7a9127185227..7f5e1a04721e 100644 --- a/texvc.phtml +++ b/texvc.phtml @@ -7,148 +7,160 @@ 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"> + 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> <?php 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; + global $math; + $math = preg_replace ("/\\\\\\\\/", '\\', $math); + print $math; ?></textarea><br /><input type="submit" value="Preview" name="preview" /></form> <?php function xlinkToMathImage ( $tex, $outputhash ) { - global $wgMathPath; - return "<img src=\"".$wgMathPath."/".$outputhash.".png\" alt=\"".wfEscapeHTML($tex)."\" />"; + 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, 0, $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; + global $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding; + $dbr =& wfGetDB( DB_READ ); + $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 "<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 = 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 "<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 = 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_WRITE ); + $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 { - 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>"; + $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; } - - $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, 0, $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; + if ( is_null( $mathml ) || $mathml === '' ) + $mathml = "<h3>Failed to generate MathML</h3>"; else - $outhtml = "<h3>HTML (liberal)</h3>" . $outhtml; + $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 ( $outtex == '' ) - $outtex = "<h3>Failed to generate TeX</h3>"; - else - $outtex = "<h3>TeX</h3>" . wfEscapeHTML($outtex); + if ( is_null( $outhtml ) || $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; + return $outtex . $outhtml . $mathml . $image; } global $math; if ($math != '') - print texvc_cgi_renderMath($math); + print texvc_cgi_renderMath($math); ?> </body></html> |