<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.lensovet.net/~sysadmin/w/index.php?action=history&amp;feed=atom&amp;title=Help%3ARunning_MediaWiki_on_Windows%2Fmath.php</id>
	<title>Help:Running MediaWiki on Windows/math.php - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.lensovet.net/~sysadmin/w/index.php?action=history&amp;feed=atom&amp;title=Help%3ARunning_MediaWiki_on_Windows%2Fmath.php"/>
	<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Help:Running_MediaWiki_on_Windows/math.php&amp;action=history"/>
	<updated>2026-05-04T05:03:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Help:Running_MediaWiki_on_Windows/math.php&amp;diff=1824&amp;oldid=prev</id>
		<title>Wadmin: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Help:Running_MediaWiki_on_Windows/math.php&amp;diff=1824&amp;oldid=prev"/>
		<updated>2006-07-19T05:34:40Z</updated>

		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 05:34, 19 July 2006&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Wadmin</name></author>
		
	</entry>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Help:Running_MediaWiki_on_Windows/math.php&amp;diff=1823&amp;oldid=prev</id>
		<title>BR at 02:15, 24 March 2006</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Help:Running_MediaWiki_on_Windows/math.php&amp;diff=1823&amp;oldid=prev"/>
		<updated>2006-03-24T02:15:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * LaTeX Rendering Class&lt;br /&gt;
 * Copyright (C) 2003  Benjamin Zeiss &amp;lt;zeiss@math.uni-goettingen.de&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or&lt;br /&gt;
 * modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 * License as published by the Free Software Foundation; either&lt;br /&gt;
 * version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
 * Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
 * --------------------------------------------------------------------&lt;br /&gt;
 * @author Benjamin Zeiss &amp;lt;zeiss@math.uni-goettingen.de&amp;gt;&lt;br /&gt;
 * @version v0.8&lt;br /&gt;
 * @package latexrender&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Error code:&lt;br /&gt;
 * 1. Too long formulas&lt;br /&gt;
 * 2. formula contains tags in the blacklist&lt;br /&gt;
 * 3. formula incorrect, can't be render&lt;br /&gt;
 * 4. can't exec tex command&lt;br /&gt;
 *    maybe directory unwritable,can't create temporary files&lt;br /&gt;
 * 5. formula image too big&lt;br /&gt;
 * 6. can't copy image file to cahed formula directory&lt;br /&gt;
 *    maybe ImageMagick fail&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class LatexRender {&lt;br /&gt;
&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
    // Variable Definitions&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
    var $_picture_path = &amp;quot;&amp;quot;;&lt;br /&gt;
    var $_picture_path_httpd = &amp;quot;&amp;quot;;&lt;br /&gt;
    var $_tmp_dir = &amp;quot;&amp;quot;;&lt;br /&gt;
    // i was too lazy to write mutator functions for every single program used&lt;br /&gt;
    // just access it outside the class or change it here if nescessary&lt;br /&gt;
    var $_latex_path	= 'latex.exe';&lt;br /&gt;
    var $_dvips_path	= 'dvips.exe';&lt;br /&gt;
    var $_convert_path	= 'convert.exe';&lt;br /&gt;
    var $_identify_path	= 'identify.exe';&lt;br /&gt;
&lt;br /&gt;
    var $_formula_density = 120;&lt;br /&gt;
    var $_xsize_limit = 700;&lt;br /&gt;
    var $_ysize_limit = 700;&lt;br /&gt;
    var $_string_length_limit = 800;&lt;br /&gt;
	var $_font_size = 10;&lt;br /&gt;
	var $_latexclass = &amp;quot;article&amp;quot;; //install extarticle class if you wish to have smaller font sizes&lt;br /&gt;
    var $_tmp_filename;&lt;br /&gt;
	var $_image_format = &amp;quot;gif&amp;quot;; //change to png if you prefer&lt;br /&gt;
    // this most certainly needs to be extended. in the long term it is planned to use&lt;br /&gt;
    // a positive list for more security. this is hopefully enough for now. i'd be glad&lt;br /&gt;
    // to receive more bad tags !&lt;br /&gt;
    var $_latex_tags_blacklist = array(&lt;br /&gt;
        &amp;quot;include&amp;quot;,&amp;quot;def&amp;quot;,&amp;quot;command&amp;quot;,&amp;quot;loop&amp;quot;,&amp;quot;repeat&amp;quot;,&amp;quot;open&amp;quot;,&amp;quot;toks&amp;quot;,&amp;quot;output&amp;quot;,&amp;quot;input&amp;quot;,&lt;br /&gt;
        &amp;quot;catcode&amp;quot;,&amp;quot;name&amp;quot;,&amp;quot;^^&amp;quot;,&lt;br /&gt;
        &amp;quot;\\every&amp;quot;,&amp;quot;\\errhelp&amp;quot;,&amp;quot;\\errorstopmode&amp;quot;,&amp;quot;\\scrollmode&amp;quot;,&amp;quot;\\nonstopmode&amp;quot;,&amp;quot;\\batchmode&amp;quot;,&lt;br /&gt;
        &amp;quot;\\read&amp;quot;,&amp;quot;\\write&amp;quot;,&amp;quot;csname&amp;quot;,&amp;quot;\\newhelp&amp;quot;,&amp;quot;\\uppercase&amp;quot;, &amp;quot;\\lowercase&amp;quot;,&amp;quot;\\relax&amp;quot;,&amp;quot;\\aftergroup&amp;quot;,&lt;br /&gt;
        &amp;quot;\\afterassignment&amp;quot;,&amp;quot;\\expandafter&amp;quot;,&amp;quot;\\noexpand&amp;quot;,&amp;quot;\\special&amp;quot;&lt;br /&gt;
        );&lt;br /&gt;
    var $_errorcode = 0;&lt;br /&gt;
	var $_errorextra = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
    // constructor&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Initializes the class&lt;br /&gt;
     *&lt;br /&gt;
     * @param string path where the rendered pictures should be stored&lt;br /&gt;
     * @param string same path, but from the httpd chroot&lt;br /&gt;
     */&lt;br /&gt;
    function LatexRender($picture_path,$picture_path_httpd,$tmp_dir) {&lt;br /&gt;
        $this-&amp;gt;_picture_path = $picture_path;&lt;br /&gt;
        $this-&amp;gt;_picture_path_httpd = $picture_path_httpd;&lt;br /&gt;
        $this-&amp;gt;_tmp_dir = $tmp_dir;&lt;br /&gt;
        $this-&amp;gt;_tmp_filename = md5(rand());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
    // public functions&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Picture path Mutator function&lt;br /&gt;
     *&lt;br /&gt;
     * @param string sets the current picture path to a new location&lt;br /&gt;
     */&lt;br /&gt;
    function setPicturePath($name) {&lt;br /&gt;
        $this-&amp;gt;_picture_path = $name;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Picture path Mutator function&lt;br /&gt;
     *&lt;br /&gt;
     * @returns the current picture path&lt;br /&gt;
     */&lt;br /&gt;
    function getPicturePath() {&lt;br /&gt;
        return $this-&amp;gt;_picture_path;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Picture path HTTPD Mutator function&lt;br /&gt;
     *&lt;br /&gt;
     * @param string sets the current httpd picture path to a new location&lt;br /&gt;
     */&lt;br /&gt;
    function setPicturePathHTTPD($name) {&lt;br /&gt;
        $this-&amp;gt;_picture_path_httpd = $name;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Picture path HTTPD Mutator function&lt;br /&gt;
     *&lt;br /&gt;
     * @returns the current picture path&lt;br /&gt;
     */&lt;br /&gt;
    function getPicturePathHTTPD() {&lt;br /&gt;
        return $this-&amp;gt;_picture_path_httpd;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Tries to match the LaTeX Formula given as argument against the&lt;br /&gt;
     * formula cache. If the picture has not been rendered before, it'll&lt;br /&gt;
     * try to render the formula and drop it in the picture cache directory.&lt;br /&gt;
     *&lt;br /&gt;
     * @param string formula in LaTeX format&lt;br /&gt;
     * @returns the webserver based URL to a picture which contains the&lt;br /&gt;
     * requested LaTeX formula. If anything fails, the resultvalue is false.&lt;br /&gt;
     */&lt;br /&gt;
    function getFormulaURL($latex_formula) {&lt;br /&gt;
        // circumvent certain security functions of web-software which&lt;br /&gt;
        // is pretty pointless right here&lt;br /&gt;
&lt;br /&gt;
        $latex_formula = preg_replace(&amp;quot;/&amp;amp;gt;/i&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, $latex_formula);&lt;br /&gt;
        $latex_formula = preg_replace(&amp;quot;/&amp;amp;lt;/i&amp;quot;, &amp;quot;&amp;lt;&amp;quot;, $latex_formula);&lt;br /&gt;
&lt;br /&gt;
        $formula_hash = md5($latex_formula);&lt;br /&gt;
&lt;br /&gt;
        $filename = 'math-' . $formula_hash.&amp;quot;.&amp;quot;.$this-&amp;gt;_image_format;&lt;br /&gt;
        $full_path_filename = $this-&amp;gt;getPicturePath().&amp;quot;/&amp;quot;.$filename;&lt;br /&gt;
&lt;br /&gt;
        if (is_file($full_path_filename)) {&lt;br /&gt;
            return $this-&amp;gt;getPicturePathHTTPD().&amp;quot;/&amp;quot;.$filename;&lt;br /&gt;
        } else {&lt;br /&gt;
            // security filter: reject too long formulas&lt;br /&gt;
            if (strlen($latex_formula) &amp;gt; $this-&amp;gt;_string_length_limit) {&lt;br /&gt;
            	$this-&amp;gt;_errorcode = 1;&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // security filter: try to match against LaTeX-Tags Blacklist&lt;br /&gt;
            for ($i=0;$i&amp;lt;sizeof($this-&amp;gt;_latex_tags_blacklist);$i++) {&lt;br /&gt;
                if (stristr($latex_formula,$this-&amp;gt;_latex_tags_blacklist[$i])) {&lt;br /&gt;
                	$this-&amp;gt;_errorcode = 2;&lt;br /&gt;
                    return false;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // security checks assume correct formula, let's render it&lt;br /&gt;
            if ($this-&amp;gt;renderLatex($latex_formula)) {&lt;br /&gt;
               return $this-&amp;gt;getPicturePathHTTPD().&amp;quot;/&amp;quot;.$filename;&lt;br /&gt;
            } else {&lt;br /&gt;
                $this-&amp;gt;_errorcode = 3;&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
    // private functions&lt;br /&gt;
    // ====================================================================================&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * wraps a minimalistic LaTeX document around the formula and returns a string&lt;br /&gt;
     * containing the whole document as string. Customize if you want other fonts for&lt;br /&gt;
     * example.&lt;br /&gt;
     *&lt;br /&gt;
     * @param string formula in LaTeX format&lt;br /&gt;
     * @returns minimalistic LaTeX document containing the given formula&lt;br /&gt;
     */&lt;br /&gt;
    function wrap_formula($latex_formula) {&lt;br /&gt;
#        $string  = &amp;quot;\documentclass[&amp;quot;.$this-&amp;gt;_font_size.&amp;quot;pt]{&amp;quot;.$this-&amp;gt;_latexclass.&amp;quot;}\n&amp;quot;;&lt;br /&gt;
#        $string .= &amp;quot;\usepackage[latin1]{inputenc}\n&amp;quot;;&lt;br /&gt;
        $string  = &amp;quot;\documentclass{&amp;quot;.$this-&amp;gt;_latexclass.&amp;quot;}\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;\usepackage{amsmath}\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;\usepackage{amsfonts}\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;\usepackage{amssymb}\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;\pagestyle{empty}\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;\begin{document}\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;$&amp;quot;.$latex_formula.&amp;quot;$\n&amp;quot;;&lt;br /&gt;
        $string .= &amp;quot;\end{document}\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $string;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * returns the dimensions of a picture file using 'identify' of the&lt;br /&gt;
     * imagemagick tools. The resulting array can be adressed with either&lt;br /&gt;
     * $dim[0] / $dim[1] or $dim[&amp;quot;x&amp;quot;] / $dim[&amp;quot;y&amp;quot;]&lt;br /&gt;
     *&lt;br /&gt;
     * @param string path to a picture&lt;br /&gt;
     * @returns array containing the picture dimensions&lt;br /&gt;
     */&lt;br /&gt;
    function getDimensions($filename) {&lt;br /&gt;
        $output=exec($this-&amp;gt;_identify_path.&amp;quot; &amp;quot;.$filename);&lt;br /&gt;
        $result=explode(&amp;quot; &amp;quot;,$output);&lt;br /&gt;
        $dim=explode(&amp;quot;x&amp;quot;,$result[2]);&lt;br /&gt;
        $dim[&amp;quot;x&amp;quot;] = $dim[0];&lt;br /&gt;
        $dim[&amp;quot;y&amp;quot;] = $dim[1];&lt;br /&gt;
&lt;br /&gt;
        return $dim;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Renders a LaTeX formula by the using the following method:&lt;br /&gt;
     *  - write the formula into a wrapped tex-file in a temporary directory&lt;br /&gt;
     *    and change to it&lt;br /&gt;
     *  - Create a DVI file using latex (tetex)&lt;br /&gt;
     *  - Convert DVI file to Postscript (PS) using dvips (tetex)&lt;br /&gt;
     *  - convert, trim and add transparancy by using 'convert' from the&lt;br /&gt;
     *    imagemagick package.&lt;br /&gt;
     *  - Save the resulting image to the picture cache directory using an&lt;br /&gt;
     *    md5 hash as filename. Already rendered formulas can be found directly&lt;br /&gt;
     *    this way.&lt;br /&gt;
     *&lt;br /&gt;
     * @param string LaTeX formula&lt;br /&gt;
     * @returns true if the picture has been successfully saved to the picture&lt;br /&gt;
     *          cache directory&lt;br /&gt;
     */&lt;br /&gt;
    function renderLatex($latex_formula) {&lt;br /&gt;
        $latex_document = $this-&amp;gt;wrap_formula($latex_formula);&lt;br /&gt;
&lt;br /&gt;
        $current_dir = getcwd();&lt;br /&gt;
&lt;br /&gt;
        chdir($this-&amp;gt;_tmp_dir);&lt;br /&gt;
&lt;br /&gt;
        // create temporary latex file&lt;br /&gt;
        $fp = fopen($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.tex&amp;quot;,&amp;quot;a+&amp;quot;);&lt;br /&gt;
        fputs($fp,$latex_document);&lt;br /&gt;
        fclose($fp);&lt;br /&gt;
&lt;br /&gt;
        // create temporary dvi file&lt;br /&gt;
        $command = $this-&amp;gt;_latex_path.&amp;quot; --interaction=nonstopmode &amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.tex&amp;quot;;&lt;br /&gt;
        $status_code = exec($command);&lt;br /&gt;
&lt;br /&gt;
        if (!$status_code) { &lt;br /&gt;
        	$this-&amp;gt;cleanTemporaryDirectory(); &lt;br /&gt;
        	chdir($current_dir); &lt;br /&gt;
        	$this-&amp;gt;_errorcode = 4; &lt;br /&gt;
        	return false; &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // convert dvi file to postscript using dvips&lt;br /&gt;
        $command = $this-&amp;gt;_dvips_path.&amp;quot; -q -E &amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.dvi&amp;quot;.&amp;quot; -o &amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.ps&amp;quot;;&lt;br /&gt;
        $status_code = exec($command);&lt;br /&gt;
&lt;br /&gt;
        // imagemagick convert ps to image and trim picture&lt;br /&gt;
        $command = $this-&amp;gt;_convert_path.&amp;quot; -density &amp;quot;.$this-&amp;gt;_formula_density.&lt;br /&gt;
                    &amp;quot; -trim -transparent \&amp;quot;#FFFFFF\&amp;quot; &amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.ps &amp;quot;.&lt;br /&gt;
                    $this-&amp;gt;_tmp_filename.&amp;quot;.&amp;quot;.$this-&amp;gt;_image_format;&lt;br /&gt;
&lt;br /&gt;
        $status_code = exec($command);&lt;br /&gt;
&lt;br /&gt;
        // test picture for correct dimensions&lt;br /&gt;
        $dim = $this-&amp;gt;getDimensions($this-&amp;gt;_tmp_filename.&amp;quot;.&amp;quot;.$this-&amp;gt;_image_format);&lt;br /&gt;
&lt;br /&gt;
        if ( ($dim[&amp;quot;x&amp;quot;] &amp;gt; $this-&amp;gt;_xsize_limit) or ($dim[&amp;quot;y&amp;quot;] &amp;gt; $this-&amp;gt;_ysize_limit)) {&lt;br /&gt;
            $this-&amp;gt;cleanTemporaryDirectory();&lt;br /&gt;
            chdir($current_dir);&lt;br /&gt;
            $this-&amp;gt;_errorcode = 5;&lt;br /&gt;
            $this-&amp;gt;_errorextra = &amp;quot;: &amp;quot; . $dim[&amp;quot;x&amp;quot;] . &amp;quot;x&amp;quot; . number_format($dim[&amp;quot;y&amp;quot;],0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // copy temporary formula file to cahed formula directory&lt;br /&gt;
        $latex_hash = md5($latex_formula);&lt;br /&gt;
        $filename = $this-&amp;gt;getPicturePath().&amp;quot;/math-&amp;quot;.$latex_hash.&amp;quot;.&amp;quot;.$this-&amp;gt;_image_format;&lt;br /&gt;
&lt;br /&gt;
        $status_code = copy($this-&amp;gt;_tmp_filename.&amp;quot;.&amp;quot;.$this-&amp;gt;_image_format,$filename);&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;cleanTemporaryDirectory();&lt;br /&gt;
&lt;br /&gt;
        if (!$status_code) { &lt;br /&gt;
        	chdir($current_dir); &lt;br /&gt;
        	$this-&amp;gt;_errorcode = 6; &lt;br /&gt;
        	return false; &lt;br /&gt;
        }&lt;br /&gt;
        chdir($current_dir);&lt;br /&gt;
&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Cleans the temporary directory&lt;br /&gt;
     */&lt;br /&gt;
    function cleanTemporaryDirectory() {&lt;br /&gt;
    	&lt;br /&gt;
        $current_dir = getcwd();&lt;br /&gt;
        chdir($this-&amp;gt;_tmp_dir);&lt;br /&gt;
&lt;br /&gt;
        unlink($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.tex&amp;quot;);&lt;br /&gt;
        unlink($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.aux&amp;quot;);&lt;br /&gt;
        unlink($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.log&amp;quot;);&lt;br /&gt;
        unlink($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.dvi&amp;quot;);&lt;br /&gt;
        unlink($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.ps&amp;quot;);&lt;br /&gt;
        unlink($this-&amp;gt;_tmp_dir.&amp;quot;/&amp;quot;.$this-&amp;gt;_tmp_filename.&amp;quot;.&amp;quot;.$this-&amp;gt;_image_format);&lt;br /&gt;
&lt;br /&gt;
        chdir($current_dir);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * LaTeX Rendering Class - Calling function&lt;br /&gt;
 * Copyright (C) 2003  Benjamin Zeiss &amp;lt;zeiss@math.uni-goettingen.de&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or&lt;br /&gt;
 * modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 * License as published by the Free Software Foundation; either&lt;br /&gt;
 * version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
 * Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
 * --------------------------------------------------------------------&lt;br /&gt;
 * @author Benjamin Zeiss &amp;lt;zeiss@math.uni-goettingen.de&amp;gt;&lt;br /&gt;
 * @version v0.8&lt;br /&gt;
 * @package latexrender&lt;br /&gt;
 * Revised by Steve Mayer&lt;br /&gt;
 * This file can be included in many PHP programs by using something like (see example.php to see how it can be used)&lt;br /&gt;
 * 		include_once('/full_path_here_to/latexrender/latex.php');&lt;br /&gt;
 * 		$text_to_be_converted=latex_content($text_to_be_converted);&lt;br /&gt;
 * $text_to_be_converted will then contain the link to the appropriate image&lt;br /&gt;
 * or an error code as follows (the 500 values can be altered in class.latexrender.php):&lt;br /&gt;
 * 	0 OK&lt;br /&gt;
 * 	1 Formula longer than 500 characters&lt;br /&gt;
 * 	2 Includes a blacklisted tag&lt;br /&gt;
 * 	3 (Not used) Latex rendering failed&lt;br /&gt;
 * 	4 Cannot create DVI file&lt;br /&gt;
 * 	5 Picture larger than 500 x 500 followed by x x y dimensions&lt;br /&gt;
 * 	6 Cannot copy image to pictures directory&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 function renderMath($latex_formula) {&lt;br /&gt;
&lt;br /&gt;
	global $wgMathDirectory, $wgMathPath, $wgTmpDirectory,&lt;br /&gt;
			$wgLaTexCommand, &lt;br /&gt;
			$wgDvipsCommand,&lt;br /&gt;
			$wgImageMagickConvertCommand, &lt;br /&gt;
			$wgImageMagickIdentifyCommand;&lt;br /&gt;
	&lt;br /&gt;
	$latex_formula = '\displaystyle ' . $latex_formula;&lt;br /&gt;
    $latex = new LatexRender(	$wgMathDirectory,&lt;br /&gt;
    							$wgMathPath,&lt;br /&gt;
    							$wgTmpDirectory);&lt;br /&gt;
&lt;br /&gt;
	#check Math dir&lt;br /&gt;
	if(!file_exists($wgMathDirectory)) @mkdir($wgMathDirectory);&lt;br /&gt;
	if(!file_exists($wgTmpDirectory)) @mkdir($wgTmpDirectory);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	$latex-&amp;gt;_latex_path		= $wgLaTexCommand;&lt;br /&gt;
	$latex-&amp;gt;_dvips_path		= $wgDvipsCommand;&lt;br /&gt;
	$latex-&amp;gt;_convert_path	= $wgImageMagickConvertCommand;&lt;br /&gt;
	$latex-&amp;gt;_identify_path	= $wgImageMagickIdentifyCommand;&lt;br /&gt;
&lt;br /&gt;
    $url = $latex-&amp;gt;getFormulaURL($latex_formula);&lt;br /&gt;
&lt;br /&gt;
	$alt_latex_formula = htmlentities($latex_formula, ENT_QUOTES);&lt;br /&gt;
	$alt_latex_formula = str_replace(&amp;quot;\r&amp;quot;,&amp;quot;&amp;amp;#13;&amp;quot;,$alt_latex_formula);&lt;br /&gt;
	$alt_latex_formula = str_replace(&amp;quot;\n&amp;quot;,&amp;quot;&amp;amp;#10;&amp;quot;,$alt_latex_formula);&lt;br /&gt;
	$alt_latex_formula = str_replace('\displaystyle ','',$alt_latex_formula);&lt;br /&gt;
&lt;br /&gt;
    if ($url != false) {&lt;br /&gt;
        $text = &amp;quot;&amp;lt;img src='$url' title='$alt_latex_formula' alt='$alt_latex_formula' class=tex&amp;gt;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        $text = &amp;quot;[Unparseable or potentially dangerous latex formula. Error $latex-&amp;gt;_errorcode $latex-&amp;gt;_errorextra]&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return $text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>BR</name></author>
		
	</entry>
</feed>