From 9cc1730595398a181f19f7b2e5e598f77b569569 Mon Sep 17 00:00:00 2001 From: fiedorow Date: Thu, 19 Feb 2004 18:05:01 +0000 Subject: [PATCH] Added debugger for TeX filter --- filter/tex/texdebug.php | 196 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 filter/tex/texdebug.php diff --git a/filter/tex/texdebug.php b/filter/tex/texdebug.php new file mode 100644 index 0000000000..67c489723a --- /dev/null +++ b/filter/tex/texdebug.php @@ -0,0 +1,196 @@ +texfilterdir = "filter/tex"; + $CFG->teximagedir = "filter/tex"; + + error_reporting(E_ALL); + $query = urldecode($_SERVER['QUERY_STRING']); + + if ($query) { + $output = $query; + $splitpos = strpos($query,'&')-4; + $texexp = substr($query,4,$splitpos); + $md5 = md5($texexp); + if (strpos($query,'ShowDB') || strpos($query,'DeleteDB')) { + $texcache = get_record("cache_filters","filter","tex", "md5key", $md5); + } + if (strpos($query,'ShowDB')) { + if ($texcache) { + $output = "DB cache_filters entry for $texexp\n"; + $output .= "id = $texcache->id\n"; + $output .= "filter = $texcache->filter\n"; + $output .= "version = $texcache->version\n"; + $output .= "md5key = $texcache->md5key\n"; + $output .= "rawtext = $texcache->rawtext\n"; + $output .= "timemodified = $texcache->timemodified\n"; + } else { + $output = "DB cache_filters entry for $texexp not found\n"; + } + } + if (strpos($query,'DeleteDB')) { + if ($texcache) { + $output = "Deleting DB cache_filters entry for $texexp\n"; + $result = delete_records("cache_filters","id",$texcache->id); + if ($result) { + $result = 1; + } else { + $result = 0; + } + $output .= "Number of records deleted = $result\n"; + } else { + $output = "Could not delete DB cache_filters entry for $texexp\nbecause it could not be found.\n"; + } + } + if (strpos($query,'ShowImage')) { + tex2image($texexp); + } else { + outputText($output); + } + exit; + } + + +function outputText($texexp) { + header("Content-type: text/html"); + echo "
\n";
+  if ($texexp) {
+    $texexp = str_replace('<','<',$texexp);
+    $texexp = str_replace('>','>',$texexp);
+    $texexp = str_replace('"','"',$texexp);
+    echo "$texexp\n\n";
+  } else {
+    echo "No text output available\n\n";
+  }
+  echo "
\n"; +} + +function tex2image($texexp) { + global $CFG; + if ($texexp) { + $texexp = '\Large ' . $texexp; + $lifetime = 86400; + $image = md5($texexp) . ".gif"; + $filetype = 'image/gif'; + if (!file_exists("$CFG->dataroot/$CFG->teximagedir")) { + make_upload_directory($CFG->teximagedir); + } + $pathname = "$CFG->dataroot/$CFG->teximagedir/$image"; + $windows = 0; + switch (PHP_OS) { + case "Linux": + $cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex.linux -e $pathname ". escapeshellarg($texexp); + break; + case "WINNT": + case "WIN32": + case "Windows": + $windows = 1; + $texexp = str_replace('"','\"',$texexp); + $cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex.exe -e $pathname \"$texexp\""; + break; + case "Darwin": + $cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin -e $pathname ". escapeshellarg($texexp); + break; + } + system($cmd); + } + if ($texexp && file_exists($pathname)) { + $lastmodified = filemtime($pathname); + header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastmodified) . " GMT"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT"); + header("Cache-control: max_age = $lifetime"); // a day + header("Pragma: "); + header("Content-disposition: inline; filename=$image"); + header("Content-length: ".filesize($pathname)); + header("Content-type: $filetype"); + readfile("$pathname"); + } else { + if (!$windows) { + $cmd = "$cmd 2>&1"; + echo `$cmd` . "
\n"; + } + echo "Image not found!"; + } +} +?> + + +TeX Filter Debugger + +dirroot/filter/tex/pix.php"; + $PHP_OS = PHP_OS; + $handle = fopen($filename,"r"); + $contents = fread($handle, filesize($filename)); + fclose($handle); + if (!strpos($contents,'case "'. $PHP_OS . '":')) { + echo "WARNING! case \"$PHP_OS\": NOT found in pix.php!!!

"; + } +?> +

Please enter an algebraic expression without any surrounding $$ into + the text box below. (Click here for help.) +

+
+ +
+
    +
  1. First click on this button + to see the cache_filters database entry for this expression.
  2. +
  3. If the database entry looks corrupt, click on this button to delete it: +
  4. +
  5. Finally click on this button + to show a graphic image of the algebraic expression.
  6. +
+


+
+ +

+
+ +

Debugging Help

+
+

First a brief overview of how the TeX filter works. The TeX filter first +searches the database cache_filters table to see if this TeX expression had been +processed before. If not, it adds a DB entry for that expression. It then +replaces the TeX expression by an <img src=".../filter/tex/pix.php..."> +tag. The filter/tex/pix.php script then searches the database to find an +appropriate gif image file for that expression and to create one if it doesn't exist. +Here are a few common things that can go wrong and some suggestions on how +you might try to fix them.

+
    +
  1. Something had gone wrong on a previous occasion when the filter tried to +process this expression. Then the database entry for that expression contains +a bad TeX expression in the rawtext field (usually blank). You can fix this +by clicking on "Delete DB Entry"
  2. +
  3. The TeX to gif image conversion process does not work. If your server is +running Unix, a likely cause is that the mimetex binary you are using is +incompatible with your operating system. You can try compiling it from the +C sources downloaded from +http://www.forkosh.com/mimetex.zip, or looking for an appropriate +binary at +http://moodle.org/download/mimetex/. You may then also need to +edit your moodle/filter/tex/pix.php file to add +

    to the list of operating systems +in the switch (PHP_OS) statement. Windows users may have a problem properly +unzipping mimetex.exe. Make sure that mimetex.exe is is PRECISELY +328192 bytes in size. If not, download a fresh copy from + +http://moodle.org/download/mimetex/windows/mimetex.exe. +Another possible problem which may affect +both Unix and Windows servers is that the web server doesn't have execute permission +on the mimetex binary. In that case change permissions accordingly
  4. +
+ + -- 2.39.5