From 6dd80fa1966fb780c8db09517ad858896fe45d56 Mon Sep 17 00:00:00 2001
From: "Davide P. Cervone" <dpvc@union.edu>
Date: Tue, 9 Nov 2010 11:15:45 -0500
Subject: [PATCH] issue #18: resolve conflict between jsMath2jax and tex2jax
 both processing the same equation

---
 mathjax/extensions/jsMath2jax.js          |  2 +-
 mathjax/unpacked/extensions/jsMath2jax.js | 16 ++++++------
 test/jsMath2jax.html                      | 30 +++++++++++++++++++++++
 3 files changed, 40 insertions(+), 8 deletions(-)
 create mode 100644 test/jsMath2jax.html

diff --git a/mathjax/extensions/jsMath2jax.js b/mathjax/extensions/jsMath2jax.js
index 9ccd87d46..5f5125f56 100644
--- a/mathjax/extensions/jsMath2jax.js
+++ b/mathjax/extensions/jsMath2jax.js
@@ -13,6 +13,6 @@
  */
 
 MathJax.Unpack([
-  ['MathJax.Extension.jsMath2jax','={version:"1.0",config:{element:null,','preview',':"TeX"},','PreProcess',':function(','b){if(!','this.configured','){','MathJax.Hub.','Insert(this','.config,(',9,'config.jsMath2jax||{}));if(','this.config.','Augment','){',9,10,',',14,15,')}','if(typeof(',14,'previewTeX',')!=="undefined"&&!',14,25,'){',14,2,'="none"}this.previewClass=',9,'config.preRemoveClass',';',7,'=true}',23,'b)==="string"){b=document.getElementById(b)}if(!b){b=',14,'element||document.body}var c','=b.getElementsByTagName("','span"),a;for(a=c','.length-1;a>=0;a--){if(String(','c','[a].className).match(/(^| )math( |$)/)){this.ConvertMath(','c[a],"")}}var d',42,'div");for(a=d',44,'d',46,'d[a],"; mode=display")}}},ConvertMath',5,'c,d){var b=c','.parentNode',',a=this.','createMathTag','(d,c.innerHTML);if(c.nextSibling){b','.insertBefore(','a,c.nextSibling)}else{b.appendChild(a)}if(',14,2,'!=="none"){this.','createPreview','(c)}b.removeChild(c)},',65,5,'a){var b;if(',14,2,'==="TeX"){b=[this.filterTeX(a.innerHTML)]}else{if(',14,2,' instanceof Array){b=',14,2,'}}if(b){b=MathJax.HTML.Element("span",{className:',9,34,'},b);a',56,60,'b,a)}},',58,5,'c,b){b=b.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&");var a=document.createElement("script");a.type="math/tex"+c;if(',9,'Browser.isMSIE){a.text=b}else{a.appendChild(document.createTextNode(b))}return a},filterTeX',5,'a){return a}};',9,'Register.PreProcessor(["',4,'",',0,']);MathJax.Ajax.loadComplete("[MathJax]/extensions/jsMath2jax.js");']
+  ['MathJax.Extension.jsMath2jax','={version:"1.0.1",config:{element:null,','preview',':"TeX"},','PreProcess',':function(','b){if(!','this.configured','){','MathJax.Hub.','Insert(this','.config,(',9,'config.jsMath2jax||{}));if(','this.config.','Augment','){',9,10,',',14,15,')}','if(typeof(',14,'previewTeX',')!=="undefined"&&!',14,25,'){',14,2,'="none"}this.previewClass=',9,'config.preRemoveClass',';',7,'=true}',23,'b)==="string"){b=document.getElementById(b)}if(!b){b=',14,'element||document.body}var c=b','.getElementsByTagName("','span"),a;for(a=c','.length-1;a>=0;a--){if(String(','c','[a].className).match(/(^| )math( |$)/)){this.ConvertMath(','c[a],"")}}var d=b',42,'div");for(a=d',44,'d',46,'d[a],"; mode=display")}}},ConvertMath',5,'c,d){if(c',42,'script").length===0){var b=c','.parentNode',',a=this.','createMathTag','(d,c.innerHTML);if(c.nextSibling){b','.insertBefore(','a,c.nextSibling)}else{b.appendChild(a)}if(',14,2,'!=="none"){this.','createPreview','(c)}b.removeChild(c)}},',67,5,'a){var b;if(',14,2,'==="TeX"){b=[this.filterTeX(a.innerHTML)]}else{if(',14,2,' instanceof Array){b=',14,2,'}}if(b){b=MathJax.HTML.Element("span",{className:',9,34,'},b);a',58,62,'b,a)}},',60,5,'c,b){b=b.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&");var a=document.createElement("script");a.type="math/tex"+c;if(',9,'Browser.isMSIE){a.text=b}else{a.appendChild(document.createTextNode(b))}return a},filterTeX',5,'a){return a}};',9,'Register.PreProcessor(["',4,'",',0,']);MathJax.Ajax.loadComplete("[MathJax]/extensions/jsMath2jax.js");']
 ]);
 
diff --git a/mathjax/unpacked/extensions/jsMath2jax.js b/mathjax/unpacked/extensions/jsMath2jax.js
index 3c2fd2d68..80568a887 100644
--- a/mathjax/unpacked/extensions/jsMath2jax.js
+++ b/mathjax/unpacked/extensions/jsMath2jax.js
@@ -31,7 +31,7 @@
  */
 
 MathJax.Extension.jsMath2jax = {
-  version: "1.0",
+  version: "1.0.1",
   
   config: {
     element: null,    // The ID of the element to be processed
@@ -62,12 +62,14 @@ MathJax.Extension.jsMath2jax = {
   },
   
   ConvertMath: function (node,mode) {
-    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);
+    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) {
diff --git a/test/jsMath2jax.html b/test/jsMath2jax.html
new file mode 100644
index 000000000..08effb01c
--- /dev/null
+++ b/test/jsMath2jax.html
@@ -0,0 +1,30 @@
+<html>
+<head>
+<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
+<title>jsMath2jax Test</title>
+<script src="../mathjax/unpacked/MathJax.js">
+  MathJax.Hub.Config({
+    jax: ["input/TeX","output/HTML-CSS"],
+    extensions: ["tex2jax.js","jsMath2jax.js"]
+  });
+</script>
+</head>
+<body>
+
+\begin{eqnarray}
+    x & = & 4y + 3z \\
+    z & > & a + b + ... + j +  \\
+      &   & k + l + m
+    \end{eqnarray}
+
+<div class="math">
+\begin{eqnarray}
+    x & = & 4y + 3z \\
+    z & > & a + b + ... + j +  \\
+      &   & k + l + m
+    \end{eqnarray}
+
+</div>
+
+</body>
+</html>