| [ Index ] |
PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008] |
[Summary view] [Print] [Text view]
1 <?PHP 2 ///////////////////////////////////////////////////////////////////////////// 3 // // 4 // NOTICE OF COPYRIGHT // 5 // // 6 // Moodle - Filter for converting TeX expressions to cached gif images // 7 // // 8 // Copyright (C) 2004 Zbigniew Fiedorowicz fiedorow@math.ohio-state.edu // 9 // Originally based on code provided by Bruno Vernier bruno@vsbeducation.ca// 10 // This program is free software; you can redistribute it and/or modify // 11 // it under the terms of the GNU General Public License as published by // 12 // the Free Software Foundation; either version 2 of the License, or // 13 // (at your option) any later version. // 14 // // 15 // This program is distributed in the hope that it will be useful, // 16 // but WITHOUT ANY WARRANTY; without even the implied warranty of // 17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // 18 // GNU General Public License for more details: // 19 // // 20 // http://www.gnu.org/copyleft/gpl.html // 21 // // 22 ///////////////////////////////////////////////////////////////////////////// 23 //------------------------------------------------------------------------- 24 // NOTE: This Moodle text filter converts TeX expressions delimited 25 // by either $$...$$ or by <tex...>...</tex> tags to gif images using 26 // mimetex.cgi obtained from http://www.forkosh.com/mimetex.html authored by 27 // John Forkosh john@forkosh.com. Several binaries of this areincluded with 28 // this distribution. 29 // Note that there may be patent restrictions on the production of gif images 30 // in Canada and some parts of Western Europe and Japan until July 2004. 31 //------------------------------------------------------------------------- 32 ///////////////////////////////////////////////////////////////////////////// 33 // To activate this filter, add a line like this to your // 34 // list of filters in your Filter configuration: // 35 // // 36 // filter/tex/filter.php // 37 ///////////////////////////////////////////////////////////////////////////// 38 39 function string_file_picture_tex($imagefile, $tex= "", $height="", $width="", $align="middle", $alt='') { 40 if($alt==='') { 41 $alt=s($tex); 42 } 43 // Given the path to a picture file in a course, or a URL, 44 // this function includes the picture in the page. 45 global $CFG; 46 47 $output = ""; 48 $origtex = $tex; 49 $style = 'style="border:0px; vertical-align:'.$align.';'; 50 if ($tex) { 51 $tex = str_replace('&','&',$tex); 52 $tex = str_replace('<','<',$tex); 53 $tex = str_replace('>','>',$tex); 54 $tex = str_replace('"','"',$tex); 55 $tex = str_replace("\'",''',$tex); 56 // Note that we retain the title tag as TeX format rather than using 57 // the alt text, even if supplied. The alt text is intended for blind 58 // users (to provide a text equivalent to the equation) while the title 59 // is there as a convenience for sighted users who want to see the TeX 60 // code. 61 $title = "title=\"$tex\""; 62 } 63 if ($height) { 64 $style .= " height:{$height}px;"; 65 } 66 if ($width) { 67 $style .= " width:{$width}px;"; 68 } 69 $style .= '"'; 70 if ($imagefile) { 71 if (!file_exists("$CFG->dataroot/filter/tex/$imagefile") && has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { 72 $output .= "<a href=\"$CFG->wwwroot/filter/tex/texdebug.php\">"; 73 } else { 74 $output .= "<a target=\"popup\" title=\"TeX\" href="; 75 $output .= "\"$CFG->wwwroot/filter/tex/displaytex.php?"; 76 $output .= urlencode($tex) . "\" onclick=\"return openpopup('/filter/tex/displaytex.php?"; 77 $output .= urlencode($tex) . "', 'popup', 'menubar=0,location=0,scrollbars,"; 78 $output .= "resizable,width=300,height=240', 0);\">"; 79 } 80 $output .= "<img class=\"texrender\" $title alt=\"$alt\" src=\""; 81 if ($CFG->slasharguments) { // Use this method if possible for better caching 82 $output .= "$CFG->wwwroot/filter/tex/pix.php/$imagefile"; 83 } else { 84 $output .= "$CFG->wwwroot/filter/tex/pix.php?file=$imagefile"; 85 } 86 $output .= "\" $style />"; 87 $output .= "</a>"; 88 } else { 89 $output .= "Error: must pass URL or course"; 90 } 91 return $output; 92 } 93 94 function tex_filter ($courseid, $text) { 95 96 global $CFG; 97 98 /// Do a quick check using stripos to avoid unnecessary work 99 if (!preg_match('/<tex/i',$text) and !strstr($text,'$$') and !strstr($text,'\\[') and !preg_match('/\[tex/i',$text)) { //added one more tag (dlnsk) 100 return $text; 101 } 102 103 # //restrict filtering to forum 130 (Maths Tools on moodle.org) 104 # $scriptname = $_SERVER['SCRIPT_NAME']; 105 # if (!strstr($scriptname,'/forum/')) { 106 # return $text; 107 # } 108 # if (strstr($scriptname,'post.php')) { 109 # $parent = forum_get_post_full($_GET['reply']); 110 # $discussion = get_record("forum_discussions","id",$parent->discussion); 111 # } else if (strstr($scriptname,'discuss.php')) { 112 # $discussion = get_record("forum_discussions","id",$_GET['d'] ); 113 # } else { 114 # return $text; 115 # } 116 # if ($discussion->forum != 130) { 117 # return $text; 118 # } 119 $text .= ' '; 120 preg_match_all('/\$(\$\$+?)([^\$])/s',$text,$matches); 121 for ($i=0;$i<count($matches[0]);$i++) { 122 $replacement = str_replace('$','$',$matches[1][$i]).$matches[2][$i]; 123 $text = str_replace($matches[0][$i],$replacement,$text); 124 } 125 126 // <tex> TeX expression </tex> 127 // or <tex alt="My alternative text to be used instead of the TeX form"> TeX expression </tex> 128 // or $$ TeX expression $$ 129 // or \[ TeX expression \] // original tag of MathType and TeXaide (dlnsk) 130 // or [tex] TeX expression [/tex] // somtime it's more comfortable than <tex> (dlnsk) 131 preg_match_all('/<tex(?:\s+alt=["\'](.*?)["\'])?>(.+?)<\/tex>|\$\$(.+?)\$\$|\\\\\[(.+?)\\\\\]|\\[tex\\](.+?)\\[\/tex\\]/is', $text, $matches); 132 for ($i=0; $i<count($matches[0]); $i++) { 133 $texexp = $matches[2][$i] . $matches[3][$i] . $matches[4][$i] . $matches[5][$i]; 134 $alt = $matches[1][$i]; 135 $texexp = str_replace('<nolink>','',$texexp); 136 $texexp = str_replace('</nolink>','',$texexp); 137 $texexp = str_replace('<span class="nolink">','',$texexp); 138 $texexp = str_replace('</span>','',$texexp); 139 $texexp = eregi_replace("<br[[:space:]]*\/?>", '', $texexp); //dlnsk 140 $align = "middle"; 141 if (preg_match('/^align=bottom /',$texexp)) { 142 $align = "text-bottom"; 143 $texexp = preg_replace('/^align=bottom /','',$texexp); 144 } else if (preg_match('/^align=top /',$texexp)) { 145 $align = "text-top"; 146 $texexp = preg_replace('/^align=top /','',$texexp); 147 } 148 $md5 = md5($texexp); 149 if (! $texcache = get_record("cache_filters","filter","tex", "md5key", $md5)) { 150 $texcache->filter = 'tex'; 151 $texcache->version = 1; 152 $texcache->md5key = $md5; 153 $texcache->rawtext = addslashes($texexp); 154 $texcache->timemodified = time(); 155 insert_record("cache_filters",$texcache, false); 156 } 157 $filename = $md5 . ".gif"; 158 $text = str_replace( $matches[0][$i], string_file_picture_tex($filename, $texexp, '', '', $align, $alt), $text); 159 } 160 return $text; 161 } 162 163 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jan 14 11:33:29 2009 | Cross-referenced by PHPXref 0.7 |