From 82dc8af1ae9a5724fdbf1f0dd45360221c3bc87a Mon Sep 17 00:00:00 2001 From: Christian Perfect Date: Fri, 16 May 2014 14:15:53 +0100 Subject: [PATCH] content-mathml: make it compatible with IE8; code style fixes --- unpacked/extensions/MathML/content-mathml.js | 2342 +++++++++--------- 1 file changed, 1205 insertions(+), 1137 deletions(-) diff --git a/unpacked/extensions/MathML/content-mathml.js b/unpacked/extensions/MathML/content-mathml.js index 1d569b316..e435ec0db 100644 --- a/unpacked/extensions/MathML/content-mathml.js +++ b/unpacked/extensions/MathML/content-mathml.js @@ -5,9 +5,9 @@ * * MathJax/extensions/MathML/content-mathml.js * - * This file implements an XSLT transform to convert Content-MathML to + * This file provides methods to convert Content-MathML to * Presentation MathML for processing by MathJax. The transform is - * performed in a pre-filter for the MathML input jax, so that the + * performed in a DOM filter for the MathML input jax, so that the * Show Math As menu will still show the Original MathML as Content MathML, * but the Presentation MathML can be obtained from the main MathML menu. * @@ -19,7 +19,7 @@ * * in your configuration. * - * A portion of this file is taken from ctop.xsl which is + * A portion of this file is taken from ctop.js which is * Copyright (c) David Carlisle 2001, 2002, 2008, 2009, 2013, * and is used by permission of David Carlisle, who has agreed to allow us * to release it under the Apache2 license (see below). That portion is @@ -52,59 +52,103 @@ MathJax.Extension["MathML/content-mathml"] = (function(HUB) { * */ + + var isMSIE = HUB.Browser.isMSIE; + + if (isMSIE) { + document.namespaces.add("m","http://www.w3.org/1998/Math/MathML"); + } + var CONFIG = HUB.CombineConfig("MathML.content-mathml",{ - // render `a+(-b)` as `a-b`? - collapsePlusMinus: true, + // render `a+(-b)` as `a-b`? + collapsePlusMinus: true, - /* mathvariant to use with corresponding type attribute */ - cistyles: { - "vector": 'bold-italic', - "matrix": 'bold-upright' - }, + /* mathvariant to use with corresponding type attribute */ + cistyles: { + vector: 'bold-italic', + matrix: 'bold-upright' + }, - /* Symbol names to translate to characters - */ - symbols: { - "gamma": '\u03B3' - } + /* Symbol names to translate to characters + */ + symbols: { + gamma: '\u03B3' + } - }); + }); var CToP = { version: '2.4', settings: CONFIG, /* Transform the given elements from Content MathML to Presentation MathML and replace the original elements - */ - transformElements: function(elements){ - for (var i = 0; i< elements.length;i++){ + */ + transformElements: function(elements) { + for (var i = 0, l = elements.length; i1){ + if (args.length>1) { CToP.applyTransform(mrow,args[0],tokenPrecedence); } CToP.appendToken(mrow,'mo',name); - if(args.length>0){ - var z = args[(args.length==1)?0:1]; + if (args.length>0) { + var z = args[(args.length === 1)?0:1]; CToP.applyTransform(mrow,z,tokenPrecedence); } - if(needsBrackets) { + if (needsBrackets) { CToP.appendToken(mrow,'mo',')'); } parentNode.appendChild(mrow); @@ -279,16 +323,16 @@ MathJax.Extension["MathML/content-mathml"] = (function(HUB) { return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { var mrow = CToP.createElement('mrow'); var needsBrackets = precedence>tokenPrecedence; - if(needsBrackets) { + if (needsBrackets) { CToP.appendToken(mrow,'mo','('); } - for(var j=0;j0) { + for (var j = 0, l = args.length; j0) { CToP.appendToken(mrow,'mo',name); } CToP.applyTransform(mrow,args[j],tokenPrecedence); } - if(needsBrackets) { + if (needsBrackets) { CToP.appendToken(mrow,'mo',')'); } parentNode.appendChild(mrow); @@ -303,42 +347,42 @@ MathJax.Extension["MathML/content-mathml"] = (function(HUB) { return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { var mrow = CToP.createElement('mrow'); var mo = CToP.createElement('mo'); - mo.textContent = name; + CToP.setTextContent(mo,name); var munderover = CToP.createElement('munderover'); munderover.appendChild(mo); var mrow1 = CToP.createElement('mrow'); - for(var i=0; i0) { + if (j>0) { CToP.appendToken(mrow,'mo',','); } var children = CToP.getChildren(bvar); - if(children.length){ + if (children.length) { CToP.applyTransform(mrow,children[0],0); } } var conditions_mrow = CToP.createElement('mrow'); var conditions = false, children; - for(var i=0; i0) { + for (var i = 0, l = args.length; i0) { CToP.appendToken(mrow2,'mo',','); } CToP.applyTransform(mrow2,args[i],0); } - if(qualifiers.length) { + if (qualifiers.length) { CToP.appendToken(mrow2,'mo','|'); - for(var i=0;i',1), - "lt": CToP.transforms.infix('<',1), - "geq": CToP.transforms.infix('\u2265',1), - "leq": CToP.transforms.infix('\u2264',1), - "equivalent": CToP.transforms.infix('\u2261',1), - "approx": CToP.transforms.infix('\u2248',1), - "subset": CToP.transforms.infix('\u2286',2), - "prsubset": CToP.transforms.infix('\u2282',2), - "cartesianproduct": CToP.transforms.infix('\u00D7',2), + xor: CToP.transforms.infix('xor',3), + neq: CToP.transforms.infix('\u2260',1), + gt: CToP.transforms.infix('>',1), + lt: CToP.transforms.infix('<',1), + geq: CToP.transforms.infix('\u2265',1), + leq: CToP.transforms.infix('\u2264',1), + equivalent: CToP.transforms.infix('\u2261',1), + approx: CToP.transforms.infix('\u2248',1), + subset: CToP.transforms.infix('\u2286',2), + prsubset: CToP.transforms.infix('\u2282',2), + cartesianproduct: CToP.transforms.infix('\u00D7',2), "cartesian_product": CToP.transforms.infix('\u00D7',2), - "vectorproduct": CToP.transforms.infix('\u00D7',2), - "scalarproduct": CToP.transforms.infix('.',2), - "outerproduct": CToP.transforms.infix('\u2297',2), - "sum": CToP.transforms.iteration('\u2211','='), - "product": CToP.transforms.iteration('\u220F','='), - "forall": CToP.transforms.bind('\u2200','.',','), - "exists": CToP.transforms.bind('\u2203','.',','), - "lambda": CToP.transforms.bind('\u03BB','.',','), - "limit": CToP.transforms.iteration('lim','\u2192'), - "sdev": CToP.transforms.fn('\u03c3'), - "determinant": CToP.transforms.fn('det'), - "max": CToP.transforms.minmax('max'), - "min": CToP.transforms.minmax('min'), - "real": CToP.transforms.fn('\u211b'), - "imaginary": CToP.transforms.fn('\u2111'), - "set": CToP.transforms.set('{','}'), - "list": CToP.transforms.set('(',')') - } - CToP.applyTokens['exp'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var msup = CToP.createElement('msup'); - CToP.appendToken(msup,'mi','e'); - CToP.applyTransform(msup,args[0],0); - parentNode.appendChild(msup); - } + vectorproduct: CToP.transforms.infix('\u00D7',2), + scalarproduct: CToP.transforms.infix('.',2), + outerproduct: CToP.transforms.infix('\u2297',2), + sum: CToP.transforms.iteration('\u2211','='), + product: CToP.transforms.iteration('\u220F','='), + forall: CToP.transforms.bind('\u2200','.',','), + exists: CToP.transforms.bind('\u2203','.',','), + lambda: CToP.transforms.bind('\u03BB','.',','), + limit: CToP.transforms.iteration('lim','\u2192'), + sdev: CToP.transforms.fn('\u03c3'), + determinant: CToP.transforms.fn('det'), + max: CToP.transforms.minmax('max'), + min: CToP.transforms.minmax('min'), + real: CToP.transforms.fn('\u211b'), + imaginary: CToP.transforms.fn('\u2111'), + set: CToP.transforms.set('{','}'), + list: CToP.transforms.set('(',')'), - CToP.applyTokens['union'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - if(bvars.length) { - CToP.transforms.iteration('\u22C3','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); - } else { - CToP.transforms.infix('\u222A',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); - } - } - CToP.applyTokens['intersect'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - if(bvars.length) { - CToP.transforms.iteration('\u22C2','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); - } else { - var mrow = CToP.createElement('mrow'); - var needsBrackets = precedence>2; - if(needsBrackets) { - CToP.appendToken(mrow,'mo','('); + exp: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var msup = CToP.createElement('msup'); + CToP.appendToken(msup,'mi','e'); + CToP.applyTransform(msup,args[0],0); + parentNode.appendChild(msup); + }, + + union: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + if (bvars.length) { + CToP.transforms.iteration('\u22C3','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); + } else { + CToP.transforms.infix('\u222A',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); } - for(var j=0;j0) { - CToP.appendToken(mrow,'mo','\u2229'); - if(args[j].localName=='apply') { - var child = CToP.getChildren(args[j])[0]; - argBrackets = child.localName == 'union'; - } - } - if(argBrackets) { + }, + + intersect: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + if (bvars.length) { + CToP.transforms.iteration('\u22C2','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); + } else { + var mrow = CToP.createElement('mrow'); + var needsBrackets = precedence>2; + if (needsBrackets) { CToP.appendToken(mrow,'mo','('); } - CToP.applyTransform(mrow,args[j],2); - if(argBrackets) { + for (var j = 0, l = args.length; j0) { + CToP.appendToken(mrow,'mo','\u2229'); + if (args[j].nodeName === 'apply') { + var child = CToP.getChildren(args[j])[0]; + argBrackets = child.nodeName === 'union'; + } + } + if (argBrackets) { + CToP.appendToken(mrow,'mo','('); + } + CToP.applyTransform(mrow,args[j],2); + if (argBrackets) { + CToP.appendToken(mrow,'mo',')'); + } + } + if (needsBrackets) { CToP.appendToken(mrow,'mo',')'); } + parentNode.appendChild(mrow); } - if(needsBrackets) { - CToP.appendToken(mrow,'mo',')'); - } - parentNode.appendChild(mrow); - } - } + }, - CToP.applyTokens['floor'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mrow = CToP.createElement('mrow'); - CToP.appendToken(mrow,'mo','\u230a'); - CToP.applyTransform(mrow,args[0],0); - CToP.appendToken(mrow,'mo','\u230b'); - parentNode.appendChild(mrow); - } - CToP.applyTokens['conjugate'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mover = CToP.createElement('mover'); - CToP.applyTransform(mover,args[0],0); - CToP.appendToken(mover,'mo','\u00af'); - parentNode.appendChild(mover); - } - CToP.applyTokens['abs'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mrow = CToP.createElement('mrow'); - CToP.appendToken(mrow,'mo','|'); - CToP.applyTransform(mrow,args[0],0); - CToP.appendToken(mrow,'mo','|'); - parentNode.appendChild(mrow); - } - CToP.applyTokens['and'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - if(bvars.length || qualifiers.length) { - CToP.transforms.iteration('\u22c0','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,4); - } else { - CToP.transforms.infix('\u2227',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); - } - } - CToP.applyTokens['or'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - if(bvars.length || qualifiers.length) { - CToP.transforms.iteration('\u22c1','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,4); - } else { - CToP.transforms.infix('\u2228',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); - } - } - CToP.applyTokens['xor'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - if(bvars.length || qualifiers.length) { - CToP.transforms.iteration('xor','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,4); - } else { - CToP.transforms.infix('xor',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); - } - } - CToP.applyTokens['card'] = CToP.applyTokens['size'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mrow = CToP.createElement('mrow'); - CToP.appendToken(mrow,'mo','|'); - CToP.applyTransform(mrow,args[0],0); - CToP.appendToken(mrow,'mo','|'); - parentNode.appendChild(mrow); - } - CToP.applyTokens['mean'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - if(args.length==1) { + floor: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var mrow = CToP.createElement('mrow'); + CToP.appendToken(mrow,'mo','\u230a'); + CToP.applyTransform(mrow,args[0],0); + CToP.appendToken(mrow,'mo','\u230b'); + parentNode.appendChild(mrow); + }, + + conjugate: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { var mover = CToP.createElement('mover'); CToP.applyTransform(mover,args[0],0); CToP.appendToken(mover,'mo','\u00af'); parentNode.appendChild(mover); - } else { - parentNode.appendChild(CToP.createmfenced(args,'\u27e8','\u27e9')); - } - } - CToP.applyTokens['moment'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var degree,momentabout; + }, - for(var i=0; i1) { - argrow.appendChild(CToP.createmfenced(args,'(',')')); - } else { - CToP.applyTransform(argrow,args[0],0); - } - if(degree) { - var msup = CToP.createElement('msup'); - msup.appendChild(argrow); - var children = CToP.getChildren(degree); - for(var j=0;j1) { + argrow.appendChild(CToP.createmfenced(args,'(',')')); + } else { + CToP.applyTransform(argrow,args[0],0); + } + if (degree) { + var msup = CToP.createElement('msup'); + msup.appendChild(argrow); + var children = CToP.getChildren(degree); + for (var j = 0, l = children.length; j3; - if(needsBrackets) { - CToP.appendToken(mrow,'mo','('); - } - for(var j=0;j0) { - CToP.appendToken(mrow,'mo',(args[j].localName=='cn') ? "\u00D7" :"\u2062"); + tendsto: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var type; + if (firstArg.nodeName === 'tendsto') { + type = firstArg.getAttribute('type'); + } else { + type = CToP.getTextContent(args[0]); + args = args.slice(1); } - CToP.applyTransform(mrow,args[j],3); - } - if(needsBrackets) { - CToP.appendToken(mrow,'mo',')'); - } - parentNode.appendChild(mrow); - } + var name = (type === 'above')? '\u2198' : + (type === 'below') ? '\u2197' : '\u2192' ; + CToP.transforms.binary(name,2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence); + }, - CToP.applyTokens["plus"] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mrow = CToP.createElement('mrow'); - var needsBrackets = precedence>2; - if(needsBrackets) { - CToP.appendToken(mrow,'mo','('); - } - for(var j=0;j0) { - var n; - if(CToP.settings.collapsePlusMinus) { - if(arg.localName=='cn' && !(children.length) && (n=Number(arg.textContent)) <0) { - CToP.appendToken(mrow,'mo','\u2212'); - CToP.appendToken(mrow,'mn', -n); - } else if(arg.localName=='apply' && children.length==2 && children[0].localName=='minus') { - CToP.appendToken(mrow,'mo','\u2212'); - CToP.applyTransform(mrow,children[1],2); - } else if(arg.localName=='apply' && children.length>2 && children[0].localName=='times' && children[1].localName=='cn' && ( n=Number(children[1].textContent) < 0)) { - CToP.appendToken(mrow,'mo','\u2212'); - children[1].textContent=-n;// fix me: modifying document - CToP.applyTransform(mrow,arg,2); - } else{ + minus: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var tokenPrecedence = args.length === 1 ? 5 : 2; + + var mrow = CToP.createElement('mrow'); + var needsBrackets = tokenPrecedence3; + if (needsBrackets) { + CToP.appendToken(mrow,'mo','('); + } + for (var j = 0, l = args.length; j0) { + CToP.appendToken(mrow,'mo',(args[j].nodeName === 'cn') ? "\u00D7" :"\u2062"); + } + CToP.applyTransform(mrow,args[j],3); + } + if (needsBrackets) { + CToP.appendToken(mrow,'mo',')'); + } + parentNode.appendChild(mrow); + }, + + plus: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var mrow = CToP.createElement('mrow'); + var needsBrackets = precedence>2; + if (needsBrackets) { + CToP.appendToken(mrow,'mo','('); + } + for (var j = 0, l = args.length; j0) { + var n; + if (CToP.settings.collapsePlusMinus) { + if (arg.nodeName === 'cn' && !(children.length) && (n = Number(CToP.getTextContent(arg))) <0) { + CToP.appendToken(mrow,'mo','\u2212'); + CToP.appendToken(mrow,'mn', -n); + } else if (arg.nodeName === 'apply' && children.length === 2 && children[0].nodeName === 'minus') { + CToP.appendToken(mrow,'mo','\u2212'); + CToP.applyTransform(mrow,children[1],2); + } else if (arg.nodeName === 'apply' && children.length>2 && children[0].nodeName === 'times' && children[1].nodeName === 'cn' && ( n = Number(CToP.getTextContent(children[1])) < 0)) { + CToP.appendToken(mrow,'mo','\u2212'); + CToP.getTextContent(children[1]) = -n;// fix me: modifying document + CToP.applyTransform(mrow,arg,2); + } else{ + CToP.appendToken(mrow,'mo','+'); + CToP.applyTransform(mrow,arg,2); + } + } else { CToP.appendToken(mrow,'mo','+'); CToP.applyTransform(mrow,arg,2); } } else { - CToP.appendToken(mrow,'mo','+'); - CToP.applyTransform(mrow,arg,2); + CToP.applyTransform(mrow,arg,2); } - } else { - CToP.applyTransform(mrow,arg,2); } - } - if(needsBrackets) { - CToP.appendToken(mrow,'mo',')'); - } - parentNode.appendChild(mrow); - } + if (needsBrackets) { + CToP.appendToken(mrow,'mo',')'); + } + parentNode.appendChild(mrow); + }, - CToP.applyTokens['transpose'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var msup = CToP.createElement('msup'); - CToP.applyTransform(msup,args[0],precedence); - CToP.appendToken(msup,'mi','T'); - parentNode.appendChild(msup); - } + transpose: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var msup = CToP.createElement('msup'); + CToP.applyTransform(msup,args[0],precedence); + CToP.appendToken(msup,'mi','T'); + parentNode.appendChild(msup); + }, - CToP.applyTokens['power'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var msup = CToP.createElement('msup'); - CToP.applyTransform(msup,args[0],3); - CToP.applyTransform(msup,args[1],precedence); - parentNode.appendChild(msup); - } + power: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var msup = CToP.createElement('msup'); + CToP.applyTransform(msup,args[0],3); + CToP.applyTransform(msup,args[1],precedence); + parentNode.appendChild(msup); + }, - CToP.applyTokens['selector'] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var msub = CToP.createElement('msub'); - var mrow = args ? args[0]: CToP.createElement('mrow'); - CToP.applyTransform(msub,mrow,0); - var mrow2 = CToP.createElement('mrow'); - for(var i=1;i1) { + CToP.applyTransform(mrow,args[1],0); + } + } + CToP.appendToken(mrow,'mo','\u230B'); + parentNode.appendChild(mrow); + }, + + factorial: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var mrow = CToP.createElement('mrow'); + CToP.applyTransform(mrow,args[0],4); + CToP.appendToken(mrow,'mo','!'); + parentNode.appendChild(mrow); + }, + + root: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { + var mr; + if (firstArg.nodeName === 'root' && (qualifiers.length === 0 || (qualifiers[0].nodeName === 'degree' && CToP.getTextContent(qualifiers[0]) === '2'))) { + mr = CToP.createElement('msqrt'); + for (var i = 0, l = args.length; i1){ - CToP.applyTransform(mrow,args[1],0); - } - } - CToP.appendToken(mrow,'mo','\u230B'); - parentNode.appendChild(mrow); - } - - CToP.applyTokens["factorial"] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mrow = CToP.createElement('mrow'); - CToP.applyTransform(mrow,args[0],4); - CToP.appendToken(mrow,'mo','!'); - parentNode.appendChild(mrow); - } - - CToP.applyTokens["root"] = function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) { - var mr; - if(firstArg.localName=='root' && (qualifiers.length==0 || (qualifiers[0].localName=='degree' && qualifiers[0].textContent=='2'))){ - mr = CToP.createElement('msqrt'); - for(var i=0;i1) { - var msup = CToP.createElement('msup'); - CToP.applyTransform(msup,bvar,0); + if (bvars.length === 0 && args.length === 2 && args[0].nodeName === 'list') { + if (args[1].nodeName === 'lambda') { // `d^(n+m)/(dx^n dy^m) f` form, through a lambda + var degree = CToP.getChildren(args[0]).length; + if (degree != 1) { + msup = CToP.createElement('msup'); + CToP.appendToken(msup,'mo','\u2202'); // curly d CToP.appendToken(msup,'mn',degree); - bottomrow.appendChild(msup); + toprow.appendChild(msup); } else { - CToP.applyTransform(bottomrow,bvar,0); + CToP.appendToken(toprow,'mo','\u2202'); } - } - for(var i=0;i1) { + var msup = CToP.createElement('msup'); + CToP.applyTransform(msup,bvar,0); + CToP.appendToken(msup,'mn',degree); + bottomrow.appendChild(msup); + } else { + CToP.applyTransform(bottomrow,bvar,0); + } + } + for (var i = 0, l = lambdaSequence.length; i0) { + if (hadFirst) { + CToP.appendToken(degreeRow,'mo','+'); + } + CToP.appendToken(degreeRow,'mn',degree); } } - if(degree>0){ - if(hadFirst){ - CToP.appendToken(degreeRow,'mo','+'); - } - CToP.appendToken(degreeRow,'mn',degree); + + if (args.length) { + differendNode = args[0]; } - } - if(args.length){ - differendNode = args[0]; - } + for (var i = 0, l = bvars.length; i