123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
- /* vim: set ts=2 et sw=2 tw=80: */
- /*************************************************************
- *
- * MathJax/extensions/jsMath2jax.js
- *
- * Implements a jsMath to Jax preprocessor that locates jsMath-style
- * <SPAN CLASS="math">...</SPAN> and <DIV CLASS="math">...</DIV> tags
- * and replaces them with SCRIPT tags for processing by MathJax.
- * (Note: use the tex2jax preprocessor to convert TeX delimiters or
- * custom delimiters to MathJax SCRIPT tags. This preprocessor is
- * only for the SPAN and DIV form of jsMath delimiters).
- *
- * To use this preprocessor, include "jsMath2jax.js" in the extensions
- * array in your config/MathJax.js file, or the MathJax.Hub.Config() call
- * in your HTML document.
- *
- * ---------------------------------------------------------------------
- *
- * Copyright (c) 2010-2017 The MathJax Consortium
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- MathJax.Extension.jsMath2jax = {
- version: "2.7.2",
-
- config: {
- preview: "TeX" // Set to "none" to prevent preview strings from being inserted
- // or to an array that specifies an HTML snippet to use for
- // the preview.
- },
-
- PreProcess: function (element) {
- if (!this.configured) {
- this.config = MathJax.Hub.CombineConfig("jsMath2jax",this.config);
- if (this.config.Augment) {MathJax.Hub.Insert(this,this.config.Augment)}
- if (typeof(this.config.previewTeX) !== "undefined" && !this.config.previewTeX)
- {this.config.preview = "none"} // backward compatibility for previewTeX parameter
- this.previewClass = MathJax.Hub.config.preRemoveClass;
- this.configured = true;
- }
- if (typeof(element) === "string") {element = document.getElementById(element)}
- if (!element) {element = document.body}
- var span = element.getElementsByTagName("span"), i;
- for (i = span.length-1; i >= 0; i--)
- {if (String(span[i].className).match(/(^| )math( |$)/)) {this.ConvertMath(span[i],"")}}
- var div = element.getElementsByTagName("div");
- for (i = div.length-1; i >= 0; i--)
- {if (String(div[i].className).match(/(^| )math( |$)/)) {this.ConvertMath(div[i],"; mode=display")}}
- },
-
- ConvertMath: function (node,mode) {
- if (node.getElementsByTagName("script").length === 0) {
- var parent = node.parentNode,
- script = this.createMathTag(mode,node.innerHTML);
- if (node.nextSibling) {parent.insertBefore(script,node.nextSibling)}
- else {parent.appendChild(script)}
- if (this.config.preview !== "none") {this.createPreview(node)}
- parent.removeChild(node);
- }
- },
-
- createPreview: function (node) {
- var previewClass = MathJax.Hub.config.preRemoveClass;
- var preview = this.config.preview;
- if (preview === "none") return;
- if ((node.previousSibling||{}).className === previewClass) return;
- if (preview === "TeX") {preview = [this.filterPreview(node.innerHTML)]}
- if (preview) {
- preview = MathJax.HTML.Element("span",{className:previewClass},preview);
- node.parentNode.insertBefore(preview,node);
- }
- },
-
- createMathTag: function (mode,tex) {
- tex = tex.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");
- var script = document.createElement("script");
- script.type = "math/tex" + mode;
- MathJax.HTML.setScript(script,tex);
- return script;
- },
-
- filterPreview: function (tex) {return tex}
-
- };
- // We register the preprocessors with the following priorities:
- // - mml2jax.js: 5
- // - jsMath2jax.js: 8
- // - asciimath2jax.js, tex2jax.js: 10 (default)
- // See issues 18 and 484 and the other *2jax.js files.
- MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.jsMath2jax],8);
- MathJax.Ajax.loadComplete("[MathJax]/extensions/jsMath2jax.js");
|