3 function linkToMathImage ( $tex, $outputhash )
6 return "<img src=\"".$wgMathPath."/".$outputhash.".png\" alt=\"".wfEscapeHTML($tex)."\">";
9 function renderMath( $tex )
11 global $wgUser, $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding;
12 $mf = wfMsg( "math_failure" );
13 $munk = wfMsg( "math_unknown_error" );
15 $fname = "renderMath";
17 $math = $wgUser->getOption("math");
19 return ('$ '.wfEscapeHTML($tex).' $');
22 $md5_sql = mysql_escape_string(pack("H32", $md5));
24 $sql = "SELECT math_outputhash FROM math WHERE math_inputhash = '".$md5_sql."'";
26 $sql = "SELECT math_outputhash,math_html_conservativeness,math_html FROM math WHERE math_inputhash = '".$md5_sql."'";
28 $res = wfQuery( $sql, DB_READ
, $fname );
30 if( $rpage = wfFetchObject ( $res ) ) {
31 $outputhash = unpack( "H32md5", $rpage->math_outputhash
. " " );
32 $outputhash = $outputhash ['md5'];
33 if( file_exists( "$wgMathDirectory/$outputhash.png" ) ) {
34 if (($math == 0) ||
($rpage->math_html
== '') ||
(($math == 1) && ($rpage->math_html_conservativeness
!= 2)) ||
(($math == 4) && ($rpage->math_html_conservativeness
== 0)))
35 return linkToMathImage ( $tex, $outputhash );
37 return $rpage->math_html
;
41 $cmd = "./math/texvc ".escapeshellarg($wgTmpDirectory)." ".
42 escapeshellarg($wgMathDirectory)." ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding);
45 if (strlen($contents) == 0)
46 return "<b>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</b>";
47 $retval = substr ($contents, 0, 1);
48 if (($retval == "C") ||
($retval == "M") ||
($retval == "L")) {
50 $conservativeness = 2;
51 else if ($retval == "M")
52 $conservativeness = 1;
54 $conservativeness = 0;
55 $outdata = substr ($contents, 33);
57 $i = strpos($outdata, "\000");
59 $outhtml = substr($outdata, 0, $i);
60 $mathml = substr($outdata, $i+
1);
62 $sql_html = "'".mysql_escape_string($outhtml)."'";
63 $sql_mathml = "'".mysql_escape_string($mathml)."'";
64 } else if (($retval == "c") ||
($retval == "m") ||
($retval == "l")) {
65 $outhtml = substr ($contents, 33);
67 $conservativeness = 2;
68 else if ($retval == "m")
69 $conservativeness = 1;
71 $conservativeness = 0;
72 $sql_html = "'".mysql_escape_string($outhtml)."'";
75 } else if ($retval == "X") {
77 $mathml = substr ($contents, 33);
79 $sql_mathml = "'".mysql_escape_string($mathml)."'";
80 $conservativeness = 0;
81 } else if ($retval == "+") {
86 $conservativeness = 0;
89 $errmsg = wfMsg( "math_lexing_error" );
90 else if ($retval == "S")
91 $errmsg = wfMsg( "math_syntax_error" );
92 else if ($retval == "F")
93 $errmsg = wfMsg( "math_unknown_function" );
96 return "<h3>".$mf." (".$errmsg.substr($contents, 1)."): ".wfEscapeHTML($tex)."</h3>";
99 $outmd5 = substr ($contents, 1, 32);
100 if (!preg_match("/^[a-f0-9]{32}$/", $outmd5))
101 return "<b>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</b>";
103 $outmd5_sql = mysql_escape_string(pack("H32", $outmd5));
105 $sql = "REPLACE INTO math VALUES ('".$md5_sql."', '".$outmd5_sql."', ".$conservativeness.", ".$sql_html.", ".$sql_mathml.")";
107 $res = wfQuery( $sql, DB_READ
, $fname );
108 # we don't really care if it fails
110 if (($math == 0) ||
($rpage->math_html
== '') ||
(($math == 1) && ($conservativeness != 2)) ||
(($math == 4) && ($conservativeness == 0)))
111 return linkToMathImage($tex, $outmd5);