/* * autoload.js * * Part of the jsMath package for mathematics on the web. * * This file is a plugin that checks if a page contains any math * that must be processed by jsMath, and only loads jsMath.js * when there is. * * You can control the items to look for via the variables * * jsMath.Autoload.findMathElements * jsMath.Autoload.findTeXstrings * jsMath.Autoload.findLaTeXstrings * * which control whether to look for SPAN and DIV elements of class * "math", TeX strings that will be converted by jsMath.ConvertTeX(), or * LaTeX strings that will be converted by jsMath.ConvertLaTeX(). By * default, the first is true and the last two are false. * * If any math strings are found, jsMath.js will be loaded automatically, * but not loaded otherwise. If any of the last two are true and TeX math * strings are found, then plugins/tex2ath.js will be loaded * automatically. jsMath.Autoload.needsJsMath will be set to true or * false depending on whether jsMath needs to be loaded. * * The value of jsMath.Autoload.element controls the element to be * searched by the autoload plug-in. If unset, the complete document will * be searched. If set to a string, the element with that name will be * searched. If set to a DOM object, that object and its children will * be searched. * * Finally, there are two additional parameters that control files to * be loaded after jsMath.js, should it be needed. These are * * jsMath.Autoload.loadFonts * jsMath.Autoload.loadFiles * * If jsMath.js is loaded, the fonts contained in the loadFonts array * will be loaded, and the JavaScript files listed in the loadFiles array * will be run. Relative URL's are loaded based from the URL containing * jsMath.js. * * --------------------------------------------------------------------- * * jsMath 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 2 of the License, or * (at your option) any later version. * * jsMath 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 jsMath; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /*************************************************************************/ /* * Make sure jsMath.Autoload is available */ if (jsMath == null) {var jsMath = {}} if (jsMath.Autoload == null) {jsMath.Autoload = {}} /* * Look to see if there are SPAN or DIV elements of class "math". */ jsMath.Autoload.areMathElements = function (obj) { if (!obj) {obj = document} if (typeof(obj) == 'string') {obj = document.getElementById(obj)} if (!obj.getElementsByTagName) {return false} var math = obj.getElementsByTagName('DIV'); for (var k = 0; k < math.length; k++) {if (math[k].className == 'math') {return true}} math = obj.getElementsByTagName('SPAN'); for (var k = 0; k < math.length; k++) {if (math[k].className == 'math') {return true}} return false; }; /* * The patterns used for searching for TeX and LaTeX math strings * (taken from plugins/tex2math.js). */ jsMath.Autoload.pattern = { tex: /((^|[^\\])(\\[^\[\(])*)(\\\((([^\\]|\\[^\)])*)\\\)|\\\[(([^\\]|\\[^\]])*)\\\]|(\$\$?)(([^$\\]|\\.)*)\9)/, latex: /((^|[^\\])(\\[^\[\(])*)(\\\((([^\\]|\\[^\)])*)\\\)|\\\[(([^\\]|\\[^\]])*)\\\])/ }; /* * Recursively search for text elements, and check them for * TeX or LaTeX strings that would be recognized by tex2math. */ jsMath.Autoload.FindPattern = function (method,element,recurse) { if (!element) { if (recurse) {return false}; element = document.body; } if (typeof(element) == 'string') {element = document.getElementById(element)} var pattern = jsMath.Autoload.pattern[method]; while (element) { if (element.nodeName == '#text') { if (pattern.exec(element.nodeValue.replace(/\n/g,' '))) {return true} } else if (!element.tagName || !element.tagName.match(/^(SCRIPT|NOSCRIPT|STYLE|TEXTAREA|PRE)$/i)) { if (this.FindPattern(method,element.firstChild,1)) {return true}; } element = element.nextSibling; } return false; }; jsMath.Autoload.areTeXstrings = function (obj) {return this.FindPattern('tex',obj,0)} jsMath.Autoload.areLaTeXstrings = function (obj) {return this.FindPattern('latex',obj,0)} /* * When math tags are found, load the jsMath.js file. If we looked * for TeX and LaTeX strings, load the tex2math as well. */ jsMath.Autoload.LoadJsMath = function () { if (!jsMath.Autoload.root) { var script = document.getElementsByTagName('SCRIPT'); if (script) { for (var i = 0; i < script.length; i++) { var src = script[i].src; if (src && src.match('(^|/)plugins/autoload.js$')) { jsMath.Autoload.root = src.replace(/plugins\/autoload.js$/,''); break; } } } } if (jsMath.Autoload.root) { document.write('