2010-03-18 07:45:56 +01:00
/ *
LaTeXMathML . js from http : //math.etsu.edu/LaTeXMathML/
Adapted by Jeff Knisely and Douglas Woodall from ASCIIMathML . js v . 1.4 . 7 ,
( c ) 2005 Peter Jipsen http : //www.chapman.edu/~jipsen.
Released under the GNU General Public License version 2 or later .
See the GNU General Public License ( at http : //www.gnu.org/copyleft/gpl.html)
for more details .
* /
2008-08-13 05:02:42 +02:00
var checkForMathML = true ; var notifyIfNoMathML = true ; var alertIfNoMathML = false ; var mathcolor = "" ; var mathfontfamily = "" ; var showasciiformulaonhover = true ; var isIE = document . createElementNS == null ; if ( document . getElementById == null )
alert ( "This webpage requires a recent browser such as \nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer" )
function AMcreateElementXHTML ( t ) { if ( isIE ) return document . createElement ( t ) ; else return document . createElementNS ( "http://www.w3.org/1999/xhtml" , t ) ; }
function AMnoMathMLNote ( ) { var nd = AMcreateElementXHTML ( "h3" ) ; nd . setAttribute ( "align" , "center" )
nd . appendChild ( AMcreateElementXHTML ( "p" ) ) ; nd . appendChild ( document . createTextNode ( "To view the " ) ) ; var an = AMcreateElementXHTML ( "a" ) ; an . appendChild ( document . createTextNode ( "LaTeXMathML" ) ) ; an . setAttribute ( "href" , "http://www.maths.nott.ac.uk/personal/drw/lm.html" ) ; nd . appendChild ( an ) ; nd . appendChild ( document . createTextNode ( " notation use Internet Explorer 6+" ) ) ; an = AMcreateElementXHTML ( "a" ) ; an . appendChild ( document . createTextNode ( "MathPlayer" ) ) ; an . setAttribute ( "href" , "http://www.dessci.com/en/products/mathplayer/download.htm" ) ; nd . appendChild ( an ) ; nd . appendChild ( document . createTextNode ( " or Netscape/Mozilla/Firefox" ) ) ; nd . appendChild ( AMcreateElementXHTML ( "p" ) ) ; return nd ; }
function AMisMathMLavailable ( ) { if ( navigator . appName . slice ( 0 , 8 ) == "Netscape" )
if ( navigator . appVersion . slice ( 0 , 1 ) >= "5" ) return null ; else return AMnoMathMLNote ( ) ; else if ( navigator . appName . slice ( 0 , 9 ) == "Microsoft" )
try { var ActiveX = new ActiveXObject ( "MathPlayer.Factory.1" ) ; return null ; } catch ( e ) { return AMnoMathMLNote ( ) ; }
else return AMnoMathMLNote ( ) ; }
var AMcal = [ 0xEF35 , 0x212C , 0xEF36 , 0xEF37 , 0x2130 , 0x2131 , 0xEF38 , 0x210B , 0x2110 , 0xEF39 , 0xEF3A , 0x2112 , 0x2133 , 0xEF3B , 0xEF3C , 0xEF3D , 0xEF3E , 0x211B , 0xEF3F , 0xEF40 , 0xEF41 , 0xEF42 , 0xEF43 , 0xEF44 , 0xEF45 , 0xEF46 ] ; var AMfrk = [ 0xEF5D , 0xEF5E , 0x212D , 0xEF5F , 0xEF60 , 0xEF61 , 0xEF62 , 0x210C , 0x2111 , 0xEF63 , 0xEF64 , 0xEF65 , 0xEF66 , 0xEF67 , 0xEF68 , 0xEF69 , 0xEF6A , 0x211C , 0xEF6B , 0xEF6C , 0xEF6D , 0xEF6E , 0xEF6F , 0xEF70 , 0xEF71 , 0x2128 ] ; var AMbbb = [ 0xEF8C , 0xEF8D , 0x2102 , 0xEF8E , 0xEF8F , 0xEF90 , 0xEF91 , 0x210D , 0xEF92 , 0xEF93 , 0xEF94 , 0xEF95 , 0xEF96 , 0x2115 , 0xEF97 , 0x2119 , 0x211A , 0x211D , 0xEF98 , 0xEF99 , 0xEF9A , 0xEF9B , 0xEF9C , 0xEF9D , 0xEF9E , 0x2124 ] ; var CONST = 0 , UNARY = 1 , BINARY = 2 , INFIX = 3 , LEFTBRACKET = 4 , RIGHTBRACKET = 5 , SPACE = 6 , UNDEROVER = 7 , DEFINITION = 8 , TEXT = 9 , BIG = 10 , LONG = 11 , STRETCHY = 12 , MATRIX = 13 ; var AMsqrt = { input : "\\sqrt" , tag : "msqrt" , output : "sqrt" , ttype : UNARY } , AMroot = { input : "\\root" , tag : "mroot" , output : "root" , ttype : BINARY } , AMfrac = { input : "\\frac" , tag : "mfrac" , output : "/" , ttype : BINARY } , AMover = { input : "\\stackrel" , tag : "mover" , output : "stackrel" , ttype : BINARY } , AMatop = { input : "\\atop" , tag : "mfrac" , output : "" , ttype : INFIX } , AMchoose = { input : "\\choose" , tag : "mfrac" , output : "" , ttype : INFIX } , AMsub = { input : "_" , tag : "msub" , output : "_" , ttype : INFIX } , AMsup = { input : "^" , tag : "msup" , output : "^" , ttype : INFIX } , AMtext = { input : "\\mathrm" , tag : "mtext" , output : "text" , ttype : TEXT } , AMmbox = { input : "\\mbox" , tag : "mtext" , output : "mbox" , ttype : TEXT } ; var AMsymbols = [ { input : "\\alpha" , tag : "mi" , output : "\u03B1" , ttype : CONST } , { input : "\\beta" , tag : "mi" , output : "\u03B2" , ttype : CONST } , { input : "\\gamma" , tag : "mi" , output : "\u03B3" , ttype : CONST } , { input : "\\delta" , tag : "mi" , output : "\u03B4" , ttype : CONST } , { input : "\\epsilon" , tag : "mi" , output : "\u03B5" , ttype : CONST } , { input : "\\varepsilon" , tag : "mi" , output : "\u025B" , ttype : CONST } , { input : "\\zeta" , tag : "mi" , output : "\u03B6" , ttype : CONST } , { input : "\\eta" , tag : "mi" , output : "\u03B7" , ttype : CONST } , { input : "\\theta" , tag : "mi" , output : "\u03B8" , ttype : CONST } , { input : "\\vartheta" , tag : "mi" , output : "\u03D1" , ttype : CONST } , { input : "\\iota" , tag : "mi" , output : "\u03B9" , ttype : CONST } , { input : "\\kappa" , tag : "mi" , output : "\u03BA" , ttype : CONST } , { input : "\\lambda" , tag : "mi" , output : "\u03BB" , ttype : CONST } , { input : "\\mu" , tag : "mi" , output : "\u03BC" , ttype : CONST } , { input : "\\nu" , tag : "mi" , output : "\u03BD" , ttype : CONST } , { input : "\\xi" , tag : "mi" , output : "\u03BE" , ttype : CONST } , { input : "\\pi" , tag : "mi" , output : "\u03C0" , ttype : CONST } , { input : "\\varpi" , tag : "mi" , output : "\u03D6" , ttype : CONST } , { input : "\\rho" , tag : "mi" , output : "\u03C1" , ttype : CONST } , { input : "\\varrho" , tag : "mi" , output : "\u03F1" , ttype : CONST } , { input : "\\varsigma" , tag : "mi" , output : "\u03C2" , ttype : CONST } , { input : "\\sigma" , tag : "mi" , output : "\u03C3" , ttype : CONST } , { input : "\\tau" , tag : "mi" , output : "\u03C4" , ttype : CONST } , { input : "\\upsilon" , tag : "mi" , output : "\u03C5" , ttype : CONST } , { input : "\\phi" , tag : "mi" , output : "\u03C6" , ttype : CONST } , { input : "\\varphi" , tag : "mi" , output : "\u03D5" , ttype : CONST } , { input : "\\chi" , tag : "mi" , output : "\u03C7" , ttype : CONST } , { input : "\\psi" , tag : "mi" , output : "\u03C8" , ttype : CONST } , { input : "\\omega" , tag : "mi" , output : "\u03C9" , ttype : CONST } , { input : "\\Gamma" , tag : "mo" , output : "\u0393" , ttype : CONST } , { input : "\\Delta" , tag : "mo" , output : "\u0394" , ttype : CONST } , { input : "\\Theta" , tag : "mo" , output : "\u0398" , ttype : CONST } , { input : "\\Lambda" , tag : "mo" , output : "\u039B" , ttype : CONST } , { input : "\\Xi" , tag : "mo" , output : "\u039E" , ttype : CONST } , { input : "\\Pi" , tag : "mo" , output : "\u03A0" , ttype : CONST } , { input : "\\Sigma" , tag : "mo" , output : "\u03A3" , ttype : CONST } , { input : "\\Upsilon" , tag : "mo" , output : "\u03A5" , ttype : CONST } , { input : "\\Phi" , tag : "mo" , output : "\u03A6" , ttype : CONST } , { input : "\\Psi" , tag : "mo" , output : "\u03A8" , ttype : CONST } , { input : "\\Omega" , tag : "mo" , output : "\u03A9" , ttype : CONST } , { input : "\\frac12" , tag : "mo" , output : "\u00BD" , ttype : CONST } , { input : "\\frac14" , tag : "mo" , output : "\u00BC" , ttype : CONST } , { input : "\\frac34" , tag : "mo" , output : "\u00BE" , ttype : CONST } , { input : "\\frac13" , tag : "mo" , output : "\u2153" , ttype : CONST } , { input : "\\frac23" , tag : "mo" , output : "\u2154" , ttype : CONST } , { input : "\\frac15" , tag : "mo" , output : "\u2155" , ttype : CONST } , { input : "\\frac25" , tag : "mo" , output : "\u2156" , ttype : CONST } , { input : "\\frac35" , tag : "mo" , output : "\u2157" , ttype : CONST } , { input : "\\frac45" , tag : "mo" , output : "\u2158" , ttype : CONST } , { input : "\\frac16" , tag : "mo" , output : "\u2159" , ttype : CONST } , { in
else return - 1 ; }
var AMnames = [ ] ; function AMinitSymbols ( ) { AMsymbols . sort ( compareNames ) ; for ( i = 0 ; i < AMsymbols . length ; i ++ ) AMnames [ i ] = AMsymbols [ i ] . input ; }
var AMmathml = "http://www.w3.org/1998/Math/MathML" ; function AMcreateElementMathML ( t ) { if ( isIE ) return document . createElement ( "m:" + t ) ; else return document . createElementNS ( AMmathml , t ) ; }
function AMcreateMmlNode ( t , frag ) { if ( isIE ) var node = document . createElement ( "m:" + t ) ; else var node = document . createElementNS ( AMmathml , t ) ; node . appendChild ( frag ) ; return node ; }
function newcommand ( oldstr , newstr ) { AMsymbols = AMsymbols . concat ( [ { input : oldstr , tag : "mo" , output : newstr , ttype : DEFINITION } ] ) ; }
function AMremoveCharsAndBlanks ( str , n ) { var st ; st = str . slice ( n ) ; for ( var i = 0 ; i < st . length && st . charCodeAt ( i ) <= 32 ; i = i + 1 ) ; return st . slice ( i ) ; }
function AMposition ( arr , str , n ) { if ( n == 0 ) { var h , m ; n = - 1 ; h = arr . length ; while ( n + 1 < h ) { m = ( n + h ) >> 1 ; if ( arr [ m ] < str ) n = m ; else h = m ; }
return h ; } else
for ( var i = n ; i < arr . length && arr [ i ] < str ; i ++ ) ; return i ; }
function AMgetSymbol ( str ) { var k = 0 ; var j = 0 ; var mk ; var st ; var tagst ; var match = "" ; var more = true ; for ( var i = 1 ; i <= str . length && more ; i ++ ) { st = str . slice ( 0 , i ) ; j = k ; k = AMposition ( AMnames , st , j ) ; if ( k < AMnames . length && str . slice ( 0 , AMnames [ k ] . length ) == AMnames [ k ] ) { match = AMnames [ k ] ; mk = k ; i = match . length ; }
more = k < AMnames . length && str . slice ( 0 , AMnames [ k ] . length ) >= AMnames [ k ] ; }
AMpreviousSymbol = AMcurrentSymbol ; if ( match != "" ) { AMcurrentSymbol = AMsymbols [ mk ] . ttype ; return AMsymbols [ mk ] ; }
AMcurrentSymbol = CONST ; k = 1 ; st = str . slice ( 0 , 1 ) ; if ( "0" <= st && st <= "9" ) tagst = "mn" ; else tagst = ( ( "A" > st || st > "Z" ) && ( "a" > st || st > "z" ) ? "mo" : "mi" ) ; return { input : st , tag : tagst , output : st , ttype : CONST } ; }
var AMpreviousSymbol , AMcurrentSymbol ; function AMparseSexpr ( str ) { var symbol , node , result , result2 , i , st , newFrag = document . createDocumentFragment ( ) ; str = AMremoveCharsAndBlanks ( str , 0 ) ; symbol = AMgetSymbol ( str ) ; if ( symbol == null || symbol . ttype == RIGHTBRACKET )
return [ null , str , null ] ; if ( symbol . ttype == DEFINITION ) { str = symbol . output + AMremoveCharsAndBlanks ( str , symbol . input . length ) ; symbol = AMgetSymbol ( str ) ; if ( symbol == null || symbol . ttype == RIGHTBRACKET )
return [ null , str , null ] ; }
str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; switch ( symbol . ttype ) { case SPACE : node = AMcreateElementMathML ( symbol . tag ) ; node . setAttribute ( symbol . atname , symbol . atval ) ; return [ node , str , symbol . tag ] ; case UNDEROVER : if ( isIE ) { if ( symbol . input . substr ( 0 , 4 ) == "\\big" ) { str = "\\" + symbol . input . substr ( 4 ) + str ; symbol = AMgetSymbol ( str ) ; symbol . ttype = UNDEROVER ; str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; } }
return [ AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) , str , symbol . tag ] ; case CONST : var output = symbol . output ; if ( isIE ) { if ( symbol . input == "'" )
output = "\u2032" ; else if ( symbol . input == "''" )
output = "\u2033" ; else if ( symbol . input == "'''" )
output = "\u2033\u2032" ; else if ( symbol . input == "''''" )
output = "\u2033\u2033" ; else if ( symbol . input == "\\square" )
output = "\u25A1" ; else if ( symbol . input . substr ( 0 , 5 ) == "\\frac" ) { var denom = symbol . input . substr ( 6 , 1 ) ; if ( denom == "5" || denom == "6" ) { str = symbol . input . replace ( /\\frac/ , "\\frac " ) + str ; return [ node , str , symbol . tag ] ; } } }
node = AMcreateMmlNode ( symbol . tag , document . createTextNode ( output ) ) ; return [ node , str , symbol . tag ] ; case LONG : node = AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) ; node . setAttribute ( "minsize" , "1.5" ) ; node . setAttribute ( "maxsize" , "1.5" ) ; node = AMcreateMmlNode ( "mover" , node ) ; node . appendChild ( AMcreateElementMathML ( "mspace" ) ) ; return [ node , str , symbol . tag ] ; case STRETCHY : if ( isIE && symbol . input == "\\backslash" )
symbol . output = "\\" ; node = AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) ; if ( symbol . input == "|" || symbol . input == "\\vert" || symbol . input == "\\|" || symbol . input == "\\Vert" ) { node . setAttribute ( "lspace" , "0em" ) ; node . setAttribute ( "rspace" , "0em" ) ; }
node . setAttribute ( "maxsize" , symbol . atval ) ; if ( symbol . rtag != null )
return [ node , str , symbol . rtag ] ; else
return [ node , str , symbol . tag ] ; case BIG : var atval = symbol . atval ; if ( isIE )
atval = symbol . ieval ; symbol = AMgetSymbol ( str ) ; if ( symbol == null )
return [ null , str , null ] ; str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; node = AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) ; if ( isIE ) { var space = AMcreateElementMathML ( "mspace" ) ; space . setAttribute ( "height" , atval + "ex" ) ; node = AMcreateMmlNode ( "mrow" , node ) ; node . appendChild ( space ) ; } else { node . setAttribute ( "minsize" , atval ) ; node . setAttribute ( "maxsize" , atval ) ; }
return [ node , str , symbol . tag ] ; case LEFTBRACKET : if ( symbol . input == "\\left" ) { symbol = AMgetSymbol ( str ) ; if ( symbol != null ) { if ( symbol . input == "." )
symbol . invisible = true ; str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; } }
result = AMparseExpr ( str , true , false ) ; if ( symbol == null || ( typeof symbol . invisible == "boolean" && symbol . invisible ) )
node = AMcreateMmlNode ( "mrow" , result [ 0 ] ) ; else { node = AMcreateMmlNode ( "mo" , document . createTextNode ( symbol . output ) ) ; node = AMcreateMmlNode ( "mrow" , node ) ; node . appendChild ( result [ 0 ] ) ; }
return [ node , result [ 1 ] , result [ 2 ] ] ; case MATRIX : if ( symbol . input == "\\begin{array}" ) { var mask = "" ; symbol = AMgetSymbol ( str ) ; str = AMremoveCharsAndBlanks ( str , 0 ) ; if ( symbol == null )
mask = "l" ; else { str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; if ( symbol . input != "{" )
mask = "l" ; else do { symbol = AMgetSymbol ( str ) ; if ( symbol != null ) { str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; if ( symbol . input != "}" )
mask = mask + symbol . input ; } } while ( symbol != null && symbol . input != "" && symbol . input != "}" ) ; }
result = AMparseExpr ( "{" + str , true , true ) ; node = AMcreateMmlNode ( "mtable" , result [ 0 ] ) ; mask = mask . replace ( /l/g , "left " ) ; mask = mask . replace ( /r/g , "right " ) ; mask = mask . replace ( /c/g , "center " ) ; node . setAttribute ( "columnalign" , mask ) ; node . setAttribute ( "displaystyle" , "false" ) ; if ( isIE )
return [ node , result [ 1 ] , null ] ; var lspace = AMcreateElementMathML ( "mspace" ) ; lspace . setAttribute ( "width" , "0.167em" ) ; var rspace = AMcreateElementMathML ( "mspace" ) ; rspace . setAttribute ( "width" , "0.167em" ) ; var node1 = AMcreateMmlNode ( "mrow" , lspace ) ; node1 . appendChild ( node ) ; node1 . appendChild ( rspace ) ; return [ node1 , result [ 1 ] , null ] ; } else { result = AMparseExpr ( "{" + str , true , true ) ; node = AMcreateMmlNode ( "mtable" , result [ 0 ] ) ; if ( isIE )
node . setAttribute ( "columnspacing" , "0.25em" ) ; else
node . setAttribute ( "columnspacing" , "0.167em" ) ; node . setAttribute ( "columnalign" , "right center left" ) ; node . setAttribute ( "displaystyle" , "true" ) ; node = AMcreateMmlNode ( "mrow" , node ) ; return [ node , result [ 1 ] , null ] ; }
case TEXT : if ( str . charAt ( 0 ) == "{" ) i = str . indexOf ( "}" ) ; else i = 0 ; if ( i == - 1 )
i = str . length ; st = str . slice ( 1 , i ) ; if ( st . charAt ( 0 ) == " " ) { node = AMcreateElementMathML ( "mspace" ) ; node . setAttribute ( "width" , "0.33em" ) ; newFrag . appendChild ( node ) ; }
newFrag . appendChild ( AMcreateMmlNode ( symbol . tag , document . createTextNode ( st ) ) ) ; if ( st . charAt ( st . length - 1 ) == " " ) { node = AMcreateElementMathML ( "mspace" ) ; node . setAttribute ( "width" , "0.33em" ) ; newFrag . appendChild ( node ) ; }
str = AMremoveCharsAndBlanks ( str , i + 1 ) ; return [ AMcreateMmlNode ( "mrow" , newFrag ) , str , null ] ; case UNARY : result = AMparseSexpr ( str ) ; if ( result [ 0 ] == null ) return [ AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) , str ] ; if ( typeof symbol . func == "boolean" && symbol . func ) { st = str . charAt ( 0 ) ; if ( st == "^" || st == "_" || st == "," ) { return [ AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) , str , symbol . tag ] ; } else { node = AMcreateMmlNode ( "mrow" , AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) ) ; if ( isIE ) { var space = AMcreateElementMathML ( "mspace" ) ; space . setAttribute ( "width" , "0.167em" ) ; node . appendChild ( space ) ; }
node . appendChild ( result [ 0 ] ) ; return [ node , result [ 1 ] , symbol . tag ] ; } }
if ( symbol . input == "\\sqrt" ) { if ( isIE ) { var space = AMcreateElementMathML ( "mspace" ) ; space . setAttribute ( "height" , "1.2ex" ) ; space . setAttribute ( "width" , "0em" ) ; node = AMcreateMmlNode ( symbol . tag , result [ 0 ] )
node . appendChild ( space ) ; return [ node , result [ 1 ] , symbol . tag ] ; } else
return [ AMcreateMmlNode ( symbol . tag , result [ 0 ] ) , result [ 1 ] , symbol . tag ] ; } else if ( typeof symbol . acc == "boolean" && symbol . acc ) { node = AMcreateMmlNode ( symbol . tag , result [ 0 ] ) ; var output = symbol . output ; if ( isIE ) { if ( symbol . input == "\\hat" )
output = "\u0302" ; else if ( symbol . input == "\\widehat" )
output = "\u005E" ; else if ( symbol . input == "\\bar" )
output = "\u00AF" ; else if ( symbol . input == "\\grave" )
output = "\u0300" ; else if ( symbol . input == "\\tilde" )
output = "\u0303" ; }
var node1 = AMcreateMmlNode ( "mo" , document . createTextNode ( output ) ) ; if ( symbol . input == "\\vec" || symbol . input == "\\check" )
node1 . setAttribute ( "maxsize" , "1.2" ) ; if ( isIE && symbol . input == "\\bar" )
node1 . setAttribute ( "maxsize" , "0.5" ) ; if ( symbol . input == "\\underbrace" || symbol . input == "\\underline" )
node1 . setAttribute ( "accentunder" , "true" ) ; else
node1 . setAttribute ( "accent" , "true" ) ; node . appendChild ( node1 ) ; if ( symbol . input == "\\overbrace" || symbol . input == "\\underbrace" )
node . ttype = UNDEROVER ; return [ node , result [ 1 ] , symbol . tag ] ; } else { if ( ! isIE && typeof symbol . codes != "undefined" ) { for ( i = 0 ; i < result [ 0 ] . childNodes . length ; i ++ )
if ( result [ 0 ] . childNodes [ i ] . nodeName == "mi" || result [ 0 ] . nodeName == "mi" ) { st = ( result [ 0 ] . nodeName == "mi" ? result [ 0 ] . firstChild . nodeValue : result [ 0 ] . childNodes [ i ] . firstChild . nodeValue ) ; var newst = [ ] ; for ( var j = 0 ; j < st . length ; j ++ )
if ( st . charCodeAt ( j ) > 64 && st . charCodeAt ( j ) < 91 ) newst = newst +
String . fromCharCode ( symbol . codes [ st . charCodeAt ( j ) - 65 ] ) ; else newst = newst + st . charAt ( j ) ; if ( result [ 0 ] . nodeName == "mi" )
result [ 0 ] = AMcreateElementMathML ( "mo" ) . appendChild ( document . createTextNode ( newst ) ) ; else result [ 0 ] . replaceChild ( AMcreateElementMathML ( "mo" ) . appendChild ( document . createTextNode ( newst ) ) , result [ 0 ] . childNodes [ i ] ) ; } }
node = AMcreateMmlNode ( symbol . tag , result [ 0 ] ) ; node . setAttribute ( symbol . atname , symbol . atval ) ; if ( symbol . input == "\\scriptstyle" || symbol . input == "\\scriptscriptstyle" )
node . setAttribute ( "displaystyle" , "false" ) ; return [ node , result [ 1 ] , symbol . tag ] ; }
case BINARY : result = AMparseSexpr ( str ) ; if ( result [ 0 ] == null ) return [ AMcreateMmlNode ( "mo" , document . createTextNode ( symbol . input ) ) , str , null ] ; result2 = AMparseSexpr ( result [ 1 ] ) ; if ( result2 [ 0 ] == null ) return [ AMcreateMmlNode ( "mo" , document . createTextNode ( symbol . input ) ) , str , null ] ; if ( symbol . input == "\\textcolor" || symbol . input == "\\colorbox" ) { var tclr = str . match ( /\{\s*([#\w]+)\s*\}/ ) ; str = str . replace ( /\{\s*[#\w]+\s*\}/ , "" ) ; if ( tclr != null ) { if ( IsColorName . test ( tclr [ 1 ] . toLowerCase ( ) ) ) { tclr = LaTeXColor [ tclr [ 1 ] . toLowerCase ( ) ] ; } else { tclr = tclr [ 1 ] ; }
node = AMcreateElementMathML ( "mstyle" ) ; node . setAttribute ( symbol . atval , tclr ) ; node . appendChild ( result2 [ 0 ] ) ; return [ node , result2 [ 1 ] , symbol . tag ] ; } }
if ( symbol . input == "\\root" || symbol . input == "\\stackrel" ) newFrag . appendChild ( result2 [ 0 ] ) ; newFrag . appendChild ( result [ 0 ] ) ; if ( symbol . input == "\\frac" ) newFrag . appendChild ( result2 [ 0 ] ) ; return [ AMcreateMmlNode ( symbol . tag , newFrag ) , result2 [ 1 ] , symbol . tag ] ; case INFIX : str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; return [ AMcreateMmlNode ( "mo" , document . createTextNode ( symbol . output ) ) , str , symbol . tag ] ; default : return [ AMcreateMmlNode ( symbol . tag , document . createTextNode ( symbol . output ) ) , str , symbol . tag ] ; } }
function AMparseIexpr ( str ) { var symbol , sym1 , sym2 , node , result , tag , underover ; str = AMremoveCharsAndBlanks ( str , 0 ) ; sym1 = AMgetSymbol ( str ) ; result = AMparseSexpr ( str ) ; node = result [ 0 ] ; str = result [ 1 ] ; tag = result [ 2 ] ; symbol = AMgetSymbol ( str ) ; if ( symbol . ttype == INFIX ) { str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; result = AMparseSexpr ( str ) ; if ( result [ 0 ] == null )
result [ 0 ] = AMcreateMmlNode ( "mo" , document . createTextNode ( "\u25A1" ) ) ; str = result [ 1 ] ; tag = result [ 2 ] ; if ( symbol . input == "_" || symbol . input == "^" ) { sym2 = AMgetSymbol ( str ) ; tag = null ; underover = ( ( sym1 . ttype == UNDEROVER ) || ( node . ttype == UNDEROVER ) ) ; if ( symbol . input == "_" && sym2 . input == "^" ) { str = AMremoveCharsAndBlanks ( str , sym2 . input . length ) ; var res2 = AMparseSexpr ( str ) ; str = res2 [ 1 ] ; tag = res2 [ 2 ] ; node = AMcreateMmlNode ( ( underover ? "munderover" : "msubsup" ) , node ) ; node . appendChild ( result [ 0 ] ) ; node . appendChild ( res2 [ 0 ] ) ; } else if ( symbol . input == "_" ) { node = AMcreateMmlNode ( ( underover ? "munder" : "msub" ) , node ) ; node . appendChild ( result [ 0 ] ) ; } else { node = AMcreateMmlNode ( ( underover ? "mover" : "msup" ) , node ) ; node . appendChild ( result [ 0 ] ) ; }
node = AMcreateMmlNode ( "mrow" , node ) ; } else { node = AMcreateMmlNode ( symbol . tag , node ) ; if ( symbol . input == "\\atop" || symbol . input == "\\choose" )
node . setAttribute ( "linethickness" , "0ex" ) ; node . appendChild ( result [ 0 ] ) ; if ( symbol . input == "\\choose" )
node = AMcreateMmlNode ( "mfenced" , node ) ; } }
return [ node , str , tag ] ; }
function AMparseExpr ( str , rightbracket , matrix ) { var symbol , node , result , i , tag , newFrag = document . createDocumentFragment ( ) ; do { str = AMremoveCharsAndBlanks ( str , 0 ) ; result = AMparseIexpr ( str ) ; node = result [ 0 ] ; str = result [ 1 ] ; tag = result [ 2 ] ; symbol = AMgetSymbol ( str ) ; if ( node != undefined ) { if ( ( tag == "mn" || tag == "mi" ) && symbol != null && typeof symbol . func == "boolean" && symbol . func ) { var space = AMcreateElementMathML ( "mspace" ) ; space . setAttribute ( "width" , "0.167em" ) ; node = AMcreateMmlNode ( "mrow" , node ) ; node . appendChild ( space ) ; }
newFrag . appendChild ( node ) ; } } while ( ( symbol . ttype != RIGHTBRACKET ) && symbol != null && symbol . output != "" ) ; tag = null ; if ( symbol . ttype == RIGHTBRACKET ) { if ( symbol . input == "\\right" ) { str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; symbol = AMgetSymbol ( str ) ; if ( symbol != null && symbol . input == "." )
symbol . invisible = true ; if ( symbol != null )
tag = symbol . rtag ; }
if ( symbol != null )
str = AMremoveCharsAndBlanks ( str , symbol . input . length ) ; var len = newFrag . childNodes . length ; if ( matrix && len > 0 && newFrag . childNodes [ len - 1 ] . nodeName == "mrow" && len > 1 && newFrag . childNodes [ len - 2 ] . nodeName == "mo" && newFrag . childNodes [ len - 2 ] . firstChild . nodeValue == "&" ) { var pos = [ ] ; var m = newFrag . childNodes . length ; for ( i = 0 ; matrix && i < m ; i = i + 2 ) { pos [ i ] = [ ] ; node = newFrag . childNodes [ i ] ; for ( var j = 0 ; j < node . childNodes . length ; j ++ )
if ( node . childNodes [ j ] . firstChild . nodeValue == "&" )
pos [ i ] [ pos [ i ] . length ] = j ; }
var row , frag , n , k , table = document . createDocumentFragment ( ) ; for ( i = 0 ; i < m ; i = i + 2 ) { row = document . createDocumentFragment ( ) ; frag = document . createDocumentFragment ( ) ; node = newFrag . firstChild ; n = node . childNodes . length ; k = 0 ; for ( j = 0 ; j < n ; j ++ ) { if ( typeof pos [ i ] [ k ] != "undefined" && j == pos [ i ] [ k ] ) { node . removeChild ( node . firstChild ) ; row . appendChild ( AMcreateMmlNode ( "mtd" , frag ) ) ; k ++ ; } else frag . appendChild ( node . firstChild ) ; }
row . appendChild ( AMcreateMmlNode ( "mtd" , frag ) ) ; if ( newFrag . childNodes . length > 2 ) { newFrag . removeChild ( newFrag . firstChild ) ; newFrag . removeChild ( newFrag . firstChild ) ; }
table . appendChild ( AMcreateMmlNode ( "mtr" , row ) ) ; }
return [ table , str ] ; }
if ( typeof symbol . invisible != "boolean" || ! symbol . invisible ) { node = AMcreateMmlNode ( "mo" , document . createTextNode ( symbol . output ) ) ; newFrag . appendChild ( node ) ; } }
return [ newFrag , str , tag ] ; }
function AMparseMath ( str ) { var result , node = AMcreateElementMathML ( "mstyle" ) ; var cclr = str . match ( /\\color\s*\{\s*([#\w]+)\s*\}/ ) ; str = str . replace ( /\\color\s*\{\s*[#\w]+\s*\}/g , "" ) ; if ( cclr != null ) { if ( IsColorName . test ( cclr [ 1 ] . toLowerCase ( ) ) ) { cclr = LaTeXColor [ cclr [ 1 ] . toLowerCase ( ) ] ; } else { cclr = cclr [ 1 ] ; }
node . setAttribute ( "mathcolor" , cclr ) ; } else { if ( mathcolor != "" ) node . setAttribute ( "mathcolor" , mathcolor ) ; } ; if ( mathfontfamily != "" ) node . setAttribute ( "fontfamily" , mathfontfamily ) ; node . appendChild ( AMparseExpr ( str . replace ( /^\s+/g , "" ) , false , false ) [ 0 ] ) ; node = AMcreateMmlNode ( "math" , node ) ; if ( showasciiformulaonhover )
node . setAttribute ( "title" , str . replace ( /\s+/g , " " ) ) ; if ( false ) { var fnode = AMcreateElementXHTML ( "font" ) ; fnode . setAttribute ( "face" , mathfontfamily ) ; fnode . appendChild ( node ) ; return fnode ; }
return node ; }
function AMstrarr2docFrag ( arr , linebreaks ) { var newFrag = document . createDocumentFragment ( ) ; var expr = false ; for ( var i = 0 ; i < arr . length ; i ++ ) { if ( expr ) newFrag . appendChild ( AMparseMath ( arr [ i ] ) ) ; else { var arri = ( linebreaks ? arr [ i ] . split ( "\n\n" ) : [ arr [ i ] ] ) ; newFrag . appendChild ( AMcreateElementXHTML ( "span" ) . appendChild ( document . createTextNode ( arri [ 0 ] ) ) ) ; for ( var j = 1 ; j < arri . length ; j ++ ) { newFrag . appendChild ( AMcreateElementXHTML ( "p" ) ) ; newFrag . appendChild ( AMcreateElementXHTML ( "span" ) . appendChild ( document . createTextNode ( arri [ j ] ) ) ) ; } }
expr = ! expr ; }
return newFrag ; }
function AMprocessNodeR ( n , linebreaks ) { var mtch , str , arr , frg , i ; if ( n . childNodes . length == 0 ) { if ( ( n . nodeType != 8 || linebreaks ) && n . parentNode . nodeName != "form" && n . parentNode . nodeName != "FORM" && n . parentNode . nodeName != "textarea" && n . parentNode . nodeName != "TEXTAREA" && n . parentNode . nodeName != "pre" && n . parentNode . nodeName != "PRE" ) { str = n . nodeValue ; if ( ! ( str == null ) ) { str = str . replace ( /\r\n\r\n/g , "\n\n" ) ; str = str . replace ( /\x20+/g , " " ) ; str = str . replace ( /\s*\r\n/g , " " ) ; mtch = ( str . indexOf ( "\$" ) == - 1 ? false : true ) ; str = str . replace ( /([^\\])\$/g , "$1 \$" ) ; str = str . replace ( /^\$/ , " \$" ) ; arr = str . split ( " \$" ) ; for ( i = 0 ; i < arr . length ; i ++ )
arr [ i ] = arr [ i ] . replace ( /\\\$/g , "\$" ) ; if ( arr . length > 1 || mtch ) { if ( checkForMathML ) { checkForMathML = false ; var nd = AMisMathMLavailable ( ) ; AMnoMathML = nd != null ; if ( AMnoMathML && notifyIfNoMathML )
if ( alertIfNoMathML )
alert ( "To view the ASCIIMathML notation use Internet Explorer 6 +\nMathPlayer (free from www.dessci.com)\nor Firefox/Mozilla/Netscape" ) ; else AMbody . insertBefore ( nd , AMbody . childNodes [ 0 ] ) ; }
if ( ! AMnoMathML ) { frg = AMstrarr2docFrag ( arr , n . nodeType == 8 ) ; var len = frg . childNodes . length ; n . parentNode . replaceChild ( frg , n ) ; return len - 1 ; } else return 0 ; } } } else return 0 ; } else if ( n . nodeName != "math" ) { for ( i = 0 ; i < n . childNodes . length ; i ++ )
i += AMprocessNodeR ( n . childNodes [ i ] , linebreaks ) ; }
return 0 ; }
function AMprocessNode ( n , linebreaks , spanclassAM ) { var frag , st ; if ( spanclassAM != null ) { frag = document . getElementsByTagName ( "span" )
for ( var i = 0 ; i < frag . length ; i ++ )
if ( frag [ i ] . className == "AM" )
AMprocessNodeR ( frag [ i ] , linebreaks ) ; } else { try { st = n . innerHTML ; } catch ( err ) { }
if ( st == null || st . indexOf ( "\$" ) != - 1 )
AMprocessNodeR ( n , linebreaks ) ; }
if ( isIE ) { frag = document . getElementsByTagName ( 'math' ) ; for ( var i = 0 ; i < frag . length ; i ++ ) frag [ i ] . update ( ) } }
var inAppendix = false ; var sectionCntr = 0 ; var IEcommentWarning = true ; var biblist = [ ] ; var bibcntr = 0 ; var LaTeXCounter = [ ] ; LaTeXCounter [ "definition" ] = 0 ; LaTeXCounter [ "proposition" ] = 0 ; LaTeXCounter [ "lemma" ] = 0 ; LaTeXCounter [ "theorem" ] = 0 ; LaTeXCounter [ "corollary" ] = 0 ; LaTeXCounter [ "example" ] = 0 ; LaTeXCounter [ "exercise" ] = 0 ; LaTeXCounter [ "subsection" ] = 0 ; LaTeXCounter [ "subsubsection" ] = 0 ; LaTeXCounter [ "figure" ] = 0 ; LaTeXCounter [ "equation" ] = 0 ; LaTeXCounter [ "table" ] = 0 ; var LaTeXColor = [ ] ; LaTeXColor [ "greenyellow" ] = "#D9FF4F" ; LaTeXColor [ "yellow" ] = "#FFFF00" ; LaTeXColor [ "goldenrod" ] = "#FFE529" ; LaTeXColor [ "dandelion" ] = "#FFB529" ; LaTeXColor [ "apricot" ] = "#FFAD7A" ; LaTeXColor [ "peach" ] = "#FF804D" ; LaTeXColor [ "melon" ] = "#FF8A80" ; LaTeXColor [ "yelloworange" ] = "#FF9400" ; LaTeXColor [ "orange" ] = "#FF6321" ; LaTeXColor [ "burntorange" ] = "#FF7D00" ; LaTeXColor [ "bittersweet" ] = "#C20300" ; LaTeXColor [ "redorange" ] = "#FF3B21" ; LaTeXColor [ "mahogany" ] = "#A60000" ; LaTeXColor [ "maroon" ] = "#AD0000" ; LaTeXColor [ "brickred" ] = "#B80000" ; LaTeXColor [ "red" ] = "#FF0000" ; LaTeXColor [ "orangered" ] = "#FF0080" ; LaTeXColor [ "rubinered" ] = "#FF00DE" ; LaTeXColor [ "wildstrawberry" ] = "#FF0A9C" ; LaTeXColor [ "salmon" ] = "#FF789E" ; LaTeXColor [ "carnationpink" ] = "#FF5EFF" ; LaTeXColor [ "magenta" ] = "#FF00FF" ; LaTeXColor [ "violetred" ] = "#FF30FF" ; LaTeXColor [ "rhodamine" ] = "#FF2EFF" ; LaTeXColor [ "mulberry" ] = "#A314FA" ; LaTeXColor [ "redviolet" ] = "#9600A8" ; LaTeXColor [ "fuchsia" ] = "#7303EB" ; LaTeXColor [ "lavender" ] = "#FF85FF" ; LaTeXColor [ "thistle" ] = "#E069FF" ; LaTeXColor [ "orchid" ] = "#AD5CFF" ; LaTeXColor [ "darkorchid" ] = "#9933CC" ; LaTeXColor [ "purple" ] = "#8C24FF" ; LaTeXColor [ "plum" ] = "#8000FF" ; LaTeXColor [ "violet" ] = "#361FFF" ; LaTeXColor [ "royalpurple" ] = "#401AFF" ; LaTeXColor [ "blueviolet" ] = "#1A0DF5" ; LaTeXColor [ "periwinkle" ] = "#6E73FF" ; LaTeXColor [ "cadetblue" ] = "#616EC4" ; LaTeXColor [ "cornflowerblue" ] = "#59DEFF" ; LaTeXColor [ "midnightblue" ] = "#007091" ; LaTeXColor [ "navyblue" ] = "#0F75FF" ; LaTeXColor [ "royalblue" ] = "#0080FF" ; LaTeXColor [ "blue" ] = "#0000FF" ; LaTeXColor [ "cerulean" ] = "#0FE3FF" ; LaTeXColor [ "cyan" ] = "#00FFFF" ; LaTeXColor [ "processblue" ] = "#0AFFFF" ; LaTeXColor [ "skyblue" ] = "#61FFE0" ; LaTeXColor [ "turquoise" ] = "#26FFCC" ; LaTeXColor [ "tealblue" ] = "#1FFAA3" ; LaTeXColor [ "aquamarine" ] = "#2EFFB2" ; LaTeXColor [ "bluegreen" ] = "#26FFAB" ; LaTeXColor [ "emerald" ] = "#00FF80" ; LaTeXColor [ "junglegreen" ] = "#03FF7A" ; LaTeXColor [ "seagreen" ] = "#4FFF80" ; LaTeXColor [ "green" ] = "#00FF00" ; LaTeXColor [ "forestgreen" ] = "#00E000" ; LaTeXColor [ "pinegreen" ] = "#00BF29" ; LaTeXColor [ "limegreen" ] = "#80FF00" ; LaTeXColor [ "yellowgreen" ] = "#8FFF42" ; LaTeXColor [ "springgreen" ] = "#BDFF3D" ; LaTeXColor [ "olivegreen" ] = "#009900" ; LaTeXColor [ "rawsienna" ] = "#8C0000" ; LaTeXColor [ "sepia" ] = "#4D0000" ; LaTeXColor [ "brown" ] = "#660000" ; LaTeXColor [ "tan" ] = "#DB9470" ; LaTeXColor [ "gray" ] = "#808080" ; LaTeXColor [ "grey" ] = "#808080" ; LaTeXColor [ "black" ] = "#000000" ; LaTeXColor [ "white" ] = "#FFFFFF" ; var IsColorName = /^(?:greenyellow|yellow|goldenrod|dandelion|apricot|peach|melon|yelloworange|orange|burntorange|bittersweet|redorange|mahogany|maroon|brickred|red|orangered|rubinered|wildstrawberry|salmon|carnationpink|magenta|violetred|rhodamine|mulberry|redviolet|fuchsia|lavender|thistle|orchid|darkorchid|purple|plum|violet|royalpurple|blueviolet|periwinkle|cadetblue|cornflowerblue|midnightblue|navyblue|royalblue|blue|cerulean|cyan|processblue|skyblue|turquoise|tealblue|aquamarine|bluegreen|emerald|junglegreen|seagreen|green|forestgreen|pinegreen|limegreen|yellowgreen|springgreen|olivegreen|rawsienna|sepia|brown|tan|gray|grey|black|white)$/ ; var IsCounter = /^(?:definition|proposition|lemma|theorem|corollary|example|exercise|subsection|subsubsection|figure|equation|table)$/ ; var IsLaTeXElement = /^(?:displayequation|title|author|address|date|abstract|keyword|section|subsection|subsubsection|ref|cite|thebibliography|definition|proposition|lemma|theorem|corollary|example|exercise|itemize|enumerate|enddefinition|endproposition|endlemma|endtheorem|endcorollary|endexample|endexercise|enditemize|endenumerate|LaTeXMathMLlabel|LaTeXMathML|smallskip|medskip|bigskip|quote|quotation|endquote|endquotation|center|endcenter|description|enddescription|inlinemath)$/ ; var IsTextOnlyArea = /^(?:form|textarea|pre)$/i ; var tableid = 0 ; function makeNumberString (
{ for ( var i = 0 ; i < TheBody . childNodes . length ; i ++ ) { LaTeXpreProcess ( TheBody . childNodes [ i ] ) } } }
else { if ( TheBody . nodeType == 3 && ! ( IsTextOnlyArea . test ( TheBody . parentNode . nodeName ) ) )
{ var str = TheBody . nodeValue ; if ( ! ( str == null ) ) { str = str . replace ( /\\%/g , "<per>" ) ; str = str . replace ( /%[^\n]*(?=\n)/g , "" ) ; str = str . replace ( /%[^\r]*(?=\r)/g , "" ) ; str = str . replace ( /%[^\n]*$/ , "" )
if ( isIE && str . match ( /%/g ) != null && IEcommentWarning ) { alert ( "Comments may not have parsed properly. Try putting in <pre class='LaTeX><div>..</div></pre> structure." ) ; IEcommentWarning = false ; }
str = str . replace ( /<per>/g , "%" ) ; if ( str . match ( /XXX[\s\S]*/ ) != null ) { var tmp = str . match ( /XXX[\s\S]*/ ) [ 0 ] ; var tmpstr = tmp . charCodeAt ( 7 ) + "::" + tmp . charCodeAt ( 8 ) + "::" + tmp . charCodeAt ( 9 ) + "::" + tmp . charCodeAt ( 10 ) + "::" + tmp . charCodeAt ( 11 ) + "::" + tmp . charCodeAt ( 12 ) + "::" + tmp . charCodeAt ( 13 ) ; alert ( tmpstr ) ; }
str = str . replace ( /([^\\])\\(\s)/g , "$1\u00A0$2" ) ; str = str . replace ( /\\quad/g , "\u2001" ) ; str = str . replace ( /\\qquad/g , "\u2001\u2001" ) ; str = str . replace ( /\\enspace/g , "\u2002" ) ; str = str . replace ( /\\;/g , "\u2004" ) ; str = str . replace ( /\\:/g , "\u2005" ) ; str = str . replace ( /\\,/g , "\u2006" ) ; str = str . replace ( /\\thinspace/g , "\u200A" ) ; str = str . replace ( /([^\\])~/g , "$1\u00A0" ) ; str = str . replace ( /\\~/g , "~" ) ; str = str . replace ( /\\\[/g , " <DEQ> $\\displaystyle{" ) ; str = str . replace ( /\\\]/g , "}$ <DEQ> " ) ; str = str . replace ( /\$\$/g , "${$<DEQ>$}$" ) ; str = str . replace ( /\\begin\s*\{\s*array\s*\}/g , "\\begin{array}" ) ; str = str . replace ( /\\end\s*\{\s*array\s*\}/g , "\\end{array}" ) ; str = str . replace ( /\\begin\s*\{\s*eqnarray\s*\}/g , " <DEQ>eqno$\\begin{eqnarray}" ) ; str = str . replace ( /\\end\s*\{\s*eqnarray\s*\}/g , "\\end{eqnarray}$<DEQ> " ) ; str = str . replace ( /\\begin\s*\{\s*eqnarray\*\s*\}/g , " <DEQ>$\\begin{eqnarray}" ) ; str = str . replace ( /\\end\s*\{\s*eqnarray\*\s*\}/g , "\\end{eqnarray}$<DEQ> " ) ; str = str . replace ( /\\begin\s*\{\s*displaymath\s*\}/g , " <DEQ> $\\displaystyle{" ) ; str = str . replace ( /\\end\s*\{\s*displaymath\s*\}/g , "}$ <DEQ> " ) ; str = str . replace ( /\\begin\s*\{\s*equation\s*\*\s*\}/g , " <DEQ> $\\displaystyle{" ) ; str = str . replace ( /\\end\s*\{\s*equation\s*\*\s*\}/g , "}$ <DEQ> " ) ; str = str . replace ( /\\begin\s*\{\s*equation\s*\}/g , " <DEQ>eqno$\\displaystyle{" ) ; str = str . replace ( /\\end\s*\{\s*equation\s*\}/g , "}$ <DEQ> " ) ; str = str . split ( "<DEQ>" ) ; var newFrag = document . createDocumentFragment ( ) ; for ( var i = 0 ; i < str . length ; i ++ ) { if ( i % 2 ) { var DEQtable = document . createElement ( "table" ) ; DEQtable . className = 'displayequation' ; var DEQtbody = document . createElement ( "tbody" ) ; var DEQtr = document . createElement ( "tr" ) ; var DEQtdeq = document . createElement ( "td" ) ; DEQtdeq . className = 'eq' ; str [ i ] = str [ i ] . replace ( /\$\}\$/g , "$\\displaystyle{" ) ; str [ i ] = str [ i ] . replace ( /\$\{\$/g , "}" ) ; var lbl = str [ i ] . match ( /\\label\s*\{\s*(\w+)\s*\}/ ) ; var ISeqno = str [ i ] . match ( /^eqno/ ) ; str [ i ] = str [ i ] . replace ( /^eqno/ , " " ) ; str [ i ] = str [ i ] . replace ( /\\label\s*\{\s*\w+\s*\}/ , " " ) ; DEQtdeq . appendChild ( document . createTextNode ( str [ i ] ) ) ; DEQtr . appendChild ( DEQtdeq ) ; str [ i ] = str [ i ] . replace ( /\\nonumber/g , "" ) ; if ( ISeqno != null || lbl != null ) { var DEQtdno = document . createElement ( "td" ) ; DEQtdno . className = 'eqno' ; LaTeXCounter [ "equation" ] ++ ; var eqnoString = makeNumberString ( LaTeXCounter [ "equation" ] ) ; var DEQanchor = document . createElement ( "a" ) ; if ( lbl != null ) { DEQanchor . id = lbl [ 1 ] } ; DEQanchor . className = "eqno" ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = "eqno" ; anchorSpan . style . display = "none" ; anchorSpan . appendChild ( document . createTextNode ( eqnoString ) ) ; DEQanchor . appendChild ( anchorSpan ) ; DEQtdno . appendChild ( DEQanchor ) ; var DEQspan = document . createElement ( "span" ) ; DEQspan . className = "eqno" ; DEQspan . appendChild ( document . createTextNode ( "(" + eqnoString + ")" ) ) ; DEQtdno . appendChild ( DEQspan ) ; DEQtr . appendChild ( DEQtdno ) ; }
DEQtbody . appendChild ( DEQtr ) ; DEQtable . appendChild ( DEQtbody ) ; newFrag . appendChild ( DEQtable ) ; }
else { str [ i ] = str [ i ] . replace ( /\$\}\$/g , "" ) ; str [ i ] = str [ i ] . replace ( /\$\{\$/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\maketitle/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*document\s*\}/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*document\s*\}/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\documentclass[^\}]*?\}/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\usepackage[^\}]*?\}/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\noindent/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\notag/g , "" ) ; str [ i ] = str [ i ] . replace ( /\\ref\s*\{\s*(\w+)\}/g , " \\[ref\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\url\s*\{\s*([^\}\n]+)\}/g , " \\[url\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\href\s*\{\s*([^\}]+)\}\s*\{\s*([^\}]+)\}/g , " \\[href\\]$1\\]$2\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\cite\s*\{\s*(\w+)\}/g , " \\[cite\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\qed/g , "\u220E" ) ; str [ i ] = str [ i ] . replace ( /\\endproof/g , "\u220E" ) ; str [ i ] = str [ i ] . replace ( /\\proof/g , "\\textbf{Proof: }" ) ; str [ i ] = str [ i ] . replace ( /\\n(?=\s)/g , " \\[br\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\newline/g , " \\[br\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\linebreak/g , " \\[br\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\smallskip/g , " \\[logicalbreak\\]smallskip\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\medskip/g , " \\[logicalbreak\\]medskip\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\bigskip/g , " \\[logicalbreak\\]bigskip\\[ " ) ; str [ i ] = str [ i ] . replace ( /[\n\r]+[ \f\n\r\t\v\u2028\u2029]*[\n\r]+/g , " \\[logicalbreak\\]LaTeXMathML\\[ " ) ; if ( isIE ) { str [ i ] = str [ i ] . replace ( /\r/g , " " ) ; }
str [ i ] = str [ i ] . replace ( /\\bibitem\s*([^\{]*\{\s*\w*\s*\})/g , " \\[bibitem\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\bibitem\s*/g , " \\[bibitem\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\item\s*\[\s*(\w+)\s*\]/g , " \\[alistitem\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\item\s*/g , " \\[alistitem\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\appendix/g , " \\[appendix\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*figure\s*\}([\s\S]+?)\\end\s*\{\s*figure\s*\}/g , " \\[figure\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*table\s*\}([\s\S]+?)\\end\s*\{\s*table\s*\}/g , " \\[table\\]$1\\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*theorem\s*\}/g , " \\[theorem\\]Theorem \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*theorem\s*\}/g , " \\[endtheorem\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*definition\s*\}/g , " \\[definition\\]Definition \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*definition\s*\}/g , " \\[enddefinition\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*lemma\s*\}/g , " \\[lemma\\]Lemma \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*lemma\s*\}/g , " \\[endlemma\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*corollary\s*\}/g , " \\[corollary\\]Corollary \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*corollary\s*\}/g , " \\[endcorollary\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*proposition\s*\}/g , " \\[proposition\\]Proposition \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*proposition\s*\}/g , " \\[endproposition\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*example\s*\}/g , " \\[example\\]Example \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*example\s*\}/g , " \\[endexample\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*exercise\s*\}/g , " \\[exercise\\]Exercise \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*exercise\s*\}/g , " \\[endexercise\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*thebibliography\s*\}\s*\{\s*\w+\s*\}/g , " \\[thebibliography\\]References \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*thebibliography\s*\}/g , " \\[thebibliography\\]References \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*thebibliography\s*\}/g , " \\[endthebibliography\\]References \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*proof\s*\}/g , " \\[proof\\]Proof: \\[ " ) ; if ( isIE ) { str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*proof\s*\}/g , "\u220E \\[endproof\\] \\[ " ) ; } else { str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*proof\s*\}/g , " \\[endproof\\] \\[ " ) ; }
str [ i ] = str [ i ] . replace ( /\\title\s*\{\s*([^\}]+)\}/g , " \\[title\\] \\[$1 \\[endtitle\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\author\s*\{\s*([^\}]+)\}/g , " \\[author\\] \\[$1 \\[endauthor\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\address\s*\{\s*([^\}]+)\}/g , " \\[address\\] \\[$1 \\[endaddress\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\date\s*\{\s*([^\}]+)\}/g , " \\[date\\] \\[$1 \\[enddate\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*keyword\s*\}/g , " \\[keyword\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*keyword\s*\}/g , " \\[endkeyword\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*abstract\s*\}/g , " \\[abstract\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*abstract\s*\}/g , " \\[endabstract\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\begin\s*\{\s*(?!array|tabular)(\w+)\s*\}/g , " \\[$1\\] \\[ " ) ; str [ i ] = str [ i ] . replace ( /\\end\s*\{\s*(?!array|tabular)(\w+)\s*\}/g , " \\[end$1\\] \\[ " ) ; var sectionIndex = str [ i ] . search ( /\\section\s*\{\s*[\s\S]+\}/ ) ; while ( sectionIndex >= 0 ) { str [ i ] = str [ i ] . replace ( /\\section\s*\{/ , " \\[section\\]" ) ; var delimcnt = 1 ; for ( var ii = sectionIndex ; ii < str [ i ] . length ; ii ++ ) { if ( str [ i ] . charAt ( ii ) == "{" ) { delimcnt ++ } ; if ( str [ i ] . charAt ( ii ) == "}" ) { delimcnt -- } ; if ( delimcnt == 0 ) { str [ i ] = str [ i ] . substring ( 0 , ii ) + "\\[ " + str [ i ] . substring ( ii + 1 , str [ i ] . length ) ; break ; } } ; sectionIndex = str [ i ] . search ( /\\section\s*\{\s*[\s\S]+\}/ ) ; }
sectionIndex = str [ i ] . search ( /\\subsection\s*\{\s*[\s\S]+\}/ ) ; while ( sectionIndex >= 0 ) { str [ i ] = str [ i ] . replace ( /\\subsection\s*\{/ , " \\[subsection\\]" ) ; var delimcnt = 1 ; for ( var ii = sectionIndex ; ii < str [ i ] . length ; ii ++ ) { if ( str [ i ] . charAt ( ii ) == "{" ) { delimcnt ++ } ; if ( str [ i ] . charAt ( ii ) == "}" ) { delimcnt -- } ; if ( delimcnt == 0 ) { str [ i ] = str [ i ] . substring ( 0 , ii ) + "\\[ " + str [ i ] . substring ( ii + 1 , str [ i ] . length ) ; break ; } } ; sectionIndex = str [ i ] . search ( /\\subsection\s*\{\s*[\s\S]+\}/ ) ; }
sectionIndex = str [ i ] . search ( /\\subsubsection\s*\{\s*[\s\S]+\}/ ) ; while ( sectionIndex >= 0 ) { str [ i ] = str [ i ] . replace ( /\\subsubsection\s*\{/ , " \\[subsubsection\\]" ) ; var delimcnt = 1 ; for ( var ii = sectionIndex ; ii < str [ i ] . length ; ii ++ ) { if ( str [ i ] . charAt ( ii ) == "{" ) { delimcnt ++ } ; if ( str [ i ] . charAt ( ii ) == "}" ) { delimcnt -- } ; if ( delimcnt == 0 ) { str [ i ] = str [ i ] . substring ( 0 , ii ) + "\\[ " + str [ i ] . substring ( ii + 1 , str [ i ] . length ) ; break ; } } ; sectionIndex = str [ i ] . search ( /\\subsubsection\s*\{\s*[\s\S]+\}/ ) ; }
var CatToNextEven = "" ; var strtmp = str [ i ] . split ( "\\[" ) ; for ( var j = 0 ; j < strtmp . length ; j ++ ) { if ( j % 2 ) { var strtmparray = strtmp [ j ] . split ( "\\]" ) ; switch ( strtmparray [ 0 ] ) { case "section" : var nodeTmp = document . createElement ( "H2" ) ; nodeTmp . className = 'section' ; sectionCntr ++ ; for ( var div in LaTeXCounter ) { LaTeXCounter [ div ] = 0 } ; var nodeAnchor = document . createElement ( "a" ) ; if ( inAppendix ) { nodeAnchor . className = 'appendixsection' ; } else { nodeAnchor . className = 'section' ; }
var nodeNumString = makeNumberString ( "" ) ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = "section" ; anchorSpan . style . display = "none" ; anchorSpan . appendChild ( document . createTextNode ( nodeNumString ) ) ; nodeAnchor . appendChild ( anchorSpan ) ; nodeTmp . appendChild ( nodeAnchor ) ; var nodeSpan = document . createElement ( "span" ) ; nodeSpan . className = 'section' ; nodeSpan . appendChild ( document . createTextNode ( nodeNumString + " " ) ) ; nodeTmp . appendChild ( nodeSpan ) ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "subsection" : var nodeTmp = document . createElement ( "H3" ) ; nodeTmp . className = 'subsection' ; LaTeXCounter [ "subsection" ] ++ ; LaTeXCounter [ "subsubsection" ] = 0 ; var nodeAnchor = document . createElement ( "a" ) ; nodeAnchor . className = 'subsection' ; var nodeNumString = makeNumberString ( LaTeXCounter [ "subsection" ] ) ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = "subsection" ; anchorSpan . style . display = "none" ; anchorSpan . appendChild ( document . createTextNode ( nodeNumString ) ) ; nodeAnchor . appendChild ( anchorSpan ) ; nodeTmp . appendChild ( nodeAnchor ) ; var nodeSpan = document . createElement ( "span" ) ; nodeSpan . className = 'subsection' ; nodeSpan . appendChild ( document . createTextNode ( nodeNumString + ". " ) ) ; nodeTmp . appendChild ( nodeSpan ) ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "subsubsection" : var nodeTmp = document . createElement ( "H4" ) ; nodeTmp . className = 'subsubsection' ; LaTeXCounter [ "subsubsection" ] ++ ; var nodeAnchor = document . createElement ( "a" ) ; nodeAnchor . className = 'subsubsection' ; var nodeNumString = makeNumberString ( LaTeXCounter [ "subsection" ] + "." + LaTeXCounter [ "subsubsection" ] ) ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = "subsubsection" ; anchorSpan . style . display = "none" ; anchorSpan . appendChild ( document . createTextNode ( nodeNumString ) ) ; nodeAnchor . appendChild ( anchorSpan ) ; nodeTmp . appendChild ( nodeAnchor ) ; var nodeSpan = document . createElement ( "span" ) ; nodeSpan . className = 'subsubsection' ; nodeSpan . appendChild ( document . createTextNode ( nodeNumString + ". " ) ) ; nodeTmp . appendChild ( nodeSpan ) ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "href" : var nodeTmp = document . createElement ( "a" ) ; nodeTmp . className = 'LaTeXMathML' ; nodeTmp . href = strtmparray [ 1 ] ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 2 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "url" : var nodeTmp = document . createElement ( "a" ) ; nodeTmp . className = 'LaTeXMathML' ; nodeTmp . href = strtmparray [ 1 ] ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "figure" : var nodeTmp = document . createElement ( "table" ) ; nodeTmp . className = 'figure' ; var FIGtbody = document . createElement ( "tbody" ) ; var FIGlbl = strtmparray [ 1 ] . match ( /\\label\s*\{\s*(\w+)\s*\}/ ) ; strtmparray [ 1 ] = strtmparray [ 1 ] . replace ( /\\label\s*\{\w+\}/g , "" ) ; var capIndex = strtmparray [ 1 ] . search ( /\\caption\s*\{[\s\S]+\}/ ) ; var FIGcap = "" ; if ( capIndex >= 0 ) { var tmp = strtmparray [ 1 ] ; var delimcnt = 0 ; var capstart = - 1 ; for ( var pos = capIndex ; pos < tmp . length ; pos ++ ) { if ( tmp . charAt ( pos ) == "{" ) { delimcnt ++ } ; if ( tmp . charAt ( pos ) == "}" ) { delimcnt -- } ; if ( delimcnt == 1 && capstart < 0 ) { capstart = pos + 1 } ; if ( delimcnt == 0 && capstart > 0 ) { capend = pos - 1 ; FIGcap = tmp . substring ( capstart , pos ) ; break } } }
var FIGtr2 = document . createElement ( "tr" ) ; var FIGtd2 = document . createElement ( "td" ) ; FIGtd2 . className = "caption" ; var FIGanchor = document . createElement ( "a" ) ; FIGanchor . className = "figure" ; if ( FIGlbl != null ) { FIGanchor . id = FIGlbl [ 1 ] ; }
LaTeXCounter [ "figure" ] ++ ; var fignmbr = makeNumberString ( LaTeXCounter [ "figure" ] ) ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = "figure" ; anchorSpan . style . display = "none" ; anchorSpan . appendChild ( document . createTextNode ( fignmbr ) ) ; FIGanchor . appendChild ( anchorSpan ) ; FIGtd2 . appendChild ( FIGanchor ) ; var FIGspan = document . createElement ( "span" ) ; FIGspan . className = "figure" ; FIGspan . appendChild ( document . createTextNode ( "Figure " + fignmbr + ". " ) ) ; FIGtd2 . appendChild ( FIGspan ) ; FIGtd2 . appendChild ( document . createTextNode ( "" + FIGcap ) ) ; FIGtr2 . appendChild ( FIGtd2 ) ; FIGtbody . appendChild ( FIGtr2 ) ; var IsSpecial = false ; var FIGinfo = strtmparray [ 1 ] . match ( /\\includegraphics\s*\{([^\}]+)\}/ ) ; if ( FIGinfo == null ) { FIGinfo = strtmparray [ 1 ] . match ( /\\includegraphics\s*\[[^\]]*\]\s*\{\s*([^\}]+)\s*\}/ ) ; }
if ( FIGinfo == null ) { FIGinfo = strtmparray [ 1 ] . match ( /\\special\s*\{\s*([^\}]+)\}/ ) ; IsSpecial = true } ; if ( FIGinfo != null ) { var FIGtr1 = document . createElement ( "tr" ) ; var FIGtd1 = document . createElement ( "td" ) ; FIGtd1 . className = "image" ; var FIGimg = document . createElement ( "img" ) ; var FIGsrc = FIGinfo [ 1 ] ; FIGimg . src = FIGsrc ; FIGimg . alt = "Figure " + FIGsrc + " did not load" ; FIGimg . title = "Figure " + fignmbr + ". " + FIGcap ; FIGimg . id = "figure" + fignmbr ; FIGtd1 . appendChild ( FIGimg ) ; FIGtr1 . appendChild ( FIGtd1 ) ; FIGtbody . appendChild ( FIGtr1 ) ; }
nodeTmp . appendChild ( FIGtbody ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "table" : var nodeTmp = document . createElement ( "table" ) ; if ( strtmparray [ 1 ] . search ( /\\centering/ ) >= 0 ) { nodeTmp . className = 'LaTeXtable centered' ; nodeTmp . align = "center" ; } else { nodeTmp . className = 'LaTeXtable' ; } ; tableid ++ ; nodeTmp . id = "LaTeXtable" + tableid ; var TABlbl = strtmparray [ 1 ] . match ( /\\label\s*\{\s*(\w+)\s*\}/ ) ; strtmparray [ 1 ] = strtmparray [ 1 ] . replace ( /\\label\s*\{\w+\}/g , "" ) ; var capIndex = strtmparray [ 1 ] . search ( /\\caption\s*\{[\s\S]+\}/ ) ; var TABcap = "" ; if ( capIndex >= 0 ) { var tmp = strtmparray [ 1 ] ; var delimcnt = 0 ; var capstart = - 1 ; for ( var pos = capIndex ; pos < tmp . length ; pos ++ ) { if ( tmp . charAt ( pos ) == "{" ) { delimcnt ++ } ; if ( tmp . charAt ( pos ) == "}" ) { delimcnt -- } ; if ( delimcnt == 1 && capstart < 0 ) { capstart = pos + 1 } ; if ( delimcnt == 0 && capstart > 0 ) { capend = pos - 1 ; TABcap = tmp . substring ( capstart , pos ) ; break } } }
if ( TABcap != "" ) { var TABtbody = document . createElement ( "tbody" ) ; var TABcaption = document . createElement ( "caption" ) ; TABcaption . className = "LaTeXtable centered" ; var TABanchor = document . createElement ( "a" ) ; TABanchor . className = "LaTeXtable" ; if ( TABlbl != null ) { TABanchor . id = TABlbl [ 1 ] ; }
LaTeXCounter [ "table" ] ++ ; var tabnmbr = makeNumberString ( LaTeXCounter [ "table" ] ) ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = "LaTeXtable" ; anchorSpan . style . display = "none" ; anchorSpan . appendChild ( document . createTextNode ( tabnmbr ) ) ; TABanchor . appendChild ( anchorSpan ) ; TABcaption . appendChild ( TABanchor ) ; var TABspan = document . createElement ( "span" ) ; TABspan . className = "LaTeXtable" ; TABspan . appendChild ( document . createTextNode ( "Table " + tabnmbr + ". " ) ) ; TABcaption . appendChild ( TABspan ) ; TABcaption . appendChild ( document . createTextNode ( "" + TABcap ) ) ; nodeTmp . appendChild ( TABcaption ) ; }
var TABinfo = strtmparray [ 1 ] . match ( /\\begin\s*\{\s*tabular\s*\}([\s\S]+)\\end\s*\{\s*tabular\s*\}/ ) ; if ( TABinfo != null ) { var TABtbody = document . createElement ( 'tbody' ) ; var TABrow = null ; var TABcell = null ; var row = 0 ; var col = 0 ; var TABalign = TABinfo [ 1 ] . match ( /^\s*\{([^\}]+)\}/ ) ; TABinfo = TABinfo [ 1 ] . replace ( /^\s*\{[^\}]+\}/ , "" ) ; TABinfo = TABinfo . replace ( /\\hline/g , "" ) ; TABalign [ 1 ] = TABalign [ 1 ] . replace ( /\|/g , "" ) ; TABalign [ 1 ] = TABalign [ 1 ] . replace ( /\s/g , "" ) ; TABinfo = TABinfo . split ( "\\\\" ) ; for ( row = 0 ; row < TABinfo . length ; row ++ ) { TABrow = document . createElement ( "tr" ) ; TABinfo [ row ] = TABinfo [ row ] . split ( "&" ) ; for ( col = 0 ; col < TABinfo [ row ] . length ; col ++ ) { TABcell = document . createElement ( "td" ) ; switch ( TABalign [ 1 ] . charAt ( col ) ) { case "l" : TABcell . align = "left" ; break ; case "c" : TABcell . align = "center" ; break ; case "r" : TABcell . align = "right" ; break ; default : TABcell . align = "left" ; } ; TABcell . appendChild ( document . createTextNode ( TABinfo [ row ] [ col ] ) ) ; TABrow . appendChild ( TABcell ) ; }
TABtbody . appendChild ( TABrow ) ; }
nodeTmp . appendChild ( TABtbody ) ; }
newFrag . appendChild ( nodeTmp ) ; break ; case "logicalbreak" : var nodeTmp = document . createElement ( "p" ) ; nodeTmp . className = strtmparray [ 1 ] ; nodeTmp . appendChild ( document . createTextNode ( "\u00A0" ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "appendix" : inAppendix = true ; sectionCntr = 0 ; break ; case "alistitem" : var EndDiv = document . createElement ( "div" ) ; EndDiv . className = "endlistitem" ; newFrag . appendChild ( EndDiv ) ; var BegDiv = document . createElement ( "div" ) ; BegDiv . className = "listitem" ; if ( strtmparray [ 1 ] != " " ) { var BegSpan = document . createElement ( "span" ) ; BegSpan . className = "listitemmarker" ; var boldBegSpan = document . createElement ( "b" ) ; boldBegSpan . appendChild ( document . createTextNode ( strtmparray [ 1 ] + " " ) ) ; BegSpan . appendChild ( boldBegSpan ) ; BegDiv . appendChild ( BegSpan ) ; }
newFrag . appendChild ( BegDiv ) ; break ; case "br" : newFrag . appendChild ( document . createElement ( "br" ) ) ; break ; case "bibitem" : newFrag . appendChild ( document . createElement ( "br" ) ) ; var nodeTmp = document . createElement ( "a" ) ; nodeTmp . className = 'bibitem' ; var nodeSpan = document . createElement ( "span" ) ; nodeSpan . className = 'bibitem' ; bibcntr ++ ; var lbl = strtmparray [ 1 ] . match ( /\{\s*(\w+)\s*\}/ ) ; strtmparray [ 1 ] = strtmparray [ 1 ] . replace ( /\s*\{\s*\w+\s*\}/g , "" ) ; strtmparray [ 1 ] = strtmparray [ 1 ] . replace ( /^\s*\[/ , "" ) ; strtmparray [ 1 ] = strtmparray [ 1 ] . replace ( /\s*\]$/ , "" ) ; strtmparray [ 1 ] = strtmparray [ 1 ] . replace ( /^\s+|\s+$/g , "" ) ; if ( lbl == null ) { biblist [ bibcntr ] = "bibitem" + bibcntr } else { biblist [ bibcntr ] = lbl [ 1 ] ; } ; nodeTmp . name = biblist [ bibcntr ] ; nodeTmp . id = biblist [ bibcntr ] ; if ( strtmparray [ 1 ] != "" ) { nodeSpan . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) ) ; } else { nodeSpan . appendChild ( document . createTextNode ( "[" + bibcntr + "]" ) ) ; }
nodeTmp . appendChild ( nodeSpan ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "cite" : var nodeTmp = document . createElement ( "a" ) ; nodeTmp . className = 'cite' ; nodeTmp . name = 'cite' ; nodeTmp . href = "#" + strtmparray [ 1 ] ; newFrag . appendChild ( nodeTmp ) ; break ; case "ref" : var nodeTmp = document . createElement ( "a" ) ; nodeTmp . className = 'ref' ; nodeTmp . name = 'ref' ; nodeTmp . href = "#" + strtmparray [ 1 ] ; newFrag . appendChild ( nodeTmp ) ; break ; default : var nodeTmp = document . createElement ( "div" ) ; nodeTmp . className = strtmparray [ 0 ] ; if ( IsCounter . test ( strtmparray [ 0 ] ) ) { LaTeXCounter [ strtmparray [ 0 ] ] ++ ; var nodeAnchor = document . createElement ( "a" ) ; nodeAnchor . className = strtmparray [ 0 ] ; var divnum = makeNumberString ( LaTeXCounter [ strtmparray [ 0 ] ] ) ; var anchorSpan = document . createElement ( "span" ) ; anchorSpan . className = strtmparray [ 0 ] ; anchorSpan . appendChild ( document . createTextNode ( divnum ) ) ; anchorSpan . style . display = "none" ; nodeAnchor . appendChild ( anchorSpan ) ; nodeTmp . appendChild ( nodeAnchor ) ; var nodeSpan = document . createElement ( "span" ) ; nodeSpan . className = strtmparray [ 0 ] ; nodeSpan . appendChild ( document . createTextNode ( strtmparray [ 1 ] + " " + divnum + ". " ) ) ; nodeTmp . appendChild ( nodeSpan ) ; }
if ( isIE ) { if ( strtmparray [ 0 ] == ( "thebibliography" || "abstract" || "keyword" || "proof" ) ) { var nodeSpan = document . createElement ( "span" ) ; nodeSpan . className = strtmparray [ 0 ] ; nodeSpan . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) ) ; nodeTmp . appendChild ( nodeSpan ) ; } }
if ( strtmparray [ 0 ] == "endenumerate" || strtmparray [ 0 ] == "enditemize" || strtmparray [ 0 ] == "enddescription" ) { var endDiv = document . createElement ( "div" ) ; endDiv . className = "endlistitem" ; newFrag . appendChild ( endDiv ) ; }
newFrag . appendChild ( nodeTmp ) ; if ( strtmparray [ 0 ] == "enumerate" || strtmparray [ 0 ] == "itemize" || strtmparray [ 0 ] == "description" ) { var endDiv = document . createElement ( "div" ) ; endDiv . className = "listitem" ; newFrag . appendChild ( endDiv ) ; } } } else { strtmp [ j ] = strtmp [ j ] . replace ( /\\\$/g , "<per>" ) ; strtmp [ j ] = strtmp [ j ] . replace ( /\$([^\$]+)\$/g , " \\[$1\\[ " ) ; strtmp [ j ] = strtmp [ j ] . replace ( /<per>/g , "\\$" ) ; strtmp [ j ] = strtmp [ j ] . replace ( /\\begin\s*\{\s*math\s*\}([\s\S]+?)\\end\s*\{\s*math\s*\}/g , " \\[$1\\[ " ) ; var strtmptmp = strtmp [ j ] . split ( "\\[" ) ; for ( var jjj = 0 ; jjj < strtmptmp . length ; jjj ++ ) { if ( jjj % 2 ) { var nodeTmp = document . createElement ( "span" ) ; nodeTmp . className = 'inlinemath' ; nodeTmp . appendChild ( document . createTextNode ( "$" + strtmptmp [ jjj ] + "$" ) ) ; newFrag . appendChild ( nodeTmp ) ; } else { var TagIndex = strtmptmp [ jjj ] . search ( /\\\w+/ ) ; var tmpIndex = TagIndex ; while ( tmpIndex > - 1 ) { if ( /^\\textcolor/ . test ( strtmptmp [ jjj ] . substring ( TagIndex , strtmptmp [ jjj ] . length ) ) ) { strtmptmp [ jjj ] = strtmptmp [ jjj ] . replace ( /\\textcolor\s*\{\s*(\w+)\s*\}\s*/ , " \\[textcolor\\]$1\\]|" ) ; } else { if ( /^\\colorbox/ . test ( strtmptmp [ jjj ] . substring ( TagIndex , strtmptmp [ jjj ] . length ) ) ) { strtmptmp [ jjj ] = strtmptmp [ jjj ] . replace ( /\\colorbox\s*\{\s*(\w+)\s*\}\s*/ , " \\[colorbox\\]$1\\]|" ) ; } else { strtmptmp [ jjj ] = strtmptmp [ jjj ] . substring ( 0 , TagIndex ) + strtmptmp [ jjj ] . substring ( TagIndex , strtmptmp [ jjj ] . length ) . replace ( /\\\s*(\w+)\s*/ , " \\[$1\\]|" ) ; } }
TagIndex += strtmptmp [ jjj ] . substring ( TagIndex , strtmptmp [ jjj ] . length ) . search ( /\|/ ) ; TagIndex ++ ; strtmptmp [ jjj ] = strtmptmp [ jjj ] . replace ( /\\\]\|/ , "\\] " ) ; if ( strtmptmp [ jjj ] . charAt ( TagIndex ) == "{" ) { strtmptmp [ jjj ] = strtmptmp [ jjj ] . substring ( 0 , TagIndex ) + strtmptmp [ jjj ] . substring ( TagIndex + 1 , strtmptmp [ jjj ] . length ) ; var delimcnt = 1 ; for ( var kk = TagIndex ; kk < strtmptmp [ jjj ] . length ; kk ++ ) { if ( strtmptmp [ jjj ] . charAt ( kk ) == "{" ) { delimcnt ++ } ; if ( strtmptmp [ jjj ] . charAt ( kk ) == "}" ) { delimcnt -- } ; if ( delimcnt == 0 ) { break ; } }
strtmptmp [ jjj ] = strtmptmp [ jjj ] . substring ( 0 , kk ) + "\\[ " + strtmptmp [ jjj ] . substring ( kk + 1 , strtmptmp [ jjj ] . length ) ; TagIndex = kk + 3 ; } else { strtmptmp [ jjj ] = strtmptmp [ jjj ] . substring ( 0 , TagIndex ) + "\\[ " + strtmptmp [ jjj ] . substring ( TagIndex + 1 , strtmptmp [ jjj ] . length ) ; TagIndex = TagIndex + 3 ; }
if ( TagIndex < strtmptmp [ jjj ] . length ) { tmpIndex = strtmptmp [ jjj ] . substring ( TagIndex , strtmptmp [ jjj ] . length ) . search ( /\\\w+/ ) ; }
else { tmpIndex = - 1 } ; TagIndex += tmpIndex ; }
strtmptmp [ jjj ] = strtmptmp [ jjj ] . replace ( /\\\\\s*\\\\/g , "\\\\" ) ; strtmptmp [ jjj ] = strtmptmp [ jjj ] . replace ( /\\\\/g , " \\[br\\] \\[ " ) ; strtmptmp [ jjj ] = strtmptmp [ jjj ] . replace ( /\\label\s*\{\s*(\w+)\s*\}/g , " \\[a\\]$1\\[ " ) ; var strlbls = strtmptmp [ jjj ] . split ( "\\[" ) ; for ( var jj = 0 ; jj < strlbls . length ; jj ++ ) { if ( jj % 2 ) { var strtmparray = strlbls [ jj ] . split ( "\\]" ) ; switch ( strtmparray [ 0 ] ) { case "textcolor" : var nodeTmp = document . createElement ( "span" ) ; nodeTmp . className = 'LaTeXColor' ; if ( IsColorName . test ( strtmparray [ 1 ] . toLowerCase ( ) ) ) { nodeTmp . style . color = LaTeXColor [ strtmparray [ 1 ] . toLowerCase ( ) ] ; } else { nodeTmp . style . color = strtmparray [ 1 ] ; } ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 2 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "colorbox" : var nodeTmp = document . createElement ( "span" ) ; nodeTmp . className = 'LaTeXColor' ; if ( IsColorName . test ( strtmparray [ 1 ] . toLowerCase ( ) ) ) { nodeTmp . style . background = LaTeXColor [ strtmparray [ 1 ] . toLowerCase ( ) ] ; } else { nodeTmp . style . background = strtmparray [ 1 ] ; } ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 2 ] ) ) ; newFrag . appendChild ( nodeTmp ) ; break ; case "br" : newFrag . appendChild ( document . createElement ( "br" ) ) ; break ; case "a" : var nodeTmp = document . createElement ( "a" ) ; nodeTmp . className = 'LaTeXMathMLlabel' ; nodeTmp . id = strtmparray [ 1 ] ; nodeTmp . style . display = "none" ; newFrag . appendChild ( nodeTmp ) ; break ; default : var nodeTmp = document . createElement ( "span" ) ; nodeTmp . className = strtmparray [ 0 ] ; nodeTmp . appendChild ( document . createTextNode ( strtmparray [ 1 ] ) )
newFrag . appendChild ( nodeTmp ) ; } } else { newFrag . appendChild ( document . createTextNode ( strlbls [ jj ] ) ) ; } } } } } } } } ; TheBody . parentNode . replaceChild ( newFrag , TheBody ) ; } } }
return TheBody ; }
function LaTeXDivsAndRefs ( thebody ) { var TheBody = thebody ; var EndDivClass = null ; var AllDivs = TheBody . getElementsByTagName ( "div" ) ; var lbl2id = "" ; var lblnode = null ; for ( var i = AllDivs . length - 1 ; i >= 0 ; i -- ) { EndDivClass = AllDivs [ i ] . className . match ( /end\w+/ ) ; if ( EndDivClass != null ) { EndDivClass = EndDivClass [ 0 ] ; var DivClass = EndDivClass . substring ( 3 , EndDivClass . length ) ; var EndDivNode = AllDivs [ i ] ; break ; } }
while ( EndDivClass != null ) { var newFrag = document . createDocumentFragment ( ) ; var RootNode = EndDivNode . parentNode ; var ClassCount = 1 ; while ( EndDivNode . previousSibling != null && ClassCount > 0 ) { switch ( EndDivNode . previousSibling . className ) { case EndDivClass : ClassCount ++ ; newFrag . insertBefore ( EndDivNode . previousSibling , newFrag . firstChild ) ; break ; case DivClass : if ( EndDivNode . previousSibling . nodeName == "DIV" ) { ClassCount -- ; if ( lbl2id != "" ) { EndDivNode . previousSibling . id = lbl2id ; lbl2id = "" }
if ( ClassCount == 0 ) { RootNode = EndDivNode . previousSibling ; } else { newFrag . insertBefore ( EndDivNode . previousSibling , newFrag . firstChild ) ; } } ; break ; case 'LaTeXMathMLlabel' : lbl2id = EndDivNode . previousSibling . id ; EndDivNode . parentNode . removeChild ( EndDivNode . previousSibling ) ; break ; default : newFrag . insertBefore ( EndDivNode . previousSibling , newFrag . firstChild ) ; } }
RootNode . appendChild ( newFrag ) ; EndDivNode . parentNode . removeChild ( EndDivNode ) ; AllDivs = TheBody . getElementsByTagName ( "DIV" ) ; for ( i = AllDivs . length - 1 ; i >= 0 ; i -- ) { EndDivClass = AllDivs [ i ] . className . match ( /end\w+/ ) ; if ( EndDivClass != null ) { ClassCount = 0 ; EndDivClass = EndDivClass [ 0 ] ; DivClass = EndDivClass . substring ( 3 , EndDivClass . length ) ; EndDivNode = AllDivs [ i ] ; RootNode = EndDivNode . parentNode ; break ; } } }
var AllDivs = TheBody . getElementsByTagName ( "div" ) ; var DIV2LI = null ; for ( var i = 0 ; i < AllDivs . length ; i ++ ) { if ( AllDivs [ i ] . className == "itemize" || AllDivs [ i ] . className == "enumerate" || AllDivs [ i ] . className == "description" ) { if ( AllDivs [ i ] . className == "itemize" ) { RootNode = document . createElement ( "UL" ) ; } else { RootNode = document . createElement ( "OL" ) ; }
RootNode . className = 'LaTeXMathML' ; if ( AllDivs [ i ] . hasChildNodes ( ) ) { AllDivs [ i ] . removeChild ( AllDivs [ i ] . firstChild ) } ; while ( AllDivs [ i ] . hasChildNodes ( ) ) { if ( AllDivs [ i ] . firstChild . hasChildNodes ( ) ) { DIV2LI = document . createElement ( "LI" ) ; while ( AllDivs [ i ] . firstChild . hasChildNodes ( ) ) { DIV2LI . appendChild ( AllDivs [ i ] . firstChild . firstChild ) ; }
if ( DIV2LI . firstChild . className == "listitemmarker" ) { DIV2LI . style . listStyleType = "none" ; }
RootNode . appendChild ( DIV2LI ) }
AllDivs [ i ] . removeChild ( AllDivs [ i ] . firstChild ) ; }
AllDivs [ i ] . appendChild ( RootNode ) ; } }
var AllAnchors = TheBody . getElementsByTagName ( "a" ) ; for ( var i = 0 ; i < AllAnchors . length ; i ++ ) { if ( AllAnchors [ i ] . className == "ref" || AllAnchors [ i ] . className == "cite" ) { var label = AllAnchors [ i ] . href . match ( /\#(\w+)/ ) ; if ( label != null ) { var labelNode = document . getElementById ( label [ 1 ] ) ; if ( labelNode != null ) { var TheSpans = labelNode . getElementsByTagName ( "SPAN" ) ; if ( TheSpans != null ) { var refNode = TheSpans [ 0 ] . cloneNode ( true ) ; refNode . style . display = "inline"
refNode . className = AllAnchors [ i ] . className ; AllAnchors [ i ] . appendChild ( refNode ) ; } } } } }
return TheBody ; }
var AMbody ; var AMnoMathML = false , AMtranslated = false ; function translate ( spanclassAM ) { if ( ! AMtranslated ) { AMtranslated = true ; AMinitSymbols ( ) ; var LaTeXContainers = [ ] ; var AllContainers = document . getElementsByTagName ( '*' ) ; var ExtendName = "" ; for ( var k = 0 , l = 0 ; k < AllContainers . length ; k ++ ) { ExtendName = " " + AllContainers [ k ] . className + " " ; if ( ExtendName . match ( /\sLaTeX\s/ ) != null ) { LaTeXContainers [ l ] = AllContainers [ k ] ; l ++ ; } } ; if ( LaTeXContainers . length > 0 ) { for ( var m = 0 ; m < LaTeXContainers . length ; m ++ ) { AMbody = LaTeXContainers [ m ] ; try { AMbody = LaTeXDivsAndRefs ( LaTeXpreProcess ( AMbody ) ) ; } catch ( err ) { alert ( "Unknown Error: Defaulting to Original LaTeXMathML" ) ; }
if ( AMbody . tagName == "PRE" ) { var PreChilds = document . createDocumentFragment ( ) ; var DivChilds = document . createElement ( "DIV" ) ; while ( AMbody . hasChildNodes ( ) ) { DivChilds . appendChild ( AMbody . firstChild ) ; }
PreChilds . appendChild ( DivChilds ) ; AMbody . parentNode . replaceChild ( PreChilds , AMbody ) ; AMbody = DivChilds ; }
AMprocessNode ( AMbody , false , spanclassAM ) ; } } else { AMbody = document . getElementsByTagName ( "body" ) [ 0 ] ; try { AMbody = LaTeXDivsAndRefs ( LaTeXpreProcess ( AMbody ) ) ; } catch ( err ) { alert ( "Unknown Error: Defaulting to Original LaTeXMathML" ) ; }
AMprocessNode ( AMbody , false , spanclassAM ) ; } } }
if ( isIE ) { document . write ( "<object id=\"mathplayer\" classid=\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\"></object>" ) ; document . write ( "<?import namespace=\"m\" implementation=\"#mathplayer\"?>" ) ; }
function generic ( )
{ translate ( ) ; } ; if ( typeof window . addEventListener != 'undefined' )
{ window . addEventListener ( 'load' , generic , false ) ; }
else if ( typeof document . addEventListener != 'undefined' )
{ document . addEventListener ( 'load' , generic , false ) ; }
else if ( typeof window . attachEvent != 'undefined' )
{ window . attachEvent ( 'onload' , generic ) ; }
else
{ if ( typeof window . onload == 'function' )
{ var existing = onload ; window . onload = function ( )
{ existing ( ) ; generic ( ) ; } ; }
else
2009-12-31 02:14:17 +01:00
{ window . onload = generic ; } }