Browse files

Merge branch 'w11_MDL-24071_20_tex' of git://github.com/skodak/moodle

  • Loading branch information...
2 parents b8f249b + f7f0909 commit 98fd7dcb72a3a4c43ff0e45d08a5af6adca36095 @stronk7 stronk7 committed Mar 14, 2011
View
0 filter/algebra/algebra2tex.pl 100644 → 100755
File mode changed.
View
18 filter/algebra/filter.php
@@ -50,15 +50,11 @@ function filter_algebra_image($imagefile, $tex= "", $height="", $width="", $alig
global $CFG, $OUTPUT;
$output = "";
- $origtex = $tex;
$style = 'style="border:0px; vertical-align:'.$align.';';
+ $title = '';
if ($tex) {
- $tex = str_replace('&','&',$tex);
- $tex = str_replace('<','&lt;',$tex);
- $tex = str_replace('>','&gt;',$tex);
- $tex = str_replace('"','&quot;',$tex);
- $tex = str_replace("\'",'&#39;',$tex);
- $title = "title=\"$tex\"";
+ $tex = html_entity_decode($tex, ENT_QUOTES, 'UTF-8');
+ $title = 'title="'.s($tex).'"';
}
if ($height) {
$style .= " height:{$height}px;";
@@ -69,20 +65,20 @@ function filter_algebra_image($imagefile, $tex= "", $height="", $width="", $alig
$style .= '"';
$anchorcontents = '';
if ($imagefile) {
- $anchorcontents .= "<img $title alt=\"".s($origtex)."\" src=\"";
+ $anchorcontents .= "<img $title alt=\"".s($tex)."\" src=\"";
if ($CFG->slasharguments) { // Use this method if possible for better caching
$anchorcontents .= "$CFG->wwwroot/filter/algebra/pix.php/$imagefile";
} else {
$anchorcontents .= "$CFG->wwwroot/filter/algebra/pix.php?file=$imagefile";
}
$anchorcontents .= "\" $style />";
- $link = $action = null;
if (!file_exists("$CFG->dataroot/filter/algebra/$imagefile") && has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
$link = '/filter/algebra/algebradebug.php';
+ $action = null;
} else {
- $link = '/filter/algebra/displaytex.php?'.urlencode($tex);
- $action = new popup_action('click', $link, 'popup', array('height'=>300,'width'=>240));
+ $link = new moodle_url('/filter/tex/displaytex.php', array('texexp'=>$tex));
+ $action = new popup_action('click', $link, 'popup', array('width'=>320,'height'=>240)); //TODO: the popups do not work when text caching is enabled!!
}
$output .= $OUTPUT->action_link($link, $anchorcontents, $action, array('title'=>'TeX'));
View
42 filter/tex/db/upgrade.php
@@ -0,0 +1,42 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * TeX filter upgrade code.
+ *
+ * @package filter
+ * @subpackage tex
+ * @copyright 2011 Petr Skoda (http://skodak.org)
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * @param int $oldversion the version we are upgrading from
+ * @return bool result
+ */
+function xmldb_filter_tex_upgrade($oldversion) {
+ global $CFG, $DB, $OUTPUT;
+
+ if ($oldversion < 2011031301) {
+ // clear caches
+ require_once("$CFG->dirroot/filter/tex/lib.php");
+ filter_tex_updatedcallback(null);
+
+ upgrade_plugin_savepoint(true, 2011031301, 'filter', 'tex');
+ }
+
+ return true;
+}
View
59 filter/tex/displaytex.php
@@ -1,20 +1,55 @@
<?php
- // This script displays tex source code.
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
- require_once('../../config.php');
+/**
+ * This script displays tex source code, it is used also from the algebra filter.
+ *
+ * @package filter
+ * @subpackage tex
+ * @copyright 2004 Zbigniew Fiedorowicz fiedorow@math.ohio-state.edu
+ * Originally based on code provided by Bruno Vernier bruno@vsbeducation.ca
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+
+define('NO_MOODLE_COOKIES', true); // Because it interferes with caching
+
+require('../../config.php');
+
+if (!filter_is_enabled('filter/tex') and !filter_is_enabled('filter/algebra')) {
+ print_error('filternotenabled');
+}
+
+$texexp = optional_param('texexp', '', PARAM_RAW);
+
+$title = get_string('source', 'filter_tex')
- $texexp = urldecode($_SERVER['QUERY_STRING']);
- // entities are usually encoded twice, first in HTML editor then in tex/filter.php
- $texexp = html_entity_decode(html_entity_decode($texexp));
- // encode all entities (saves non-ISO)
- $texexp = htmlentities($texexp,ENT_COMPAT,'utf-8');
?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
- <title>TeX Source</title>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <title><?php echo $title; ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
- <body bgcolor="#FFFFFF">
- <?php echo $texexp; ?>
+ <body>
+ <div>
+ <dl>
+ <dt><?php echo $title; ?>:</dt>
+ <dd><?php p($texexp); ?></dd>
+ </dl>
+ </div>
</body>
-</html>
+</html>
View
127 filter/tex/filter.php
@@ -1,5 +1,4 @@
<?php
-
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -17,34 +16,40 @@
/**
* Moodle - Filter for converting TeX expressions to cached gif images
+ *
+ * This Moodle text filter converts TeX expressions delimited
+ * by either $$...$$ or by <tex...>...</tex> tags to gif images using
+ * mimetex.cgi obtained from http: *www.forkosh.com/mimetex.html authored by
+ * John Forkosh john@forkosh.com. Several binaries of this areincluded with
+ * this distribution.
+ * Note that there may be patent restrictions on the production of gif images
+ * in Canada and some parts of Western Europe and Japan until July 2004.
+ *
* @package filter
* @subpackage tex
* @copyright 2004 Zbigniew Fiedorowicz fiedorow@math.ohio-state.edu
* Originally based on code provided by Bruno Vernier bruno@vsbeducation.ca
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-//-------------------------------------------------------------------------
-// NOTE: This Moodle text filter converts TeX expressions delimited
-// by either $$...$$ or by <tex...>...</tex> tags to gif images using
-// mimetex.cgi obtained from http://www.forkosh.com/mimetex.html authored by
-// John Forkosh john@forkosh.com. Several binaries of this areincluded with
-// this distribution.
-// Note that there may be patent restrictions on the production of gif images
-// in Canada and some parts of Western Europe and Japan until July 2004.
-//-------------------------------------------------------------------------
-/////////////////////////////////////////////////////////////////////////////
-// To activate this filter, add a line like this to your //
-// list of filters in your Filter configuration: //
-// //
-// filter/tex/filter.php //
-/////////////////////////////////////////////////////////////////////////////
-
-function filter_text_image($imagefile, $tex= "", $height="", $width="", $align="middle", $alt='') {
+defined('MOODLE_INTERNAL') || die;
+
+/**
+ * Create TeX image link.
+ *
+ * @param string $imagefile name of file
+ * @param string $tex TeX notation (html entities already decoded)
+ * @param int $height O means automatic
+ * @param int $width O means automatic
+ * @param string $align
+ * @param string $alt
+ * @return string HTML markup
+ */
+function filter_text_image($imagefile, $tex, $height, $width, $align, $alt) {
global $CFG, $OUTPUT;
- if ($alt==='') {
- $alt = s($tex);
+ if (!$imagefile) {
+ throw new coding_exception('image file argument empty in filter_text_image()');
}
// Work out any necessary inline style.
@@ -65,47 +70,46 @@ function filter_text_image($imagefile, $tex= "", $height="", $width="", $align="
}
// Prepare the title attribute.
- if ($tex) {
- $tex = str_replace('&','&amp;',$tex);
- $tex = str_replace('<','&lt;',$tex);
- $tex = str_replace('>','&gt;',$tex);
- $tex = str_replace('"','&quot;',$tex);
- $tex = str_replace("\'",'&#39;',$tex);
- // Note that we retain the title tag as TeX format rather than using
- // the alt text, even if supplied. The alt text is intended for blind
- // users (to provide a text equivalent to the equation) while the title
- // is there as a convenience for sighted users who want to see the TeX
- // code.
- $title = "title=\"$tex\"";
+ // Note that we retain the title tag as TeX format rather than using
+ // the alt text, even if supplied. The alt text is intended for blind
+ // users (to provide a text equivalent to the equation) while the title
+ // is there as a convenience for sighted users who want to see the TeX
+ // code.
+ $title = 'title="'.s($tex).'"';
+
+ if ($alt === '') {
+ $alt = s($tex);
+ } else {
+ $alt = s(html_entity_decode($tex, ENT_QUOTES, 'UTF-8'));
}
// Build the output.
- $output = "";
- if ($imagefile) {
- $anchorcontents = "<img class=\"texrender\" $title alt=\"$alt\" src=\"";
- if ($CFG->slasharguments) { // Use this method if possible for better caching
- $anchorcontents .= "$CFG->wwwroot/filter/tex/pix.php/$imagefile";
- } else {
- $anchorcontents .= "$CFG->wwwroot/filter/tex/pix.php?file=$imagefile";
- }
- $anchorcontents .= "\" $style/>";
-
- $link = $action = null;
- if (!file_exists("$CFG->dataroot/filter/tex/$imagefile") && has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
- $link = '/filter/tex/texdebug.php';
- } else {
- $link = '/filter/tex/displaytex.php?'.urlencode($tex);
- $action = new popup_action('click', $link, 'popup', array('height'=>300,'width'=>240));
- }
- $output .= $OUTPUT->action_link($link, $anchorcontents, $action, array('title'=>'TeX'));
+ $anchorcontents = "<img class=\"texrender\" $title alt=\"$alt\" src=\"";
+ if ($CFG->slasharguments) { // Use this method if possible for better caching
+ $anchorcontents .= "$CFG->wwwroot/filter/tex/pix.php/$imagefile";
} else {
- $output .= "Error: must pass URL or course";
+ $anchorcontents .= "$CFG->wwwroot/filter/tex/pix.php?file=$imagefile";
}
+ $anchorcontents .= "\" $style/>";
+
+ if (!file_exists("$CFG->dataroot/filter/tex/$imagefile") && has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
+ $link = '/filter/tex/texdebug.php';
+ $action = null;
+ } else {
+ $link = new moodle_url('/filter/tex/displaytex.php', array('texexp'=>$tex));
+ $action = new popup_action('click', $link, 'popup', array('width'=>320,'height'=>240));
+ }
+ $output = $OUTPUT->action_link($link, $anchorcontents, $action, array('title'=>'TeX')); //TODO: the popups do not work when text caching is enabled!!
+
return $output;
}
+
+/**
+ * TeX filtering class.
+ */
class filter_tex extends moodle_text_filter {
- function filter ($text, array $options = array()) {
+ function filter($text, array $options = array()) {
global $CFG, $DB;
@@ -132,9 +136,9 @@ function filter ($text, array $options = array()) {
# }
$text .= ' ';
preg_match_all('/\$(\$\$+?)([^\$])/s',$text,$matches);
- for ($i=0;$i<count($matches[0]);$i++) {
- $replacement = str_replace('$','&#x00024;',$matches[1][$i]).$matches[2][$i];
- $text = str_replace($matches[0][$i],$replacement,$text);
+ for ($i=0; $i<count($matches[0]); $i++) {
+ $replacement = str_replace('$','&#x00024;', $matches[1][$i]).$matches[2][$i];
+ $text = str_replace($matches[0][$i], $replacement, $text);
}
// <tex> TeX expression </tex>
@@ -159,8 +163,17 @@ function filter ($text, array $options = array()) {
$align = "text-top";
$texexp = preg_replace('/^align=top /','',$texexp);
}
+
+ // decode entities encoded by editor, luckily there is very little chance of double decoding
+ $texexp = html_entity_decode($texexp, ENT_QUOTES, 'UTF-8');
+
+ if ($texexp === '') {
+ contninue;
+ }
+
$md5 = md5($texexp);
- if (! $texcache = $DB->get_record("cache_filters", array("filter"=>"tex", "md5key"=>$md5))) {
+ if (!$DB->record_exists("cache_filters", array("filter"=>"tex", "md5key"=>$md5))) {
+ $texcache = new stdClass();
$texcache->filter = 'tex';
$texcache->version = 1;
$texcache->md5key = $md5;
@@ -169,7 +182,7 @@ function filter ($text, array $options = array()) {
$DB->insert_record("cache_filters", $texcache, false);
}
$filename = $md5 . ".{$CFG->filter_tex_convertformat}";
- $text = str_replace( $matches[0][$i], filter_text_image($filename, $texexp, '', '', $align, $alt), $text);
+ $text = str_replace( $matches[0][$i], filter_text_image($filename, $texexp, 0, 0, $align, $alt), $text);
}
return $text;
}
View
23 filter/tex/filtersettings.php
@@ -1,4 +1,27 @@
<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * TeX filter settings
+ *
+ * @package filter
+ * @subpackage tex
+ * @copyright 2007 Petr Skoda {@link http://skodak.org}
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
defined('MOODLE_INTERNAL') || die;
View
9 filter/tex/lang/en/filter_tex.php
@@ -1,5 +1,4 @@
<?php
-
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -18,9 +17,11 @@
/**
* Strings for component 'filter_tex', language 'en', branch 'MOODLE_20_STABLE'
*
- * @package filter_tex
- * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @package filter
+ * @subpackage tex
+ * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$string['filtername'] = 'TeX notation';
+$string['source'] = 'TeX source';
View
24 filter/tex/lib.php
@@ -1,4 +1,28 @@
<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * TeX filter library functions.
+ *
+ * @package filter
+ * @subpackage tex
+ * @copyright 2004 Zbigniew Fiedorowicz fiedorow@math.ohio-state.edu
+ * Originally based on code provided by Bruno Vernier bruno@vsbeducation.ca
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
defined('MOODLE_INTERNAL') || die();
View
2 filter/tex/pix.php
@@ -42,7 +42,7 @@
$latex = new latex();
$density = $CFG->filter_tex_density;
$background = $CFG->filter_tex_latexbackground;
- $texexp = html_entity_decode($texcache->rawtext);
+ $texexp = $texcache->rawtext; // the entities are now decoded before inserting to DB
$latex_path = $latex->render($texexp, $md5, 12, $density, $background);
if ($latex_path) {
copy($latex_path, $pathname);
View
43 filter/tex/texdebug.php
@@ -1,7 +1,30 @@
<?php
- // This function fetches math. images from the data directory
- // If not, it obtains the corresponding TeX expression from the cache_tex db table
- // and uses mimeTeX to create the image file
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * This function fetches math. images from the data directory
+ * If not, it obtains the corresponding TeX expression from the cache_tex db table
+ * and uses mimeTeX to create the image file
+ *
+ * @package filter
+ * @subpackage tex
+ * @copyright 2004 Zbigniew Fiedorowicz fiedorow@math.ohio-state.edu
+ * Originally based on code provided by Bruno Vernier bruno@vsbeducation.ca
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
require_once("../../config.php");
@@ -19,7 +42,6 @@
require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM), $USER->id); /// Required cap to run this. MDL-18552
- $query = urldecode($_SERVER['QUERY_STRING']);
$output = '';
// look up in cache if required
@@ -99,10 +121,7 @@ function outputText($texexp) {
header("Content-type: text/html; charset=utf-8");
echo "<html><body><pre>\n";
if ($texexp) {
- $texexp = str_replace('<', '&lt;', $texexp);
- $texexp = str_replace('>', '&gt;', $texexp);
- $texexp = str_replace('"', '&quot;', $texexp);
- echo "$texexp\n\n";
+ echo s($texexp)."\n\n";
} else {
echo "No text output available\n\n";
}
@@ -237,10 +256,12 @@ function TexOutput($expression, $graphic=false) {
$output .= execute($cmd);
if (!$graphic) {
- echo($output);
- } else {
+ echo $output;
+ } else if (file_exists($img)){
send_file($img, "$md5.{$CFG->filter_tex_convertformat}");
- }
+ } else {
+ echo "Error creating image, see command execution output for more details.";
+ }
}
function execute($cmd) {
View
2 filter/tex/version.php
@@ -26,4 +26,4 @@
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2010073000;
+$plugin->version = 2011031301;

0 comments on commit 98fd7dc

Please sign in to comment.