Skip to content

Commit

Permalink
Merge branch 'w11_MDL-24071_20_tex' of git://github.com/skodak/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
stronk7 committed Mar 14, 2011
2 parents b8f249b + f7f0909 commit 98fd7dc
Show file tree
Hide file tree
Showing 11 changed files with 252 additions and 97 deletions.
Empty file modified filter/algebra/algebra2tex.pl 100644 → 100755
Empty file.
18 changes: 7 additions & 11 deletions filter/algebra/filter.php
Expand Up @@ -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;";
Expand All @@ -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'));

Expand Down
42 changes: 42 additions & 0 deletions 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;
}
59 changes: 47 additions & 12 deletions 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>
127 changes: 70 additions & 57 deletions 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
Expand All @@ -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.
Expand All @@ -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;

Expand All @@ -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>
Expand All @@ -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;
Expand All @@ -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;
}
Expand Down
23 changes: 23 additions & 0 deletions 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;

Expand Down
9 changes: 5 additions & 4 deletions 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
Expand All @@ -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';

0 comments on commit 98fd7dc

Please sign in to comment.