version 1.1, 2005/02/25 04:57:49
|
version 1.4, 2006/05/17 22:19:27
|
Line 2
|
Line 2
|
* |
* |
* jsMath: Mathematics on the Web |
* jsMath: Mathematics on the Web |
* |
* |
* Version: 1.7e |
|
* |
|
* This jsMath package makes it possible to display mathematics in HTML pages |
* This jsMath package makes it possible to display mathematics in HTML pages |
* that are viewable by a wide range of browsers on both the Mac and the IBM PC, |
* that are viewable by a wide range of browsers on both the Mac and the IBM PC, |
* including browsers that don't process MathML. See |
* including browsers that don't process MathML. See |
Line 11
|
Line 9
|
* http://www.math.union.edu/locate/jsMath |
* http://www.math.union.edu/locate/jsMath |
* |
* |
* for the latest version, and for documentation on how to use jsMath. |
* for the latest version, and for documentation on how to use jsMath. |
* |
|
* Copyright (c) 2004-2005 by Davide P. Cervone. |
|
* |
* |
* This program is free software; you can redistribute it and/or |
* Copyright 2004-2006 by Davide P. Cervone |
* modify it under the terms of the GNU General Public License |
|
* as published by the Free Software Foundation; either version 2 |
|
* of the License. |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with this program; if not, write to the Free Software |
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
* |
|
*****************************************************************************/ |
|
|
|
/* |
|
* Prevent running everything again if this file is loaded twice |
|
*/ |
|
if (!window.jsMath) { |
|
|
|
// |
|
// debugging routine |
|
// |
|
function ShowObject (obj,spaces) { |
|
var s = ''; if (!spaces) {spaces = ""} |
|
for (var i in obj) { |
|
if (obj[i] != null) { |
|
if (typeof(obj[i]) == "object") { |
|
s += spaces + i + ": {\n" |
|
+ ShowObject(obj[i],spaces + ' ') |
|
+ spaces + "}\n"; |
|
} else if (typeof(obj[i]) != "function") { |
|
s += spaces + i + ': ' + obj[i] + "\n"; |
|
} |
|
} |
|
} |
|
return s; |
|
} |
|
|
|
/***************************************************************************/ |
|
// |
|
// Check for DOM support |
|
// |
|
if (!document.getElementById || !document.childNodes || !document.createElement) { |
|
alert('The mathematics on this page requires W3C DOM support in its JavaScript. ' |
|
+ 'Unfortunately, your browser doesn\'t seem to have this.'); |
|
} else { |
|
|
|
/***************************************************************************/ |
|
|
|
var jsMath = { |
|
|
|
// |
|
// Name of image files |
|
// |
|
blank: "blank.gif", |
|
black: "black.gif", |
|
|
|
// |
|
// The TeX font parameters |
|
// |
|
TeX: { |
|
thinmuskip: 3/18, |
|
medmuskip: 4/18, |
|
thickmuskip: 5/18, |
|
|
|
x_height: .430554, |
|
quad: 1, |
|
num1: .676508, |
|
num2: .393732, |
|
num3: .44373, |
|
denom1: .685951, |
|
denom2: .344841, |
|
sup1: .412892, |
|
sup2: .362892, |
|
sup3: .288888, |
|
sub1: .15, |
|
sub2: .247217, |
|
sup_drop: .386108, |
|
sub_drop: .05, |
|
delim1: 2.39, |
|
delim2: 1.0, |
|
axis_height: .25, |
|
default_rule_thickness: .04, |
|
big_op_spacing1: .111111, |
|
big_op_spacing2: .166666, |
|
big_op_spacing3: .2, |
|
big_op_spacing4: .6, |
|
big_op_spacing5: .1, |
|
|
|
integer: 6553.6, // conversion of em's to TeX internal integer |
|
scriptspace: .05, |
|
nulldelimiterspace: .12, |
|
delimiterfactor: 901, |
|
delimitershortfall: .5, |
|
scale: 1 // scaling factor for font dimensions |
|
}, |
|
|
|
// Font sizes for \tiny, \small, etc. (must match styles below) |
|
sizes: [50, 60, 70, 85, 100, 120, 144, 173, 207, 249], |
|
|
|
allowAbsolute: 1, // tells if browser can nest absolutely positioned |
|
// SPANs inside relative SPANs |
|
absoluteOffsetY: 0, // vertical adjustment when absolute position is used |
|
allowAbsoluteDelim: 0, // OK to use absolute placement for building delims? |
|
renameOK: 1, // tells if brower will find a tag whose name |
|
// has been set via setAttributes |
|
separateNetgativeSkips: 0, // MSIE doesn't do negative left margins |
|
separateSkips: 0, // Netscape doesn't combine skips well |
|
noEmptySpans: 0, // empty spans are/aren't allowed |
|
msieSpaceFix: '', // for MSIE spacing bug fix |
|
|
|
delay: 1, // delay for asynchronous math processing |
|
|
|
defaultH: 0, // default height for characters with no height specified |
|
|
|
// |
|
// Debugging flags |
|
// |
|
show: { |
|
BBox: false, |
|
Baseline: false, |
|
Top: false |
|
}, |
|
|
|
// |
|
// The styles needed for the TeX fonts |
|
// |
|
styles: { |
|
'.size0': 'font-size: 50%', // tiny (\scriptscriptsize) |
|
'.size1': 'font-size: 60%', // (50% of \large for consistency) |
|
'.size2': 'font-size: 70%', // scriptsize |
|
'.size3': 'font-size: 85%', // small (70% of \large for consistency) |
|
'.size4': 'font-size: 100%', // normalsize |
|
'.size5': 'font-size: 120%', // large |
|
'.size6': 'font-size: 144%', // Large |
|
'.size7': 'font-size: 173%', // LARGE |
|
'.size8': 'font-size: 207%', // huge |
|
'.size9': 'font-size: 249%', // Huge |
|
|
|
'.cmr10': 'font-family: cmr10', |
|
'.cmbx10': 'font-family: cmbx10, cmr10', |
|
'.cmti10': 'font-family: cmti10, cmr10', |
|
'.cmmi10': 'font-family: cmmi10', |
|
'.cmsy10': 'font-family: cmsy10', |
|
'.cmex10': 'font-family: cmex10', |
|
'.arial': 'font-family: Arial unicode MS', // for MSIE |
|
|
|
'.normal': 'font-family: serif; font-style: normal', |
|
'.math': 'font-family: serif; font-style: normal', |
|
'.typeset': 'font-family: serif; font-style: normal', |
|
'span.typeset': 'font-family: serif; font-style: normal', |
|
'div.typeset': 'font-family: serif; font-style: normal; text-align: center; margin-top: 1em; margin-bottom: 1em', |
|
'.mathlink': 'text-decoration: none', |
|
'.mathHD': 'border-width: 0; width: 1px; margin-right: -1px', |
|
|
|
'.error': 'font-size: 10pt; font-style: italic; ' |
|
+ 'background-color: #FFFFCC; padding: 1; ' |
|
+ 'border-width: 1; border-style: solid; border-color: #CC0000' |
|
}, |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* Get the width and height (in pixels) of an HTML string |
|
*/ |
|
BBoxFor: function (s) { |
|
this.hidden.innerHTML = s; |
|
var bbox = {w: this.hidden.offsetWidth, h: this.hidden.offsetHeight}; |
|
this.hidden.innerHTML = ''; // avoid MSIE bug on the Mac |
|
return bbox; |
|
}, |
|
|
|
/* |
|
* Get the width and height (in ems) of an HTML string |
|
*/ |
|
EmBoxFor: function (s) { |
|
var bbox = this.BBoxFor(s); |
|
return {w: bbox.w/this.em, h: bbox.h/this.em}; |
|
}, |
|
|
|
/* |
|
* Determine if the "top" of a <SPAN> is always at the same height |
|
* or varies with the height of the rest of the line (MSIE). |
|
*/ |
|
TestSpanHeight: function () { |
|
this.hidden.innerHTML = '<SPAN><IMG SRC="'+jsMath.blank+'" STYLE="height: 2em"></SPAN>'; |
|
var span = this.hidden.getElementsByTagName('SPAN')[0]; |
|
var img = this.hidden.getElementsByTagName('IMG')[0]; |
|
this.spanHeightVaries = (span.offsetHeight == img.offsetHeight); |
|
this.hidden.innerHTML = ''; |
|
}, |
|
|
|
/* |
|
* Determine if the NAME attribute of a tag can be changed |
|
* using the setAttribute function, and then be properly |
|
* returned by getElementByName. |
|
*/ |
|
TestRenameOK: function () { |
|
this.hidden.innerHTML = '<SPAN ID="jsMath.test"></SPAN>'; |
|
var test = document.getElementById('jsMath.test'); |
|
test.setAttribute('NAME','jsMath_test'); |
|
this.renameOK = (document.getElementsByName('jsMath_test').length > 0); |
|
this.hidden.innerHTML = ''; |
|
}, |
|
|
|
/* |
|
* Look to see if a font is found. HACK! |
|
* Check the character in the '|' position, and see if it is |
|
* wider than the usual '|'. |
|
*/ |
|
TestFont: function (name,n,factor) { |
|
if (n == null) {n = 124}; if (factor == null) {factor = 2} |
|
var wh1 = this.BBoxFor('<SPAN STYLE="font-family: '+name+', serif">'+this.TeX[name][n].c+'</SPAN>'); |
|
var wh2 = this.BBoxFor('<SPAN STYLE="font-family: serif">'+this.TeX[name][n].c+'</SPAN>'); |
|
return (wh1.w > factor*wh2.w && wh1.h != 0); |
|
}, |
|
|
|
TestFont2: function (name,n,factor) { |
|
if (n == null) {n = 124}; if (factor == null) {factor = 2} |
|
var wh1 = this.BBoxFor('<SPAN STYLE="font-family: '+name+', serif">'+this.TeX[name][n].c+'</SPAN>'); |
|
var wh2 = this.BBoxFor('<SPAN STYLE="font-family: serif">'+this.TeX[name][n].c+'</SPAN>'); |
|
return (wh2.w > factor*wh1.w && wh1.h != 0); |
|
}, |
|
|
|
/* |
|
* Check for the availability of TeX fonts. We do this by looking at |
|
* the width and height of a character in the cmex10 font. The cmex10 |
|
* font has depth considerably greater than most characters' widths (the |
|
* whole font has the depth of the character with greatest depth). This |
|
* is not the case for most fonts, so if we can access cmex10, the |
|
* height of a character should be much bigger than the width. |
|
* Otherwise, if we don't have cmex10, we'll get a character in another |
|
* font with normal height and width. In this case, we insert a message |
|
* pointing the user to the jsMath site, and load one of the fallback |
|
* definitions. |
|
* |
|
*/ |
|
CheckFonts: function () { |
|
jsMath.nofonts = 0; |
|
var wh = this.BBoxFor('<SPAN STYLE="font-family: cmex10">'+this.TeX.cmex10[1].c+'</SPAN>'); |
|
if (wh.w*3 < wh.h && wh.h != 0) return; |
|
if (this.TestFont('cmr10')) return; |
|
if (window.NoFontMessage) {window.NoFontMessage()} else {this.NoFontMessage()} |
|
if (navigator.platform == 'Win32') { |
|
document.writeln('<SCRIPT SRC="'+this.root+'jsMath-fallback-pc.js"></SCRIPT>'); |
|
} else if (navigator.platform == 'MacPPC') { |
|
document.writeln('<SCRIPT SRC="'+this.root+'jsMath-fallback-mac.js"></SCRIPT>'); |
|
} else { |
|
// default to unix? Is there a better way to tell if unix? |
|
document.writeln('<SCRIPT SRC="'+this.root+'jsMath-fallback-unix.js"></SCRIPT>'); |
|
} |
|
jsMath.nofonts = 1; |
|
}, |
|
|
|
/* |
|
* The message for when no TeX fonts. You can eliminate this message |
|
* by including |
|
* |
|
* <SCRIPT>function NoFontMessage() {}</SCRIPT> |
|
* |
|
* in your HTML file, if you want. But this means the user may not know |
|
* that he or she can get a better version of your page. |
|
*/ |
|
NoFontMessage: function () { |
|
document.writeln |
|
('<CENTER><DIV STYLE="padding: 10; border-style: solid; border-width:3;' |
|
+' border-color: #DD0000; background-color: #FFF8F8; width: 75%; text-align: left">' |
|
+'<SMALL><FONT COLOR="#AA0000"><B>Warning:</B>\n' |
|
+'It looks like you don\'t have the TeX math fonts installed.\n' |
|
+'The mathematics on this page may not look right without them.\n' |
|
+'The <A HREF="http://www.math.union.edu/locate/jsMath/" TARGET="_blank">' |
|
+'jsMath Home Page</A> has information on how to download the\n' |
|
+'needed fonts. In the meantime, we will do the best we can\n' |
|
+'with the fonts you have, but it may not be pretty and some equations\n' |
|
+'may not be rendered correctly.\n' |
|
+'</FONT></SMALL></DIV></CENTER><p><HR><p>'); |
|
}, |
|
|
|
/* |
|
* Initialize jsMath. This determines the em size, and a variety |
|
* of other parameters used throughout jsMath. |
|
*/ |
|
Init: function() { |
|
this.em = this.BBoxFor('<DIV STYLE="width: 20em; height: 1em"></DIV>').w/20; |
|
var h = this.BBoxFor('x').h; // Line height and depth to baseline |
|
var d = this.BBoxFor('x<IMG SRC="'+jsMath.black+'" HEIGHT="'+h+'" WIDTH="1">').h - h; |
|
this.h = (h-d)/this.em; this.d = d/this.em; |
|
this.hd = this.h + this.d; |
|
this.ph = h-d; this.pd = d; |
|
|
|
this.InitTeXfonts(); |
|
|
|
var x_height = this.EmBoxFor('<SPAN CLASS="cmr10">M</SPAN>').w/2; |
|
this.TeX.M_height = x_height*(26/14); |
|
this.TeX.h = this.h; this.TeX.d = this.d; this.TeX.hd = this.hd; |
|
// factor for \big and its brethren |
|
this.p_height = (this.TeX.cmex10[0].h+this.TeX.cmex10[0].d) / .85; |
|
|
|
this.InitSizes(); |
|
|
|
this.initialized = 1; |
|
}, |
|
|
|
/* |
|
* Find the root URL for the jsMath files (so we can load |
|
* the other .js and .gif files |
|
*/ |
|
InitSource: function () { |
|
var script = document.getElementsByTagName('SCRIPT'); |
|
var src = script[script.length-1].getAttribute('SRC'); |
|
if (src.match('(^|/)jsMath.js$')) { |
|
this.root = src.replace(/jsMath.js$/,''); |
|
this.blank = this.root + this.blank; |
|
this.black = this.root + this.black; |
|
} |
|
}, |
|
|
|
/* |
|
* Look up the default height and depth for a TeX font |
|
* and set the skewchar |
|
*/ |
|
InitTeXfont: function (name) { |
|
var font = this.TeX[name]; |
|
var WH = this.EmBoxFor('<SPAN CLASS="'+name+'">'+font[65].c+'</SPAN>'); |
|
font.hd = WH.h; |
|
font.d = this.EmBoxFor('<SPAN CLASS="'+name+'">'+ font[65].c + |
|
'<IMG SRC="'+jsMath.black+'" STYLE="height:'+font.hd+'em; width:1"></SPAN>').h |
|
- font.hd; |
|
font.h = font.hd - font.d; |
|
font.dh = .05; |
|
if (name == 'cmmi10') {font.skewchar = 0177} |
|
else if (name == 'cmsy10') {font.skewchar = 060} |
|
}, |
|
|
|
/* |
|
* Init all the TeX fonts |
|
*/ |
|
InitTeXfonts: function () { |
|
for (var i = 0; i < this.TeX.fam.length; i++) |
|
{if (this.TeX.fam[i]) {this.InitTeXfont(this.TeX.fam[i])}} |
|
}, |
|
|
|
/* |
|
* Compute font parameters for various sizes |
|
*/ |
|
InitSizes: function () { |
|
this.TeXparams = []; |
|
for (var j=0; j < this.sizes.length; j++) {this.TeXparams[j] = {}} |
|
for (var i in this.TeX) { |
|
if (typeof(this.TeX[i]) != 'object') { |
|
for (var j=0; j < this.sizes.length; j++) { |
|
this.TeXparams[j][i] = this.sizes[j]*this.TeX[i]/100; |
|
} |
|
} |
|
} |
|
}, |
|
|
|
/* |
|
* Test for browser characteristics, and adjust the font table |
|
* to overcome specific browser bugs |
|
*/ |
|
InitBrowser: function () { |
|
jsMath.browser = 'unknown'; |
|
this.isSafari = navigator.userAgent.match(/Safari/); |
|
this.TestSpanHeight(); |
|
this.TestRenameOK(); |
|
|
|
// |
|
// Check for bug-filled Internet Explorer |
|
// |
|
if (this.spanHeightVaries) { |
|
jsMath.browser = 'MSIE'; |
|
if (navigator.platform == 'Win32') { |
|
this.UpdateTeXfonts({ |
|
cmr10: {'10': {c: 'Ω', tclass: 'normal'}}, |
|
cmmi10: { |
|
'10': {c: '<I>Ω</I>', tclass: 'normal'}, |
|
'126': {c: '~<SPAN STYLE="margin-left:.1em"></SPAN>'} |
|
}, |
|
cmsy10: {'10': {c: '⊗', tclass: 'arial'}}, |
|
cmex10: {'10': {c: '<SPAN STYLE="font-size: 67%">D</SPAN>'}}, |
|
cmti10: {'10': {c: '<I>Ω</I>', tclass: 'normal'}}, |
|
cmbx10: {'10': {c: '<B>Ω</B>', tclass: 'normal'}} |
|
}); |
|
this.allowAbsoluteDelim = 1; |
|
this.separateSkips = 1; |
|
this.msieFontBug = 1; this.msieIntegralBug = 1; |
|
this.msieSpaceFix = '<IMG SRC="'+jsMath.blank+'" CLASS="mathHD">'; |
|
jsMath.Macro('joinrel','\\mathrel{\\kern-5mu}'), |
|
jsMath.Macro('mapsto','\\mapstochar\\kern-.54em\\rightarrow'); |
|
jsMath.Macro('longmapsto','\\mapstochar\\kern-.54em\\char{cmsy10}{0}\\joinrel\\rightarrow'); |
|
} else if (navigator.platform == 'MacPPC') { |
|
document.writeln('<SCRIPT SRC="'+this.root+'jsMath-msie-mac.js"></SCRIPT>'); |
|
jsMath.Parser.prototype.macros.angle = ['Replace','ord','<FONT FACE="Symbol">‹</FONT>','normal']; |
|
jsMath.msieAbsoluteBug = 1; |
|
} |
|
jsMath.Macro('not','\\mathrel{\\rlap{\\kern3mu/}}'); |
|
} |
|
|
|
// |
|
// Look for Netscape/Mozilla (any flavor) |
|
// |
|
if (this.hidden.ATTRIBUTE_NODE) { |
|
jsMath.browser = 'Mozilla'; |
|
if (navigator.platform == 'MacPPC') { |
|
this.UpdateTeXfonts({ |
|
cmr10: {'10': {c: 'Ω', tclass: 'normal'}}, |
|
cmmi10: {'10': {c: '<I>Ω</I>', tclass: 'normal'}}, |
|
cmsy10: {'10': {c: '⊗', tclass: 'normal'}}, |
|
cmex10: {'10': {c: '<SPAN STYLE="font-size: 67%">D</SPAN>'}}, |
|
cmti10: {'10': {c: '<I>Ω</I>', tclass: 'normal'}}, |
|
cmbx10: {'10': {c: '<B>Ω</B>', tclass: 'normal'}} |
|
}); |
|
} else { |
|
document.writeln('<SCRIPT SRC="'+this.root+'jsMath-mozilla.js"></SCRIPT>'); |
|
} |
|
for (var i = 0; i < this.TeX.fam.length; i++) { |
|
if (this.TeX.fam[i]) |
|
{this.styles['.'+this.TeX.fam[i]] += '; position: relative'} |
|
} |
|
this.allowAbsoluteDelim = 1; |
|
this.separateSkips = 1; |
|
jsMath.Macro('not','\\mathrel{\\rlap{\\kern3mu/}}'); |
|
} |
|
|
|
// |
|
// Look for OmniWeb |
|
// |
|
if (navigator.accentColorName) { |
|
jsMath.browser = 'OmniWeb'; |
|
this.allowAbsolute = 0; |
|
} |
|
|
|
// |
|
// Look for Opera |
|
// |
|
if (navigator.userAgent.search(" Opera ") >= 0) { |
|
jsMath.browser = 'Opera'; |
|
this.isOpera = 1; |
|
this.UpdateTeXfonts({ |
|
cmr10: { |
|
'10': {c: 'Ω', tclass: 'normal'}, |
|
'20': {c: 'ˇ', tclass: 'normal'} |
|
}, |
|
cmmi10: { |
|
'10': {c: '<I>Ω</I>', tclass: 'normal'}, |
|
'20': {c: 'κ', tclass: 'normal'} |
|
}, |
|
cmsy10: { |
|
'10': {c: '⊗', tclass: 'normal'}, |
|
'20': {c: '≤', tclass: 'normal'} |
|
}, |
|
cmex10: { |
|
'10': {c: '<SPAN STYLE="font-size: 67%">D</SPAN>'}, |
|
'20': {c: '<SPAN STYLE="font-size: 82%">"</SPAN>'} |
|
}, |
|
cmti10: { |
|
'10': {c: '<I>Ω</I>', tclass: 'normal'}, |
|
'20': {c: '<I>ˇ</I>', tclass: 'normal'} |
|
}, |
|
cmbx10: { |
|
'10': {c: '<B>Ω</B>', tclass: 'normal'}, |
|
'20': {c: '<B>ˇ</B>', tclass: 'normal'} |
|
} |
|
}); |
|
this.allowAbsolute = 0; |
|
jsMath.delay = 10; |
|
} |
|
|
|
// |
|
// Look for Safari |
|
// |
|
if (this.isSafari) { |
|
jsMath.browser = 'Safari'; |
|
var version = navigator.userAgent.match("Safari/([0-9]+)")[1]; |
|
if (version < 125) {this.allowAbsolute = 0; this.oldSafari = 1} |
|
for (var i = 0; i < this.TeX.fam.length; i++) |
|
{if (this.TeX.fam[i] != '') {this.TeX[this.TeX.fam[i]].dh = .1}} |
|
this.absoluteOffsetY = -.05; |
|
this.TeX.axis_height += .05; |
|
this.allowAbsoluteDelim = ! this.oldSafari; |
|
} |
|
|
|
// |
|
// Change some routines depending on the browser |
|
// |
|
if (this.allowAbsoluteDelim) { |
|
jsMath.Box.DelimExtend = jsMath.Box.DelimExtendAbsolute; |
|
jsMath.Box.Layout = jsMath.Box.LayoutAbsolute; |
|
} else { |
|
jsMath.Box.DelimExtend = jsMath.Box.DelimExtendRelative; |
|
jsMath.Box.Layout = jsMath.Box.LayoutRelative; |
|
} |
|
|
|
if (this.separateNegativeSkips) { |
|
jsMath.HTML.Place = jsMath.HTML.PlaceSeparateNegative; |
|
jsMath.Typeset.prototype.Place = jsMath.Typeset.prototype.PlaceSeparateNegative; |
|
} else if (this.separateSkips) { |
|
jsMath.HTML.Place = jsMath.HTML.PlaceSeparateSkips; |
|
jsMath.Typeset.prototype.Place = jsMath.Typeset.prototype.PlaceSeparateSkips; |
|
} |
|
|
|
if (this.noEmptySpans) {jsMath.HTML.Spacer = jsMath.HTML.SpacerImage} |
|
|
|
}, |
|
|
|
/* |
|
* Define some styles |
|
*/ |
|
WriteStyles: function (styles) { |
|
document.writeln('<STYLE TYPE="text/css">'); |
|
for (var id in styles) {document.writeln(' '+id+' {'+styles[id]+'}')} |
|
document.writeln('</STYLE>'); |
|
}, |
|
|
|
/* |
|
* Send the style definitions to the browser (these may be adjusted |
|
* by the browser-specific code) |
|
*/ |
|
InitStyles: function () {this.WriteStyles(this.styles)}, |
|
|
|
/* |
|
* Update specific parameters for a limited number of font entries |
|
*/ |
|
UpdateTeXfonts: function (change) { |
|
for (var font in change) { |
|
for (var code in change[font]) { |
|
for (var id in change[font][code]) { |
|
this.TeX[font][code][id] = change[font][code][id]; |
|
} |
|
} |
|
} |
|
}, |
|
|
|
/* |
|
* Update the character code for every character in a list |
|
* of fonts |
|
*/ |
|
UpdateTeXfontCodes: function (change) { |
|
for (var font in change) { |
|
for (var i = 0; i < change[font].length; i++) { |
|
this.TeX[font][i].c = change[font][i]; |
|
} |
|
} |
|
}, |
|
|
|
/* |
|
* Add a collection of styles to the style list |
|
*/ |
|
UpdateStyles: function (styles) { |
|
for (var i in styles) {this.styles[i] = styles[i]} |
|
}, |
|
|
|
/* |
|
* Manage JavaScript objects: |
|
* |
|
* Add: simply add items to an object |
|
* Package: add items to an object prototype |
|
*/ |
|
Add: function (obj,def) {for (var id in def) {obj[id] = def[id]}}, |
|
Package: function (obj,def) {this.Add(obj.prototype,def)} |
|
|
|
} |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
jsMath.Add(jsMath.TeX,{ |
|
|
|
// The TeX math atom types (see Appendix G of the TeXbook) |
|
atom: ['ord', 'op', 'bin', 'rel', 'open', 'close', 'punct', 'ord'], |
|
|
|
// The TeX font families |
|
fam: ['cmr10','cmmi10','cmsy10','cmex10','cmti10','','cmbx10'], |
|
|
|
/* |
|
* The following are the TeX font mappings and metrics. The metric |
|
* information comes directly from the TeX .tfm files, and the |
|
* character mappings are for the TrueType TeX fonts. Browser-specific |
|
* adjustments are made to these tables in the InitBrowser() routine |
|
*/ |
|
cmr10: [ |
|
// 00 - 0F |
|
{c: '¡', h: 0.683, w: 0.625}, |
|
{c: '¢', h: 0.683, w: 0.833}, |
|
{c: '£', h: 0.683, w: 0.778}, |
|
{c: '¤', h: 0.683, w: 0.694}, |
|
{c: '¥', h: 0.683, w: 0.667}, |
|
{c: '¦', h: 0.683, w: 0.75}, |
|
{c: '§', h: 0.683, w: 0.722}, |
|
{c: '¨', h: 0.683, w: 0.778}, |
|
{c: '©', h: 0.683, w: 0.722}, |
|
{c: 'ª', h: 0.683, w: 0.778}, |
|
{c: '­', h: 0.683, w: 0.722}, |
|
{c: '®', h: 0.694, w: 0.583, ic: 0.0778, krn: {'39': 0.0778, '63': 0.0778, '33': 0.0778, '41': 0.0778, '93': 0.0778}, lig: {'105': 14, '108': 15}}, |
|
{c: '¯', h: 0.694, w: 0.556}, |
|
{c: '°', h: 0.694, w: 0.556}, |
|
{c: '±', h: 0.694, w: 0.833}, |
|
{c: '²', h: 0.694, w: 0.833}, |
|
// 10 - 1F |
|
{c: '³', h: 0.431, w: 0.278}, |
|
{c: '´', h: 0.431, d: 0.194, w: 0.306}, |
|
{c: 'µ', h: 0.694, w: 0.5}, |
|
{c: '¶', h: 0.694, w: 0.5}, |
|
{c: '∙', h: 0.628, w: 0.5}, |
|
{c: '¸', h: 0.694, w: 0.5}, |
|
{c: '¹', h: 0.568, w: 0.5}, |
|
{c: 'º', h: 0.694, w: 0.75}, |
|
{c: '»', d: 0.17, w: 0.444}, |
|
{c: '¼', h: 0.694, w: 0.5}, |
|
{c: '½', h: 0.431, w: 0.722}, |
|
{c: '¾', h: 0.431, w: 0.778}, |
|
{c: '¿', h: 0.528, d: 0.0972, w: 0.5}, |
|
{c: 'À', h: 0.683, w: 0.903}, |
|
{c: 'Á', h: 0.683, w: 1.01}, |
|
{c: 'Â', h: 0.732, d: 0.0486, w: 0.778}, |
|
// 20 - 2F |
|
{c: 'Ã', h: 0.431, w: 0.278, krn: {'108': -0.278, '76': -0.319}}, |
|
{c: '!', h: 0.694, w: 0.278, lig: {'96': 60}}, |
|
{c: '"', h: 0.694, w: 0.5}, |
|
{c: '#', h: 0.694, d: 0.194, w: 0.833}, |
|
{c: '$', h: 0.75, d: 0.0556, w: 0.5}, |
|
{c: '%', h: 0.75, d: 0.0556, w: 0.833}, |
|
{c: '&', h: 0.694, w: 0.778}, |
|
{c: '\'', h: 0.694, w: 0.278, krn: {'63': 0.111, '33': 0.111}, lig: {'39': 34}}, |
|
{c: '(', h: 0.75, d: 0.25, w: 0.389}, |
|
{c: ')', h: 0.75, d: 0.25, w: 0.389}, |
|
{c: '*', h: 0.75, w: 0.5}, |
|
{c: '+', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: ',', h: 0.106, d: 0.194, w: 0.278}, |
|
{c: '-', h: 0.431, w: 0.333, lig: {'45': 123}}, |
|
{c: '.', h: 0.106, w: 0.278}, |
|
{c: '/', h: 0.75, d: 0.25, w: 0.5}, |
|
// 30 - 3F |
|
{c: '0', h: 0.644, w: 0.5}, |
|
{c: '1', h: 0.644, w: 0.5}, |
|
{c: '2', h: 0.644, w: 0.5}, |
|
{c: '3', h: 0.644, w: 0.5}, |
|
{c: '4', h: 0.644, w: 0.5}, |
|
{c: '5', h: 0.644, w: 0.5}, |
|
{c: '6', h: 0.644, w: 0.5}, |
|
{c: '7', h: 0.644, w: 0.5}, |
|
{c: '8', h: 0.644, w: 0.5}, |
|
{c: '9', h: 0.644, w: 0.5}, |
|
{c: ':', h: 0.431, w: 0.278}, |
|
{c: ';', h: 0.431, d: 0.194, w: 0.278}, |
|
{c: '<', h: 0.5, d: 0.194, w: 0.278}, |
|
{c: '=', h: 0.367, d: -0.133, w: 0.778}, |
|
{c: '>', h: 0.5, d: 0.194, w: 0.472}, |
|
{c: '?', h: 0.694, w: 0.472, lig: {'96': 62}}, |
|
// 40 - 4F |
|
{c: '@', h: 0.694, w: 0.778}, |
|
{c: 'A', h: 0.683, w: 0.75, krn: {'116': -0.0278, '67': -0.0278, '79': -0.0278, '71': -0.0278, '85': -0.0278, '81': -0.0278, '84': -0.0833, '89': -0.0833, '86': -0.111, '87': -0.111}}, |
|
{c: 'B', h: 0.683, w: 0.708}, |
|
{c: 'C', h: 0.683, w: 0.722}, |
|
{c: 'D', h: 0.683, w: 0.764, krn: {'88': -0.0278, '87': -0.0278, '65': -0.0278, '86': -0.0278, '89': -0.0278}}, |
|
{c: 'E', h: 0.683, w: 0.681}, |
|
{c: 'F', h: 0.683, w: 0.653, krn: {'111': -0.0833, '101': -0.0833, '117': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.111, '79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}}, |
|
{c: 'G', h: 0.683, w: 0.785}, |
|
{c: 'H', h: 0.683, w: 0.75}, |
|
{c: 'I', h: 0.683, w: 0.361, krn: {'73': 0.0278}}, |
|
{c: 'J', h: 0.683, w: 0.514}, |
|
{c: 'K', h: 0.683, w: 0.778, krn: {'79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}}, |
|
{c: 'L', h: 0.683, w: 0.625, krn: {'84': -0.0833, '89': -0.0833, '86': -0.111, '87': -0.111}}, |
|
{c: 'M', h: 0.683, w: 0.917}, |
|
{c: 'N', h: 0.683, w: 0.75}, |
|
{c: 'O', h: 0.683, w: 0.778, krn: {'88': -0.0278, '87': -0.0278, '65': -0.0278, '86': -0.0278, '89': -0.0278}}, |
|
// 50 - 5F |
|
{c: 'P', h: 0.683, w: 0.681, krn: {'65': -0.0833, '111': -0.0278, '101': -0.0278, '97': -0.0278, '46': -0.0833, '44': -0.0833}}, |
|
{c: 'Q', h: 0.683, d: 0.194, w: 0.778}, |
|
{c: 'R', h: 0.683, w: 0.736, krn: {'116': -0.0278, '67': -0.0278, '79': -0.0278, '71': -0.0278, '85': -0.0278, '81': -0.0278, '84': -0.0833, '89': -0.0833, '86': -0.111, '87': -0.111}}, |
|
{c: 'S', h: 0.683, w: 0.556}, |
|
{c: 'T', h: 0.683, w: 0.722, krn: {'121': -0.0278, '101': -0.0833, '111': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.0833, '117': -0.0833}}, |
|
{c: 'U', h: 0.683, w: 0.75}, |
|
{c: 'V', h: 0.683, w: 0.75, ic: 0.0139, krn: {'111': -0.0833, '101': -0.0833, '117': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.111, '79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}}, |
|
{c: 'W', h: 0.683, w: 1.03, ic: 0.0139, krn: {'111': -0.0833, '101': -0.0833, '117': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.111, '79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}}, |
|
{c: 'X', h: 0.683, w: 0.75, krn: {'79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}}, |
|
{c: 'Y', h: 0.683, w: 0.75, ic: 0.025, krn: {'101': -0.0833, '111': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.0833, '117': -0.0833}}, |
|
{c: 'Z', h: 0.683, w: 0.611}, |
|
{c: '[', h: 0.75, d: 0.25, w: 0.278}, |
|
{c: '\\', h: 0.694, w: 0.5}, |
|
{c: ']', h: 0.75, d: 0.25, w: 0.278}, |
|
{c: '^', h: 0.694, w: 0.5}, |
|
{c: '_', h: 0.668, w: 0.278}, |
|
// 60 - 6F |
|
{c: '`', h: 0.694, w: 0.278, lig: {'96': 92}}, |
|
{c: 'a', h: 0.431, w: 0.5, krn: {'118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}}, |
|
{c: 'b', h: 0.694, w: 0.556, krn: {'101': 0.0278, '111': 0.0278, '120': -0.0278, '100': 0.0278, '99': 0.0278, '113': 0.0278, '118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}}, |
|
{c: 'c', h: 0.431, w: 0.444, krn: {'104': -0.0278, '107': -0.0278}}, |
|
{c: 'd', h: 0.694, w: 0.556}, |
|
{c: 'e', h: 0.431, w: 0.444}, |
|
{c: 'f', h: 0.694, w: 0.306, ic: 0.0778, krn: {'39': 0.0778, '63': 0.0778, '33': 0.0778, '41': 0.0778, '93': 0.0778}, lig: {'105': 12, '102': 11, '108': 13}}, |
|
{c: 'g', h: 0.431, d: 0.194, w: 0.5, ic: 0.0139, krn: {'106': 0.0278}}, |
|
{c: 'h', h: 0.694, w: 0.556, krn: {'116': -0.0278, '117': -0.0278, '98': -0.0278, '121': -0.0278, '118': -0.0278, '119': -0.0278}}, |
|
{c: 'i', h: 0.668, w: 0.278}, |
|
{c: 'j', h: 0.668, d: 0.194, w: 0.306}, |
|
{c: 'k', h: 0.694, w: 0.528, krn: {'97': -0.0556, '101': -0.0278, '97': -0.0278, '111': -0.0278, '99': -0.0278}}, |
|
{c: 'l', h: 0.694, w: 0.278}, |
|
{c: 'm', h: 0.431, w: 0.833, krn: {'116': -0.0278, '117': -0.0278, '98': -0.0278, '121': -0.0278, '118': -0.0278, '119': -0.0278}}, |
|
{c: 'n', h: 0.431, w: 0.556, krn: {'116': -0.0278, '117': -0.0278, '98': -0.0278, '121': -0.0278, '118': -0.0278, '119': -0.0278}}, |
|
{c: 'o', h: 0.431, w: 0.5, krn: {'101': 0.0278, '111': 0.0278, '120': -0.0278, '100': 0.0278, '99': 0.0278, '113': 0.0278, '118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}}, |
|
// 70 - 7F |
|
{c: 'p', h: 0.431, d: 0.194, w: 0.556, krn: {'101': 0.0278, '111': 0.0278, '120': -0.0278, '100': 0.0278, '99': 0.0278, '113': 0.0278, '118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}}, |
|
{c: 'q', h: 0.431, d: 0.194, w: 0.528}, |
|
{c: 'r', h: 0.431, w: 0.392}, |
|
{c: 's', h: 0.431, w: 0.394}, |
|
{c: 't', h: 0.615, w: 0.389, krn: {'121': -0.0278, '119': -0.0278}}, |
|
{c: 'u', h: 0.431, w: 0.556, krn: {'119': -0.0278}}, |
|
{c: 'v', h: 0.431, w: 0.528, ic: 0.0139, krn: {'97': -0.0556, '101': -0.0278, '97': -0.0278, '111': -0.0278, '99': -0.0278}}, |
|
{c: 'w', h: 0.431, w: 0.722, ic: 0.0139, krn: {'101': -0.0278, '97': -0.0278, '111': -0.0278, '99': -0.0278}}, |
|
{c: 'x', h: 0.431, w: 0.528}, |
|
{c: 'y', h: 0.431, d: 0.194, w: 0.528, ic: 0.0139, krn: {'111': -0.0278, '101': -0.0278, '97': -0.0278, '46': -0.0833, '44': -0.0833}}, |
|
{c: 'z', h: 0.431, w: 0.444}, |
|
{c: '{', h: 0.431, w: 0.5, ic: 0.0278, lig: {'45': 124}}, |
|
{c: '|', h: 0.431, w: 1, ic: 0.0278}, |
|
{c: '}', h: 0.694, w: 0.5}, |
|
{c: '~', h: 0.668, w: 0.5}, |
|
{c: 'Ä', h: 0.668, w: 0.5} |
|
], |
|
|
|
cmmi10: [ |
|
// 00 - 0F |
|
{c: '¡', h: 0.683, w: 0.615, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0833}}, |
|
{c: '¢', h: 0.683, w: 0.833, krn: {'127': 0.167}}, |
|
{c: '£', h: 0.683, w: 0.763, ic: 0.0278, krn: {'127': 0.0833}}, |
|
{c: '¤', h: 0.683, w: 0.694, krn: {'127': 0.167}}, |
|
{c: '¥', h: 0.683, w: 0.742, ic: 0.0757, krn: {'127': 0.0833}}, |
|
{c: '¦', h: 0.683, w: 0.831, ic: 0.0812, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}}, |
|
{c: '§', h: 0.683, w: 0.78, ic: 0.0576, krn: {'127': 0.0833}}, |
|
{c: '¨', h: 0.683, w: 0.583, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0556}}, |
|
{c: '©', h: 0.683, w: 0.667, krn: {'127': 0.0833}}, |
|
{c: 'ª', h: 0.683, w: 0.612, ic: 0.11, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}}, |
|
{c: '­', h: 0.683, w: 0.772, ic: 0.0502, krn: {'127': 0.0833}}, |
|
{c: '®', h: 0.431, w: 0.64, ic: 0.0037, krn: {'127': 0.0278}}, |
|
{c: '¯', h: 0.694, d: 0.194, w: 0.566, ic: 0.0528, krn: {'127': 0.0833}}, |
|
{c: '°', h: 0.431, d: 0.194, w: 0.518, ic: 0.0556}, |
|
{c: '±', h: 0.694, w: 0.444, ic: 0.0378, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0556}}, |
|
{c: '²', h: 0.431, w: 0.406, krn: {'127': 0.0556}}, |
|
// 10 - 1F |
|
{c: '³', h: 0.694, d: 0.194, w: 0.438, ic: 0.0738, krn: {'127': 0.0833}}, |
|
{c: '´', h: 0.431, d: 0.194, w: 0.497, ic: 0.0359, krn: {'127': 0.0556}}, |
|
{c: 'µ', h: 0.694, w: 0.469, ic: 0.0278, krn: {'127': 0.0833}}, |
|
{c: '¶', h: 0.431, w: 0.354, krn: {'127': 0.0556}}, |
|
{c: '∙', h: 0.431, w: 0.576}, |
|
{c: '¸', h: 0.694, w: 0.583}, |
|
{c: '¹', h: 0.431, d: 0.194, w: 0.603, krn: {'127': 0.0278}}, |
|
{c: 'º', h: 0.431, w: 0.494, ic: 0.0637, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0278}}, |
|
{c: '»', h: 0.694, d: 0.194, w: 0.438, ic: 0.046, krn: {'127': 0.111}}, |
|
{c: '¼', h: 0.431, w: 0.57, ic: 0.0359}, |
|
{c: '½', h: 0.431, d: 0.194, w: 0.517, krn: {'127': 0.0833}}, |
|
{c: '¾', h: 0.431, w: 0.571, ic: 0.0359, krn: {'59': -0.0556, '58': -0.0556}}, |
|
{c: '¿', h: 0.431, w: 0.437, ic: 0.113, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0278}}, |
|
{c: 'À', h: 0.431, w: 0.54, ic: 0.0359, krn: {'127': 0.0278}}, |
|
{c: 'Á', h: 0.694, d: 0.194, w: 0.596, krn: {'127': 0.0833}}, |
|
{c: 'Â', h: 0.431, d: 0.194, w: 0.626, krn: {'127': 0.0556}}, |
|
// 20 - 2F |
|
{c: 'Ã', h: 0.694, d: 0.194, w: 0.651, ic: 0.0359, krn: {'127': 0.111}}, |
|
{c: '!', h: 0.431, w: 0.622, ic: 0.0359}, |
|
{c: '"', h: 0.431, w: 0.466, krn: {'127': 0.0833}}, |
|
{c: '#', h: 0.694, w: 0.591, krn: {'127': 0.0833}}, |
|
{c: '$', h: 0.431, w: 0.828, ic: 0.0278}, |
|
{c: '%', h: 0.431, d: 0.194, w: 0.517, krn: {'127': 0.0833}}, |
|
{c: '&', h: 0.431, d: 0.0972, w: 0.363, ic: 0.0799, krn: {'127': 0.0833}}, |
|
{c: '\'', h: 0.431, d: 0.194, w: 0.654, krn: {'127': 0.0833}}, |
|
{c: '(', h: 0.367, d: -0.133, w: 1}, |
|
{c: ')', h: 0.367, d: -0.133, w: 1}, |
|
{c: '*', h: 0.367, d: -0.133, w: 1}, |
|
{c: '+', h: 0.367, d: -0.133, w: 1}, |
|
{c: ',', h: 0.464, d: -0.0363, w: 0.278}, |
|
{c: '-', h: 0.464, d: -0.0363, w: 0.278}, |
|
{c: '.', h: 0.465, d: -0.0347, w: 0.5}, |
|
{c: '/', h: 0.465, d: -0.0347, w: 0.5}, |
|
// 30 - 3F |
|
{c: '0', h: 0.431, w: 0.5}, |
|
{c: '1', h: 0.431, w: 0.5}, |
|
{c: '2', h: 0.431, w: 0.5}, |
|
{c: '3', h: 0.431, d: 0.194, w: 0.5}, |
|
{c: '4', h: 0.431, d: 0.194, w: 0.5}, |
|
{c: '5', h: 0.431, d: 0.194, w: 0.5}, |
|
{c: '6', h: 0.644, w: 0.5}, |
|
{c: '7', h: 0.431, d: 0.194, w: 0.5}, |
|
{c: '8', h: 0.644, w: 0.5}, |
|
{c: '9', h: 0.431, d: 0.194, w: 0.5}, |
|
{c: ':', h: 0.106, w: 0.278}, |
|
{c: ';', h: 0.106, d: 0.194, w: 0.278}, |
|
{c: '<', h: 0.539, d: 0.0391, w: 0.778}, |
|
{c: '=', h: 0.75, d: 0.25, w: 0.5, krn: {'1': -0.0556, '65': -0.0556, '77': -0.0556, '78': -0.0556, '89': 0.0556, '90': -0.0556}}, |
|
{c: '>', h: 0.539, d: 0.0391, w: 0.778}, |
|
{c: '?', h: 0.465, d: -0.0347, w: 0.5}, |
|
// 40 - 4F |
|
{c: '@', h: 0.694, w: 0.531, ic: 0.0556, krn: {'127': 0.0833}}, |
|
{c: 'A', h: 0.683, w: 0.75, krn: {'127': 0.139}}, |
|
{c: 'B', h: 0.683, w: 0.759, ic: 0.0502, krn: {'127': 0.0833}}, |
|
{c: 'C', h: 0.683, w: 0.715, ic: 0.0715, krn: {'61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: 'D', h: 0.683, w: 0.828, ic: 0.0278, krn: {'127': 0.0556}}, |
|
{c: 'E', h: 0.683, w: 0.738, ic: 0.0576, krn: {'127': 0.0833}}, |
|
{c: 'F', h: 0.683, w: 0.643, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0833}}, |
|
{c: 'G', h: 0.683, w: 0.786, krn: {'127': 0.0833}}, |
|
{c: 'H', h: 0.683, w: 0.831, ic: 0.0812, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}}, |
|
{c: 'I', h: 0.683, w: 0.44, ic: 0.0785, krn: {'127': 0.111}}, |
|
{c: 'J', h: 0.683, w: 0.555, ic: 0.0962, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.167}}, |
|
{c: 'K', h: 0.683, w: 0.849, ic: 0.0715, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}}, |
|
{c: 'L', h: 0.683, w: 0.681, krn: {'127': 0.0278}}, |
|
{c: 'M', h: 0.683, w: 0.97, ic: 0.109, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: 'N', h: 0.683, w: 0.803, ic: 0.109, krn: {'61': -0.0833, '61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: 'O', h: 0.683, w: 0.763, ic: 0.0278, krn: {'127': 0.0833}}, |
|
// 50 - 5F |
|
{c: 'P', h: 0.683, w: 0.642, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0833}}, |
|
{c: 'Q', h: 0.683, d: 0.194, w: 0.791, krn: {'127': 0.0833}}, |
|
{c: 'R', h: 0.683, w: 0.759, ic: 0.00773, krn: {'127': 0.0833}}, |
|
{c: 'S', h: 0.683, w: 0.613, ic: 0.0576, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: 'T', h: 0.683, w: 0.584, ic: 0.139, krn: {'61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: 'U', h: 0.683, w: 0.683, ic: 0.109, krn: {'59': -0.111, '58': -0.111, '61': -0.0556, '127': 0.0278}}, |
|
{c: 'V', h: 0.683, w: 0.583, ic: 0.222, krn: {'59': -0.167, '58': -0.167, '61': -0.111}}, |
|
{c: 'W', h: 0.683, w: 0.944, ic: 0.139, krn: {'59': -0.167, '58': -0.167, '61': -0.111}}, |
|
{c: 'X', h: 0.683, w: 0.828, ic: 0.0785, krn: {'61': -0.0833, '61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: 'Y', h: 0.683, w: 0.581, ic: 0.222, krn: {'59': -0.167, '58': -0.167, '61': -0.111}}, |
|
{c: 'Z', h: 0.683, w: 0.683, ic: 0.0715, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0833}}, |
|
{c: '[', h: 0.75, w: 0.389}, |
|
{c: '\\', h: 0.694, d: 0.194, w: 0.389}, |
|
{c: ']', h: 0.694, d: 0.194, w: 0.389}, |
|
{c: '^', h: 0.358, d: -0.142, w: 1}, |
|
{c: '_', h: 0.358, d: -0.142, w: 1}, |
|
// 60 - 6F |
|
{c: '`', h: 0.694, w: 0.417, krn: {'127': 0.111}}, |
|
{c: 'a', h: 0.431, w: 0.529}, |
|
{c: 'b', h: 0.694, w: 0.429}, |
|
{c: 'c', h: 0.431, w: 0.433, krn: {'127': 0.0556}}, |
|
{c: 'd', h: 0.694, w: 0.52, krn: {'89': 0.0556, '90': -0.0556, '106': -0.111, '102': -0.167, '127': 0.167}}, |
|
{c: 'e', h: 0.431, w: 0.466, krn: {'127': 0.0556}}, |
|
{c: 'f', h: 0.694, d: 0.194, w: 0.49, ic: 0.108, krn: {'59': -0.0556, '58': -0.0556, '127': 0.167}}, |
|
{c: 'g', h: 0.431, d: 0.194, w: 0.477, ic: 0.0359, krn: {'127': 0.0278}}, |
|
{c: 'h', h: 0.694, w: 0.576, krn: {'127': -0.0278}}, |
|
{c: 'i', h: 0.66, w: 0.345}, |
|
{c: 'j', h: 0.66, d: 0.194, w: 0.412, ic: 0.0572, krn: {'59': -0.0556, '58': -0.0556}}, |
|
{c: 'k', h: 0.694, w: 0.521, ic: 0.0315}, |
|
{c: 'l', h: 0.694, w: 0.298, ic: 0.0197, krn: {'127': 0.0833}}, |
|
{c: 'm', h: 0.431, w: 0.878}, |
|
{c: 'n', h: 0.431, w: 0.6}, |
|
{c: 'o', h: 0.431, w: 0.485, krn: {'127': 0.0556}}, |
|
// 70 - 7F |
|
{c: 'p', h: 0.431, d: 0.194, w: 0.503, krn: {'127': 0.0833}}, |
|
{c: 'q', h: 0.431, d: 0.194, w: 0.446, ic: 0.0359, krn: {'127': 0.0833}}, |
|
{c: 'r', h: 0.431, w: 0.451, ic: 0.0278, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0556}}, |
|
{c: 's', h: 0.431, w: 0.469, krn: {'127': 0.0556}}, |
|
{c: 't', h: 0.615, w: 0.361, krn: {'127': 0.0833}}, |
|
{c: 'u', h: 0.431, w: 0.572, krn: {'127': 0.0278}}, |
|
{c: 'v', h: 0.431, w: 0.485, ic: 0.0359, krn: {'127': 0.0278}}, |
|
{c: 'w', h: 0.431, w: 0.716, ic: 0.0269, krn: {'127': 0.0833}}, |
|
{c: 'x', h: 0.431, w: 0.572, krn: {'127': 0.0278}}, |
|
{c: 'y', h: 0.431, d: 0.194, w: 0.49, ic: 0.0359, krn: {'127': 0.0556}}, |
|
{c: 'z', h: 0.431, w: 0.465, ic: 0.044, krn: {'127': 0.0556}}, |
|
{c: '{', h: 0.431, w: 0.322, krn: {'127': 0.0278}}, |
|
{c: '|', h: 0.431, d: 0.194, w: 0.384, krn: {'127': 0.0833}}, |
|
{c: '}', h: 0.431, d: 0.194, w: 0.636, krn: {'127': 0.111}}, |
|
{c: '~', h: 0.714, w: 0.5, ic: 0.154}, |
|
{c: 'Ä', h: 0.694, w: 0.278, ic: 0.399} |
|
], |
|
|
|
cmsy10: [ |
|
// 00 - 0F |
|
{c: '¡', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '¢', h: 0.444, d: -0.0556, w: 0.278}, |
|
{c: '£', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '¤', h: 0.465, d: -0.0347, w: 0.5}, |
|
{c: '¥', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '¦', h: 0.444, d: -0.0556, w: 0.5}, |
|
{c: '§', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '¨', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '©', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: 'ª', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '­', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '®', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '¯', h: 0.583, d: 0.0833, w: 0.778}, |
|
{c: '°', h: 0.694, d: 0.194, w: 1}, |
|
{c: '±', h: 0.444, d: -0.0556, w: 0.5}, |
|
{c: '²', h: 0.444, d: -0.0556, w: 0.5}, |
|
// 10 - 1F |
|
{c: '³', h: 0.464, d: -0.0363, w: 0.778}, |
|
{c: '´', h: 0.464, d: -0.0363, w: 0.778}, |
|
{c: 'µ', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: '¶', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: '∙', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: '¸', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: '¹', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: 'º', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: '»', h: 0.367, d: -0.133, w: 0.778}, |
|
{c: '¼', h: 0.483, d: -0.0169, w: 0.778}, |
|
{c: '½', h: 0.539, d: 0.0391, w: 0.778}, |
|
{c: '¾', h: 0.539, d: 0.0391, w: 0.778}, |
|
{c: '¿', h: 0.539, d: 0.0391, w: 1}, |
|
{c: 'À', h: 0.539, d: 0.0391, w: 1}, |
|
{c: 'Á', h: 0.539, d: 0.0391, w: 0.778}, |
|
{c: 'Â', h: 0.539, d: 0.0391, w: 0.778}, |
|
// 20 - 2F |
|
{c: 'Ã', h: 0.367, d: -0.133, w: 1}, |
|
{c: '!', h: 0.367, d: -0.133, w: 1}, |
|
{c: '"', h: 0.694, d: 0.194, w: 0.5}, |
|
{c: '#', h: 0.694, d: 0.194, w: 0.5}, |
|
{c: '$', h: 0.367, d: -0.133, w: 1}, |
|
{c: '%', h: 0.694, d: 0.194, w: 1}, |
|
{c: '&', h: 0.694, d: 0.194, w: 1}, |
|
{c: '\'', h: 0.464, d: -0.0363, w: 0.778}, |
|
{c: '(', h: 0.367, d: -0.133, w: 1}, |
|
{c: ')', h: 0.367, d: -0.133, w: 1}, |
|
{c: '*', h: 0.694, d: 0.194, w: 0.611}, |
|
{c: '+', h: 0.694, d: 0.194, w: 0.611}, |
|
{c: ',', h: 0.367, d: -0.133, w: 1}, |
|
{c: '-', h: 0.694, d: 0.194, w: 1}, |
|
{c: '.', h: 0.694, d: 0.194, w: 1}, |
|
{c: '/', h: 0.431, w: 0.778}, |
|
// 30 - 3F |
|
{c: '0', h: 0.556, w: 0.275}, |
|
{c: '1', h: 0.431, w: 1}, |
|
{c: '2', h: 0.539, d: 0.0391, w: 0.667}, |
|
{c: '3', h: 0.539, d: 0.0391, w: 0.667}, |
|
{c: '4', h: 0.694, d: 0.194, w: 0.889}, |
|
{c: '5', h: 0.694, d: 0.194, w: 0.889}, |
|
{c: '6', h: 0.694, d: 0.194, w: 0}, |
|
{c: '7', h: 0.367, d: -0.133, w: 0}, |
|
{c: '8', h: 0.694, w: 0.556}, |
|
{c: '9', h: 0.694, w: 0.556}, |
|
{c: ':', h: 0.431, w: 0.667}, |
|
{c: ';', h: 0.75, d: 0.0556, w: 0.5}, |
|
{c: '<', h: 0.694, w: 0.722}, |
|
{c: '=', h: 0.694, w: 0.722}, |
|
{c: '>', h: 0.694, w: 0.778}, |
|
{c: '?', h: 0.694, w: 0.778}, |
|
// 40 - 4F |
|
{c: '@', h: 0.694, w: 0.611}, |
|
{c: 'A', h: 0.683, w: 0.798, krn: {'48': 0.194}}, |
|
{c: 'B', h: 0.683, w: 0.657, ic: 0.0304, krn: {'48': 0.139}}, |
|
{c: 'C', h: 0.683, w: 0.527, ic: 0.0583, krn: {'48': 0.139}}, |
|
{c: 'D', h: 0.683, w: 0.771, ic: 0.0278, krn: {'48': 0.0833}}, |
|
{c: 'E', h: 0.683, w: 0.528, ic: 0.0894, krn: {'48': 0.111}}, |
|
{c: 'F', h: 0.683, w: 0.719, ic: 0.0993, krn: {'48': 0.111}}, |
|
{c: 'G', h: 0.683, d: 0.0972, w: 0.595, ic: 0.0593, krn: {'48': 0.111}}, |
|
{c: 'H', h: 0.683, w: 0.845, ic: 0.00965, krn: {'48': 0.111}}, |
|
{c: 'I', h: 0.683, w: 0.545, ic: 0.0738, krn: {'48': 0.0278}}, |
|
{c: 'J', h: 0.683, d: 0.0972, w: 0.678, ic: 0.185, krn: {'48': 0.167}}, |
|
{c: 'K', h: 0.683, w: 0.762, ic: 0.0144, krn: {'48': 0.0556}}, |
|
{c: 'L', h: 0.683, w: 0.69, krn: {'48': 0.139}}, |
|
{c: 'M', h: 0.683, w: 1.2, krn: {'48': 0.139}}, |
|
{c: 'N', h: 0.683, w: 0.82, ic: 0.147, krn: {'48': 0.0833}}, |
|
{c: 'O', h: 0.683, w: 0.796, ic: 0.0278, krn: {'48': 0.111}}, |
|
// 50 - 5F |
|
{c: 'P', h: 0.683, w: 0.696, ic: 0.0822, krn: {'48': 0.0833}}, |
|
{c: 'Q', h: 0.683, d: 0.0972, w: 0.817, krn: {'48': 0.111}}, |
|
{c: 'R', h: 0.683, w: 0.848, krn: {'48': 0.0833}}, |
|
{c: 'S', h: 0.683, w: 0.606, ic: 0.075, krn: {'48': 0.139}}, |
|
{c: 'T', h: 0.683, w: 0.545, ic: 0.254, krn: {'48': 0.0278}}, |
|
{c: 'U', h: 0.683, w: 0.626, ic: 0.0993, krn: {'48': 0.0833}}, |
|
{c: 'V', h: 0.683, w: 0.613, ic: 0.0822, krn: {'48': 0.0278}}, |
|
{c: 'W', h: 0.683, w: 0.988, ic: 0.0822, krn: {'48': 0.0833}}, |
|
{c: 'X', h: 0.683, w: 0.713, ic: 0.146, krn: {'48': 0.139}}, |
|
{c: 'Y', h: 0.683, d: 0.0972, w: 0.668, ic: 0.0822, krn: {'48': 0.0833}}, |
|
{c: 'Z', h: 0.683, w: 0.725, ic: 0.0794, krn: {'48': 0.139}}, |
|
{c: '[', h: 0.556, w: 0.667}, |
|
{c: '\\', h: 0.556, w: 0.667}, |
|
{c: ']', h: 0.556, w: 0.667}, |
|
{c: '^', h: 0.556, w: 0.667}, |
|
{c: '_', h: 0.556, w: 0.667}, |
|
// 60 - 6F |
|
{c: '`', h: 0.694, w: 0.611}, |
|
{c: 'a', h: 0.694, w: 0.611}, |
|
{c: 'b', h: 0.75, d: 0.25, w: 0.444}, |
|
{c: 'c', h: 0.75, d: 0.25, w: 0.444}, |
|
{c: 'd', h: 0.75, d: 0.25, w: 0.444}, |
|
{c: 'e', h: 0.75, d: 0.25, w: 0.444}, |
|
{c: 'f', h: 0.75, d: 0.25, w: 0.5}, |
|
{c: 'g', h: 0.75, d: 0.25, w: 0.5}, |
|
{c: 'h', h: 0.75, d: 0.25, w: 0.389}, |
|
{c: 'i', h: 0.75, d: 0.25, w: 0.389}, |
|
{c: 'j', h: 0.75, d: 0.25, w: 0.278}, |
|
{c: 'k', h: 0.75, d: 0.25, w: 0.5}, |
|
{c: 'l', h: 0.75, d: 0.25, w: 0.5}, |
|
{c: 'm', h: 0.75, d: 0.25, w: 0.611}, |
|
{c: 'n', h: 0.75, d: 0.25, w: 0.5}, |
|
{c: 'o', h: 0.694, d: 0.194, w: 0.278}, |
|
// 70 - 7F |
|
{c: 'p', h: 0.04, d: 0.96, w: 0.833}, |
|
{c: 'q', h: 0.683, w: 0.75}, |
|
{c: 'r', h: 0.683, w: 0.833}, |
|
{c: 's', h: 0.694, d: 0.194, w: 0.417, ic: 0.111}, |
|
{c: 't', h: 0.556, w: 0.667}, |
|
{c: 'u', h: 0.556, w: 0.667}, |
|
{c: 'v', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: 'w', h: 0.636, d: 0.136, w: 0.778}, |
|
{c: 'x', h: 0.694, d: 0.194, w: 0.444}, |
|
{c: 'y', h: 0.694, d: 0.194, w: 0.444}, |
|
{c: 'z', h: 0.694, d: 0.194, w: 0.444}, |
|
{c: '{', h: 0.694, d: 0.194, w: 0.611}, |
|
{c: '|', h: 0.694, d: 0.13, w: 0.778}, |
|
{c: '}', h: 0.694, d: 0.13, w: 0.778}, |
|
{c: '~', h: 0.694, d: 0.13, w: 0.778}, |
|
{c: 'Ä', h: 0.694, d: 0.13, w: 0.778} |
|
], |
|
|
|
cmex10: [ |
|
// 00 - 0F |
|
{c: '¡', h: 0.04, d: 1.16, w: 0.458, n: 16}, |
|
{c: '¢', h: 0.04, d: 1.16, w: 0.458, n: 17}, |
|
{c: '£', h: 0.04, d: 1.16, w: 0.417, n: 104}, |
|
{c: '¤', h: 0.04, d: 1.16, w: 0.417, n: 105}, |
|
{c: '¥', h: 0.04, d: 1.16, w: 0.472, n: 106}, |
|
{c: '¦', h: 0.04, d: 1.16, w: 0.472, n: 107}, |
|
{c: '§', h: 0.04, d: 1.16, w: 0.472, n: 108}, |
|
{c: '¨', h: 0.04, d: 1.16, w: 0.472, n: 109}, |
|
{c: '©', h: 0.04, d: 1.16, w: 0.583, n: 110}, |
|
{c: 'ª', h: 0.04, d: 1.16, w: 0.583, n: 111}, |
|
{c: '­', h: 0.04, d: 1.16, w: 0.472, n: 68}, |
|
{c: '®', h: 0.04, d: 1.16, w: 0.472, n: 69}, |
|
{c: '¯', d: 0.6, w: 0.333, delim: {rep: 12}}, |
|
{c: '°', d: 0.6, w: 0.556, delim: {rep: 13}}, |
|
{c: '±', h: 0.04, d: 1.16, w: 0.578, n: 46}, |
|
{c: '²', h: 0.04, d: 1.16, w: 0.578, n: 47}, |
|
// 10 - 1F |
|
{c: '³', h: 0.04, d: 1.76, w: 0.597, n: 18}, |
|
{c: '´', h: 0.04, d: 1.76, w: 0.597, n: 19}, |
|
{c: 'µ', h: 0.04, d: 2.36, w: 0.736, n: 32}, |
|
{c: '¶', h: 0.04, d: 2.36, w: 0.736, n: 33}, |
|
{c: '∙', h: 0.04, d: 2.36, w: 0.528, n: 34}, |
|
{c: '¸', h: 0.04, d: 2.36, w: 0.528, n: 35}, |
|
{c: '¹', h: 0.04, d: 2.36, w: 0.583, n: 36}, |
|
{c: 'º', h: 0.04, d: 2.36, w: 0.583, n: 37}, |
|
{c: '»', h: 0.04, d: 2.36, w: 0.583, n: 38}, |
|
{c: '¼', h: 0.04, d: 2.36, w: 0.583, n: 39}, |
|
{c: '½', h: 0.04, d: 2.36, w: 0.75, n: 40}, |
|
{c: '¾', h: 0.04, d: 2.36, w: 0.75, n: 41}, |
|
{c: '¿', h: 0.04, d: 2.36, w: 0.75, n: 42}, |
|
{c: 'À', h: 0.04, d: 2.36, w: 0.75, n: 43}, |
|
{c: 'Á', h: 0.04, d: 2.36, w: 1.04, n: 44}, |
|
{c: 'Â', h: 0.04, d: 2.36, w: 1.04, n: 45}, |
|
// 20 - 2F |
|
{c: 'Ã', h: 0.04, d: 2.96, w: 0.792, n: 48}, |
|
{c: '!', h: 0.04, d: 2.96, w: 0.792, n: 49}, |
|
{c: '"', h: 0.04, d: 2.96, w: 0.583, n: 50}, |
|
{c: '#', h: 0.04, d: 2.96, w: 0.583, n: 51}, |
|
{c: '$', h: 0.04, d: 2.96, w: 0.639, n: 52}, |
|
{c: '%', h: 0.04, d: 2.96, w: 0.639, n: 53}, |
|
{c: '&', h: 0.04, d: 2.96, w: 0.639, n: 54}, |
|
{c: '\'', h: 0.04, d: 2.96, w: 0.639, n: 55}, |
|
{c: '(', h: 0.04, d: 2.96, w: 0.806, n: 56}, |
|
{c: ')', h: 0.04, d: 2.96, w: 0.806, n: 57}, |
|
{c: '*', h: 0.04, d: 2.96, w: 0.806}, |
|
{c: '+', h: 0.04, d: 2.96, w: 0.806}, |
|
{c: ',', h: 0.04, d: 2.96, w: 1.28}, |
|
{c: '-', h: 0.04, d: 2.96, w: 1.28}, |
|
{c: '.', h: 0.04, d: 1.76, w: 0.811, n: 30}, |
|
{c: '/', h: 0.04, d: 1.76, w: 0.811, n: 31}, |
|
// 30 - 3F |
|
{c: '0', h: 0.04, d: 1.76, w: 0.875, delim: {top: 48, bot: 64, rep: 66}}, |
|
{c: '1', h: 0.04, d: 1.76, w: 0.875, delim: {top: 49, bot: 65, rep: 67}}, |
|
{c: '2', h: 0.04, d: 1.76, w: 0.667, delim: {top: 50, bot: 52, rep: 54}}, |
|
{c: '3', h: 0.04, d: 1.76, w: 0.667, delim: {top: 51, bot: 53, rep: 55}}, |
|
{c: '4', h: 0.04, d: 1.76, w: 0.667, delim: {bot: 52, rep: 54}}, |
|
{c: '5', h: 0.04, d: 1.76, w: 0.667, delim: {bot: 53, rep: 55}}, |
|
{c: '6', d: 0.6, w: 0.667, delim: {top: 50, rep: 54}}, |
|
{c: '7', d: 0.6, w: 0.667, delim: {top: 51, rep: 55}}, |
|
{c: '8', d: 0.9, w: 0.889, delim: {top: 56, mid: 60, bot: 58, rep: 62}}, |
|
{c: '9', d: 0.9, w: 0.889, delim: {top: 57, mid: 61, bot: 59, rep: 62}}, |
|
{c: ':', d: 0.9, w: 0.889, delim: {top: 56, bot: 58, rep: 62}}, |
|
{c: ';', d: 0.9, w: 0.889, delim: {top: 57, bot: 59, rep: 62}}, |
|
{c: '<', d: 1.8, w: 0.889, delim: {rep: 63}}, |
|
{c: '=', d: 1.8, w: 0.889, delim: {rep: 119}}, |
|
{c: '>', d: 0.3, w: 0.889, delim: {rep: 62}}, |
|
{c: '?', d: 0.6, w: 0.667, delim: {top: 120, bot: 121, rep: 63}}, |
|
// 40 - 4F |
|
{c: '@', h: 0.04, d: 1.76, w: 0.875, delim: {top: 56, bot: 59, rep: 62}}, |
|
{c: 'A', h: 0.04, d: 1.76, w: 0.875, delim: {top: 57, bot: 58, rep: 62}}, |
|
{c: 'B', d: 0.6, w: 0.875, delim: {rep: 66}}, |
|
{c: 'C', d: 0.6, w: 0.875, delim: {rep: 67}}, |
|
{c: 'D', h: 0.04, d: 1.76, w: 0.611, n: 28}, |
|
{c: 'E', h: 0.04, d: 1.76, w: 0.611, n: 29}, |
|
{c: 'F', d: 1, w: 0.833, n: 71}, |
|
{c: 'G', h: 0.1, d: 1.5, w: 1.11}, |
|
{c: 'H', d: 1.11, w: 0.472, ic: 0.194, n: 73}, |
|
{c: 'I', d: 2.22, w: 0.556, ic: 0.444}, |
|
{c: 'J', d: 1, w: 1.11, n: 75}, |
|
{c: 'K', h: 0.1, d: 1.5, w: 1.51}, |
|
{c: 'L', d: 1, w: 1.11, n: 77}, |
|
{c: 'M', h: 0.1, d: 1.5, w: 1.51}, |
|
{c: 'N', d: 1, w: 1.11, n: 79}, |
|
{c: 'O', h: 0.1, d: 1.5, w: 1.51}, |
|
// 50 - 5F |
|
{c: 'P', d: 1, w: 1.06, n: 88}, |
|
{c: 'Q', d: 1, w: 0.944, n: 89}, |
|
{c: 'R', d: 1.11, w: 0.472, ic: 0.194, n: 90}, |
|
{c: 'S', d: 1, w: 0.833, n: 91}, |
|
{c: 'T', d: 1, w: 0.833, n: 92}, |
|
{c: 'U', d: 1, w: 0.833, n: 93}, |
|
{c: 'V', d: 1, w: 0.833, n: 94}, |
|
{c: 'W', d: 1, w: 0.833, n: 95}, |
|
{c: 'X', h: 0.1, d: 1.5, w: 1.44}, |
|
{c: 'Y', h: 0.1, d: 1.5, w: 1.28}, |
|
{c: 'Z', d: 2.22, w: 0.556, ic: 0.444}, |
|
{c: '[', h: 0.1, d: 1.5, w: 1.11}, |
|
{c: '\\', h: 0.1, d: 1.5, w: 1.11}, |
|
{c: ']', h: 0.1, d: 1.5, w: 1.11}, |
|
{c: '^', h: 0.1, d: 1.5, w: 1.11}, |
|
{c: '_', h: 0.1, d: 1.5, w: 1.11}, |
|
// 60 - 6F |
|
{c: '`', d: 1, w: 0.944, n: 97}, |
|
{c: 'a', h: 0.1, d: 1.5, w: 1.28}, |
|
{c: 'b', h: 0.722, w: 0.556, n: 99}, |
|
{c: 'c', h: 0.75, w: 1, n: 100}, |
|
{c: 'd', h: 0.75, w: 1.44}, |
|
{c: 'e', h: 0.722, w: 0.556, n: 102}, |
|
{c: 'f', h: 0.75, w: 1, n: 103}, |
|
{c: 'g', h: 0.75, w: 1.44}, |
|
{c: 'h', h: 0.04, d: 1.76, w: 0.472, n: 20}, |
|
{c: 'i', h: 0.04, d: 1.76, w: 0.472, n: 21}, |
|
{c: 'j', h: 0.04, d: 1.76, w: 0.528, n: 22}, |
|
{c: 'k', h: 0.04, d: 1.76, w: 0.528, n: 23}, |
|
{c: 'l', h: 0.04, d: 1.76, w: 0.528, n: 24}, |
|
{c: 'm', h: 0.04, d: 1.76, w: 0.528, n: 25}, |
|
{c: 'n', h: 0.04, d: 1.76, w: 0.667, n: 26}, |
|
{c: 'o', h: 0.04, d: 1.76, w: 0.667, n: 27}, |
|
// 70 - 7F |
|
{c: 'p', h: 0.04, d: 1.16, w: 1, n: 113}, |
|
{c: 'q', h: 0.04, d: 1.76, w: 1, n: 114}, |
|
{c: 'r', h: 0.04, d: 2.36, w: 1, n: 115}, |
|
{c: 's', h: 0.04, d: 2.96, w: 1, n: 116}, |
|
{c: 't', d: 1.8, w: 1.06, delim: {top: 118, bot: 116, rep: 117}}, |
|
{c: 'u', d: 0.6, w: 1.06}, |
|
{c: 'v', h: 0.04, d: 0.56, w: 1.06}, |
|
{c: 'w', d: 0.6, w: 0.778, delim: {top: 126, bot: 127, rep: 119}}, |
|
{c: 'x', d: 0.6, w: 0.667, delim: {top: 120, rep: 63}}, |
|
{c: 'y', d: 0.6, w: 0.667, delim: {bot: 121, rep: 63}}, |
|
{c: 'z', h: 0.12, w: 0.45}, |
|
{c: '{', h: 0.12, w: 0.45}, |
|
{c: '|', h: 0.12, w: 0.45}, |
|
{c: '}', h: 0.12, w: 0.45}, |
|
{c: '~', d: 0.6, w: 0.778, delim: {top: 126, rep: 119}}, |
|
{c: 'Ä', d: 0.6, w: 0.778, delim: {bot: 127, rep: 119}} |
|
], |
|
|
|
cmti10: [ |
|
// 00 - 0F |
|
{c: '¡', h: 0.683, w: 0.627, ic: 0.133}, |
|
{c: '¢', h: 0.683, w: 0.818}, |
|
{c: '£', h: 0.683, w: 0.767, ic: 0.094}, |
|
{c: '¤', h: 0.683, w: 0.692}, |
|
{c: '¥', h: 0.683, w: 0.664, ic: 0.153}, |
|
{c: '¦', h: 0.683, w: 0.743, ic: 0.164}, |
|
{c: '§', h: 0.683, w: 0.716, ic: 0.12}, |
|
{c: '¨', h: 0.683, w: 0.767, ic: 0.111}, |
|
{c: '©', h: 0.683, w: 0.716, ic: 0.0599}, |
|
{c: 'ª', h: 0.683, w: 0.767, ic: 0.111}, |
|
{c: '­', h: 0.683, w: 0.716, ic: 0.103}, |
|
{c: '®', h: 0.694, d: 0.194, w: 0.613, ic: 0.212, krn: {'39': 0.104, '63': 0.104, '33': 0.104, '41': 0.104, '93': 0.104}, lig: {'105': 14, '108': 15}}, |
|
{c: '¯', h: 0.694, d: 0.194, w: 0.562, ic: 0.103}, |
|
{c: '°', h: 0.694, d: 0.194, w: 0.588, ic: 0.103}, |
|
{c: '±', h: 0.694, d: 0.194, w: 0.882, ic: 0.103}, |
|
{c: '²', h: 0.694, d: 0.194, w: 0.894, ic: 0.103}, |
|
// 10 - 1F |
|
{c: '³', h: 0.431, w: 0.307, ic: 0.0767}, |
|
{c: '´', h: 0.431, d: 0.194, w: 0.332, ic: 0.0374}, |
|
{c: 'µ', h: 0.694, w: 0.511}, |
|
{c: '¶', h: 0.694, w: 0.511, ic: 0.0969}, |
|
{c: '∙', h: 0.628, w: 0.511, ic: 0.083}, |
|
{c: '¸', h: 0.694, w: 0.511, ic: 0.108}, |
|
{c: '¹', h: 0.562, w: 0.511, ic: 0.103}, |
|
{c: 'º', h: 0.694, w: 0.831}, |
|
{c: '»', d: 0.17, w: 0.46}, |
|
{c: '¼', h: 0.694, d: 0.194, w: 0.537, ic: 0.105}, |
|
{c: '½', h: 0.431, w: 0.716, ic: 0.0751}, |
|
{c: '¾', h: 0.431, w: 0.716, ic: 0.0751}, |
|
{c: '¿', h: 0.528, d: 0.0972, w: 0.511, ic: 0.0919}, |
|
{c: 'À', h: 0.683, w: 0.883, ic: 0.12}, |
|
{c: 'Á', h: 0.683, w: 0.985, ic: 0.12}, |
|
{c: 'Â', h: 0.732, d: 0.0486, w: 0.767, ic: 0.094}, |
|
// 20 - 2F |
|
{c: 'Ã', h: 0.431, w: 0.256, krn: {'108': -0.256, '76': -0.321}}, |
|
{c: '!', h: 0.694, w: 0.307, ic: 0.124, lig: {'96': 60}}, |
|
{c: '"', h: 0.694, w: 0.514, ic: 0.0696}, |
|
{c: '#', h: 0.694, d: 0.194, w: 0.818, ic: 0.0662}, |
|
{c: '$', h: 0.694, w: 0.769}, |
|
{c: '%', h: 0.75, d: 0.0556, w: 0.818, ic: 0.136}, |
|
{c: '&', h: 0.694, w: 0.767, ic: 0.0969}, |
|
{c: '\'', h: 0.694, w: 0.307, ic: 0.124, krn: {'63': 0.102, '33': 0.102}, lig: {'39': 34}}, |
|
{c: '(', h: 0.75, d: 0.25, w: 0.409, ic: 0.162}, |
|
{c: ')', h: 0.75, d: 0.25, w: 0.409, ic: 0.0369}, |
|
{c: '*', h: 0.75, w: 0.511, ic: 0.149}, |
|
{c: '+', h: 0.562, d: 0.0567, w: 0.767, ic: 0.0369}, |
|
{c: ',', h: 0.106, d: 0.194, w: 0.307}, |
|
{c: '-', h: 0.431, w: 0.358, ic: 0.0283, lig: {'45': 123}}, |
|
{c: '.', h: 0.106, w: 0.307}, |
|
{c: '/', h: 0.75, d: 0.25, w: 0.511, ic: 0.162}, |
|
// 30 - 3F |
|
{c: '0', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '1', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '2', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '3', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '4', h: 0.644, d: 0.194, w: 0.511, ic: 0.136}, |
|
{c: '5', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '6', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '7', h: 0.644, d: 0.194, w: 0.511, ic: 0.136}, |
|
{c: '8', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: '9', h: 0.644, w: 0.511, ic: 0.136}, |
|
{c: ':', h: 0.431, w: 0.307, ic: 0.0582}, |
|
{c: ';', h: 0.431, d: 0.194, w: 0.307, ic: 0.0582}, |
|
{c: '<', h: 0.5, d: 0.194, w: 0.307, ic: 0.0756}, |
|
{c: '=', h: 0.367, d: -0.133, w: 0.767, ic: 0.0662}, |
|
{c: '>', h: 0.5, d: 0.194, w: 0.511}, |
|
{c: '?', h: 0.694, w: 0.511, ic: 0.122, lig: {'96': 62}}, |
|
// 40 - 4F |
|
{c: '@', h: 0.694, w: 0.767, ic: 0.096}, |
|
{c: 'A', h: 0.683, w: 0.743, krn: {'110': -0.0256, '108': -0.0256, '114': -0.0256, '117': -0.0256, '109': -0.0256, '116': -0.0256, '105': -0.0256, '67': -0.0256, '79': -0.0256, '71': -0.0256, '104': -0.0256, '98': -0.0256, '85': -0.0256, '107': -0.0256, '118': -0.0256, '119': -0.0256, '81': -0.0256, '84': -0.0767, '89': -0.0767, '86': -0.102, '87': -0.102, '101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'B', h: 0.683, w: 0.704, ic: 0.103}, |
|
{c: 'C', h: 0.683, w: 0.716, ic: 0.145}, |
|
{c: 'D', h: 0.683, w: 0.755, ic: 0.094, krn: {'88': -0.0256, '87': -0.0256, '65': -0.0256, '86': -0.0256, '89': -0.0256}}, |
|
{c: 'E', h: 0.683, w: 0.678, ic: 0.12}, |
|
{c: 'F', h: 0.683, w: 0.653, ic: 0.133, krn: {'111': -0.0767, '101': -0.0767, '117': -0.0767, '114': -0.0767, '97': -0.0767, '65': -0.102, '79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}}, |
|
{c: 'G', h: 0.683, w: 0.774, ic: 0.0872}, |
|
{c: 'H', h: 0.683, w: 0.743, ic: 0.164}, |
|
{c: 'I', h: 0.683, w: 0.386, ic: 0.158}, |
|
{c: 'J', h: 0.683, w: 0.525, ic: 0.14}, |
|
{c: 'K', h: 0.683, w: 0.769, ic: 0.145, krn: {'79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}}, |
|
{c: 'L', h: 0.683, w: 0.627, krn: {'84': -0.0767, '89': -0.0767, '86': -0.102, '87': -0.102, '101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'M', h: 0.683, w: 0.897, ic: 0.164}, |
|
{c: 'N', h: 0.683, w: 0.743, ic: 0.164}, |
|
{c: 'O', h: 0.683, w: 0.767, ic: 0.094, krn: {'88': -0.0256, '87': -0.0256, '65': -0.0256, '86': -0.0256, '89': -0.0256}}, |
|
// 50 - 5F |
|
{c: 'P', h: 0.683, w: 0.678, ic: 0.103, krn: {'65': -0.0767}}, |
|
{c: 'Q', h: 0.683, d: 0.194, w: 0.767, ic: 0.094}, |
|
{c: 'R', h: 0.683, w: 0.729, ic: 0.0387, krn: {'110': -0.0256, '108': -0.0256, '114': -0.0256, '117': -0.0256, '109': -0.0256, '116': -0.0256, '105': -0.0256, '67': -0.0256, '79': -0.0256, '71': -0.0256, '104': -0.0256, '98': -0.0256, '85': -0.0256, '107': -0.0256, '118': -0.0256, '119': -0.0256, '81': -0.0256, '84': -0.0767, '89': -0.0767, '86': -0.102, '87': -0.102, '101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'S', h: 0.683, w: 0.562, ic: 0.12}, |
|
{c: 'T', h: 0.683, w: 0.716, ic: 0.133, krn: {'121': -0.0767, '101': -0.0767, '111': -0.0767, '114': -0.0767, '97': -0.0767, '117': -0.0767, '65': -0.0767}}, |
|
{c: 'U', h: 0.683, w: 0.743, ic: 0.164}, |
|
{c: 'V', h: 0.683, w: 0.743, ic: 0.184, krn: {'111': -0.0767, '101': -0.0767, '117': -0.0767, '114': -0.0767, '97': -0.0767, '65': -0.102, '79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}}, |
|
{c: 'W', h: 0.683, w: 0.999, ic: 0.184, krn: {'65': -0.0767}}, |
|
{c: 'X', h: 0.683, w: 0.743, ic: 0.158, krn: {'79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}}, |
|
{c: 'Y', h: 0.683, w: 0.743, ic: 0.194, krn: {'101': -0.0767, '111': -0.0767, '114': -0.0767, '97': -0.0767, '117': -0.0767, '65': -0.0767}}, |
|
{c: 'Z', h: 0.683, w: 0.613, ic: 0.145}, |
|
{c: '[', h: 0.75, d: 0.25, w: 0.307, ic: 0.188}, |
|
{c: '\\', h: 0.694, w: 0.514, ic: 0.169}, |
|
{c: ']', h: 0.75, d: 0.25, w: 0.307, ic: 0.105}, |
|
{c: '^', h: 0.694, w: 0.511, ic: 0.0665}, |
|
{c: '_', h: 0.668, w: 0.307, ic: 0.118}, |
|
// 60 - 6F |
|
{c: '`', h: 0.694, w: 0.307, ic: 0.124, lig: {'96': 92}}, |
|
{c: 'a', h: 0.431, w: 0.511, ic: 0.0767}, |
|
{c: 'b', h: 0.694, w: 0.46, ic: 0.0631, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'c', h: 0.431, w: 0.46, ic: 0.0565, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'd', h: 0.694, w: 0.511, ic: 0.103, krn: {'108': 0.0511}}, |
|
{c: 'e', h: 0.431, w: 0.46, ic: 0.0751, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'f', h: 0.694, d: 0.194, w: 0.307, ic: 0.212, krn: {'39': 0.104, '63': 0.104, '33': 0.104, '41': 0.104, '93': 0.104}, lig: {'105': 12, '102': 11, '108': 13}}, |
|
{c: 'g', h: 0.431, d: 0.194, w: 0.46, ic: 0.0885}, |
|
{c: 'h', h: 0.694, w: 0.511, ic: 0.0767}, |
|
{c: 'i', h: 0.655, w: 0.307, ic: 0.102}, |
|
{c: 'j', h: 0.655, d: 0.194, w: 0.307, ic: 0.145}, |
|
{c: 'k', h: 0.694, w: 0.46, ic: 0.108}, |
|
{c: 'l', h: 0.694, w: 0.256, ic: 0.103, krn: {'108': 0.0511}}, |
|
{c: 'm', h: 0.431, w: 0.818, ic: 0.0767}, |
|
{c: 'n', h: 0.431, w: 0.562, ic: 0.0767, krn: {'39': -0.102}}, |
|
{c: 'o', h: 0.431, w: 0.511, ic: 0.0631, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
// 70 - 7F |
|
{c: 'p', h: 0.431, d: 0.194, w: 0.511, ic: 0.0631, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 'q', h: 0.431, d: 0.194, w: 0.46, ic: 0.0885}, |
|
{c: 'r', h: 0.431, w: 0.422, ic: 0.108, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}}, |
|
{c: 's', h: 0.431, w: 0.409, ic: 0.0821}, |
|
{c: 't', h: 0.615, w: 0.332, ic: 0.0949}, |
|
{c: 'u', h: 0.431, w: 0.537, ic: 0.0767}, |
|
{c: 'v', h: 0.431, w: 0.46, ic: 0.108}, |
|
{c: 'w', h: 0.431, w: 0.664, ic: 0.108, krn: {'108': 0.0511}}, |
|
{c: 'x', h: 0.431, w: 0.464, ic: 0.12}, |
|
{c: 'y', h: 0.431, d: 0.194, w: 0.486, ic: 0.0885}, |
|
{c: 'z', h: 0.431, w: 0.409, ic: 0.123}, |
|
{c: '{', h: 0.431, w: 0.511, ic: 0.0921, lig: {'45': 124}}, |
|
{c: '|', h: 0.431, w: 1.02, ic: 0.0921}, |
|
{c: '}', h: 0.694, w: 0.511, ic: 0.122}, |
|
{c: '~', h: 0.668, w: 0.511, ic: 0.116}, |
|
{c: 'Ä', h: 0.668, w: 0.511, ic: 0.105} |
|
], |
|
|
|
cmbx10: [ |
|
// 00 - 0F |
|
{c: '¡', h: 0.686, w: 0.692}, |
|
{c: '¢', h: 0.686, w: 0.958}, |
|
{c: '£', h: 0.686, w: 0.894}, |
|
{c: '¤', h: 0.686, w: 0.806}, |
|
{c: '¥', h: 0.686, w: 0.767}, |
|
{c: '¦', h: 0.686, w: 0.9}, |
|
{c: '§', h: 0.686, w: 0.831}, |
|
{c: '¨', h: 0.686, w: 0.894}, |
|
{c: '©', h: 0.686, w: 0.831}, |
|
{c: 'ª', h: 0.686, w: 0.894}, |
|
{c: '­', h: 0.686, w: 0.831}, |
|
{c: '®', h: 0.694, w: 0.671, ic: 0.109, krn: {'39': 0.109, '63': 0.109, '33': 0.109, '41': 0.109, '93': 0.109}, lig: {'105': 14, '108': 15}}, |
|
{c: '¯', h: 0.694, w: 0.639}, |
|
{c: '°', h: 0.694, w: 0.639}, |
|
{c: '±', h: 0.694, w: 0.958}, |
|
{c: '²', h: 0.694, w: 0.958}, |
|
// 10 - 1F |
|
{c: '³', h: 0.444, w: 0.319}, |
|
{c: '´', h: 0.444, d: 0.194, w: 0.351}, |
|
{c: 'µ', h: 0.694, w: 0.575}, |
|
{c: '¶', h: 0.694, w: 0.575}, |
|
{c: '∙', h: 0.632, w: 0.575}, |
|
{c: '¸', h: 0.694, w: 0.575}, |
|
{c: '¹', h: 0.596, w: 0.575}, |
|
{c: 'º', h: 0.694, w: 0.869}, |
|
{c: '»', d: 0.17, w: 0.511}, |
|
{c: '¼', h: 0.694, w: 0.597}, |
|
{c: '½', h: 0.444, w: 0.831}, |
|
{c: '¾', h: 0.444, w: 0.894}, |
|
{c: '¿', h: 0.542, d: 0.0972, w: 0.575}, |
|
{c: 'À', h: 0.686, w: 1.04}, |
|
{c: 'Á', h: 0.686, w: 1.17}, |
|
{c: 'Â', h: 0.735, d: 0.0486, w: 0.894}, |
|
// 20 - 2F |
|
{c: 'Ã', h: 0.444, w: 0.319, krn: {'108': -0.319, '76': -0.378}}, |
|
{c: '!', h: 0.694, w: 0.35, lig: {'96': 60}}, |
|
{c: '"', h: 0.694, w: 0.603}, |
|
{c: '#', h: 0.694, d: 0.194, w: 0.958}, |
|
{c: '$', h: 0.75, d: 0.0556, w: 0.575}, |
|
{c: '%', h: 0.75, d: 0.0556, w: 0.958}, |
|
{c: '&', h: 0.694, w: 0.894}, |
|
{c: '\'', h: 0.694, w: 0.319, krn: {'63': 0.128, '33': 0.128}, lig: {'39': 34}}, |
|
{c: '(', h: 0.75, d: 0.25, w: 0.447}, |
|
{c: ')', h: 0.75, d: 0.25, w: 0.447}, |
|
{c: '*', h: 0.75, w: 0.575}, |
|
{c: '+', h: 0.633, d: 0.133, w: 0.894}, |
|
{c: ',', h: 0.156, d: 0.194, w: 0.319}, |
|
{c: '-', h: 0.444, w: 0.383, lig: {'45': 123}}, |
|
{c: '.', h: 0.156, w: 0.319}, |
|
{c: '/', h: 0.75, d: 0.25, w: 0.575}, |
|
// 30 - 3F |
|
{c: '0', h: 0.644, w: 0.575}, |
|
{c: '1', h: 0.644, w: 0.575}, |
|
{c: '2', h: 0.644, w: 0.575}, |
|
{c: '3', h: 0.644, w: 0.575}, |
|
{c: '4', h: 0.644, w: 0.575}, |
|
{c: '5', h: 0.644, w: 0.575}, |
|
{c: '6', h: 0.644, w: 0.575}, |
|
{c: '7', h: 0.644, w: 0.575}, |
|
{c: '8', h: 0.644, w: 0.575}, |
|
{c: '9', h: 0.644, w: 0.575}, |
|
{c: ':', h: 0.444, w: 0.319}, |
|
{c: ';', h: 0.444, d: 0.194, w: 0.319}, |
|
{c: '<', h: 0.5, d: 0.194, w: 0.35}, |
|
{c: '=', h: 0.391, d: -0.109, w: 0.894}, |
|
{c: '>', h: 0.5, d: 0.194, w: 0.543}, |
|
{c: '?', h: 0.694, w: 0.543, lig: {'96': 62}}, |
|
// 40 - 4F |
|
{c: '@', h: 0.694, w: 0.894}, |
|
{c: 'A', h: 0.686, w: 0.869, krn: {'116': -0.0319, '67': -0.0319, '79': -0.0319, '71': -0.0319, '85': -0.0319, '81': -0.0319, '84': -0.0958, '89': -0.0958, '86': -0.128, '87': -0.128}}, |
|
{c: 'B', h: 0.686, w: 0.818}, |
|
{c: 'C', h: 0.686, w: 0.831}, |
|
{c: 'D', h: 0.686, w: 0.882, krn: {'88': -0.0319, '87': -0.0319, '65': -0.0319, '86': -0.0319, '89': -0.0319}}, |
|
{c: 'E', h: 0.686, w: 0.756}, |
|
{c: 'F', h: 0.686, w: 0.724, krn: {'111': -0.0958, '101': -0.0958, '117': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.128, '79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}}, |
|
{c: 'G', h: 0.686, w: 0.904}, |
|
{c: 'H', h: 0.686, w: 0.9}, |
|
{c: 'I', h: 0.686, w: 0.436, krn: {'73': 0.0319}}, |
|
{c: 'J', h: 0.686, w: 0.594}, |
|
{c: 'K', h: 0.686, w: 0.901, krn: {'79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}}, |
|
{c: 'L', h: 0.686, w: 0.692, krn: {'84': -0.0958, '89': -0.0958, '86': -0.128, '87': -0.128}}, |
|
{c: 'M', h: 0.686, w: 1.09}, |
|
{c: 'N', h: 0.686, w: 0.9}, |
|
{c: 'O', h: 0.686, w: 0.864, krn: {'88': -0.0319, '87': -0.0319, '65': -0.0319, '86': -0.0319, '89': -0.0319}}, |
|
// 50 - 5F |
|
{c: 'P', h: 0.686, w: 0.786, krn: {'65': -0.0958, '111': -0.0319, '101': -0.0319, '97': -0.0319, '46': -0.0958, '44': -0.0958}}, |
|
{c: 'Q', h: 0.686, d: 0.194, w: 0.864}, |
|
{c: 'R', h: 0.686, w: 0.862, krn: {'116': -0.0319, '67': -0.0319, '79': -0.0319, '71': -0.0319, '85': -0.0319, '81': -0.0319, '84': -0.0958, '89': -0.0958, '86': -0.128, '87': -0.128}}, |
|
{c: 'S', h: 0.686, w: 0.639}, |
|
{c: 'T', h: 0.686, w: 0.8, krn: {'121': -0.0319, '101': -0.0958, '111': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.0958, '117': -0.0958}}, |
|
{c: 'U', h: 0.686, w: 0.885}, |
|
{c: 'V', h: 0.686, w: 0.869, ic: 0.016, krn: {'111': -0.0958, '101': -0.0958, '117': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.128, '79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}}, |
|
{c: 'W', h: 0.686, w: 1.19, ic: 0.016, krn: {'111': -0.0958, '101': -0.0958, '117': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.128, '79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}}, |
|
{c: 'X', h: 0.686, w: 0.869, krn: {'79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}}, |
|
{c: 'Y', h: 0.686, w: 0.869, ic: 0.0287, krn: {'101': -0.0958, '111': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.0958, '117': -0.0958}}, |
|
{c: 'Z', h: 0.686, w: 0.703}, |
|
{c: '[', h: 0.75, d: 0.25, w: 0.319}, |
|
{c: '\\', h: 0.694, w: 0.603}, |
|
{c: ']', h: 0.75, d: 0.25, w: 0.319}, |
|
{c: '^', h: 0.694, w: 0.575}, |
|
{c: '_', h: 0.694, w: 0.319}, |
|
// 60 - 6F |
|
{c: '`', h: 0.694, w: 0.319, lig: {'96': 92}}, |
|
{c: 'a', h: 0.444, w: 0.559, krn: {'118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}}, |
|
{c: 'b', h: 0.694, w: 0.639, krn: {'101': 0.0319, '111': 0.0319, '120': -0.0319, '100': 0.0319, '99': 0.0319, '113': 0.0319, '118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}}, |
|
{c: 'c', h: 0.444, w: 0.511, krn: {'104': -0.0319, '107': -0.0319}}, |
|
{c: 'd', h: 0.694, w: 0.639}, |
|
{c: 'e', h: 0.444, w: 0.527}, |
|
{c: 'f', h: 0.694, w: 0.351, ic: 0.109, krn: {'39': 0.109, '63': 0.109, '33': 0.109, '41': 0.109, '93': 0.109}, lig: {'105': 12, '102': 11, '108': 13}}, |
|
{c: 'g', h: 0.444, d: 0.194, w: 0.575, ic: 0.016, krn: {'106': 0.0319}}, |
|
{c: 'h', h: 0.694, w: 0.639, krn: {'116': -0.0319, '117': -0.0319, '98': -0.0319, '121': -0.0319, '118': -0.0319, '119': -0.0319}}, |
|
{c: 'i', h: 0.694, w: 0.319}, |
|
{c: 'j', h: 0.694, d: 0.194, w: 0.351}, |
|
{c: 'k', h: 0.694, w: 0.607, krn: {'97': -0.0639, '101': -0.0319, '97': -0.0319, '111': -0.0319, '99': -0.0319}}, |
|
{c: 'l', h: 0.694, w: 0.319}, |
|
{c: 'm', h: 0.444, w: 0.958, krn: {'116': -0.0319, '117': -0.0319, '98': -0.0319, '121': -0.0319, '118': -0.0319, '119': -0.0319}}, |
|
{c: 'n', h: 0.444, w: 0.639, krn: {'116': -0.0319, '117': -0.0319, '98': -0.0319, '121': -0.0319, '118': -0.0319, '119': -0.0319}}, |
|
{c: 'o', h: 0.444, w: 0.575, krn: {'101': 0.0319, '111': 0.0319, '120': -0.0319, '100': 0.0319, '99': 0.0319, '113': 0.0319, '118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}}, |
|
// 70 - 7F |
|
{c: 'p', h: 0.444, d: 0.194, w: 0.639, krn: {'101': 0.0319, '111': 0.0319, '120': -0.0319, '100': 0.0319, '99': 0.0319, '113': 0.0319, '118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}}, |
|
{c: 'q', h: 0.444, d: 0.194, w: 0.607}, |
|
{c: 'r', h: 0.444, w: 0.474}, |
|
{c: 's', h: 0.444, w: 0.454}, |
|
{c: 't', h: 0.635, w: 0.447, krn: {'121': -0.0319, '119': -0.0319}}, |
|
{c: 'u', h: 0.444, w: 0.639, krn: {'119': -0.0319}}, |
|
{c: 'v', h: 0.444, w: 0.607, ic: 0.016, krn: {'97': -0.0639, '101': -0.0319, '97': -0.0319, '111': -0.0319, '99': -0.0319}}, |
|
{c: 'w', h: 0.444, w: 0.831, ic: 0.016, krn: {'101': -0.0319, '97': -0.0319, '111': -0.0319, '99': -0.0319}}, |
|
{c: 'x', h: 0.444, w: 0.607}, |
|
{c: 'y', h: 0.444, d: 0.194, w: 0.607, ic: 0.016, krn: {'111': -0.0319, '101': -0.0319, '97': -0.0319, '46': -0.0958, '44': -0.0958}}, |
|
{c: 'z', h: 0.444, w: 0.511}, |
|
{c: '{', h: 0.444, w: 0.575, ic: 0.0319, lig: {'45': 124}}, |
|
{c: '|', h: 0.444, w: 1.15, ic: 0.0319}, |
|
{c: '}', h: 0.694, w: 0.575}, |
|
{c: '~', h: 0.694, w: 0.575}, |
|
{c: 'Ä', h: 0.694, w: 0.575} |
|
] |
|
}); |
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* jsMath.HTML handles creation of most of the HTML needed for |
|
* presenting mathematics in HTML pages. |
|
*/ |
|
|
|
jsMath.HTML = { |
|
|
|
/* |
|
* produce a string version of a measurement in ems, |
|
* showing only a limited number of digits, and |
|
* using 0 when the value is near zero. |
|
*/ |
|
Em: function (m) { |
|
var n = 5; if (m < 0) {n++} |
|
if (Math.abs(m) < .000001) {m = 0} |
|
var s = String(m); s = s.replace(/(\.\d\d\d).+/,'$1'); |
|
return s+'em' |
|
}, |
|
|
|
/* |
|
* Create a horizontal space of width w |
|
*/ |
|
Spacer: function (w) { |
|
if (w == 0) {return ''}; |
|
return jsMath.msieSpaceFix |
|
+ '<SPAN STYLE="margin-left: '+this.Em(w)+'"></SPAN>'; |
|
}, |
|
|
|
/* |
|
* Use an image to create a horizontal space of width w |
|
*/ |
|
SpacerImage: function (w) { |
|
if (w == 0) {return ''}; |
|
return '<IMG SRC="'+jsMath.blank+'" STYLE="' |
|
+ ' width: 0; margin-left: '+this.Em(w)+'">'; |
|
}, |
|
|
|
/* |
|
* Create a colored frame (for debugging use) |
|
*/ |
|
Frame: function (x,y,w,h,c,pos) { |
|
|
|
h -= 2/jsMath.em; // use 2 pixels to compensate for border size |
|
w -= 2/jsMath.em; |
|
y -= 1/jsMath.em; |
|
if (!c) {c = 'black'}; |
|
if (pos) {pos = 'absolute;'} else |
|
{pos = 'relative; margin-right: '+this.Em(-(w+2/jsMath.em))+'; '} |
|
return '<IMG SRC="'+jsMath.blank+'" STYLE="position:' + pos |
|
+ 'vertical-align: '+this.Em(y)+'; left: '+this.Em(x)+'; ' |
|
+ 'width:'+this.Em(w)+'; height: '+this.Em(h)+'; ' |
|
+ 'border-color: '+c+'; border-style: solid; border-width: 1px;">'; |
|
}, |
|
|
|
/* |
|
* Create a 1-pixel-high horizontal line at a particular |
|
* position, width and color. |
|
*/ |
|
Line: function (x,y,w,c,pos) { |
|
if (!c) {c = 'black'}; |
|
if (pos) {pos = 'absolute;'} else |
|
{pos = 'relative; margin-right: '+this.Em(-w)+'; '} |
|
return '<IMG SRC="'+jsMath.blank+'" STYLE="position:'+pos |
|
+ 'top: '+this.Em(-y)+'; left:'+this.Em(x)+'; ' |
|
+ 'width:'+this.Em(w)+'; height:1px; background-color: '+c+';">'; |
|
}, |
|
|
|
/* |
|
* Create a black rule line for fractions, etc. |
|
* Height is converted to pixels (with a minimum of 1), so that |
|
* the line will not disappear at small font sizes. This means that |
|
* the thickness will not change if you change the font size, or |
|
* may not be correct within a header or other enlarged text. |
|
*/ |
|
Rule: function (w,h) { |
|
if (h == null) {h = jsMath.TeX.default_rule_thickness} |
|
if (w == 0 || h == 0) return; // should make an invisible box? |
|
h = Math.round(h*jsMath.em); |
|
if (h < 1) {h = 1} |
|
return '<IMG SRC="'+jsMath.black+'" HSPACE="0" VSPACE="0" ' |
|
+ 'STYLE="width:'+this.Em(w)+'; height: '+h+'px">'; |
|
}, |
|
|
|
/* |
|
* Create a colored block of a specific size (won't always print |
|
* correctly). |
|
*/ |
|
Block: function (w,h,c) { |
|
if (c == null) {c = 'black'} |
|
return '<IMG SRC="'+jsMath.blank+'" HSPACE="0" VSPACE="0" ' |
|
+ 'STYLE="width:'+this.Em(w)+'; height: '+this.Em(h)+'; ' |
|
+ 'background-color: '+c+'">'; |
|
}, |
|
|
|
/* |
|
* Add a <SPAN> tag to activate a specific CSS class |
|
*/ |
|
Class: function (tclass,html) { |
|
return '<SPAN CLASS="'+tclass+'">'+html+'</SPAN>'; |
|
}, |
|
|
|
/* |
|
* Use a <SPAN> to place some HTML at a specific position. |
|
* (This can be replaced by the ones below to overcome |
|
* some browser-specific bugs.) |
|
*/ |
|
Place: function (html,x,y) { |
|
if (Math.abs(x) < .0001) {x = 0} |
|
if (Math.abs(y) < .0001) {y = 0} |
|
if (x || y) { |
|
var span = '<SPAN STYLE="position: relative;'; |
|
if (x) {span += ' margin-left:'+this.Em(x)+';'} |
|
if (y) {span += ' top:'+this.Em(-y)+';'} |
|
html = span + '">' + html + '</SPAN>'; |
|
} |
|
return html; |
|
}, |
|
|
|
/* |
|
* For MSIE on Windows, backspacing must be done in a separate |
|
* <SPAN>, otherwise the contents will be clipped. |
|
*/ |
|
PlaceSeparateNegative: function (html,x,y) { |
|
if (Math.abs(x) < .0001) {x = 0} |
|
if (Math.abs(y) < .0001) {y = 0} |
|
if (x > 0 || y) { |
|
var span = '<SPAN STYLE="position: relative;'; |
|
if (x > 0) {span += ' margin-left:'+this.Em(x)+';'} |
|
if (y) {span += ' top:'+this.Em(-y)+';'} |
|
html = span + '">' + html + '</SPAN>'; |
|
} |
|
if (x < 0) { |
|
html = jsMath.msieSpaceFix |
|
+ '<SPAN STYLE="margin-left:'+this.Em(x)+';"></SPAN>' + html; |
|
} |
|
return html; |
|
}, |
|
|
|
/* |
|
* Here the x and y positioning is done in separate <SPAN> tags |
|
*/ |
|
PlaceSeparateSkips: function (html,x,y) { |
|
if (Math.abs(x) < .0001) {x = 0} |
|
if (Math.abs(y) < .0001) {y = 0} |
|
if (y) {html = '<SPAN STYLE="position: relative; top:'+this.Em(-y)+';' |
|
+ '">' + html + '</SPAN>'} |
|
if (x) {html = jsMath.msieSpaceFix |
|
+ '<SPAN STYLE="margin-left:'+this.Em(x)+';"></SPAN>' + html} |
|
return html; |
|
}, |
|
|
|
/* |
|
* Place a SPAN with absolute coordinates |
|
*/ |
|
PlaceAbsolute: function (html,x,y) { |
|
if (Math.abs(x) < .0001) {x = 0} |
|
if (Math.abs(y) < .0001) {y = 0} |
|
html = '<SPAN STYLE="position: absolute; left:'+this.Em(x)+'; ' |
|
+ 'top:'+this.Em(y)+';">' + html + ' </SPAN>'; |
|
// space normalizes line height |
|
return html; |
|
}, |
|
|
|
Absolute: function(html,w,h,d,y,H) { |
|
var align = ""; |
|
if (d) {align = ' vertical-align: '+jsMath.HTML.Em(-d)+';'} |
|
if (y != "none") { |
|
if (Math.abs(y) < .0001) {y = 0} |
|
html = '<SPAN STYLE="position: absolute; ' |
|
+ 'top:'+jsMath.HTML.Em(y)+'; left: 0em;">' |
|
+ html + ' ' // space normalizes line height in script styles |
|
+ '</SPAN>'; |
|
} |
|
html += '<IMG SRC="'+jsMath.blank+'" STYLE="width: '+jsMath.HTML.Em(w)+'; ' |
|
+ 'height: '+jsMath.HTML.Em(h)+';'+align+'">'; |
|
if (jsMath.msieAbsoluteBug) {// for MSIE (Mac) |
|
html = '<SPAN STYLE="position: relative;">' + html + '</SPAN>'; |
|
} |
|
html = '<SPAN STYLE="position: relative;' |
|
+ ' width: '+jsMath.HTML.Em(w)+';' // for MSIE |
|
+ ' height: '+jsMath.HTML.Em(H)+';' // for MSIE |
|
+ '">' |
|
+ html |
|
+ '</SPAN>'; |
|
return html; |
|
} |
|
|
|
}; |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* jsMath.Box handles TeX's math boxes and jsMath's equivalent of hboxes. |
|
*/ |
|
|
|
jsMath.Box = function (format,text,w,h,d) { |
|
if (d == null) {d = jsMath.d} |
|
this.type = 'typeset'; |
|
this.w = w; this.h = h; this.d = d; this.bh = h; this.bd = d; |
|
this.x = 0; this.y = 0; |
|
this.html = text; this.format = format; |
|
}; |
|
|
|
|
|
jsMath.Add(jsMath.Box,{ |
|
|
|
/* |
|
* An empty box |
|
*/ |
|
Null: new jsMath.Box('null','',0,0,0), |
|
|
|
/* |
|
* A box containing only text whose class and style haven't been added |
|
* yet (so that we can combine ones with the same styles). It gets |
|
* the text dimensions, if needed. (In general, this has been |
|
* replaced by TeX() below, but is still used in fallback mode.) |
|
*/ |
|
Text: function (text,tclass,style,size,a,d) { |
|
var html = jsMath.Typeset.AddClass(tclass,text); |
|
html = jsMath.Typeset.AddStyle(style,size,html); |
|
var BB = jsMath.EmBoxFor(html); var TeX = jsMath.Typeset.TeX(style,size); |
|
var bd = ((tclass == 'cmsy10' || tclass == 'cmex10')? BB.h-TeX.h: TeX.d*BB.h/TeX.hd); |
|
var box = new jsMath.Box('text',text,BB.w,BB.h-bd,bd); |
|
box.style = style; box.size = size; box.tclass = tclass; |
|
if (d != null) {if (d != 1) {box.d = d}} else {box.d = 0} |
|
if (a == null || a == 1) {box.h = .9*TeX.M_height} |
|
else {box.h = 1.1*TeX.x_height + 1*a}; // sometimes a is a string? |
|
return box; |
|
}, |
|
|
|
/* |
|
* Produce a box containing a given TeX character from a given font. |
|
* The box is a text box (like the ones above), so that characters from |
|
* the same font can be combined. |
|
*/ |
|
TeX: function (c,font,style,size) { |
|
c = jsMath.TeX[font][c]; |
|
if (c.d == null) {c.d = 0}; if (c.h == null) {c.h = 0} |
|
var scale = jsMath.Typeset.TeX(style,size).scale; |
|
var h = c.h + jsMath.TeX[font].dh |
|
var box = new jsMath.Box('text',c.c,c.w*scale,h*scale,c.d*scale); |
|
box.style = style; box.size = size; |
|
if (c.tclass) { |
|
box.tclass = c.tclass; |
|
box.bh = scale*jsMath.h; |
|
box.bd = scale*jsMath.d; |
|
} else { |
|
box.tclass = font; |
|
box.bh = scale*jsMath.TeX[font].h; |
|
box.bd = scale*jsMath.TeX[font].d; |
|
if (jsMath.msieFontBug) { |
|
// hack to avoid Font changing back to the default |
|
// font when a unicode reference is not followed |
|
// by a letter or number |
|
box.html += '<SPAN STYLE="display: none">x</SPAN>' |
|
} |
|
} |
|
return box; |
|
}, |
|
|
|
/* |
|
* A box containing a spacer of a specific width |
|
*/ |
|
Space: function (w) { |
|
return new jsMath.Box('html',jsMath.HTML.Spacer(w),w,0,0); |
|
}, |
|
|
|
/* |
|
* A box containing a horizontal rule |
|
*/ |
|
Rule: function (w,h) { |
|
if (h == null) {h = jsMath.TeX.default_rule_thickness} |
|
html = jsMath.HTML.Rule(w,h); |
|
return new jsMath.Box('html',html,w,h,0); |
|
}, |
|
|
|
/* |
|
* A box containing a colored block |
|
*/ |
|
Block: function (w,h,c) { |
|
return new jsMath.Box('html',jsMath.HTML.Block(w,h,c),w,h,0); |
|
}, |
|
|
|
/* |
|
* Get a character from a TeX font, and make sure that it has |
|
* its metrics specified. |
|
*/ |
|
GetChar: function (code,font) { |
|
var c = jsMath.TeX[font][code]; |
|
if (c.tclass == null) {c.tclass = font} |
|
if (!c.computedW) { |
|
c.w = jsMath.EmBoxFor(jsMath.Typeset.AddClass(c.tclass,c.c)).w; |
|
if (c.h == null) {c.h = jsMath.defaultH}; if (c.d == null) {c.d = 0} |
|
c.computedW = 1; |
|
} |
|
return c; |
|
}, |
|
|
|
/* |
|
* Locate the TeX delimiter character that matches a given height. |
|
* Return the character, font, style and actual height used. |
|
*/ |
|
DelimBestFit: function (H,c,font,style) { |
|
if (c == 0 && font == 0) return; |
|
var C; var h; font = jsMath.TeX.fam[font]; |
|
var isSS = (style.charAt(1) == 'S'); |
|
var isS = (style.charAt(0) == 'S'); |
|
while (c != null) { |
|
C = jsMath.TeX[font][c]; |
|
if (C.h == null) {C.h = jsMath.defaultH}; if (C.d == null) {C.d = 0} |
|
h = C.h+C.d; |
|
if (C.delim) {return [c,font,'',H]} |
|
if (isSS && .5*h >= H) {return [c,font,'SS',.5*h]} |
|
if (isS && .7*h >= H) {return [c,font,'S',.7*h]} |
|
if (h >= H || C.n == null) {return [c,font,'T',h]} |
|
c = C.n |
|
} |
|
}, |
|
|
|
/* |
|
* Create the HTML needed for a stretchable delimiter of a given height, |
|
* either centered or not. This version uses relative placement (i.e., |
|
* backspaces, not line-breaks). This works with more browsers, but |
|
* if the font size changes, the backspacing may not be right, so the |
|
* delimiters may become jagged. |
|
*/ |
|
DelimExtendRelative: function (H,c,font,a,nocenter) { |
|
var C = jsMath.TeX[font][c]; |
|
var top = this.GetChar(C.delim.top? C.delim.top: C.delim.rep,font); |
|
var rep = this.GetChar(C.delim.rep,font); |
|
var bot = this.GetChar(C.delim.bot? C.delim.bot: C.delim.rep,font); |
|
var ext = jsMath.Typeset.AddClass(rep.tclass,rep.c); |
|
var w = rep.w; var h = rep.h+rep.d |
|
var y; var dx; |
|
if (C.delim.mid) {// braces |
|
var mid = this.GetChar(C.delim.mid,font); |
|
var n = Math.ceil((H-(top.h+top.d)-(mid.h+mid.d)-(bot.h+bot.d))/(2*(rep.h+rep.d))); |
|
H = 2*n*(rep.h+rep.d) + (top.h+top.d) + (mid.h+mid.d) + (bot.h+bot.d); |
|
if (nocenter) {y = 0} else {y = H/2+a}; var Y = y; |
|
var html = jsMath.HTML.Place(jsMath.Typeset.AddClass(top.tclass,top.c),0,y-top.h) |
|
+ jsMath.HTML.Place(jsMath.Typeset.AddClass(bot.tclass,bot.c),-(top.w+bot.w)/2,y-(H-bot.d)) |
|
+ jsMath.HTML.Place(jsMath.Typeset.AddClass(mid.tclass,mid.c),-(bot.w+mid.w)/2,y-(H+mid.h-mid.d)/2); |
|
dx = (w-mid.w)/2; if (Math.abs(dx) < .0001) {dx = 0} |
|
if (dx) {html += jsMath.HTML.Spacer(dx)} |
|
y -= top.h+top.d + rep.h; |
|
for (var i = 0; i < n; i++) {html += jsMath.HTML.Place(ext,-w,y-i*h)} |
|
y -= H/2 - rep.h/2; |
|
for (var i = 0; i < n; i++) {html += jsMath.HTML.Place(ext,-w,y-i*h)} |
|
} else {// everything else |
|
var n = Math.ceil((H - (top.h+top.d) - (bot.h+bot.d))/(rep.h+rep.d)); |
|
// make sure two-headed arrows have an extender |
|
if (top.h+top.d < .9*(rep.h+rep.d)) {n = Math.max(1,n)} |
|
H = n*(rep.h+rep.d) + (top.h+top.d) + (bot.h+bot.d); |
|
if (nocenter) {y = 0} else {y = H/2+a}; var Y = y; |
|
var html = jsMath.HTML.Place(jsMath.Typeset.AddClass(top.tclass,top.c),0,y-top.h) |
|
dx = (w-top.w)/2; if (Math.abs(dx) < .0001) {dx = 0} |
|
if (dx) {html += jsMath.HTML.Spacer(dx)} |
|
y -= top.h+top.d + rep.h; |
|
for (var i = 0; i < n; i++) {html += jsMath.HTML.Place(ext,-w,y-i*h)} |
|
html += jsMath.HTML.Place(jsMath.Typeset.AddClass(bot.tclass,bot.c),-(w+bot.w)/2,Y-(H-bot.d)); |
|
} |
|
if (nocenter) {h = top.h} else {h = H/2+a} |
|
var box = new jsMath.Box('html',html,rep.w,h,H-h); |
|
box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d; |
|
return box; |
|
}, |
|
|
|
/* |
|
* Create the HTML needed for a stretchable delimiter of a given height, |
|
* either centered or not. This version uses absolute placement (i.e., |
|
* line-breaks, not backspacing). This gives more reliable results, |
|
* but doesn't work with all browsers. |
|
*/ |
|
DelimExtendAbsolute: function (H,c,font,a,nocenter) { |
|
var Font = jsMath.TeX[font]; |
|
var C = Font[c]; |
|
var top = this.GetChar(C.delim.top? C.delim.top: C.delim.rep,font); |
|
var rep = this.GetChar(C.delim.rep,font); |
|
var bot = this.GetChar(C.delim.bot? C.delim.bot: C.delim.rep,font); |
|
|
|
if (C.delim.mid) {// braces |
|
var mid = this.GetChar(C.delim.mid,font); |
|
var n = Math.ceil((H-(top.h+top.d)-(mid.h+mid.d-.05)-(bot.h+bot.d-.05))/(2*(rep.h+rep.d-.05))); |
|
H = 2*n*(rep.h+rep.d-.05) + (top.h+top.d) + (mid.h+mid.d-.05) + (bot.h+bot.d-.05); |
|
|
|
html = jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(top.tclass,top.c),0,0); |
|
var h = rep.h+rep.d - .05; var y = top.d-.05 + rep.h; |
|
var ext = jsMath.Typeset.AddClass(font,rep.c) |
|
for (var i = 0; i < n; i++) {html += jsMath.HTML.PlaceAbsolute(ext,0,y+i*h)} |
|
html += jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(mid.tclass,mid.c),0,y+n*h-rep.h+mid.h); |
|
y += n*h + mid.h+mid.d - .05; |
|
for (var i = 0; i < n; i++) {html += jsMath.HTML.PlaceAbsolute(ext,0,y+i*h)} |
|
html += jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(bot.tclass,bot.c),0,y+n*h-rep.h+bot.h); |
|
} else {// all others |
|
var n = Math.ceil((H - (top.h+top.d) - (bot.h+bot.d-.05))/(rep.h+rep.d-.05)); |
|
H = n*(rep.h+rep.d-.05) + (top.h+top.d) + (bot.h+bot.d-.05); |
|
|
|
html = jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(top.tclass,top.c),0,0); |
|
var h = rep.h+rep.d-.05; var y = top.d-.05 + rep.h; |
|
var ext = jsMath.Typeset.AddClass(rep.tclass,rep.c); |
|
for (var i = 0; i < n; i++) {html += jsMath.HTML.PlaceAbsolute(ext,0,y+i*h)} |
|
html += jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(bot.tclass,bot.c),0,y+n*h-rep.h+bot.h); |
|
} |
|
|
|
var w = top.w; |
|
if (nocenter) {h = top.h; y = 0} else {h = H/2 + a; y = h - top.h} |
|
html = jsMath.HTML.Absolute(html,w,Font.h,"none",-y,top.h); |
|
var box = new jsMath.Box('html',html,rep.w,h,H-h); |
|
box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d; |
|
return box; |
|
}, |
|
|
|
/* |
|
* Get the HTML for a given delimiter of a given height. |
|
* It will return either a single character, if one exists, or the |
|
* more complex HTML needed for a stretchable delimiter. |
|
*/ |
|
Delimiter: function (H,delim,style,nocenter) { |
|
var size = 4; //### pass this? |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
var CFSH = this.DelimBestFit(H,(delim&0xFF000)>>12,(delim&0xF00000)>>20,style); |
|
if (CFSH == null || CFSH[3] < H) |
|
{CFSH = this.DelimBestFit(H,(delim&0xFF),(delim&0xF00)>>8,style)} |
|
if (CFSH == null) {return this.Space(TeX.nulldelimiterspace)} |
|
if (CFSH[2] == '') |
|
{return this.DelimExtend(H,CFSH[0],CFSH[1],TeX.axis_height,nocenter)} |
|
box = jsMath.Box.TeX(CFSH[0],CFSH[1],CFSH[2],size).Styled(); |
|
if (nocenter) {box.y = -jsMath.TeX[CFSH[1]].dh*TeX.scale} |
|
else {box.y = -((box.h+box.d)/2 - box.d - TeX.axis_height)} |
|
if (Math.abs(box.y) < .0001) {box.y = 0} |
|
if (box.y) {box = jsMath.Box.SetList([box],CFSH[2],size)} |
|
return box; |
|
}, |
|
|
|
/* |
|
* Get a character by its TeX charcode, and make sure its width |
|
* is specified. |
|
*/ |
|
GetCharCode: function (code) { |
|
var font = jsMath.TeX.fam[(code&0xF00)>>8]; |
|
var Font = jsMath.TeX[font]; |
|
var c = Font[code & 0xFF]; |
|
if (c.w == null) {c.w = jsMath.EmBoxFor(jsMath.Typeset.AddClass(c.tclass,c.c)).w} |
|
if (c.font == null) {c.font = font} |
|
return c; |
|
}, |
|
|
|
/* |
|
* Add the class to the html, and use the font if there isn't one |
|
* specified already |
|
*/ |
|
|
|
AddClass: function (tclass,html,font) { |
|
if (tclass == null) {tclass = font} |
|
return jsMath.Typeset.AddClass(tclass,html); |
|
}, |
|
|
|
/* |
|
* Create a horizontally stretchable "delimiter" (like over- and |
|
* underbraces). |
|
*/ |
|
//### Add size? |
|
Leaders: function (W,leader) { |
|
var h; var d; var w; var html; var font; |
|
if (leader.lmid) {// braces |
|
font = jsMath.TeX.fam[(leader.left & 0xF00) >> 8]; |
|
var left = this.GetCharCode(leader.left); |
|
var right = this.GetCharCode(leader.right); |
|
var lmid = this.GetCharCode(leader.lmid); |
|
var rmid = this.GetCharCode(leader.rmid); |
|
w = (W - left.w - right.w - lmid.w - rmid.w)/2 - .1; h = .4; d = .3; |
|
if (w < 0) {w = 0} |
|
html = this.AddClass(left.tclass,left.c,left.font) |
|
+ jsMath.HTML.Rule(w,left.h) |
|
+ this.AddClass(lmid.tclass,lmid.c+rmid.c,lmid.font) |
|
+ jsMath.HTML.Rule(w,right.h) |
|
+ this.AddClass(right.tclass,right.c,right.font); |
|
} else { //arrows |
|
font = jsMath.TeX.fam[(leader.rep &0xF00) >> 8]; |
|
var left = this.GetCharCode(leader.left? leader.left: leader.rep); |
|
var rep = this.GetCharCode(leader.rep); |
|
var right = this.GetCharCode(leader.right? leader.right: leader.rep); |
|
var n = Math.ceil((W - left.w - right.w + .4)/(rep.w - .3)); |
|
w = (W - left.w - right.w + .4 - n*(rep.w - .3)); |
|
if (leader.left) {h = left.h; d = left.d} else {h = right.h; d = right.d} |
|
if (d == null) {d = 0}; if (h == null) {h = 0} |
|
var html = this.AddClass(left.tclass,left.c,left.font); var m = Math.floor(n/2); |
|
var ext = jsMath.HTML.Place(rep.c,-.3,0); |
|
var ehtml = ''; for (var i = 0; i < m; i++) {ehtml += ext}; |
|
html += this.AddClass(rep.tclass,ehtml,rep.font) + jsMath.HTML.Spacer(w); |
|
ehtml = ''; for (var i = m; i < n; i++) {ehtml += ext}; |
|
html += this.AddClass(rep.tclass,ehtml,rep.font); |
|
if (jsMath.msieFontBug) {html += '<SPAN STYLE="display: none">x</SPAN>'} |
|
html += jsMath.HTML.Place(this.AddClass(right.tclass,right.c,right.font),-.4,0); |
|
} |
|
w = jsMath.EmBoxFor(html).w; |
|
if (w != W) { |
|
w = jsMath.HTML.Spacer((W-w)/2); |
|
html = w + html + w; |
|
} |
|
var box = new jsMath.Box('html',html,W,h,d); |
|
box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d; |
|
return box; |
|
}, |
|
|
|
/* |
|
* Create the HTML for an alignment (e.g., array or matrix) |
|
* Since the widths are not really accurate (they are based on pixel |
|
* widths not the sub-pixel widths of the actual characters), there |
|
* is some drift involved. We lay out the table column by column |
|
* to help reduce the problem. |
|
* |
|
* ### still need to allow users to specify row and column attributes, |
|
* and do things like \span and \multispan ### |
|
*/ |
|
LayoutRelative: function (size,table,align,cspacing) { |
|
if (align == null) {align = []} |
|
if (cspacing == null) {cspacing = []} |
|
|
|
// get row and column maximum dimensions |
|
var scale = jsMath.sizes[size]/100; |
|
var W = []; var H = []; var D = []; |
|
var unset = -1000; var bh = unset; var bd = unset; |
|
var i; var j; var row; |
|
for (i = 0; i < table.length; i++) { |
|
row = table[i]; H[i] = jsMath.h*scale; D[i] = jsMath.d*scale; |
|
for (j = 0; j < row.length; j++) { |
|
row[j] = row[j].Remeasured(); |
|
if (row[j].h > H[i]) {H[i] = row[j].h} |
|
if (row[j].d > D[i]) {D[i] = row[j].d} |
|
if (j >= W.length) {W[j] = row[j].w} |
|
else if (row[j].w > W[j]) {W[j] = row[j].w} |
|
if (row[j].bh > bh) {bh = row[j].bh} |
|
if (row[j].bd > bd) {bd = row[j].bd} |
|
} |
|
} |
|
if (bh == unset) {bh = 0}; if (bd == unset) {bd = 0} |
|
|
|
// lay out the columns |
|
var HD = (jsMath.hd-.01)*scale; |
|
var html = ''; var pW = 0; var cW = 0; |
|
var w; var h; var y; |
|
var box; var mlist; var entry; |
|
for (j = 0; j < W.length; j++) { |
|
mlist = []; y = -H[0]; pW = 0; |
|
for (i = 0; i < table.length; i++) { |
|
entry = table[i][j]; |
|
if (entry && entry.format != 'null') { |
|
if (align[j] == 'l') {w = 0} else |
|
if (align[j] == 'r') {w = W[j] - entry.w} else |
|
{w = (W[j] - entry.w)/2} |
|
entry.x = w - pW; pW = entry.w + w; entry.y = y; |
|
mlist[mlist.length] = entry; |
|
} |
|
if (i == table.length-1) {y -= D[i]} |
|
else {y -= Math.max(HD,D[i]+H[i+1]) + scale/10} |
|
} |
|
if (cspacing[j] == null) cspacing[j] = scale; |
|
if (mlist.length > 0) { |
|
box = jsMath.Box.SetList(mlist,'T',size); |
|
html += jsMath.HTML.Place(box.html,cW,0); |
|
cW = W[j] - box.w + cspacing[j]; |
|
} else {cW += cspacing[j]} |
|
} |
|
|
|
// get the full width and height |
|
w = -cspacing[W.length-1]; y = (H.length-1)*scale/10; |
|
for (i = 0; i < W.length; i++) {w += W[i] + cspacing[i]} |
|
for (i = 0; i < H.length; i++) {y += Math.max(HD,H[i]+D[i])} |
|
h = y/2 + jsMath.TeX.axis_height; var d = y-h; |
|
|
|
// adjust the final row width, and vcenter the table |
|
// (add 1/6em at each side for the \,) |
|
html += jsMath.HTML.Spacer(cW-cspacing[W.length-1] + scale/6); |
|
html = jsMath.HTML.Place(html,scale/6,h); |
|
box = new jsMath.Box('html',html,w+scale/3,h,d); |
|
box.bh = bh; box.bd = bd; |
|
return box; |
|
}, |
|
|
|
/* |
|
* Create the HTML for an alignment (e.g., array or matrix) |
|
* Use absolute position for elements in the array. |
|
* |
|
* ### still need to allow users to specify row and column attributes, |
|
* and do things like \span and \multispan ### |
|
*/ |
|
LayoutAbsolute: function (size,table,align,cspacing) { |
|
if (align == null) {align = []} |
|
if (cspacing == null) {cspacing = []} |
|
|
|
// get row and column maximum dimensions |
|
var scale = jsMath.sizes[size]/100; |
|
var HD = (jsMath.hd-.01)*scale; |
|
var W = []; var H = []; var D = []; |
|
var w = 0; var h; var x; var y; |
|
var i; var j; var row; |
|
for (i = 0; i < table.length; i++) { |
|
row = table[i]; |
|
H[i] = jsMath.h*scale; D[i] = jsMath.d*scale; |
|
for (j = 0; j < row.length; j++) { |
|
row[j] = row[j].Remeasured(); |
|
if (row[j].h > H[i]) {H[i] = row[j].h} |
|
if (row[j].d > D[i]) {D[i] = row[j].d} |
|
if (j >= W.length) {W[j] = row[j].w} |
|
else if (row[j].w > W[j]) {W[j] = row[j].w} |
|
} |
|
} |
|
|
|
// get the height and depth of the centered table |
|
y = (H.length-1)*scale/6; |
|
for (i = 0; i < H.length; i++) {y += Math.max(HD,H[i]+D[i])} |
|
h = y/2 + jsMath.TeX.axis_height; var d = y - h; |
|
|
|
// lay out the columns |
|
var html = ''; var entry; w = scale/6; |
|
for (j = 0; j < W.length; j++) { |
|
y = H[0]-h; |
|
for (i = 0; i < table.length; i++) { |
|
entry = table[i][j]; |
|
if (entry && entry.format != 'null') { |
|
if (align[j] == 'l') {x = 0} else |
|
if (align[j] == 'r') {x = W[j] - entry.w} else |
|
{x = (W[j] - entry.w)/2} |
|
html += jsMath.HTML.PlaceAbsolute(entry.html,w+x, |
|
y-Math.max(0,entry.bh-jsMath.h*scale)); |
|
} |
|
if (i == table.length-1) {y += D[i]} |
|
else {y += Math.max(HD,D[i]+H[i+1]) + scale/6} |
|
} |
|
if (cspacing[j] == null) cspacing[j] = scale; |
|
w += W[j] + cspacing[j]; |
|
} |
|
|
|
// get the full width |
|
w = -cspacing[W.length-1]+scale/3; |
|
for (i = 0; i < W.length; i++) {w += W[i] + cspacing[i]} |
|
|
|
html = jsMath.HTML.Spacer(scale/6)+html+jsMath.HTML.Spacer(scale/6); |
|
if (jsMath.spanHeightVaries) {y = h-jsMath.h} else {y = 0} |
|
html = jsMath.HTML.Absolute(html,w,h+d,d,y,H[0]); |
|
var box = new jsMath.Box('html',html,w+scale/3,h,d); |
|
return box; |
|
}, |
|
|
|
/* |
|
* Look for math within \hbox and other non-math text |
|
*/ |
|
InternalMath: function (text,size) { |
|
if (!text.match(/\$|\\\(/)) {return this.Text(text,'nonmath','T',size).Styled()} |
|
|
|
var i = 0; var k = 0; var c; var match = ''; |
|
var mlist = []; var parse; var html; var box; |
|
while (i < text.length) { |
|
c = text.charAt(i++); |
|
if (c == '$') { |
|
if (match == '$') { |
|
parse = jsMath.Parse(text.slice(k,i-1),null,size); |
|
if (parse.error) { |
|
mlist[mlist.length] = this.Text(parse.error,'error','T',size,1,1); |
|
} else { |
|
parse.Atomize(); |
|
mlist[mlist.length] = parse.mlist.Typeset('T',size).Styled(); |
|
} |
|
match = ''; k = i; |
|
} else { |
|
mlist[mlist.length] = this.Text(text.slice(k,i-1),'nonmath','T',size,1,1); |
|
match = '$'; k = i; |
|
} |
|
} else if (c == '\\') { |
|
c = text.charAt(i++); |
|
if (c == '(' && match == '') { |
|
mlist[mlist.length] = this.Text(text.slice(k,i-2),'nonmath','T',size,1,1); |
|
match = ')'; k = i; |
|
} else if (c == ')' && match == ')') { |
|
parse = jsMath.Parse(text.slice(k,i-2),null,size); |
|
if (parse.error) { |
|
mlist[mlist.length] = this.Text(parse.error,'error','T',size,1,1); |
|
} else { |
|
parse.Atomize(); |
|
mlist[mlist.length] = parse.mlist.Typeset('T',size).Styled(); |
|
} |
|
match = ''; k = i; |
|
} |
|
} |
|
} |
|
mlist[mlist.length] = this.Text(text.slice(k),'nonmath','T',size,1,1); |
|
return this.SetList(mlist,'T',size); |
|
}, |
|
|
|
/* |
|
* Convert an abitrary box to a typeset box. I.e., make an |
|
* HTML version of the contents of the box, at its desired (x,y) |
|
* position. |
|
*/ |
|
Set: function (box,style,size,addstyle) { |
|
if (box) { |
|
if (box.type == 'typeset') {return box} |
|
if (box.type == 'mlist') { |
|
box.mlist.Atomize(style,size); |
|
return box.mlist.Typeset(style,size); |
|
} |
|
if (box.type == 'text') { |
|
box = this.Text(box.text,box.tclass,style,size,box.ascend,box.descend); |
|
if (addstyle != 0) {box.Styled()} |
|
return box; |
|
} |
|
box = this.TeX(box.c,box.font,style,size); |
|
if (addstyle != 0) {box.Styled()} |
|
return box; |
|
} |
|
return jsMath.Box.Null; |
|
}, |
|
|
|
/* |
|
* Convert a list of boxes to a single typeset box. I.e., finalize |
|
* the HTML for the list of boxes, properly spaced and positioned. |
|
*/ |
|
SetList: function (boxes,style,size) { |
|
var mlist = []; var box; |
|
for (var i = 0; i < boxes.length; i++) { |
|
box = boxes[i]; |
|
if (box.type == 'typeset') {box = jsMath.mItem.Typeset(box)} |
|
mlist[mlist.length] = box; |
|
} |
|
var typeset = new jsMath.Typeset(mlist); |
|
return typeset.Typeset(style,size); |
|
} |
|
|
|
}); |
|
|
|
|
|
jsMath.Package(jsMath.Box,{ |
|
|
|
/* |
|
* Add the class and style to a text box (i.e., finalize the |
|
* unpositioned HTML for the box). |
|
*/ |
|
Styled: function () { |
|
if (this.format == 'text') { |
|
this.html = jsMath.Typeset.AddClass(this.tclass,this.html); |
|
this.html = jsMath.Typeset.AddStyle(this.style,this.size,this.html); |
|
delete this.tclass; delete this.style; |
|
this.format = 'html'; |
|
} |
|
return this; |
|
}, |
|
|
|
/* |
|
* Recompute the box width to make it more accurate. |
|
*/ |
|
Remeasured: function () { |
|
if (this.w > 0) { |
|
if (!jsMath.spanHeightVaries || !this.html.match(/position: ?absolute/)) |
|
{this.w = jsMath.EmBoxFor(this.html).w} |
|
} |
|
return this; |
|
} |
|
|
|
}); |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* mItems are the buiulding blocks of mLists (math lists) used to |
|
* store the information about a mathematical expression. These are |
|
* basically the items listed in the TeXbook in Appendix G (plus some |
|
* minor extensions). |
|
*/ |
|
jsMath.mItem = function (type,def) { |
|
this.type = type; |
|
jsMath.Add(this,def); |
|
} |
|
|
|
jsMath.Add(jsMath.mItem,{ |
|
|
|
/* |
|
* a general atom (given a nucleus for the atom) |
|
*/ |
|
Atom: function (type,nucleus) { |
|
return new jsMath.mItem(type,{atom: 1, nuc: nucleus}); |
|
}, |
|
|
|
/* |
|
* An atom whose nucleus is a piece of text, in a given |
|
* class, with a given additional height and depth |
|
*/ |
|
TextAtom: function (type,text,tclass,a,d) { |
|
var atom = new jsMath.mItem(type,{ |
|
atom: 1, |
|
nuc: { |
|
type: 'text', |
|
text: text, |
|
tclass: tclass |
|
} |
|
}); |
|
if (a != null) {atom.nuc.ascend = a} |
|
if (d != null) {atom.nuc.descend = d} |
|
return atom; |
|
}, |
|
|
|
/* |
|
* An atom whose nucleus is a TeX character in a specific font |
|
*/ |
|
TeXAtom: function (type,c,font) { |
|
return new jsMath.mItem(type,{ |
|
atom: 1, |
|
nuc: { |
|
type: 'TeX', |
|
c: c, |
|
font: font |
|
} |
|
}); |
|
}, |
|
|
|
/* |
|
* A generalized fraction atom, with given delimiters, rule |
|
* thickness, and a numerator and denominator. |
|
*/ |
|
Fraction: function (name,num,den,thickness,left,right) { |
|
return new jsMath.mItem('fraction',{ |
|
from: name, num: num, den: den, |
|
thickness: thickness, left: left, right: right |
|
}); |
|
}, |
|
|
|
/* |
|
* An atom that inserts some glue |
|
*/ |
|
Space: function (w) {return new jsMath.mItem('space',{w: w})}, |
|
|
|
/* |
|
* An atom that contains a typeset box (like an hbox or vbox) |
|
*/ |
|
Typeset: function (box) {return new jsMath.mItem('box',{nuc: box})}, |
|
|
|
/* |
|
* An atom that contains some finished HTML (acts like a typeset box) |
|
*/ |
|
HTML: function (html) {return new jsMath.mItem('html',{html: html})} |
|
|
|
}); |
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* mLists are lists of mItems, and encode the contents of |
|
* mathematical expressions and sub-expressions. They act as |
|
* the expression "stack" as the mathematics is parsed, and |
|
* contain some state information, like the position of the |
|
* most recent open paren and \over command, and the current font. |
|
*/ |
|
jsMath.mList = function (list,font,size,style) { |
|
if (list) {this.mlist = list} else {this.mlist = []} |
|
if (style == null) {style = 'T'}; if (size == null) {size = 4} |
|
this.data = {openI: null, overI: null, overF: null, |
|
font: font, size: size, style: style}; |
|
this.init = {size: size, style: style}; |
|
} |
|
|
|
jsMath.Package(jsMath.mList,{ |
|
|
|
/* |
|
* Add an mItem to the list |
|
*/ |
|
Add: function (box) {return (this.mlist[this.mlist.length] = box)}, |
|
|
|
/* |
|
* Get the i-th mItem from the list |
|
*/ |
|
Get: function (i) {return this.mlist[i]}, |
|
|
|
/* |
|
* Get the length of the list |
|
*/ |
|
Length: function() {return this.mlist.length}, |
|
|
|
/* |
|
* Get the tail mItem of the list |
|
*/ |
|
Last: function () { |
|
if (this.mlist.length == 0) {return null} |
|
return this.mlist[this.mlist.length-1] |
|
}, |
|
|
|
/* |
|
* Get a sublist of an mList |
|
*/ |
|
Range: function (i,j) { |
|
if (j == null) {j = this.mlist.length} |
|
return new jsMath.mList(this.mlist.slice(i,j+1)); |
|
}, |
|
|
|
/* |
|
* Remove a range of mItems from the list. |
|
*/ |
|
Delete: function (i,j) { |
|
if (j == null) {j = i} |
|
if (this.mlist.splice) {this.mlist.splice(i,j-i+1)} else { |
|
var mlist = []; |
|
for (var k = 0; k < this.mlist.length; k++) |
|
{if (k < i || k > j) {mlist[mlist.length] = this.mlist[k]}} |
|
this.mlist = mlist; |
|
} |
|
}, |
|
|
|
/* |
|
* Add an open brace and maintain the stack information |
|
* about the previous open brace so we can recover it |
|
* when this one os closed. |
|
*/ |
|
Open: function (left) { |
|
var box = this.Add(new jsMath.mItem('boundary',{data: this.data})); |
|
var olddata = this.data; |
|
this.data = {}; for (var i in olddata) {this.data[i] = olddata[i]} |
|
delete this.data.overI; delete this.data.overF; |
|
this.data.openI = this.mlist.length-1; |
|
if (left != null) {box.left = left} |
|
return box; |
|
}, |
|
|
|
/* |
|
* Attempt to close a brace. Recover the stack information |
|
* about previous open braces and \over commands. If there was an |
|
* \over (or \above, etc) in this set of braces, create a fraction |
|
* atom from the two halves, otherwise create an inner or ord |
|
* from the contents of the braces. |
|
* Remove the braced material from the list and add the newly |
|
* created atom (the fraction, inner or ord). |
|
*/ |
|
Close: function (right) { |
|
if (right != null) {right = new jsMath.mItem('boundary',{right: right})} |
|
var atom; var open = this.data.openI; |
|
var over = this.data.overI; var from = this.data.overF; |
|
this.data = this.mlist[open].data; |
|
if (over) { |
|
atom = jsMath.mItem.Fraction(from.name, |
|
{type: 'mlist', mlist: this.Range(open+1,over-1)}, |
|
{type: 'mlist', mlist: this.Range(over)}, |
|
from.thickness,from.left,from.right); |
|
if (right) { |
|
var mlist = new jsMath.mList([this.mlist[open],atom,right]); |
|
atom = jsMath.mItem.Atom('inner',{type: 'mlist', mlist: mlist}); |
|
} |
|
} else { |
|
var openI = open+1; if (right) {this.Add(right); openI--} |
|
atom = jsMath.mItem.Atom((right)?'inner':'ord', |
|
{type: 'mlist', mlist: this.Range(openI)}); |
|
} |
|
this.Delete(open,this.Length()); |
|
return this.Add(atom); |
|
}, |
|
|
|
/* |
|
* Create a generalized fraction from an mlist that |
|
* contains an \over (or \above, etc). |
|
*/ |
|
Over: function () { |
|
var over = this.data.overI; var from = this.data.overF |
|
var atom = jsMath.mItem.Fraction(from.name, |
|
{type: 'mlist', mlist: this.Range(open+1,over-1)}, |
|
{type: 'mlist', mlist: this.Range(over)}, |
|
from.thickness,from.left,from.right); |
|
this.mlist = [atom]; |
|
}, |
|
|
|
/* |
|
* Take a raw mList (that has been produced by parsing some TeX |
|
* expression), and perform the modifications outlined in |
|
* Appendix G of the TeXbook. |
|
*/ |
|
Atomize: function (style,size) { |
|
var mitem; var prev = ''; |
|
this.style = style; this.size = size; |
|
for (var i = 0; i < this.mlist.length; i++) { |
|
mitem = this.mlist[i]; mitem.delta = 0; |
|
if (mitem.type == 'choice') |
|
{this.mlist = this.Atomize.choice(this.style,mitem,i,this.mlist); i--} |
|
else if (this.Atomize[mitem.type]) { |
|
var f = this.Atomize[mitem.type]; // Opera needs separate name |
|
f(this.style,this.size,mitem,prev,this,i); |
|
} |
|
prev = mitem; |
|
} |
|
if (mitem && mitem.type == 'bin') {mitem.type = 'ord'} |
|
if (this.mlist.length >= 2 && mitem.type == 'boundary' && |
|
this.mlist[0].type == 'boundary') {this.AddDelimiters(style,size)} |
|
}, |
|
|
|
/* |
|
* For a list that has boundary delimiters as its first and last |
|
* entries, we replace the boundary atoms by open and close |
|
* atoms whose nuclei are the specified delimiters properly sized |
|
* for the contents of the list. (Rule 19) |
|
*/ |
|
AddDelimiters: function(style,size) { |
|
var unset = -10000; var h = unset; var d = unset; |
|
for (var i = 0; i < this.mlist.length; i++) { |
|
mitem = this.mlist[i]; |
|
if (mitem.atom || mitem.type == 'box') { |
|
h = Math.max(h,mitem.nuc.h+mitem.nuc.y); |
|
d = Math.max(d,mitem.nuc.d-mitem.nuc.y); |
|
} |
|
} |
|
var TeX = jsMath.TeX; var a = jsMath.Typeset.TeX(style,size).axis_height; |
|
var delta = Math.max(h-a,d+a); |
|
var H = Math.max(Math.floor(TeX.integer*delta/500)*TeX.delimiterfactor, |
|
TeX.integer*(2*delta-TeX.delimitershortfall))/TeX.integer; |
|
var left = this.mlist[0]; var right = this.mlist[this.mlist.length-1]; |
|
left.nuc = jsMath.Box.Delimiter(H,left.left,style); |
|
right.nuc = jsMath.Box.Delimiter(H,right.right,style); |
|
left.type = 'open'; left.atom = 1; delete left.left; |
|
right.type = 'close'; right.atom = 1; delete right.right; |
|
}, |
|
|
|
/* |
|
* Typeset a math list to produce final HTML for the list. |
|
*/ |
|
Typeset: function (style,size) { |
|
var typeset = new jsMath.Typeset(this.mlist); |
|
return typeset.Typeset(style,size); |
|
} |
|
|
|
}); |
|
|
|
|
|
/* |
|
* These routines implement the main rules given in Appendix G of the |
|
* TeXbook |
|
*/ |
|
|
|
jsMath.Add(jsMath.mList.prototype.Atomize,{ |
|
|
|
/* |
|
* Handle a 4-way choice atom. (Rule 4) |
|
*/ |
|
choice: function (style,mitem,i,mlist) { |
|
if (style.charAt(style.length-1) == "'") {style = style.slice(0,style.length-1)} |
|
var nlist = []; var M = mitem[style]; if (!M) {M = {type: 'mlist', mlist: []}} |
|
if (M.type == 'mlist') { |
|
M = M.mlist.mlist; |
|
for (var k = 0; k < i; k++) {nlist[k] = mlist[k]} |
|
for (k = 0; k < M.length; k++) {nlist[i+k] = M[k]} |
|
for (k = i+1; k < mlist.length; k++) {nlist[nlist.length] = mlist[k]} |
|
return nlist; |
|
} else { |
|
mlist[i] = jsMath.mItem.Atom('ord',M); |
|
return mlist; |
|
} |
|
}, |
|
|
|
/* |
|
* Handle \displaystyle, \textstyle, etc. |
|
*/ |
|
style: function (style,size,mitem,prev,mlist) { |
|
mlist.style = mitem.style; |
|
}, |
|
|
|
/* |
|
* Handle \tiny, \small, etc. |
|
*/ |
|
size: function (style,size,mitem,prev,mlist) { |
|
mlist.size = mitem.size; |
|
}, |
|
|
|
/* |
|
* Create empty boxes of the proper sizes for the various |
|
* phantom-type commands |
|
*/ |
|
phantom: function (style,size,mitem) { |
|
var box = mitem.nuc = jsMath.Box.Set(mitem.phantom,style,size); |
|
if (mitem.h) {box.Remeasured(); box.html = jsMath.HTML.Spacer(box.w)} |
|
else {box.html = '', box.w = 0} |
|
if (!mitem.v) {box.h = box.d = 0} |
|
box.bd = box.bh = 0; |
|
delete mitem.phantom; |
|
mitem.type = 'box'; |
|
}, |
|
|
|
/* |
|
* Create a box of zero height and depth containing the |
|
* contents of the atom |
|
*/ |
|
smash: function (style,size,mitem) { |
|
var box = mitem.nuc = jsMath.Box.Set(mitem.smash,style,size).Remeasured(); |
|
box.h = box.d = box.bd = box.bh = 0; |
|
delete mitem.smash; |
|
mitem.type = 'box'; |
|
}, |
|
|
|
/* |
|
* Move a box up or down vertically |
|
*/ |
|
raise: function (style,size,mitem) { |
|
mitem.nuc = jsMath.Box.Set(mitem.nuc,style,size); |
|
var y = mitem.raise; |
|
mitem.nuc.html = jsMath.HTML.Place(mitem.nuc.html,0,y); |
|
mitem.nuc.h += y; mitem.nuc.d -= y; |
|
mitem.type = 'ord'; mitem.atom = 1; |
|
}, |
|
|
|
/* |
|
* Hide the size of a box so that it laps to the left or right, or |
|
* up or down. |
|
*/ |
|
lap: function (style,size,mitem) { |
|
var box = jsMath.Box.Set(mitem.nuc,style,size).Remeasured(); |
|
var mlist = [box]; |
|
if (mitem.lap == 'llap') {box.x = -box.w} else |
|
if (mitem.lap == 'rlap') {mlist[1] = jsMath.mItem.Space(-box.w)} else |
|
if (mitem.lap == 'ulap') {box.y = box.d; box.h = box.d = 0} else |
|
if (mitem.lap == 'dlap') {box.y = -box.h; box.h = box.d = 0} |
|
mitem.nuc = jsMath.Box.SetList(mlist,style,size); |
|
if (mitem.lap == 'ulap' || mitem.lap == 'dlap') {mitem.nuc.h = mitem.nuc.d = 0} |
|
mitem.type = 'box'; delete mitem.atom; |
|
}, |
|
|
|
/* |
|
* Handle a Bin atom. (Rule 5) |
|
*/ |
|
bin: function (style,size,mitem,prev) { |
|
if (prev) { |
|
var type = prev.type; |
|
if (type == 'bin' || type == 'op' || type == 'rel' || |
|
type == 'open' || type == 'punct' || type == '' || |
|
(type == 'boundary' && prev.left != '')) {mitem.type = 'ord'} |
|
} else {mitem.type = 'ord'} |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle a Rel atom. (Rule 6) |
|
*/ |
|
rel: function (style,size,mitem,prev) { |
|
if (prev.type == 'bin') {prev.type = 'ord'} |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle a Close atom. (Rule 6) |
|
*/ |
|
close: function (style,size,mitem,prev) { |
|
if (prev.type == 'bin') {prev.type = 'ord'} |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle a Punct atom. (Rule 6) |
|
*/ |
|
punct: function (style,size,mitem,prev) { |
|
if (prev.type == 'bin') {prev.type = 'ord'} |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle an Open atom. (Rule 7) |
|
*/ |
|
open: function (style,size,mitem) { |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle an Inner atom. (Rule 7) |
|
*/ |
|
inner: function (style,size,mitem) { |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle a Vcent atom. (Rule 8) |
|
*/ |
|
vcenter: function (style,size,mitem) { |
|
var box = jsMath.Box.Set(mitem.nuc,style,size); |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
box.y = TeX.axis_height - (box.h-box.d)/2; |
|
mitem.nuc = box; mitem.type = 'ord'; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle an Over atom. (Rule 9) |
|
*/ |
|
overline: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
var box = jsMath.Box.Set(mitem.nuc,jsMath.Typeset.PrimeStyle(style),size).Remeasured(); |
|
var t = TeX.default_rule_thickness; |
|
var rule = jsMath.Box.Rule(box.w,t); |
|
rule.x = -rule.w; rule.y = box.h + 3*t; |
|
mitem.nuc = jsMath.Box.SetList([box,rule],style,size); |
|
mitem.nuc.h += t; |
|
mitem.type = 'ord'; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle an Under atom. (Rule 10) |
|
*/ |
|
underline: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
var box = jsMath.Box.Set(mitem.nuc,jsMath.Typeset.PrimeStyle(style),size).Remeasured(); |
|
var t = TeX.default_rule_thickness; |
|
var rule = jsMath.Box.Rule(box.w,t); |
|
rule.x = -rule.w; rule.y = -box.d - 3*t - t; |
|
mitem.nuc = jsMath.Box.SetList([box,rule],style,size); |
|
mitem.nuc.d += t; |
|
mitem.type = 'ord'; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle a Rad atom. (Rule 11 plus stuff for \root..\of) |
|
*/ |
|
radical: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
var Cp = jsMath.Typeset.PrimeStyle(style); |
|
var box = jsMath.Box.Set(mitem.nuc,Cp,size).Remeasured(); |
|
var t = TeX.default_rule_thickness; |
|
var p = t; if (style == 'D' || style == "D'") {p = TeX.x_height} |
|
var r = t + p/4; |
|
var surd = jsMath.Box.Delimiter(box.h+box.d+r+t,0x270370,style,1); |
|
t = surd.h; // thickness of rule is height of surd character |
|
if (surd.d > box.h+box.d+r) {r = (r+surd.d-box.h-box.d)/2} |
|
surd.y = box.h+r; |
|
var rule = jsMath.Box.Rule(box.w,t); |
|
rule.y = surd.y-t/2; rule.h += 3*t/2; box.x = -box.w; |
|
var Cr = jsMath.Typeset.UpStyle(jsMath.Typeset.UpStyle(style)); |
|
var root = jsMath.Box.Set(mitem.root,Cr,size).Remeasured(); |
|
if (mitem.root) { |
|
root.y = .55*(box.h+box.d+3*t+r)-box.d; surd.x = -(11/18)*surd.w; |
|
root.x = Math.max((11/18)*surd.w - root.w, 0); |
|
} |
|
mitem.nuc = jsMath.Box.SetList([root,surd,rule,box],style,size); |
|
mitem.type = 'ord'; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle an Acc atom. (Rule 12) |
|
*/ |
|
accent: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
var Cp = jsMath.Typeset.PrimeStyle(style); |
|
var box = jsMath.Box.Set(mitem.nuc,Cp,size); |
|
var u = box.w; var s; var Font; |
|
if (mitem.nuc.type == 'TeX') { |
|
Font = jsMath.TeX[mitem.nuc.font]; |
|
if (Font[mitem.nuc.c].krn && Font.skewchar) |
|
{s = Font[mitem.nuc.c].krn[Font.skewchar]} |
|
} |
|
if (s == null) {s = 0} |
|
|
|
var c = mitem.accent & 0xFF; |
|
var font = jsMath.TeX.fam[(mitem.accent&0xF00)>>8]; Font = jsMath.TeX[font]; |
|
while (Font[c].n && Font[Font[c].n].w <= u) {c = Font[c].n} |
|
|
|
var delta = Math.min(box.h,TeX.x_height); |
|
if (mitem.nuc.type == 'TeX') { |
|
var nitem = jsMath.mItem.Atom('ord',mitem.nuc); |
|
nitem.sup = mitem.sup; nitem.sub = mitem.sub; nitem.delta = 0; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,nitem); |
|
delta += (nitem.nuc.h - box.h); |
|
box = mitem.nuc = nitem.nuc; |
|
delete mitem.sup; delete mitem.sub; |
|
} |
|
var acc = jsMath.Box.TeX(c,font,style,size); |
|
acc.y = box.h - delta; acc.x = -box.w + s + (u-acc.w)/2; |
|
if (Font[c].ic) {acc.x -= Font[c].ic * TeX.scale} |
|
|
|
mitem.nuc = jsMath.Box.SetList([box,acc],style,size); |
|
if (mitem.nuc.w != box.w) { |
|
var space = jsMath.mItem.Space(box.w-mitem.nuc.w); |
|
mitem.nuc = jsMath.Box.SetList([mitem.nuc,space],style,size); |
|
} |
|
mitem.type = 'ord'; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle an Op atom. (Rules 13 and 13a) |
|
*/ |
|
op: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); var box; |
|
mitem.delta = 0; var isD = (style.charAt(0) == 'D'); |
|
if (mitem.limits == null && isD) {mitem.limits = 1} |
|
|
|
if (mitem.nuc.type == 'TeX') { |
|
var C = jsMath.TeX[mitem.nuc.font][mitem.nuc.c]; |
|
if (isD && C.n) {mitem.nuc.c = C.n; C = jsMath.TeX[mitem.nuc.font][C.n]} |
|
box = jsMath.Box.Set(mitem.nuc,style,size); |
|
if (C.ic) { |
|
mitem.delta = C.ic * TeX.scale; |
|
if (mitem.limits || !mitem.sub || jsMath.msieIntegralBug) |
|
{box = jsMath.Box.SetList([box,jsMath.mItem.Space(mitem.delta)],style,size)} |
|
} |
|
box.y = -((box.h+box.d)/2 - box.d - TeX.axis_height); |
|
if (Math.abs(box.y) < .0001) (box.y = 0) |
|
} |
|
|
|
if (!box) {box = jsMath.Box.Set(mitem.nuc,style,size).Remeasured()} |
|
if (mitem.limits) { |
|
var W = box.w; var x = box.w; |
|
var mlist = [box]; var dh = 0; var dd = 0; |
|
if (mitem.sup) { |
|
var sup = jsMath.Box.Set(mitem.sup,jsMath.Typeset.UpStyle(style),size).Remeasured(); |
|
sup.x = ((box.w-sup.w)/2 + mitem.delta/2) - x; dh = TeX.big_op_spacing5; |
|
W = Math.max(W,sup.w); x += sup.x + sup.w; |
|
sup.y = box.h+sup.d + box.y + |
|
Math.max(TeX.big_op_spacing1,TeX.big_op_spacing3-sup.d); |
|
mlist[mlist.length] = sup; delete mitem.sup; |
|
} |
|
if (mitem.sub) { |
|
var sub = jsMath.Box.Set(mitem.sub,jsMath.Typeset.DownStyle(style),size).Remeasured(); |
|
sub.x = ((box.w-sub.w)/2 - mitem.delta/2) - x; dd = TeX.big_op_spacing5; |
|
W = Math.max(W,sub.w); x += sub.x + sub.w; |
|
sub.y = -box.d-sub.h + box.y - |
|
Math.max(TeX.big_op_spacing2,TeX.big_op_spacing4-sub.h); |
|
mlist[mlist.length] = sub; delete mitem.sub; |
|
} |
|
if (W > box.w) {box.x = (W-box.w)/2; x += box.x} |
|
if (x < W) {mlist[mlist.length] = jsMath.mItem.Space(W-x)} |
|
mitem.nuc = jsMath.Box.SetList(mlist,style,size); |
|
mitem.nuc.h += dh; mitem.nuc.d += dd; |
|
} else { |
|
if (jsMath.msieIntegralBug && mitem.sub && C && C.ic) |
|
{mitem.nuc = jsMath.Box.SetList([box,jsMath.Box.Space(-C.ic*TeX.scale)],style,size)} |
|
else if (box.y) {mitem.nuc = jsMath.Box.SetList([box],style,size)} |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
} |
|
}, |
|
|
|
/* |
|
* Handle an Ord atom. (Rule 14) |
|
*/ |
|
ord: function (style,size,mitem,prev,mList,i) { |
|
if (mitem.nuc.type == 'TeX' && !mitem.sup && !mitem.sub) { |
|
var nitem = mList.mlist[i+1]; |
|
if (nitem && nitem.atom && nitem.type && |
|
(nitem.type == 'ord' || nitem.type == 'op' || nitem.type == 'bin' || |
|
nitem.type == 'rel' || nitem.type == 'open' || |
|
nitem.type == 'close' || nitem.type == 'punct')) { |
|
if (nitem.nuc.type == 'TeX' && nitem.nuc.font == mitem.nuc.font) { |
|
mitem.textsymbol = 1; |
|
var krn = jsMath.TeX[mitem.nuc.font][mitem.nuc.c].krn; |
|
krn *= jsMath.Typeset.TeX(style,size).scale; |
|
if (krn && krn[nitem.nuc.c]) { |
|
for (var k = mList.mlist.length-1; k > i; k--) |
|
{mList.mlist[k+1] = mList.mlist[k]} |
|
mList.mlist[i+1] = jsMath.mItem.Space(krn[nitem.nuc.c]); |
|
} |
|
} |
|
} |
|
} |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Handle a generalized fraction. (Rules 15 to 15e) |
|
*/ |
|
fraction: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); var t = 0; |
|
if (mitem.thickness != null) {t = mitem.thickness} |
|
else if (mitem.from.match(/over/)) {t = TeX.default_rule_thickness} |
|
var isD = (style.charAt(0) == 'D'); |
|
var Cn = (style == 'D')? 'T': (style == "D'")? "T'": jsMath.Typeset.UpStyle(style); |
|
var Cd = (isD)? "T'": jsMath.Typeset.DownStyle(style); |
|
var num = jsMath.Box.Set(mitem.num,Cn,size).Remeasured(); |
|
var den = jsMath.Box.Set(mitem.den,Cd,size).Remeasured(); |
|
|
|
var u; var v; var w; |
|
var H = (isD)? TeX.delim1 : TeX.delim2; |
|
var mlist = [jsMath.Box.Delimiter(H,mitem.left,style)] |
|
var right = jsMath.Box.Delimiter(H,mitem.right,style); |
|
|
|
if (num.w < den.w) { |
|
num.x = (den.w-num.w)/2; |
|
den.x = -(num.w + num.x); |
|
w = den.w; mlist[1] = num; mlist[2] = den; |
|
} else { |
|
den.x = (num.w-den.w)/2; |
|
num.x = -(den.w + den.x); |
|
w = num.w; mlist[1] = den; mlist[2] = num; |
|
} |
|
if (isD) {u = TeX.num1; v = TeX.denom1} else { |
|
u = (t != 0)? TeX.num2: TeX.num3; |
|
v = TeX.denom2; |
|
} |
|
if (t == 0) {// atop |
|
var p = (isD)? 7*TeX.default_rule_thickness: 3*TeX.default_rule_thickness; |
|
var r = (u - num.d) - (den.h - v); |
|
if (r < p) {u += (p-r)/2; v += (p-r)/2} |
|
} else {// over |
|
var p = (isD)? 3*t: t; var a = TeX.axis_height; |
|
var r = (u-num.d)-(a+t/2); if (r < p) {u += p-r} |
|
r = (a-t/2)-(den.h-v); if (r < p) {v += p-r} |
|
var rule = jsMath.Box.Rule(w,t); rule.x = -w; rule.y = a - t/2; |
|
mlist[mlist.length] = rule; |
|
} |
|
num.y = u; den.y = -v; |
|
|
|
mlist[mlist.length] = right; |
|
mitem.nuc = jsMath.Box.SetList(mlist,style,size); |
|
mitem.type = 'ord'; mitem.atom = 1; |
|
delete mitem.num; delete mitem.den; |
|
jsMath.mList.prototype.Atomize.SupSub(style,size,mitem); |
|
}, |
|
|
|
/* |
|
* Add subscripts and superscripts. (Rules 17-18f) |
|
*/ |
|
SupSub: function (style,size,mitem) { |
|
var TeX = jsMath.Typeset.TeX(style,size); |
|
var nuc = mitem.nuc; |
|
var box = mitem.nuc = jsMath.Box.Set(mitem.nuc,style,size,0); |
|
if (box.format == 'null') |
|
{box = mitem.nuc = jsMath.Box.Text('','normal',style,size)} |
|
|
|
if (nuc.type == 'TeX') { |
|
if (!mitem.textsymbol) { |
|
var C = jsMath.TeX[nuc.font][nuc.c]; |
|
if (C.ic) { |
|
mitem.delta = C.ic * TeX.scale; |
|
if (!mitem.sub) { |
|
box = mitem.nuc = jsMath.Box.SetList([box,jsMath.Box.Space(mitem.delta)],style,size); |
|
mitem.delta = 0; |
|
} |
|
} |
|
} else {mitem.delta = 0} |
|
} |
|
|
|
if (!mitem.sup && !mitem.sub) return; |
|
mitem.nuc.Styled(); |
|
|
|
var Cd = jsMath.Typeset.DownStyle(style); |
|
var Cu = jsMath.Typeset.UpStyle(style); |
|
var q = jsMath.Typeset.TeX(Cu,size).sup_drop; |
|
var r = jsMath.Typeset.TeX(Cd,size).sub_drop; |
|
var u = 0; var v = 0; var p; |
|
if (nuc.type != 'text' && nuc.type != 'TeX' && nuc.type != 'null') |
|
{u = box.h - q; v = box.d + r} |
|
|
|
if (mitem.sub) { |
|
var sub = jsMath.Box.Set(mitem.sub,Cd,size); |
|
sub = jsMath.Box.SetList([sub,jsMath.mItem.Space(TeX.scriptspace)],style,size); |
|
} |
|
|
|
if (!mitem.sup) { |
|
sub.y = -Math.max(v,TeX.sub1,sub.h-(4/5)*jsMath.Typeset.TeX(Cd,size).x_height); |
|
mitem.nuc = jsMath.Box.SetList([box,sub],style,size).Styled(); delete mitem.sub; |
|
return; |
|
} |
|
|
|
var sup = jsMath.Box.Set(mitem.sup,Cu,size); |
|
sup = jsMath.Box.SetList([sup,jsMath.mItem.Space(TeX.scriptspace)],style,size); |
|
if (style == 'D') {p = TeX.sup1} |
|
else if (style.charAt(style.length-1) == "'") {p = TeX.sup3} |
|
else {p = TeX.sup2} |
|
u = Math.max(u,p,sup.d+jsMath.Typeset.TeX(Cu,size).x_height/4); |
|
|
|
if (!mitem.sub) { |
|
sup.y = u; |
|
mitem.nuc = jsMath.Box.SetList([box,sup],style,size); delete mitem.sup; |
|
return; |
|
} |
|
|
|
v = Math.max(v,jsMath.Typeset.TeX(Cd,size).sub2); |
|
var t = TeX.default_rule_thickness; |
|
if ((u-sup.d) - (sub.h -v) < 4*t) { |
|
v = 4*t + sub.h - (u-sup.d); |
|
p = (4/5)*TeX.x_height - (u-sup.d); |
|
if (p > 0) {u += p; v -= p} |
|
} |
|
sup.Remeasured(); sub.Remeasured(); |
|
sup.y = u; sub.y = -v; sup.x = mitem.delta; |
|
if (sup.w+sup.x > sub.w) |
|
{sup.x -= sub.w; mitem.nuc = jsMath.Box.SetList([box,sub,sup],style,size)} else |
|
{sub.x -= (sup.w+sup.x); mitem.nuc = jsMath.Box.SetList([box,sup,sub],style,size)} |
|
|
|
delete mitem.sup; delete mitem.sub; |
|
} |
|
|
|
}); |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* The Typeset object handles most of the TeX-specific processing |
|
*/ |
|
|
|
jsMath.Typeset = function (mlist) { |
|
this.type = 'typeset'; |
|
this.mlist = mlist; |
|
} |
|
|
|
jsMath.Add(jsMath.Typeset,{ |
|
|
|
/* |
|
* The "C-uparrow" style table (TeXbook, p. 441) |
|
*/ |
|
upStyle: { |
|
D: "S", T: "S", "D'": "S'", "T'": "S'", |
|
S: "SS", SS: "SS", "S'": "SS'", "SS'": "SS'" |
|
}, |
|
|
|
/* |
|
* The "C-downarrow" style table (TeXbook, p. 441) |
|
*/ |
|
downStyle: { |
|
D: "S'", T: "S'", "D'": "S'", "T'": "S'", |
|
S: "SS'", SS: "SS'", "S'": "SS'", "SS'": "SS'" |
|
}, |
|
|
|
/* |
|
* Get the various styles given the current style |
|
* (see TeXbook, p. 441) |
|
*/ |
|
UpStyle: function (style) {return this.upStyle[style]}, |
|
DownStyle: function (style) {return this.downStyle[style]}, |
|
PrimeStyle: function (style) { |
|
if (style.charAt(style.length-1) == "'") {return style} |
|
return style + "'" |
|
}, |
|
|
|
/* |
|
* A value scaled to the appropriate size for scripts |
|
*/ |
|
StyleValue: function (style,v) { |
|
if (style == "S" || style == "S'") {return .7*v} |
|
if (style == "SS" || style == "SS'") {return .5*v} |
|
return v; |
|
}, |
|
|
|
/* |
|
* Return the font parameter table for the given style |
|
*/ |
|
TeX: function (style,size) { |
|
if (style == "S" || style == "S'") {size = Math.max(0,size-2)} |
|
else if (style == "SS" || style == "SS'") {size = Math.max(0,size-4)} |
|
return jsMath.TeXparams[size]; |
|
}, |
|
|
|
|
|
/* |
|
* Add the CSS class for the given TeX style |
|
*/ |
|
AddStyle: function (style,size,html) { |
|
if (style == "S" || style == "S'") {size = Math.max(0,size-2)} |
|
else if (style == "SS" || style == "SS'") {size = Math.max(0,size-4)} |
|
if (size != 4) {html = '<SPAN CLASS="size'+size+'">' + html + '</SPAN>'} |
|
return html; |
|
}, |
|
|
|
/* |
|
* Add the font class, if needed |
|
*/ |
|
AddClass: function (tclass,html) { |
|
if (tclass != '' && tclass != 'normal') {html = jsMath.HTML.Class(tclass,html)} |
|
return html; |
|
} |
|
|
|
}); |
|
|
|
|
|
jsMath.Package(jsMath.Typeset,{ |
|
|
|
/* |
|
* The spacing tables for inter-atom spacing |
|
* (See rule 20, and Chapter 18, p 170) |
|
*/ |
|
DTsep: { |
|
ord: {op: 1, bin: 2, rel: 3, inner: 1}, |
|
op: {ord: 1, op: 1, rel: 3, inner: 1}, |
|
bin: {ord: 2, op: 2, open: 2, inner: 2}, |
|
rel: {ord: 3, op: 3, open: 3, inner: 3}, |
|
open: {}, |
|
close: {op: 1, bin:2, rel: 3, inner: 1}, |
|
punct: {ord: 1, op: 1, rel: 1, open: 1, close: 1, punct: 1, inner: 1}, |
|
inner: {ord: 1, op: 1, bin: 2, rel: 3, open: 1, punct: 1, inner: 1} |
|
}, |
|
|
|
SSsep: { |
|
ord: {op: 1}, |
|
op: {ord: 1, op: 1}, |
|
bin: {}, |
|
rel: {}, |
|
open: {}, |
|
close: {op: 1}, |
|
punct: {}, |
|
inner: {op: 1} |
|
}, |
|
|
|
/* |
|
* The sizes used in the tables above |
|
*/ |
|
sepW: ['','thinmuskip','medmuskip','thickmuskip'], |
|
|
|
|
|
/* |
|
* Find the amount of separation to use between two adjacent |
|
* atoms in the given style |
|
*/ |
|
GetSeparation: function (l,r,style) { |
|
if (l && l.atom && r.atom) { |
|
var table = this.DTsep; if (style.charAt(0) == "S") {table = this.SSsep} |
|
var row = table[l.type]; |
|
if (row && row[r.type] != null) {return jsMath.TeX[this.sepW[row[r.type]]]} |
|
} |
|
return 0; |
|
}, |
|
|
|
/* |
|
* Typeset an mlist (i.e., turn it into HTML). |
|
* Here, text items of the same class and style are combined |
|
* to reduce the number of <SPAN> tags used (though it is still |
|
* huge). Spaces are combined, when possible. |
|
* ### More needs to be done with that. ### |
|
* The width of the final box is recomputed at the end, since |
|
* the final width is not necessarily the sum of the widths of |
|
* the individual parts (widths are in pixels, but the browsers |
|
* puts pieces together using sub-pixel accuracy). |
|
*/ |
|
Typeset: function (style,size) { |
|
this.style = style; this.size = size; var unset = -10000 |
|
this.w = 0; this.h = unset; this.d = unset; |
|
this.bh = this.h; this.bd = this.d; |
|
this.tbuf = ''; this.tx = 0; this.tclass = ''; |
|
this.cbuf = ''; this.hbuf = ''; this.hx = 0; |
|
var mitem = null; var prev; this.x = 0; this.dx = 0; |
|
|
|
for (var i = 0; i < this.mlist.length; i++) { |
|
prev = mitem; mitem = this.mlist[i]; |
|
switch (mitem.type) { |
|
|
|
case 'size': |
|
this.FlushClassed(); |
|
this.size = mitem.size; |
|
mitem = prev; // hide this from TeX |
|
break; |
|
|
|
case 'style': |
|
this.FlushClassed(); |
|
if (this.style.charAt(this.style.length-1) == "'") |
|
{this.style = mitem.style + "'"} else {this.style = mitem.style} |
|
mitem = prev; // hide this from TeX |
|
break; |
|
|
|
case 'space': |
|
if (typeof(mitem.w) == 'object') { |
|
if (this.style.charAt(1) == 'S') {mitem.w = .5*mitem.w[0]/18} |
|
else if (this.style.charAt(0) == 'S') {mitem.w = .7*mitem.w[0]/18} |
|
else {mitem.w = mitem.w[0]/18} |
|
} |
|
this.dx += mitem.w-0; // mitem.w is sometimes a string? |
|
mitem = prev; // hide this from TeX |
|
break; |
|
|
|
case 'html': |
|
this.FlushClassed(); |
|
if (this.hbuf == '') {this.hx = this.x} |
|
this.hbuf += mitem.html; |
|
mitem = prev; // hide this from TeX |
|
break; |
|
|
|
default: // atom |
|
if (!mitem.atom && mitem.type != 'box') break; |
|
mitem.nuc.x += this.dx + this.GetSeparation(prev,mitem,this.style); |
|
if (mitem.nuc.y || mitem.nuc.x) mitem.nuc.Styled(); |
|
this.dx = 0; this.x = this.x + this.w; |
|
this.w += mitem.nuc.w + mitem.nuc.x; |
|
if (mitem.nuc.format == 'text') { |
|
if (this.tclass != mitem.nuc.tclass && this.tclass != '') this.FlushText(); |
|
if (this.tbuf == '' && this.cbuf == '') {this.tx = this.x} |
|
this.tbuf += mitem.nuc.html; this.tclass = mitem.nuc.tclass; |
|
} else { |
|
this.FlushClassed(); |
|
if (mitem.nuc.x || mitem.nuc.y) this.Place(mitem.nuc); |
|
if (this.hbuf == '') {this.hx = this.x} |
|
this.hbuf += mitem.nuc.html; |
|
} |
|
this.h = Math.max(this.h,mitem.nuc.h+mitem.nuc.y); this.bh = Math.max(this.bh,mitem.nuc.bh); |
|
this.d = Math.max(this.d,mitem.nuc.d-mitem.nuc.y); this.bd = Math.max(this.bd,mitem.nuc.bd); |
|
break; |
|
} |
|
} |
|
|
|
this.FlushClassed(); // make sure scaling is included |
|
if (this.dx) {this.hbuf += jsMath.HTML.Spacer(this.dx)} |
|
if (this.hbuf == '') {return jsMath.Box.Null} |
|
if (this.h == unset) {this.h = 0} |
|
if (this.d == unset) {this.d = 0} |
|
var box = new jsMath.Box('html',this.hbuf,this.w,this.h,this.d); |
|
box.bh = this.bh; box.bd = this.bd; |
|
return box; |
|
}, |
|
|
|
/* |
|
* Add the font to the buffered text and move it to the |
|
* classed-text buffer. |
|
*/ |
|
FlushText: function () { |
|
if (this.tbuf == '') return; |
|
this.cbuf += jsMath.Typeset.AddClass(this.tclass,this.tbuf); |
|
this.tbuf = ''; this.tclass = ''; |
|
}, |
|
|
|
/* |
|
* Add the script or scriptscript style to the text and |
|
* move it to the HTML buffer |
|
*/ |
|
FlushClassed: function () { |
|
this.FlushText(); |
|
if (this.cbuf == '') return; |
|
if (this.hbuf == '') {this.hx = this.tx} |
|
this.hbuf += jsMath.Typeset.AddStyle(this.style,this.size,this.cbuf); |
|
this.cbuf = ''; |
|
}, |
|
|
|
/* |
|
* Add a <SPAN> to position an item's HTML, and |
|
* adjust the items height and depth. |
|
* (This may be replaced buy one of the following browser-specific |
|
* versions by InitBrowser().) |
|
*/ |
|
Place: function (item) { |
|
var html = '<SPAN STYLE="position: relative;'; |
|
if (item.x) {html += ' margin-left:'+jsMath.HTML.Em(item.x)+';'} |
|
if (item.y) {html += ' top:'+jsMath.HTML.Em(-item.y)+';'} |
|
item.html = html + '">' + item.html + '</SPAN>'; |
|
item.h += item.y; item.d -= item.y; |
|
item.x = 0; item.y = 0; |
|
}, |
|
|
|
/* |
|
* A replacement for Place() above that fixes a bug in MSIE. |
|
* (A separate <SPAN> is used to backspace, otherwise the |
|
* contents are clipped incorrectly.) |
|
*/ |
|
PlaceSeparateNegative: function (item) { |
|
var html = '<SPAN STYLE="position: relative;'; |
|
// MSIE needs backspacing as separate SPAN |
|
if (item.x < 0) |
|
{html = '<SPAN STYLE="margin-left:'+jsMath.HTML.Em(item.x)+';"></SPAN>'+html} |
|
if (item.x > 0) {html += ' margin-left:'+jsMath.HTML.Em(item.x)+';'} |
|
if (item.y) {html += ' top:'+jsMath.HTML.Em(-item.y)+';'} |
|
item.html = html + '">' + item.html + '</SPAN>'; |
|
item.h += item.y; item.d -= item.y; |
|
item.x = 0; item.y = 0; |
|
}, |
|
|
|
/* |
|
* Here, the horizontal spacing is always done separately. |
|
*/ |
|
PlaceSeparateSkips: function (item) { |
|
if (item.y) |
|
{item.html = '<SPAN STYLE="position: relative; top:'+jsMath.HTML.Em(-item.y)+';' |
|
+ '">' + item.html + '</SPAN>'} |
|
if (item.x) |
|
{item.html = jsMath.msieSpaceFix |
|
+ '<SPAN STYLE="margin-left:'+jsMath.HTML.Em(item.x)+';">' |
|
+ '</SPAN>' + item.html} |
|
item.h += item.y; item.d -= item.y; |
|
item.x = 0; item.y = 0; |
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* The Parse object handles the parsing of the TeX input string, and creates |
|
* the mList to be typeset by the Typeset object above. |
|
*/ |
|
|
|
jsMath.Parse = function (s,font,size,style) { |
|
var parse = new jsMath.Parser(s,font,size,style); |
|
parse.Parse(); |
|
return parse; |
|
} |
|
|
|
jsMath.Parser = function (s,font,size,style) { |
|
this.string = s; this.i = 0; |
|
this.mlist = new jsMath.mList(null,font,size,style); |
|
} |
|
|
|
jsMath.Package(jsMath.Parser,{ |
|
|
|
// special characters |
|
cmd: '\\', |
|
open: '{', |
|
close: '}', |
|
|
|
// patterns for letters and numbers |
|
letter: /[a-z]/i, |
|
number: /[0-9]/, |
|
|
|
// the \mathchar definitions (see Appendix B of the TeXbook). |
|
mathchar: { |
|
'!': 0x5021, |
|
'(': 0x4028, |
|
')': 0x5029, |
|
'*': 0x2203, // \ast |
|
'+': 0x202B, |
|
',': 0x613B, |
|
'-': 0x2200, |
|
'.': 0x013A, |
|
'/': 0x013D, |
|
':': 0x303A, |
|
';': 0x603B, |
|
'<': 0x313C, |
|
'=': 0x303D, |
|
'>': 0x313E, |
|
'?': 0x503F, |
|
'[': 0x405B, |
|
']': 0x505D, |
|
// '{': 0x4266, |
|
// '}': 0x5267, |
|
'|': 0x026A |
|
}, |
|
|
|
// handle special \catcode characters |
|
special: { |
|
'^': 'HandleSuperscript', |
|
'_': 'HandleSubscript', |
|
' ': 'Space', |
|
"\t": 'Space', |
|
"\r": 'Space', |
|
"\n": 'Space', |
|
"'": 'Prime', |
|
'%': 'HandleComment', |
|
'&': 'HandleEntry' |
|
}, |
|
|
|
// the \mathchardef table (see Appendix B of the TeXbook). |
|
mathchardef: { |
|
// brace parts |
|
braceld: 0x37A, |
|
bracerd: 0x37B, |
|
bracelu: 0x37C, |
|
braceru: 0x37D, |
|
|
|
// Greek letters |
|
alpha: 0x010B, |
|
beta: 0x010C, |
|
gamma: 0x010D, |
|
delta: 0x010E, |
|
epsilon: 0x010F, |
|
zeta: 0x0110, |
|
eta: 0x0111, |
|
theta: 0x0112, |
|
iota: 0x0113, |
|
kappa: 0x0114, |
|
lambda: 0x0115, |
|
mu: 0x0116, |
|
nu: 0x0117, |
|
xi: 0x0118, |
|
pi: 0x0119, |
|
rho: 0x011A, |
|
sigma: 0x011B, |
|
tau: 0x011C, |
|
upsilon: 0x011D, |
|
phi: 0x011E, |
|
chi: 0x011F, |
|
psi: 0x0120, |
|
omega: 0x0121, |
|
varepsilon: 0x0122, |
|
vartheta: 0x0123, |
|
varpi: 0x0124, |
|
varrho: 0x0125, |
|
varsigma: 0x0126, |
|
varphi: 0x0127, |
|
|
|
Gamma: 0x7000, |
|
Delta: 0x7001, |
|
Theta: 0x7002, |
|
Lambda: 0x7003, |
|
Xi: 0x7004, |
|
Pi: 0x7005, |
|
Sigma: 0x7006, |
|
Upsilon: 0x7007, |
|
Phi: 0x7008, |
|
Psi: 0x7009, |
|
Omega: 0x700A, |
|
|
|
// Ord symbols |
|
aleph: 0x0240, |
|
imath: 0x017B, |
|
jmath: 0x017C, |
|
ell: 0x0160, |
|
wp: 0x017D, |
|
Re: 0x023C, |
|
Im: 0x023D, |
|
partial: 0x0140, |
|
infty: 0x0231, |
|
prime: 0x0230, |
|
emptyset: 0x023B, |
|
nabla: 0x0272, |
|
surd: 0x1270, |
|
top: 0x023E, |
|
bot: 0x023F, |
|
triangle: 0x0234, |
|
forall: 0x0238, |
|
exists: 0x0239, |
|
neg: 0x023A, |
|
lnot: 0x023A, |
|
flat: 0x015B, |
|
natural: 0x015C, |
|
sharp: 0x015D, |
|
clubsuit: 0x027C, |
|
diamondsuit: 0x027D, |
|
heartsuit: 0x027E, |
|
spadesuit: 0x027F, |
|
|
|
// big ops |
|
coprod: 0x1360, |
|
bigvee: 0x1357, |
|
bigwedge: 0x1356, |
|
biguplus: 0x1355, |
|
bigcap: 0x1354, |
|
bigcup: 0x1353, |
|
intop: 0x1352, |
|
prod: 0x1351, |
|
sum: 0x1350, |
|
bigotimes: 0x134E, |
|
bigoplus: 0x134C, |
|
bigodot: 0x134A, |
|
ointop: 0x1348, |
|
bigsqcup: 0x1346, |
|
smallint: 0x1273, |
|
|
|
// binary operations |
|
triangleleft: 0x212F, |
|
triangleright: 0x212E, |
|
bigtriangleup: 0x2234, |
|
bigtriangledown: 0x2235, |
|
wedge: 0x225E, |
|
land: 0x225E, |
|
vee: 0x225F, |
|
lor: 0x225F, |
|
cap: 0x225C, |
|
cup: 0x225B, |
|
ddagger: 0x227A, |
|
dagger: 0x2279, |
|
sqcap: 0x2275, |
|
sqcup: 0x2274, |
|
uplus: 0x225D, |
|
amalg: 0x2271, |
|
diamond: 0x2205, |
|
bullet: 0x220F, |
|
wr: 0x226F, |
|
div: 0x2204, |
|
odot: 0x220C, |
|
oslash: 0x220B, |
|
otimes: 0x220A, |
|
ominus: 0x2209, |
|
oplus: 0x2208, |
|
mp: 0x2207, |
|
pm: 0x2206, |
|
circ: 0x220E, |
|
bigcirc: 0x220D, |
|
setminus: 0x226E, // for set difference A\setminus B |
|
cdot: 0x2201, |
|
ast: 0x2203, |
|
times: 0x2202, |
|
star: 0x213F, |
|
|
|
// Relations |
|
propto: 0x322F, |
|
sqsubseteq: 0x3276, |
|
sqsupseteq: 0x3277, |
|
parallel: 0x326B, |
|
mid: 0x326A, |
|
dashv: 0x3261, |
|
vdash: 0x3260, |
|
leq: 0x3214, |
|
le: 0x3214, |
|
geq: 0x3215, |
|
ge: 0x3215, |
|
succ: 0x321F, |
|
prec: 0x321E, |
|
approx: 0x3219, |
|
succeq: 0x3217, |
|
preceq: 0x3216, |
|
supset: 0x321B, |
|
subset: 0x321A, |
|
supseteq: 0x3213, |
|
subseteq: 0x3212, |
|
'in': 0x3232, |
|
ni: 0x3233, |
|
owns: 0x3233, |
|
gg: 0x321D, |
|
ll: 0x321C, |
|
not: 0x3236, |
|
sim: 0x3218, |
|
simeq: 0x3227, |
|
perp: 0x323F, |
|
equiv: 0x3211, |
|
asymp: 0x3210, |
|
smile: 0x315E, |
|
frown: 0x315F, |
|
|
|
// Arrows |
|
Leftrightarrow: 0x322C, |
|
Leftarrow: 0x3228, |
|
Rightarrow: 0x3229, |
|
leftrightarrow: 0x3224, |
|
leftarrow: 0x3220, |
|
gets: 0x3220, |
|
rightarrow: 0x3221, |
|
to: 0x3221, |
|
mapstochar: 0x3237, |
|
leftharpoonup: 0x3128, |
|
leftharpoondown: 0x3129, |
|
rightharpoonup: 0x312A, |
|
rightharpoondown: 0x312B, |
|
nearrow: 0x3225, |
|
searrow: 0x3226, |
|
nwarrow: 0x322D, |
|
swarrow: 0x322E, |
|
|
|
hbarchar: 0x0016, // for \hbar |
|
lhook: 0x312C, |
|
rhook: 0x312D, |
|
|
|
ldotp: 0x613A, // ldot as a punctuation mark |
|
cdotp: 0x6201, // cdot as a punctuation mark |
|
colon: 0x603A, // colon as a punctuation mark |
|
|
|
'#': 0x7023, |
|
'$': 0x7024, |
|
'%': 0x7025, |
|
'&': 0x7026 |
|
}, |
|
|
|
// The delimiter table (see Appendix B of the TeXbook) |
|
delimiter: { |
|
'(': 0x0028300, |
|
')': 0x0029301, |
|
'[': 0x005B302, |
|
']': 0x005D303, |
|
'<': 0x026830A, |
|
'>': 0x026930B, |
|
'/': 0x002F30E, |
|
'|': 0x026A30C, |
|
'.': 0x0000000, |
|
'\\': 0x026E30F, |
|
'\\lmoustache': 0x437A340, // top from (, bottom from ) |
|
'\\rmoustache': 0x537B341, // top from ), bottom from ( |
|
'\\lgroup': 0x462833A, // extensible ( with sharper tips |
|
'\\rgroup': 0x562933B, // extensible ) with sharper tips |
|
'\\arrowvert': 0x026A33C, // arrow without arrowheads |
|
'\\Arrowvert': 0x026B33D, // double arrow without arrowheads |
|
// '\\bracevert': 0x077C33E, // the vertical bar that extends braces |
|
'\\bracevert': 0x026A33E, // we don't load tt, so use | instead |
|
'\\Vert': 0x026B30D, |
|
'\\|': 0x026B30D, |
|
'\\vert': 0x026A30C, |
|
'\\uparrow': 0x3222378, |
|
'\\downarrow': 0x3223379, |
|
'\\updownarrow': 0x326C33F, |
|
'\\Uparrow': 0x322A37E, |
|
'\\Downarrow': 0x322B37F, |
|
'\\Updownarrow': 0x326D377, |
|
'\\backslash': 0x026E30F, // for double coset G\backslash H |
|
'\\rangle': 0x526930B, |
|
'\\langle': 0x426830A, |
|
'\\rbrace': 0x5267309, |
|
'\\lbrace': 0x4266308, |
|
'\\}': 0x5267309, |
|
'\\{': 0x4266308, |
|
'\\rceil': 0x5265307, |
|
'\\lceil': 0x4264306, |
|
'\\rfloor': 0x5263305, |
|
'\\lfloor': 0x4262304 |
|
}, |
|
|
|
/* |
|
* The basic macros for plain TeX. |
|
* |
|
* When the control sequence on the left is called, the JavaScript |
|
* funtion on the right is called, with the name of the control sequence |
|
* as its first parameter (this way, the same function can be called by |
|
* several different control sequences to do similar actions, and the |
|
* function can still tell which TeX command was issued). If the right |
|
* is an array, the first entry is the routine to call, and the |
|
* remaining entries in the array are parameters to pass to the function |
|
* as the second parameter (they are in an array reference). |
|
* |
|
* Note: TeX macros as defined by the user are discussed below. |
|
*/ |
|
macros: { |
|
displaystyle: ['HandleStyle','D'], |
|
textstyle: ['HandleStyle','T'], |
|
scriptstyle: ['HandleStyle','S'], |
|
scriptscriptstyle: ['HandleStyle','SS'], |
|
|
|
rm: ['HandleFont',0], |
|
mit: ['HandleFont',1], |
|
oldstyle: ['HandleFont',1], |
|
cal: ['HandleFont',2], |
|
it: ['HandleFont',4], |
|
bf: ['HandleFont',6], |
|
|
|
left: 'HandleLeft', |
|
right: 'HandleRight', |
|
|
|
arcsin: ['NamedOp',0], |
|
arccos: ['NamedOp',0], |
|
arctan: ['NamedOp',0], |
|
arg: ['NamedOp',0], |
|
cos: ['NamedOp',0], |
|
cosh: ['NamedOp',0], |
|
cot: ['NamedOp',0], |
|
coth: ['NamedOp',0], |
|
csc: ['NamedOp',0], |
|
deg: ['NamedOp',0], |
|
det: 'NamedOp', |
|
dim: ['NamedOp',0], |
|
exp: ['NamedOp',0], |
|
gcd: 'NamedOp', |
|
hom: ['NamedOp',0], |
|
inf: 'NamedOp', |
|
ker: ['NamedOp',0], |
|
lg: ['NamedOp',0], |
|
lim: 'NamedOp', |
|
liminf: ['NamedOp',null,'lim<SPAN STYLE="margin-left: '+1/6+'em"></SPAN>inf'], |
|
limsup: ['NamedOp',null,'lim<SPAN STYLE="margin-left: '+1/6+'em"></SPAN>sup'], |
|
ln: ['NamedOp',0], |
|
log: ['NamedOp',0], |
|
max: 'NamedOp', |
|
min: 'NamedOp', |
|
Pr: 'NamedOp', |
|
sec: ['NamedOp',0], |
|
sin: ['NamedOp',0], |
|
sinh: ['NamedOp',0], |
|
sup: 'NamedOp', |
|
tan: ['NamedOp',0], |
|
tanh: ['NamedOp',0], |
|
|
|
vcenter: ['HandleAtom','vcenter'], |
|
overline: ['HandleAtom','overline'], |
|
underline: ['HandleAtom','underline'], |
|
over: 'HandleOver', |
|
overwithdelims: 'HandleOver', |
|
atop: 'HandleOver', |
|
atopwithdelims: 'HandleOver', |
|
above: 'HandleOver', |
|
abovewithdelims: 'HandleOver', |
|
brace: ['HandleOver','\\{','\\}'], |
|
brack: ['HandleOver','[',']'], |
|
choose: ['HandleOver','(',')'], |
|
|
|
overbrace: ['HandleLeaders','downbrace',1], |
|
underbrace: ['HandleLeaders','upbrace',1,1], |
|
overrightarrow: ['HandleLeaders','rightarrow'], |
|
overleftarrow: ['HandleLeaders','leftarrow'], |
|
|
|
llap: 'HandleLap', |
|
rlap: 'HandleLap', |
|
ulap: 'HandleLap', |
|
dlap: 'HandleLap', |
|
raise: 'RaiseLower', |
|
lower: 'RaiseLower', |
|
moveleft: 'MoveLeftRight', |
|
moveright: 'MoveLeftRight', |
|
|
|
frac: 'Frac', |
|
root: 'Root', |
|
sqrt: 'Sqrt', |
|
|
|
// TeX substitution macros |
|
hbar: ['Macro','\\hbarchar\\kern-.5em h'], |
|
ne: ['Macro','\\not='], |
|
neq: ['Macro','\\not='], |
|
notin: ['Macro','\\mathrel{\\rlap{\\kern2mu/}}\\in'], |
|
cong: ['Macro','\\mathrel{\\lower2mu{\\mathrel{{\\rlap{=}\\raise6mu\\sim}}}}'], |
|
bmod: ['Macro','\\mathbin{\\rm mod}'], |
|
pmod: ['Macro','\\kern 18mu ({\\rm mod}\\,\\,#1)',1], |
|
'int': ['Macro','\\intop\\nolimits'], |
|
oint: ['Macro','\\ointop\\nolimits'], |
|
doteq: ['Macro','\\buildrel\\textstyle.\\over='], |
|
ldots: ['Macro','\\mathinner{\\ldotp\\ldotp\\ldotp}'], |
|
cdots: ['Macro','\\mathinner{\\cdotp\\cdotp\\cdotp}'], |
|
vdots: ['Macro','\\mathinner{\\rlap{\\raise8pt{\\rule 0pt 6pt 0pt .}}\\rlap{\\raise4pt{.}}.}'], |
|
ddots: ['Macro','\\mathinner{\\kern1mu\\raise7pt{\\rule 0pt 7pt 0pt .}\\kern2mu\\raise4pt{.}\\kern2mu\\raise1pt{.}\\kern1mu}'], |
|
joinrel: ['Macro','\\mathrel{\\kern-4mu}'], |
|
relbar: ['Macro','\\mathrel{\\smash-}'], // \smash, because - has the same height as + |
|
Relbar: ['Macro','\\mathrel='], |
|
bowtie: ['Macro','\\mathrel\\triangleright\\joinrel\\mathrel\\triangleleft'], |
|
models: ['Macro','\\mathrel|\\joinrel='], |
|
mapsto: ['Macro','\\mapstochar\\rightarrow'], |
|
rightleftharpoons: ['Macro','\\vcenter{\\mathrel{\\rlap{\\raise3mu{\\rightharpoonup}}}\\leftharpoondown}'], |
|
hookrightarrow: ['Macro','\\lhook\\joinrel\\rightarrow'], |
|
hookleftarrow: ['Macro','\\leftarrow\\joinrel\\rhook'], |
|
Longrightarrow: ['Macro','\\Relbar\\joinrel\\Rightarrow'], |
|
longrightarrow: ['Macro','\\relbar\\joinrel\\rightarrow'], |
|
longleftarrow: ['Macro','\\leftarrow\\joinrel\\relbar'], |
|
Longleftarrow: ['Macro','\\Leftarrow\\joinrel\\Relbar'], |
|
longmapsto: ['Macro','\\mapstochar\\char{cmsy10}{0}\\joinrel\\rightarrow'], |
|
longleftrightarrow: ['Macro','\\leftarrow\\joinrel\\rightarrow'], |
|
Longleftrightarrow: ['Macro','\\Leftarrow\\joinrel\\Rightarrow'], |
|
iff: ['Macro','\\;\\Longleftrightarrow\\;'], |
|
mathrm: ['Macro','{\\rm #1}',1], |
|
mathbf: ['Macro','{\\bf #1}',1], |
|
mathbb: ['Macro','{\\bf #1}',1], |
|
mathit: ['Macro','{\\it #1}',1], |
|
|
|
TeX: ['Macro','T\\kern-.1667em\\lower.5ex{E}\\kern-.125em X'], |
|
|
|
limits: ['Limits',1], |
|
nolimits: ['Limits',0], |
|
|
|
',': ['Spacer',1/6], |
|
':': ['Spacer',1/6], // for LaTeX |
|
'>': ['Spacer',2/9], |
|
';': ['Spacer',5/18], |
|
'!': ['Spacer',-1/6], |
|
enspace: ['Spacer',1/2], |
|
quad: ['Spacer',1], |
|
qquad: ['Spacer',2], |
|
thinspace: ['Spacer',1/6], |
|
negthinspace: ['Spacer',-1/6], |
|
|
|
hskip: 'Hskip', |
|
kern: 'Hskip', |
|
rule: ['Rule','black'], |
|
space: ['Rule','blank'], |
|
|
|
big: ['MakeBig','ord',0.85], |
|
Big: ['MakeBig','ord',1.15], |
|
bigg: ['MakeBig','ord',1.45], |
|
Bigg: ['MakeBig','ord',1.75], |
|
bigl: ['MakeBig','open',0.85], |
|
Bigl: ['MakeBig','open',1.15], |
|
biggl: ['MakeBig','open',1.45], |
|
Biggl: ['MakeBig','open',1.75], |
|
bigr: ['MakeBig','close',0.85], |
|
Bigr: ['MakeBig','close',1.15], |
|
biggr: ['MakeBig','close',1.45], |
|
Biggr: ['MakeBig','close',1.75], |
|
bigm: ['MakeBig','rel',0.85], |
|
Bigm: ['MakeBig','rel',1.15], |
|
biggm: ['MakeBig','rel',1.45], |
|
Biggm: ['MakeBig','rel',1.75], |
|
|
|
mathord: ['HandleAtom','ord'], |
|
mathop: ['HandleAtom','op'], |
|
mathopen: ['HandleAtom','open'], |
|
mathclose: ['HandleAtom','close'], |
|
mathbin: ['HandleAtom','bin'], |
|
mathrel: ['HandleAtom','rel'], |
|
mathpunct: ['HandleAtom','punct'], |
|
mathinner: ['HandleAtom','inner'], |
|
|
|
mathchoice: 'MathChoice', |
|
buildrel: 'BuildRel', |
|
|
|
hbox: 'HBox', |
|
text: 'HBox', |
|
mbox: 'HBox', |
|
fbox: 'FBox', |
|
|
|
strut: 'Strut', |
|
mathstrut: ['Macro','\\vphantom{(}'], |
|
phantom: ['Phantom',1,1], |
|
vphantom: ['Phantom',1,0], |
|
hphantom: ['Phantom',0,1], |
|
smash: 'Smash', |
|
|
|
acute: ['MathAccent', 0x7013], |
|
grave: ['MathAccent', 0x7012], |
|
ddot: ['MathAccent', 0x707F], |
|
tilde: ['MathAccent', 0x707E], |
|
bar: ['MathAccent', 0x7016], |
|
breve: ['MathAccent', 0x7015], |
|
check: ['MathAccent', 0x7014], |
|
hat: ['MathAccent', 0x705E], |
|
vec: ['MathAccent', 0x017E], |
|
dot: ['MathAccent', 0x705F], |
|
widetilde: ['MathAccent', 0x0365], |
|
widehat: ['MathAccent', 0x0362], |
|
|
|
'_': ['Replace','ord','_','normal',-.4,.1], |
|
' ': ['Replace','ord',' ','normal'], |
|
angle: ['Replace','ord','∠','normal'], |
|
|
|
matrix: 'Matrix', |
|
array: 'Matrix', // ### still need to do alignment options ### |
|
pmatrix: ['Matrix','(',')','c'], |
|
cases: ['Matrix','\\{','.',['l','l']], |
|
cr: 'HandleRow', |
|
'\\': 'HandleRow', |
|
|
|
// LaTeX |
|
begin: 'Begin', |
|
end: 'End', |
|
tiny: ['HandleSize',0], |
|
Tiny: ['HandleSize',1], // non-standard |
|
scriptsize: ['HandleSize',2], |
|
small: ['HandleSize',3], |
|
normalsize: ['HandleSize',4], |
|
large: ['HandleSize',5], |
|
Large: ['HandleSize',6], |
|
LARGE: ['HandleSize',7], |
|
huge: ['HandleSize',8], |
|
Huge: ['HandleSize',9], |
|
dots: ['Macro','\\ldots'], |
|
|
|
// Extensions to TeX |
|
color: 'Color', |
|
href: 'Href', |
|
'class': 'Class', |
|
style: 'Style', |
|
unicode: 'Unicode', |
|
|
|
// debugging and test routines |
|
'char': 'Char', |
|
test: 'Test' |
|
}, |
|
|
|
/* |
|
* LaTeX environments |
|
*/ |
|
environments: { |
|
array: 'Array', |
|
matrix: ['Array',null,null,'c'], |
|
pmatrix: ['Array','(',')','c'], |
|
bmatrix: ['Array','[',']','c'], |
|
Bmatrix: ['Array','\\{','\\}','c'], |
|
vmatrix: ['Array','\\vert','\\vert','c'], |
|
Vmatrix: ['Array','\\Vert','\\Vert','c'], |
|
cases: ['Array','\\{','.','ll'], |
|
eqnarray: ['Array',null,null,'rcl',[5/18,5/18]] |
|
}, |
|
|
|
/* |
|
* The horizontally stretchable delimiters |
|
*/ |
|
leaders: { |
|
downbrace: {left: 0x37A, lmid: 0x37D, rmid: 0x37C, right: 0x37B}, |
|
upbrace: {left: 0x37C, lmid: 0x37B, rmid: 0x37A, right: 0x37D}, |
|
leftarrow: {left: 0x220, rep: 0x200}, |
|
rightarrow: {rep: 0x200, right: 0x221} |
|
}, |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* Add special characters to list above. (This makes it possible |
|
* to define them in a variable that the user can change.) |
|
*/ |
|
AddSpecial: function (obj) { |
|
for (var id in obj) { |
|
jsMath.Parser.prototype.special[jsMath.Parser.prototype[id]] = obj[id]; |
|
} |
|
}, |
|
|
|
/* |
|
* Throw an error |
|
*/ |
|
Error: function (s) { |
|
this.i = this.string.length; |
|
if (s.error) {this.error = s.error} else { |
|
if (!this.error) {this.error = s} |
|
} |
|
}, |
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* Check if the next character is a space |
|
*/ |
|
nextIsSpace: function () { |
|
return this.string.charAt(this.i) == ' '; |
|
}, |
|
|
|
/* |
|
* Parse a substring to get its mList, and return it. |
|
* Check that no errors occured |
|
*/ |
|
Process: function (arg) { |
|
var data = this.mlist.data; |
|
arg = jsMath.Parse(arg,data.font,data.size,data.style); |
|
if (arg.error) {this.Error(arg); return} |
|
if (arg.mlist.Length() == 0) {return null} |
|
if (arg.mlist.Length() == 1) { |
|
var atom = arg.mlist.Last(); |
|
if (atom.atom && atom.type == 'ord' && atom.nuc && |
|
!atom.sub && !atom.sup && (atom.nuc.type == 'text' || atom.nuc.type == 'TeX')) |
|
{return atom.nuc} |
|
} |
|
return {type: 'mlist', mlist: arg.mlist}; |
|
}, |
|
|
|
/* |
|
* Get and return a control-sequence name from the TeX string |
|
*/ |
|
GetCommand: function () { |
|
var letter = /^([a-z]+|.) ?/i; |
|
var cmd = letter.exec(this.string.slice(this.i)); |
|
if (cmd) {this.i += cmd[1].length; return cmd[1]} |
|
this.Error("Missing control sequnece name at end of string or argument"); return |
|
}, |
|
|
|
/* |
|
* Get and return a TeX argument (either a single character or control sequence, |
|
* or the contents of the next set of braces). |
|
*/ |
|
GetArgument: function (name,noneOK) { |
|
while (this.nextIsSpace()) {this.i++} |
|
if (this.i >= this.string.length) {if (!noneOK) this.Error("Missing argument for "+name); return} |
|
if (this.string.charAt(this.i) == this.close) {if (!noneOK) this.Error("Extra close brace"); return} |
|
if (this.string.charAt(this.i) == this.cmd) {this.i++; return this.cmd+this.GetCommand()} |
|
if (this.string.charAt(this.i) != this.open) {return this.string.charAt(this.i++)} |
|
var j = ++this.i; var pcount = 1; var c = ''; |
|
while (this.i < this.string.length) { |
|
c = this.string.charAt(this.i++); |
|
if (c == this.cmd) {this.i++} |
|
else if (c == this.open) {pcount++} |
|
else if (c == this.close) { |
|
if (pcount == 0) {this.Error("Extra close brace"); return} |
|
if (--pcount == 0) {return this.string.slice(j,this.i-1)} |
|
} |
|
} |
|
this.Error("Missing close brace"); |
|
}, |
|
|
|
/* |
|
* Get an argument and process it into an mList |
|
*/ |
|
ProcessArg: function (name) { |
|
var arg = this.GetArgument(name); if (this.error) return; |
|
return this.Process(arg); |
|
}, |
|
|
|
/* |
|
* Get the name of a delimiter (check it in the delimiter list). |
|
*/ |
|
GetDelimiter: function (name) { |
|
while (this.nextIsSpace()) {this.i++} |
|
var c = this.string.charAt(this.i); |
|
if (this.i < this.string.length) { |
|
this.i++; |
|
if (c == this.cmd) {c = '\\'+this.GetCommand(name); if (this.error) return} |
|
if (this.delimiter[c] != null) {return this.delimiter[c]} |
|
} |
|
this.Error("Missing or unrecognized delimiter for "+name); |
|
}, |
|
|
|
/* |
|
* Get a dimension (including its units). |
|
* Convert the dimen to em's, except for mu's, which must be |
|
* converted when typeset. |
|
*/ |
|
GetDimen: function (name,nomu) { |
|
var rest = this.string.slice(this.i); |
|
var match = rest.match(/^\s*([-+]?(\.\d+|\d+(\.\d*)?))(pt|em|ex|mu|px)/); |
|
if (!match) {this.Error("Missing dimension or its units for "+name); return} |
|
this.i += match[0].length; |
|
if (this.nextIsSpace()) {this.i++} |
|
var d = match[1]-0; |
|
if (match[4] == 'px') {d /= jsMath.em} |
|
else if (match[4] == 'pt') {d /= 10} |
|
else if (match[4] == 'ex') {d *= jsMath.TeX.x_height} |
|
else if (match[4] == 'mu') {if (nomu) {d = d/18} else {d = [d,'mu']}} |
|
return d; |
|
}, |
|
|
|
/* |
|
* Get the next non-space character |
|
*/ |
|
GetNext: function () { |
|
while (this.nextIsSpace()) {this.i++} |
|
return this.string.charAt(this.i); |
|
}, |
|
|
|
/* |
|
* Get an optional LaTeX argument in brackets |
|
*/ |
|
GetBrackets: function (name) { |
|
var c = this.GetNext(); if (c != '[') return ''; |
|
var start = ++this.i; var pcount = 0; |
|
while (this.i < this.string.length) { |
|
var c = this.string.charAt(this.i++); |
|
if (c == '{') {pcount++} |
|
else if (c == '}') { |
|
if (pcount == 0) |
|
{this.Error("Extra close brace while looking for ']'"); return} |
|
pcount --; |
|
} else if (c == this.cmd) { |
|
this.i++; |
|
} else if (c == ']') { |
|
if (pcount == 0) {return this.string.slice(start,this.i-1)} |
|
} |
|
} |
|
this.Error("Couldn't find closing ']' for argument to "+this.cmd+name); |
|
}, |
|
|
|
/* |
|
* Get everything up to the given control sequence name (token) |
|
*/ |
|
GetUpto: function (name,token) { |
|
while (this.nextIsSpace()) {this.i++} |
|
var start = this.i; var pcount = 0; |
|
while (this.i < this.string.length) { |
|
var c = this.string.charAt(this.i++); |
|
if (c == '{') {pcount++} |
|
else if (c == '}') { |
|
if (pcount == 0) |
|
{this.Error("Extra close brace while looking for "+this.cmd+token); return} |
|
pcount --; |
|
} else if (c == this.cmd) { |
|
// really need separate counter for begin/end |
|
// and it should really be a stack (new pcount for each begin) |
|
if (this.string.slice(this.i,this.i+5) == "begin") {pcount++; this.i+=4} |
|
else if (this.string.slice(this.i,this.i+3) == "end") { |
|
if (pcount > 0) {pcount--; this.i += 2} |
|
} |
|
if (pcount == 0) { |
|
if (this.string.slice(this.i,this.i+token.length) == token) { |
|
c = this.string.charAt(this.i+token.length); |
|
if (c.match(/[^a-z]/i) || !token.match(/[a-z]/i)) { |
|
var arg = this.string.slice(start,this.i-1); |
|
this.i += token.length; |
|
return arg; |
|
} |
|
} |
|
} |
|
this.i++; |
|
} |
|
} |
|
this.Error("Couldn't find "+this.cmd+token+" for "+name); |
|
}, |
|
|
|
/* |
|
* Get a parameter delimited by a control sequence, and |
|
* process it to get its mlist |
|
*/ |
|
ProcessUpto: function (name,token) { |
|
var arg = this.GetUpto(name,token); if (this.error) return; |
|
return this.Process(arg); |
|
}, |
|
|
|
/* |
|
* Get everything up to \end{env} |
|
*/ |
|
GetEnd: function (env) { |
|
var body = ''; var name = ''; |
|
while (name != env) { |
|
body += this.GetUpto('begin{'+env+'}','end'); if (this.error) return; |
|
name = this.GetArgument(this.cmd+'end'); if (this.error) return; |
|
} |
|
return body; |
|
}, |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
|
|
/* |
|
* Ignore spaces |
|
*/ |
|
Space: function () {}, |
|
|
|
/* |
|
* Collect together any primes and convert them to a superscript |
|
*/ |
|
Prime: function (c) { |
|
var base = this.mlist.Last(); |
|
if (base == null || (!base.atom && base.type != 'box' && base.type != 'frac')) |
|
{base = this.mlist.Add(jsMath.mItem.Atom('ord',null))} |
|
if (base.sup) {this.Error("Prime causes double exponent: use braces to clarify"); return} |
|
var sup = ''; |
|
while (c == "'") {sup += '\\prime'; c = this.GetNext(); if (c == "'") {this.i++}} |
|
base.sup = this.Process(sup); |
|
}, |
|
|
|
/* |
|
* Raise or lower its parameter by a given amount |
|
* @@@ Note that this is different from TeX, which requires an \hbox @@@ |
|
* ### make this work with mu's ### |
|
*/ |
|
RaiseLower: function (name) { |
|
var h = this.GetDimen(this.cmd+name,1); if (this.error) return; |
|
var box = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
if (name == 'lower') {h = -h} |
|
this.mlist.Add(new jsMath.mItem('raise',{nuc: box, raise: h})); |
|
}, |
|
|
|
/* |
|
* Shift an expression to the right or left |
|
* @@@ Note that this is different from TeX, which requires a \vbox @@@ |
|
* ### make this work with mu's ### |
|
*/ |
|
MoveLeftRight: function (name) { |
|
var x = this.GetDimen(this.cmd+name,1); if (this.error) return; |
|
var box = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
if (name == 'moveleft') {x = -x} |
|
this.mlist.Add(jsMath.mItem.Space(x)); |
|
this.mlist.Add(jsMath.mItem.Atom('ord',box)); |
|
this.mlist.Add(jsMath.mItem.Space(-x)); |
|
}, |
|
|
|
/* |
|
* Show the argument in a particular color |
|
* ### doesn't affect horizontal rules; can we fix that? ### |
|
*/ |
|
Color: function (name) { |
|
var color = this.GetArgument(this.cmd+name); if (this.error) return; |
|
// check that it looks like a color? |
|
this.AddHTML(name,['<SPAN STYLE="color: '+color+'">','</SPAN>']); |
|
}, |
|
|
|
/* |
|
* Make the argument be a link |
|
*/ |
|
Href: function (name) { |
|
var href = this.GetArgument(this.cmd+name); if (this.error) return; |
|
this.AddHTML(name,['<A CLASS="mathlink" HREF="'+href+'">','</A>']); |
|
}, |
|
|
|
/* |
|
* Apply a CSS class to the argument |
|
*/ |
|
Class: function (name) { |
|
var clss = this.GetArgument(this.cmd+name); if (this.error) return; |
|
this.AddHTML(name,['<SPAN CLASS="'+clss+'">','</SPAN>']); |
|
}, |
|
|
|
/* |
|
* Apply a CSS style to the argument |
|
*/ |
|
Style: function (name) { |
|
var style = this.GetArgument(this.cmd+name); if (this.error) return; |
|
this.AddHTML(name,['<SPAN STYLE="'+style+'">','</SPAN>']); |
|
}, |
|
|
|
/* |
|
* Insert some raw HTML around the argument (this will not affect |
|
* the spacing or other TeX features) |
|
*/ |
|
AddHTML: function (name,params) { |
|
var data = this.mlist.data; |
|
var arg = this.GetArgument(this.cmd+name); if (this.error) return; |
|
arg = jsMath.Parse(arg,data.font,data.size,data.style); |
|
if (arg.error) {this.Error(arg); return} |
|
this.mlist.Add(jsMath.mItem.HTML(params[0])); |
|
for (var i = 0; i < arg.mlist.Length(); i++) {this.mlist.Add(arg.mlist.Get(i))} |
|
this.mlist.Add(jsMath.mItem.HTML(params[1])); |
|
}, |
|
|
|
/* |
|
* Insert a unicode reference as an Ord atom. Its argument should |
|
* be the unicode code point, e.g. \unicode{8211}, or \unicode{x203F}. |
|
* You can also specify the height and depth in ems, e.g., |
|
* \unicode{8211,.6,-.3} |
|
*/ |
|
Unicode: function (name) { |
|
var arg = this.GetArgument(this.cmd+name); if (this.error) return; |
|
arg = arg.split(','); arg[0] = '&#'+arg[0]+';'; |
|
if (!arg[1]) {arg[1] = 'normal'} |
|
this.mlist.Add(jsMath.mItem.TextAtom('ord',arg[0],arg[1],arg[2],arg[3])); |
|
}, |
|
|
|
/* |
|
* Implements \frac{num}{den} |
|
*/ |
|
Frac: function (name) { |
|
var num = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var den = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(jsMath.mItem.Fraction('over',num,den)); |
|
}, |
|
|
|
/* |
|
* Implements \sqrt[n]{...} |
|
*/ |
|
Sqrt: function (name) { |
|
var n = this.GetBrackets(this.cmd+name); if (this.error) return; |
|
var arg = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
box = jsMath.mItem.Atom('radical',arg); |
|
if (this.n != '') {box.root = this.Process(n); if (this.error) return} |
|
this.mlist.Add(box); |
|
}, |
|
|
|
/* |
|
* Implements \root...\of{...} |
|
*/ |
|
Root: function (name) { |
|
var n = this.ProcessUpto(this.cmd+name,'of'); if (this.error) return; |
|
var arg = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
box = jsMath.mItem.Atom('radical',arg); |
|
box.root = n; this.mlist.Add(box); |
|
}, |
|
|
|
|
|
/* |
|
* Implements \mathchoice{}{}{}{} |
|
*/ |
|
MathChoice: function (name) { |
|
var D = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var T = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var S = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var SS = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var box = new jsMath.mItem('choice',{D: D, T: T, S: S, SS: SS}); |
|
this.mlist.Add(new jsMath.mItem('choice',{D: D, T: T, S: S, SS: SS})); |
|
}, |
|
|
|
/* |
|
* Implements \buildrel...\over{...} |
|
*/ |
|
BuildRel: function (name) { |
|
var top = this.ProcessUpto(this.cmd+name,'over'); if (this.error) return; |
|
var bot = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var op = jsMath.mItem.Atom('op',bot); |
|
op.limits = 1; op.sup = top; |
|
this.mlist.Add(op); |
|
}, |
|
|
|
/* |
|
* Create a delimiter of the type and size specified in the parameters |
|
*/ |
|
MakeBig: function (name,data) { |
|
var type = data[0]; var h = data[1] * jsMath.p_height; |
|
var delim = this.GetDelimiter(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(jsMath.mItem.Atom(type,jsMath.Box.Delimiter(h,delim,'T'))); |
|
}, |
|
|
|
/* |
|
* Insert the specified character in the given font. |
|
*/ |
|
Char: function (name) { |
|
var font = this.GetArgument(this.cmd+name); if (this.error) return; |
|
var n = this.GetArgument(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(jsMath.mItem.Typeset(jsMath.Box.TeX(n-0,font,'T',this.mlist.data.size))); |
|
return; |
|
}, |
|
|
|
/* |
|
* Create an array or matrix. |
|
*/ |
|
Matrix: function (name,delim) { |
|
var data = this.mlist.data; |
|
var arg = this.GetArgument(this.cmd+name); if (this.error) return; |
|
var parse = new jsMath.Parser(arg+'\\\\',null,data.size); |
|
parse.matrix = name; parse.row = []; parse.table = []; |
|
parse.Parse(); if (parse.error) {this.Error(parse); return} |
|
parse.HandleRow(name,1); // be sure the last row is recorded |
|
var box = jsMath.Box.Layout(data.size,parse.table,delim[2]); |
|
// Add parentheses, if needed |
|
if (delim[0] && delim[1]) { |
|
var left = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[0]],'T'); |
|
var right = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[1]],'T'); |
|
box = jsMath.Box.SetList([left,box,right],data.style,data.size); |
|
} |
|
this.mlist.Add(jsMath.mItem.Atom((delim[0]? 'inner': 'ord'),box)); |
|
}, |
|
|
|
/* |
|
* When we see an '&', try to add a matrix entry to the row data. |
|
* (Use all the data in the current mList, and then clear it) |
|
*/ |
|
HandleEntry: function (name) { |
|
if (!this.matrix) |
|
{this.Error(name+" can only appear in a matrix or array"); return} |
|
if (this.mlist.data.openI != null) { |
|
var open = this.mlist.Get(this.mlist.data.openI); |
|
if (open.left) {this.Error("Missing "+this.cmd+"right")} |
|
else {this.Error("Missing close brace")} |
|
} |
|
if (this.mlist.data.overI != null) {this.mlist.Over()} |
|
var data = this.mlist.data; |
|
this.mlist.Atomize('T',data.size); var box = this.mlist.Typeset('T',data.size); |
|
this.row[this.row.length] = box; |
|
this.mlist = new jsMath.mList(null,null,data.size); |
|
}, |
|
|
|
/* |
|
* When we see a \cr or \\, try to add a row to the table |
|
*/ |
|
HandleRow: function (name,last) { |
|
if (!this.matrix) |
|
{this.Error(this.cmd+name+" can only appear in a matrix or array"); return} |
|
this.HandleEntry(name); |
|
if (!last || this.row.length > 1 || this.row[0].format != 'null') |
|
{this.table[this.table.length] = this.row} |
|
this.row = []; |
|
}, |
|
|
|
/* |
|
* LaTeX array environment |
|
*/ |
|
Array: function (name,delim) { |
|
var columns = delim[2]; var cspacing = delim[3]; |
|
if (!columns) { |
|
columns = this.GetArgument(this.cmd+'begin{'+name+'}'); |
|
if (this.error) return; |
|
} |
|
columns = columns.replace(/[^clr]/g,''); |
|
columns = columns.split(''); |
|
var data = this.mlist.data; |
|
var arg = this.GetEnd(name); if (this.error) return; |
|
var parse = new jsMath.Parser(arg+'\\\\',null,data.size); |
|
parse.matrix = name; parse.row = []; parse.table = []; |
|
parse.Parse(); if (parse.error) {this.Error(parse); return} |
|
parse.HandleRow(name,1); // be sure the last row is recorded |
|
var box = jsMath.Box.Layout(data.size,parse.table,columns,cspacing); |
|
// Add parentheses, if needed |
|
if (delim[0] && delim[1]) { |
|
var left = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[0]],'T'); |
|
var right = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[1]],'T'); |
|
box = jsMath.Box.SetList([left,box,right],data.style,data.size); |
|
} |
|
this.mlist.Add(jsMath.mItem.Atom((delim[0]? 'inner': 'ord'),box)); |
|
}, |
|
|
|
/* |
|
* LaTeX \begin{env} |
|
*/ |
|
Begin: function (name) { |
|
var env = this.GetArgument(this.cmd+name); if (this.error) return; |
|
if (env.match(/[^a-z*]/i)) {this.Error('Invalid environment name "'+env+'"'); return} |
|
if (!this.environments[env]) {this.Error('Unknown environment "'+env+'"'); return} |
|
var cmd = this.environments[env]; |
|
if (typeof(cmd) == "string") {cmd = [cmd]} |
|
this[cmd[0]](env,cmd.slice(1)); |
|
}, |
|
|
|
/* |
|
* LaTeX \end{env} |
|
*/ |
|
End: function (name) { |
|
var env = this.GetArgument(this.cmd+name); if (this.error) return; |
|
this.Error(this.cmd+name+'{'+env+'} without matching '+this.cmd+'begin'); |
|
}, |
|
|
|
/* |
|
* Debugging routine to test stretchable delimiters |
|
*/ |
|
Test: function () { |
|
var delim = this.GetDelimiter(this.cmd+'test'); if (this.error) return; |
|
var H = this.GetArgument(this.cmd+'test'); if (this.error) return; |
|
this.mlist.Add(jsMath.mItem.Typeset(jsMath.Box.Delimiter(H,delim,'T'))); |
|
return; |
|
|
|
var leader = this.GetArgument(this.cmd+'test'); if (this.error) return; |
|
var W = this.GetArgument(this.cmd+'test'); if (this.error) return; |
|
if (this.leaders[leader] == null) |
|
{this.Error('Unknown leaders "'+leader+'"'); return} |
|
this.mlist.Add(jsMath.mItem.Typeset(jsMath.Box.Leaders(W,this.leaders[leader]))); |
|
return; |
|
}, |
|
|
|
/* |
|
* Add a fixed amount of horizontal space |
|
*/ |
|
Spacer: function (name,w) { |
|
this.mlist.Add(jsMath.mItem.Space(w-0)); |
|
}, |
|
|
|
/* |
|
* Add horizontal space given by the argument |
|
*/ |
|
Hskip: function (name) { |
|
var w = this.GetDimen(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(jsMath.mItem.Space(w)); |
|
}, |
|
|
|
/* |
|
* Typeset the argument as plain text rather than math. |
|
*/ |
|
HBox: function (name) { |
|
var text = this.GetArgument(this.cmd+name); if (this.error) return; |
|
var box = jsMath.Box.InternalMath(text,this.mlist.data.size); |
|
this.mlist.Add(jsMath.mItem.Typeset(box)); |
|
}, |
|
|
|
/* |
|
* Implement \fbox{...} |
|
*/ |
|
FBox: function (name) { |
|
var text = this.GetArgument(this.cmd+name); if (this.error) return; |
|
var arg = jsMath.Box.InternalMath(text,this.mlist.data.size); |
|
var f = 0.25 * jsMath.sizes[this.mlist.data.size]/100; |
|
var box = jsMath.Box.Set(arg,this.mlist.data.style,this.mlist.data.size,1).Remeasured(); |
|
var frame = jsMath.HTML.Frame(-f,-box.d-f,box.w+2*f,box.h+box.d+2*f); |
|
box.html = frame + box.html + jsMath.HTML.Spacer(f); |
|
box.h += f; box.d += f; box.w +=2*f; box.x += f; |
|
box.bh = Math.max(box.bh,box.h); box.bd = Math.max(box.bd,box.d); |
|
this.mlist.Add(jsMath.mItem.Atom('ord',box)); |
|
}, |
|
|
|
/* |
|
* Insert a rule of a particular width, height and depth |
|
* This replaces \hrule and \vrule |
|
* @@@ not a standard TeX command, and all three parameters must be given @@@ |
|
*/ |
|
Rule: function (name,gif) { |
|
var w = this.GetDimen(this.cmd+name,1); if (this.error) return; |
|
var h = this.GetDimen(this.cmd+name,1); if (this.error) return; |
|
var d = this.GetDimen(this.cmd+name,1); if (this.error) return; |
|
h += d; |
|
if (h != 0) {h = Math.max(1.05/jsMath.em,h)} |
|
if (h == 0 || w == 0) {gif = "blank"} |
|
var html = '<IMG SRC="'+jsMath[gif]+'" STYLE="height: '+jsMath.HTML.Em(h)+'; ' |
|
+ 'width: '+jsMath.HTML.Em(w)+'">'; |
|
if (d) { |
|
html = '<SPAN STYLE="vertical-align:'+jsMath.HTML.Em(-d)+'">' |
|
+ html + '</SPAN>'; |
|
} |
|
this.mlist.Add(jsMath.mItem.Typeset(new jsMath.Box('html',html,w,h-d,d))); |
|
}, |
|
|
|
/* |
|
* Inserts an empty box of a specific height and depth |
|
*/ |
|
Strut: function () { |
|
var size = this.mlist.data.size; |
|
var box = jsMath.Box.Text('','normal','T',size).Styled(); |
|
box.bh = box.bd = 0; box.h = .8; box.d = .3; box.w = 0; |
|
this.mlist.Add(jsMath.mItem.Typeset(box)); |
|
}, |
|
|
|
/* |
|
* Handles \phantom, \vphantom and \hphantom |
|
*/ |
|
Phantom: function (name,data) { |
|
var arg = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(new jsMath.mItem('phantom',{phantom: arg, v: data[0], h: data[1]})); |
|
}, |
|
|
|
/* |
|
* Implements \smash |
|
*/ |
|
Smash: function (name,data) { |
|
var arg = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(new jsMath.mItem('smash',{smash: arg})); |
|
}, |
|
|
|
/* |
|
* Puts an accent on the following argument |
|
*/ |
|
MathAccent: function (name,accent) { |
|
var c = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
var atom = jsMath.mItem.Atom('accent',c); atom.accent = accent[0]; |
|
this.mlist.Add(atom); |
|
}, |
|
|
|
/* |
|
* Handles functions and operators like sin, cos, sum, etc. |
|
*/ |
|
NamedOp: function (name,data) { |
|
var a = (name.match(/[^acegm-su-z]/)) ? 1: 0; |
|
var d = (name.match(/[gjpqy]/)) ? 1: 0; |
|
if (data[1]) {name = data[1]} |
|
var box = jsMath.mItem.TextAtom('op',name,'cmr10',a,d); |
|
if (data[0] != null) {box.limits = data[0]} |
|
this.mlist.Add(box); |
|
}, |
|
|
|
/* |
|
* Implements \limits |
|
*/ |
|
Limits: function (name,data) { |
|
var atom = this.mlist.Last(); |
|
if (!atom || atom.type != 'op') |
|
{this.Error(this.cmd+name+" is allowed only on operators"); return} |
|
atom.limits = data[0]; |
|
}, |
|
|
|
/* |
|
* Implements macros like those created by \def. The named control |
|
* sequence is replaced by the string given as the first data value. |
|
* If there is a second data value, this specifies how many arguments |
|
* the macro uses, and in this case, those arguments are substituted |
|
* for #1, #2, etc. within the replacement string. |
|
* |
|
* See the jsMath.Macro() command below for more details. |
|
*/ |
|
Macro: function (name,data) { |
|
var text = data[0] |
|
if (data[1]) { |
|
var args = []; |
|
for (var i = 0; i < data[1]; i++) |
|
{args[args.length] = this.GetArgument(this.cmd+name); if (this.error) return} |
|
text = ''; var c; var i = 0; |
|
while (i < data[0].length) { |
|
c = data[0].charAt(i++); |
|
if (c == '\\') {text += c + data[0].charAt(i++)} |
|
else if (c == '#') { |
|
c = data[0].charAt(i++); |
|
if (c == "#") {text += c} else { |
|
if (!c.match(/[1-9]/) || c > args.length) |
|
{this.Error("Illegal macro argument reference"); return} |
|
text += args[c-1]; |
|
} |
|
} else {text += c} |
|
} |
|
} |
|
this.string = text + this.string.slice(this.i); |
|
this.i = 0; |
|
}, |
|
|
|
/* |
|
* Replace the control sequence with the given text |
|
*/ |
|
Replace: function (name,data) { |
|
this.mlist.Add(jsMath.mItem.TextAtom(data[0],data[1],data[2],data[3])); |
|
}, |
|
|
|
/* |
|
* Implements \overbrace, \underbrace, etc. |
|
*/ |
|
HandleLeaders: function (name,data) { |
|
var box = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
box = jsMath.Box.Set(box,'D',this.mlist.data.size).Remeasured(); |
|
var leader = jsMath.Box.Leaders(box.w,this.leaders[data[0]]); |
|
if (data[2]) {leader.y = -leader.h - box.d} else {leader.y = box.h + leader.d} |
|
leader.x = -(leader.w + box.w)/2; |
|
box = jsMath.mItem.Atom(data[1]? 'op': 'inner', |
|
jsMath.Box.SetList([box,leader],'T',this.mlist.data.size)); |
|
box.limits = (data[1]? 1: 0); |
|
this.mlist.Add(box); |
|
}, |
|
|
|
/* |
|
* Implements \llap, \rlap, etc. |
|
*/ |
|
HandleLap: function (name) { |
|
var box = this.ProcessArg(); if (this.error) return; |
|
box = this.mlist.Add(new jsMath.mItem('lap',{nuc: box, lap: name})); |
|
}, |
|
|
|
/* |
|
* Adds the argument as a specific type of atom (for commands like |
|
* \overline, etc.) |
|
*/ |
|
HandleAtom: function (name,data) { |
|
var arg = this.ProcessArg(this.cmd+name); if (this.error) return; |
|
this.mlist.Add(jsMath.mItem.Atom(data,arg)); |
|
}, |
|
|
|
|
|
/* |
|
* Process the character associated with a specific \mathcharcode |
|
*/ |
|
HandleMathCode: function (name,code) { |
|
var type = (code & 0xF000) >> 12; |
|
var font = (code & 0x0F00) >> 8; |
|
var code = code & 0x00FF; |
|
this.HandleTeXchar(type,font,code); |
|
}, |
|
|
|
/* |
|
* Add a specific character from a TeX font (use the current |
|
* font if the type is 7 (variable) or the font is not specified) |
|
*/ |
|
HandleTeXchar: function (type,font,code) { |
|
if (type == 7 && this.mlist.data.font != null) {font = this.mlist.data.font} |
|
font = jsMath.TeX.fam[font]; |
|
this.mlist.Add(jsMath.mItem.TeXAtom(jsMath.TeX.atom[type],code,font)); |
|
}, |
|
|
|
/* |
|
* Add a TeX variable character or number |
|
*/ |
|
HandleVariable: function (c) {this.HandleTeXchar(7,1,c.charCodeAt(0))}, |
|
HandleNumber: function (c) {this.HandleTeXchar(7,0,c.charCodeAt(0))}, |
|
|
|
/* |
|
* For unmapped characters, just add them in as normal |
|
* (non-TeX) characters |
|
*/ |
|
HandleOther: function (c) { |
|
this.mlist.Add(jsMath.mItem.TextAtom('ord',c,'normal')); |
|
}, |
|
|
|
/* |
|
* Ignore comments in TeX data |
|
* ### Some browsers remove the newlines, so this might cause |
|
* extra stuff to be ignored; look into this ### |
|
*/ |
|
HandleComment: function () { |
|
var c; |
|
while (this.i < this.string.length) { |
|
c = this.string.charAt(this.i++); |
|
if (c == "\r" || c == "\n") return; |
|
} |
|
}, |
|
|
|
/* |
|
* Add a style change (e.g., \displaystyle, etc) |
|
*/ |
|
HandleStyle: function (name,style) { |
|
this.mlist.data.style = style[0]; |
|
this.mlist.Add(new jsMath.mItem('style',{style: style[0]})); |
|
}, |
|
|
|
/* |
|
* Implements \small, \large, etc. |
|
*/ |
|
HandleSize: function (name,size) { |
|
this.mlist.data.size = size[0]; |
|
this.mlist.Add(new jsMath.mItem('size',{size: size[0]})); |
|
}, |
|
|
|
/* |
|
* Set the current font (e.g., \rm, etc) |
|
*/ |
|
HandleFont: function (name,font) { |
|
this.mlist.data.font = font[0]; |
|
}, |
|
|
|
/* |
|
* Look for and process a control sequence |
|
*/ |
|
HandleCS: function () { |
|
var cmd = this.GetCommand(); if (this.error) return; |
|
if (this.macros[cmd]) { |
|
var macro = this.macros[cmd]; |
|
if (typeof(macro) == "string") {macro = [macro]} |
|
this[macro[0]](cmd,macro.slice(1)); return; |
|
} |
|
if (this.mathchardef[cmd]) { |
|
this.HandleMathCode(cmd,this.mathchardef[cmd]); |
|
return; |
|
} |
|
if (this.delimiter[this.cmd+cmd]) { |
|
this.HandleMathCode(cmd,this.delimiter[this.cmd+cmd]>>12) |
|
return; |
|
} |
|
this.Error("Unknown control sequence '"+this.cmd+cmd+"'"); |
|
}, |
|
|
|
/* |
|
* Process open and close braces |
|
*/ |
|
HandleOpen: function () {this.mlist.Open()}, |
|
HandleClose: function () { |
|
if (this.mlist.data.openI == null) {this.Error("Extra close brace"); return} |
|
var open = this.mlist.Get(this.mlist.data.openI); |
|
if (!open || open.left == null) {this.mlist.Close()} |
|
else {this.Error("Extra close brace or missing "+this.cmd+"right"); return} |
|
}, |
|
|
|
/* |
|
* Implements \left |
|
*/ |
|
HandleLeft: function (name) { |
|
var left = this.GetDelimiter(this.cmd+name); if (this.error) return; |
|
this.mlist.Open(left); |
|
}, |
|
|
|
/* |
|
* Implements \right |
|
*/ |
|
HandleRight: function (name) { |
|
var right = this.GetDelimiter(this.cmd+name); if (this.error) return; |
|
var open = this.mlist.Get(this.mlist.data.openI); |
|
if (open && open.left != null) {this.mlist.Close(right)} |
|
else {this.Error("Extra open brace or missing "+this.cmd+"left");} |
|
}, |
|
|
|
/* |
|
* Implements generalized fractions (\over, \above, etc.) |
|
*/ |
|
HandleOver: function (name,data) { |
|
if (this.mlist.data.overI != null) |
|
{this.Error('Ambiguous use of '+this.cmd+name); return} |
|
this.mlist.data.overI = this.mlist.Length(); |
|
this.mlist.data.overF = {name: name}; |
|
if (data.length > 0) { |
|
this.mlist.data.overF.left = this.delimiter[data[0]]; |
|
this.mlist.data.overF.right = this.delimiter[data[1]]; |
|
} else if (name.match(/withdelims$/)) { |
|
this.mlist.data.overF.left = this.GetDelimiter(this.cmd+name); if (this.error) return; |
|
this.mlist.data.overF.right = this.GetDelimiter(this.cmd+name); if (this.error) return; |
|
} |
|
if (name.match(/^above/)) |
|
{ |
|
this.mlist.data.overF.thickness = this.GetDimen(this.cmd.name,1); |
|
if (this.error) return; |
|
} |
|
}, |
|
|
|
/* |
|
* Add a superscript to the preceeding atom |
|
*/ |
|
HandleSuperscript: function () { |
|
var base = this.mlist.Last(); |
|
if (base == null || (!base.atom && base.type != 'box' && base.type != 'frac')) |
|
{base = this.mlist.Add(jsMath.mItem.Atom('ord',null))} |
|
if (base.sup) {this.Error("Double exponent: use braces to clarify"); return} |
|
base.sup = this.ProcessArg('superscript'); if (this.error) return; |
|
}, |
|
|
|
/* |
|
* Adda subscript to the preceeding atom |
|
*/ |
|
HandleSubscript: function () { |
|
var base = this.mlist.Last(); |
|
if (base == null || (!base.atom && base.type != 'box' && base.type != 'frac')) |
|
{base = this.mlist.Add(jsMath.mItem.Atom('ord',null))} |
|
if (base.sub) {this.Error("Double subscripts: use braces to clarify"); return} |
|
base.sub = this.ProcessArg('subscript'); if (this.error) return; |
|
}, |
|
|
|
/* |
|
* Parse a TeX math string, handling macros, etc. |
|
*/ |
|
Parse: function () { |
|
var c; |
|
while (this.i < this.string.length) { |
|
c = this.string.charAt(this.i++); |
|
if (this.mathchar[c]) {this.HandleMathCode(c,this.mathchar[c])} |
|
else if (this.special[c]) {this[this.special[c]](c)} |
|
else if (this.letter.test(c)) {this.HandleVariable(c)} |
|
else if (this.number.test(c)) {this.HandleNumber(c)} |
|
else {this.HandleOther(c)} |
|
} |
|
if (this.mlist.data.openI != null) { |
|
var open = this.mlist.Get(this.mlist.data.openI); |
|
if (open.left) {this.Error("Missing "+this.cmd+"right")} |
|
else {this.Error("Missing close brace")} |
|
} |
|
if (this.mlist.data.overI != null) {this.mlist.Over()} |
|
}, |
|
|
|
/* |
|
* Perform the processing of Appendix G |
|
*/ |
|
Atomize: function () { |
|
var data = this.mlist.init; |
|
if (!this.error) this.mlist.Atomize(data.style,data.size) |
|
}, |
|
|
|
/* |
|
* Produce the final HTML. |
|
* |
|
* We have to wrap the HTML it appropriate <SPAN> tags to hide its |
|
* actual dimensions when these don't match the TeX dimensions of the |
|
* results. We also include an image to force the results to take up |
|
* the right amount of space. The results may need to be vertically |
|
* adjusted to make the baseline appear in the correct place. |
|
* |
|
* This is where the touchiest browser-dependent code appears. |
|
*/ |
|
Typeset: function () { |
|
var data = this.mlist.init; |
|
var box = this.typeset = this.mlist.Typeset(data.style,data.size); |
|
if (this.error) {return '<SPAN CLASS="error">'+this.error+'</SPAN>'} |
|
if (box.format == 'null') {return ''}; |
|
var rules = ''; var html |
|
|
|
box.Styled().Remeasured(); var isSmall = 0; var isBig = 0; |
|
var w = box.w; var h = box.bh; var d = box.bd; |
|
if (box.bh > box.h && box.bh > jsMath.h+.001) {isSmall = 1} |
|
if (box.bd > box.d && box.bd > jsMath.d+.001) {isSmall = 1} |
|
if (box.h > jsMath.h) {isBig = 1; h = box.h} |
|
if (box.d > jsMath.d) {isBig = 1; d = box.d} |
|
|
|
if (jsMath.show.BBox) {rules += jsMath.HTML.Frame(0,-box.d,w,box.h+box.d,'green')} |
|
if (jsMath.show.Top) {rules += jsMath.HTML.Line(0,box.h,w,'red')} |
|
if (jsMath.show.Baseline) {rules += jsMath.HTML.Line(0,0,w,'blue')} |
|
|
|
html = box.html; |
|
if (isSmall) {// hide the extra size |
|
if (jsMath.allowAbsolute) { |
|
var y = jsMath.absoluteOffsetY; |
|
if (jsMath.absoluteHeightVaries || box.bh > jsMath.h+.001) {y += (jsMath.h - box.bh)} |
|
html = jsMath.HTML.Absolute(html,w,jsMath.h,0,y,jsMath.h); |
|
isBig = 1; h = box.h; d = box.d; |
|
} else {// remove line height and try to hide the depth |
|
var dy = jsMath.HTML.Em(Math.max(0,box.bd-jsMath.hd)/3); |
|
html = '<SPAN STYLE="line-height: 0;' |
|
+ ' position: relative; top: '+dy+'; vertical-align: '+dy |
|
+ '">' |
|
+ html |
|
+ '</SPAN>'; |
|
} |
|
} |
|
html = '<NOBR>' + rules + html; |
|
if (isBig) {// add height and depth to the line (force a little |
|
// extra to separate lines if needed) |
|
html += '<IMG SRC="'+jsMath.blank+'" CLASS="mathHD" ' |
|
+ 'STYLE="height: '+jsMath.HTML.Em(h+d+.2)+'; ' |
|
+ 'vertical-align: '+jsMath.HTML.Em(-d-.1)+';">' |
|
} |
|
html += '<NOBR>' |
|
return html; |
|
} |
|
|
|
}); |
|
|
|
/* |
|
* Make these characters special (and call the given routines) |
|
*/ |
|
jsMath.Parser.prototype.AddSpecial({ |
|
cmd: 'HandleCS', |
|
open: 'HandleOpen', |
|
close: 'HandleClose' |
|
}); |
|
|
|
|
|
/* |
|
* The web-page author can call jsMath.Macro to create additional |
|
* TeX macros for use within his or her mathematics. jsMath.Macro |
|
* has two required and one optional parameter. The first parameter |
|
* is the control sequence name that will trigger the macro, and the |
|
* second is the replacement string for that control sequence. |
|
* NOTE: since the backslash (\) has special meaning in JavaScript, |
|
* you must double the backslash in order to include control sequences |
|
* within your replacement string. E.g., |
|
* |
|
* <SCRIPT> jsMath.Macro('R','{\\rm R}') </SCRIPT> |
|
* |
* |
* would make \R produce a bold-faced R. |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* |
* you may not use this file except in compliance with the License. |
* The optional parameter tells how many arguments the macro |
* You may obtain a copy of the License at |
* requires. These are substituted for #1, #2, etc. within the |
* |
* replacement string of the macro. For example |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* |
* <SCRIPT> jsMath.Macro('x','{\vec x}_{#1}',1) </SCRIPT> |
* Unless required by applicable law or agreed to in writing, software |
* |
* distributed under the License is distributed on an "AS IS" BASIS, |
* would make \x1 produce {\vec x}_{1} and \x{i+1} produce {\vec x}_{i+1}. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* |
* See the License for the specific language governing permissions and |
* You can put several jsMath.Macro calls together into one .js file, and |
* limitations under the License. |
* then include that into your web page using a command of the form |
|
* |
|
* <SCRIPT SRC="..."></SCRIPT> |
|
* |
|
* in your main HTML page. This way you can include the same macros |
|
* into several web pages, for example. |
|
*/ |
|
|
|
jsMath.Add(jsMath,{ |
|
Macro: function (name) { |
|
var macro = jsMath.Parser.prototype.macros; |
|
macro[name] = ['Macro']; |
|
for (var i = 1; i < arguments.length; i++) |
|
{macro[name][macro[name].length] = arguments[i]} |
|
} |
|
}); |
|
|
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* These routines look through the web page for math elements to process. |
|
* There are two main entry points you can call: |
|
* |
* |
* <SCRIPT> jsMath.Process() </SCRIPT> |
*****************************************************************************/ |
* or |
|
* <SCRIPT> jsMath.ProcessBeforeShowing() </SCRIPT> |
|
* |
|
* The first will process the page asynchronously (so the user can start |
|
* reading the top of the file while jsMath is still processing the bottom) |
|
* while the second does not update until all the mathematics is typeset. |
|
*/ |
|
|
|
jsMath.Add(jsMath,{ |
|
|
|
/* |
|
* Typeset a string in \textstyle and return the HTML for it |
|
*/ |
|
TextMode: function (s) { |
|
var parse = jsMath.Parse(s,null,null,'T'); |
|
parse.Atomize(); |
|
var html = parse.Typeset(); |
|
return html; |
|
}, |
|
|
|
/* |
|
* Typeset a string in \displaystyle and return the HTML for it |
|
* ### need to give more control over whether to center, etc. ### |
|
*/ |
|
DisplayMode: function (s) { |
|
var parse = jsMath.Parse(s,null,null,'D'); |
|
parse.Atomize(); |
|
var html = parse.Typeset(); |
|
return html; |
|
}, |
|
|
|
/* |
|
* Return the text of a given DOM element |
|
*/ |
|
GetElementText: function (element) { |
|
var text = element.innerText; |
|
if (text == null) { |
|
text = element.textContent; |
|
if (text == null) { |
|
text = element.innerHTML; |
|
} |
|
} |
|
if (text.search('&')) { |
|
text = text.replace(/</g,'<'); |
|
text = text.replace(/>/g,'>'); |
|
text = text.replace(/"/g,'"'); |
|
text = text.replace(/&/g,'&'); |
|
} |
|
return text; |
|
}, |
|
|
|
/* |
|
* Typeset the contents of an element in \textstyle |
|
*/ |
|
ConvertText: function (element) { |
|
var text = this.GetElementText(element); |
|
element.innerHTML = this.TextMode(text); |
|
element.className = 'typeset'; |
|
}, |
|
|
|
/* |
|
* Typeset the contents of an element in \displaystyle |
|
*/ |
|
ConvertDisplay: function (element) { |
|
var text = this.GetElementText(element); |
|
element.innerHTML = this.DisplayMode(text); |
|
element.className = 'typeset'; |
|
}, |
|
|
|
/* |
|
* Call this at the bottom of your HTML page to have the |
|
* mathematics typeset before the page is displayed. |
|
* This can take a long time, so the user could cancel the |
|
* page before it is complete; use it with caution, and only |
|
* when there is a relatively small amount of math on the page. |
|
*/ |
|
ProcessBeforeShowing: function () { |
|
if (!jsMath.initialized) {jsMath.Init()} |
|
var element = jsMath.GetMathElements(); |
|
for (var i = 0; i < element.length; i++) |
|
{jsMath.ProcessElement(element[i])} |
|
jsMath.ProcessComplete(); |
|
}, |
|
|
|
/* |
|
* Process a math element |
|
*/ |
|
ProcessElement: function (element) { |
|
window.status = 'Processing Math...'; |
|
if (element.tagName == 'DIV') { |
|
this.ConvertDisplay(element); |
|
} else if (element.tagName == 'SPAN') { |
|
this.ConvertText(element); |
|
} |
|
}, |
|
|
|
/* |
|
* Asynchronously process all the math elements starting with |
|
* the k-th one |
|
*/ |
|
ProcessElements: function (k) { |
|
if (k >= this.element.length) { |
|
this.ProcessComplete(); |
|
} else { |
|
this.ProcessElement(this.element[k]) |
|
setTimeout('jsMath.ProcessElements('+(k+1)+')',jsMath.delay); |
|
} |
|
}, |
|
|
|
/* |
|
* Call this at the bottom of your HTML page to have the |
|
* mathematics typeset asynchronously. This lets the user |
|
* start reading the mathematics while the rest of the page |
|
* is being processed. |
|
*/ |
|
Process: function () { |
|
if (!jsMath.initialized) {jsMath.Init()} |
|
this.element = this.GetMathElements(); |
|
window.status = 'Processing Math...'; |
|
setTimeout('jsMath.ProcessElements(0)',jsMath.delay); |
|
}, |
|
|
|
element: [], // the list of math elements on the page |
|
|
|
/* |
|
* Look up all the math elements on the page and |
|
* put them in a list sorted from top to bottom of the page |
|
*/ |
|
GetMathElements: function () { |
|
var element = []; |
|
var math = document.getElementsByTagName('DIV'); |
|
for (var k = 0; k < math.length; k++) { |
|
if (math[k].className == 'math') { |
|
if (jsMath.renameOK) {math[k].setAttribute('NAME','_jsMath_')} |
|
else {element[element.length] = math[k]} |
|
} |
|
} |
|
math = document.getElementsByTagName('SPAN'); |
|
for (var k = 0; k < math.length; k++) { |
|
if (math[k].className == 'math') { |
|
if (jsMath.renameOK) {math[k].setAttribute('NAME','_jsMath_')} |
|
else {element[element.length] = math[k]} |
|
} |
|
} |
|
// this gets the SPAN and DIV elements interleaved in order |
|
if (jsMath.renameOK) { |
|
element = document.getElementsByName('_jsMath_') |
|
} else if (jsMath.hidden.sourceIndex) { |
|
element.sort(function (a,b) {return a.sourceIndex - b.sourceIndex}); |
|
} |
|
return element; |
|
}, |
|
|
|
/* |
|
* Remove the window message about processing math |
|
* and clean up any marked <SPAN> or <DIV> tags |
|
*/ |
|
ProcessComplete: function () { |
|
if (jsMath.renameOK) { |
|
var element = document.getElementsByName('_jsMath_'); |
|
for (var i = element.length-1; i >= 0; i--) { |
|
element[i].removeAttribute('NAME'); |
|
} |
|
} |
|
jsMath.element = []; |
|
window.status = 'Done'; |
|
} |
|
|
|
}); |
|
|
|
/***************************************************************************/ |
|
|
|
/* |
|
* We use a hidden <DIV> for measuring the BBoxes of things |
|
*/ |
|
jsMath.hidden = '<DIV CLASS="normal" ID="jsMath.Hidden" ' + |
|
'STYLE="position:absolute; top:0 left:0;"></DIV>'; |
|
if (document.body.insertAdjacentHTML) { |
|
document.body.insertAdjacentHTML('AfterBegin',jsMath.hidden); |
|
} else { |
|
document.write(jsMath.hidden); |
|
} |
|
jsMath.hidden = document.getElementById("jsMath.Hidden"); |
|
|
|
/* |
|
* Initialize everything |
|
*/ |
|
jsMath.InitSource(); |
|
jsMath.InitBrowser(); |
|
jsMath.InitStyles(); |
|
|
|
//make sure browser-specific loads are done before this |
|
document.write('<SCRIPT>jsMath.CheckFonts()</SCRIPT>'); |
|
|
|
} |
if (!window.jsMath) {jsMath = {}} |
|
if (!jsMath.Script) {jsMath.Script = {}} |
|
|
} |
jsMath.Script.Uncompress = function (data) { |
|
for (var k = 0; k < data.length; k++) { |
|
var d = data[k]; var n = d.length; |
|
for (var i = 0; i < n; i++) {if (typeof(d[i]) == 'number') {d[i] = d[d[i]]}} |
|
data[k] = d.join(''); |
|
} |
|
eval(data.join('')); |
|
} |
|
|
|
//start = new Date().getTime(); |
|
jsMath.Script.Uncompress([ |
|
['if(!','window','.jsMath','||!',1,'.','jsMath.','loaded','){var ','jsMath_old','=',1,2,';',0,'document.','getElementById','||!',15,'childNodes||!',15,'createElement','){alert("The',' mathematics ','on this page requires W3C DOM support in its JavaScript. "+"Unfortunately, your ','browser',' doesn\'t seem to have this.");}','else{',1,2,'={version:"3.3",document:document,',1,':',1,',sizes:[50,60,70,85,100,120,144,173,207,249],styles:{".math','":"font-family: serif; font-style: normal; font-weight: normal','",".typeset',35,'","div','.typeset":"text-align: ','center; margin: 1em 0px;","span',39,'left',36,' span":"text-align: left','; border',':0px; margin:0px','; padding',':0px','",".typeset .','normal',35,49,'size0','":"font-size: ','50','%",".typeset .','size1',54,'60',56,'size2',54,'70',56,'size3',54,'85',56,'size4',54,'100',56,'size5',54,'120',56,'size6',54,'144',56,'size7',54,'173',56,'size8',54,'207',56,'size9',54,'249',56,'cmr10','":"font-family: jsMath-',93,', serif',49,'cmbx10',94,98,', ','jsMath-cmr10',49,'cmti10',94,104,', ',102,49,'cmmi10',94,110,49,'cmsy10',94,114,49,'cmex10',94,118,49,'textit','":"font-family: serif; font-','style:italic',49,'textbf',123,'weight:bold',49,'link":"','text-decoration',': none',49,'error',54,'10pt; font-style: italic; "+"','background-color',': #FFFFCC',47,': 1px; "+"border: ','1px solid',' #CC0000',49,'blank":"','display:inline-block','; ','overflow:hidden',45,':0px none; width:0px; height:0px;",".typeset .','spacer','":"',145,'","#jsMath_message":"','position:fixed','; bottom:','1px; left:2px; ',137,':#E6E6E6','; "+"border: solid 1px #959595; margin:0px; padding: ','1px 8px','; "+"z-index:102; color',': black','; font-size',':','small; ','width:auto',';","#jsMath_panel','":"',154,155,'1.5em; right:1.5em',47,': .8em 1.6em; "+"',137,':#DDDDDD; border: outset ','2px; "+"z-index:103; ',166,167,' .disabled":"color:#888888","#jsMath_panel .infoLink','":"font-size:','85%","#','jsMath_button','":"',154,155,'1px; right:2px; ',137,':white',159,'0px 3px 1px 3px',161,':black; ',131,':none',163,':x-small; "+"',166,'; ','cursor:hand',';","#','jsMath_global":"font-',124,';","#jsMath_float','":"','position:absolute','; top:0px; left:0px; max-width:80%; "+"z-index:101; ',166,'; height:auto',203,' .drag":"',137,175,'1px; height:12px',163,': 1px',203,' .close":"',137,158,45,': inset 1px; width:8px; height:8px; margin: 1px 2px',203,' .source":"',137,':#E2E2E2',45,': outset 1px; "+"',166,208,47,': 8px 15px; "+"font-family: courier, fixed',163,': 90%","#jsMath_noFont',' .message":"text-align: center; padding: .8em 1.6em; border: 3px solid #DD0000; "+"background-color: #FFF8F8; color: #AA0000; font-size:',165,166,200,'jsMath_noFont .link":"padding: 0px 5px 2px 5px',45,': 2px outset; ',137,':#E8E8E8; "+"color:black',163,':80%; ',166,'; ',199,200,'jsMath_PrintWarning',234,'x-',165,166,';","@media print":"#',182,' {display:none','}\\n"+"#jsMath_Warning',256,'}","@media screen":"#',249,256,'}"},Element',':function(','_1){return ',6,15,16,'("jsMath_"+_1);},','BBoxFor',263,'s','){this.','hidden.innerHTML','="<nobr><span class=\\"typeset\\"><span class=\\"scale\\">"+s+"</span></span></nobr>";var _3={w',':this.','hidden','.offsetWidth',',h',275,276,'.offsetHeight','};this.',273,'="";return _3;},EmBoxFor',263,'s',8,'_5=',6,'Global.cache','.R;',0,'_5[this.em]){_5[this.em]={};}',0,'_5','[this.em][s',']){var _6','=this.BBoxFor','(s);_5',296,']={w:_6.w/this.em,h:_6','.h/this.em};}return ','_5',296,'];},','EmBoxForItalics',263,'s',8,'_8=',6,290,'.R;',0,'_8[this.em]){_8[this.em]={};}',0,'_8',296,']){var _9',298,'(s);if(s.match(/<i>|class=\\"(icm|italic|igreek|iaccent)/i)){_9.w',298,'(s+',6,'Browser.','italicString',').w-',6,325,'italicCorrection',';}_8',296,']={w:_9.w/this.em,h:_9',302,'_8',296,'];},Init',':function(){','if(',6,'Setup.inited','!=1){',0,6,341,'){',6,'Setup.','Body();}if(',6,341,'!=1){alert("It looks like jsMath failed to set up properly (error code "+',6,341,'+"). "+"I will try to keep going, but it could get ugly.");',6,341,'=1;}}this.em',298,'("<span style=\\""+',6,325,'block+";','width:13em;height:1em','\\"></span','>").w/13;if(this.em==0',272,'em',298,'("<img src=\\""+',6,'blank+"\\" style=\\"',364,'\\"/>").w/13;}var _a=',6,290,'.B;',0,'_a[this.em]){_a[this.em]={};','_a[this.em].','bb',298,'("x");var hh=',380,'bb.h;',380,'d',298,'("x"+',6,'HTML.Rule(1,','hh/',6,'em)).h-hh;if(',6,325,326,'){',380,'ic=',6,269,'(',6,325,326,').w;}}',6,325,330,'=',380,'ic;var bb=',380,'bb;var h=bb.h;var d=',380,'d;this.h=(h-d)/this.em;this.d=d/this.em;this.hd=this.h+this.d;this.xWidth=bb.w;this.',348,'TeXfonts','();var _f=this.','EmBoxFor("<span class','=\\"',93,'\\">M</span>").w/2;this.TeX.M_height=_f*(26/14);this.TeX.h=this.h;this.TeX.d=this.d;this.TeX.hd=this.hd;this.Img.Scale();',0,'this.initialized',272,348,'Sizes','();this.','Img.UpdateFonts();}this.p_height=(this.','TeX.cmex10[','0].h+this.',432,'0].d)/0.85;',426,'=1;},ReInit',338,'var w',298,'("x").w;if(w!=this.xWidth',272,'Init();}},Loaded',338,'if(',9,8,'_11=["Process","ProcessBeforeShowing","ConvertTeX","ConvertTeX2","ConvertLaTeX","ConvertCustom","CustomSearch","Synchronize","Macro","document"];','for(var i=0;i<','_11','.length;i++){if(',9,'[_11[i]]){delete ',9,'[_11[i]];}}}if(',9,'){this.Insert(','jsMath,',9,');}',9,'=null;',6,7,'=1;},Add',263,'dst,src){for(var id in src){','dst[id]=src[id','];}},Insert',263,467,'if(dst[id]&&typeof (src[id])=="object"&&(','typeof (dst[id])=="','object"||',473,'function")){this.Insert(dst[id],src[id]);}',27,468,'];}}},Package',263,'obj,def',457,'obj.prototype,def);}};',6,'Global={isLocal:1,cache:{','T:{},D:{},R:{},B',':{}},ClearCache',338,6,290,'={',486,':{}};},GoGlobal',263,'_1b',8,'url=String(',6,1,'.','location);','var c=(',6,1,'.','location.protocol','=="mk:")?"#":"?";if(_1b){url=url.replace(/\\?.*/,"")+"?"+_1b;}',6,'Controls.','Reload(',6,'root+"jsMath-','global.html"+c+escape(url));},Init',338,'if(',6,'Controls.cookie','.global=="always"&&!',6,'noGoGlobal){','if(navigator.','accentColorName','){return;}',0,6,1,'){',6,1,'=',1,';}',6,509,7,'=1;',6,509,'defaults.hiddenGlobal',462,'this.GoGlobal(',6,509,'SetCookie(','2));}},Register',338,'try{this.Domain();if(parent',2,'&&','parent.',6,'isGlobal){',550,6,'Register(',6,1,');}}','catch(err','){}},Domain',338,'if(navigator.appName=="Microsoft Internet Explorer"&&navigator.platform=="MacPPC"&&navigator.','userProfile','!=null',523,'if(',1,'==parent',523,'var _1e=',6,15,'domain;try{while(true){try{if(',550,15,'title!=null','){return;}}',559,'){}',0,15,'domain.match(/\\..*\\./)){break;}',6,15,'domain=',6,15,'domain.replace(/^[^.]*\\./,"");}}',559,'){}',6,15,585,'_1e;}};',6,'Script={request:null,Init',338,'if(!(',6,517,'.asynch&&',6,517,'.progress',')){if(',1,'.XMLHttpRequest){','this.request','=new XMLHttpRequest;}',27,'if(',1,'.ActiveXObject){try{',608,'=new ActiveXObject("Microsoft.XMLHTTP");}',559,'){}}}}',0,608,'||',6,348,'domainChanged',272,'Load=this.delayedLoad;this.needsBody=1;}},Load',263,'url,_20){if(_20){',6,'Message.Set("Loading "+url);',6,'Script.','Delay(1);',6,'Script.Push(','this,"xmlRequest",url',');',6,634,6,'Message',',"Clear");}',27,6,634,635,');}},xmlRequest',263,'url){','this.blocking','=1;try{',608,'.open("GET",url,false);',608,'.send(null);}',559,'){throw "jsMath can\'t load the file \'"+url+"\'\\n"+"',640,': "+err.message;}if(',608,'.status','&&',608,660,'>=400',656,'Error status: "+',608,660,';}var _22=','this.queue',';',670,'=[];',6,1,'.eval(',608,'.responseText);',649,'=0;','this.queue=this.queue.concat(','_22);this.Process();},cancelTimeout:30*1000,iframe:null,blocking:0,cancelTimer:null,needsBody:0,queue:[],Synchronize',263,'_23,_24){','if(typeof (','_23)!="string"){',6,634,'null,_23,_24);}',27,6,634,6,1,',"eval",_23);}},Push',263,'_25,_26,_27){',670,'[',670,'.length]=[_25,_26,_27];if(!(',649,'||(this.needsBody&&!',6,15,'body))){this.Process();}},Process',338,'while(',670,'.length&&!',649,8,'_28=',670,'[0];var _29=',670,'.slice(1);',670,'=[];var _2a=_28[0];var _2b=_28[1];var _2c=_28[2];if(_2a){_2a[_2b](_2c);}',27,'if(_2b){_2b(_2c);}}',681,'_29);}},delayedLoad',263,'url',272,'Push(this,"startLoad",url);},startLoad',263,'url){','this.iframe','=',6,15,21,'("iframe");','this.iframe.style.','visibility="',276,'";',736,'position="absolute";',736,'width="0px";',736,'height="0px";if(',6,15,'body.firstChild','){',6,15,'body.insertBefore(',730,',',6,15,748,');}',27,6,15,'body','.appendChild(',730,');}',649,'=1;this.','url=url;',0,'url.match(/\\.js$/)){',730,'.src=url;}',27,730,'.src=',6,512,'loader.html";}if(url.substr(0,',6,'root.length',')==',6,'root){url=url.substr(',6,780,');}',6,629,'this.cancelTimer','=setTimeout("',6,631,'cancelLoad','()",this.cancelTimeout);},endLoad',263,'_2f){if(',789,'){clearTimeout(',789,');',789,'=null;}',6,640,'.Clear();if(_2f!="cancel"){',649,'=0;this.Process','();}},Start',338,'this.tmpQueue','=',670,';',670,'=[];},End',338,681,810,');delete ',810,';},',793,338,789,462,6,640,'.Set("Can\'t load file");this.endLoad("cancel");},Delay',263,'_30){',649,'=1;setTimeout("',6,631,'endDelay','()",_30);},',835,338,649,807,'();},','imageCount',':0,WaitForImage',263,'_31){',649,767,842,'++;if(this.img==null',272,'img=[];}var img=new Image',430,'img[this.img.length]=img;img.onload=function(){if(--',6,631,842,'==0){',6,631,835,'();}};img.onerror','=img.onload;img.','onabort',862,'src=_31;},Uncompress',263,'_33){','for(var k=0;k<','_33.length;k++){var d=_33[k];var n=d.length;',449,'n;i++){',685,'d[i])=="number"){d[i]=d[d[i]];}}_33[k]=d.join("");}',1,676,'_33.join(""));}};',6,640,'={blank:null,message:null,text:null,clear:null,Init',338,0,6,15,'body||!',6,517,604,523,'if(',6,348,'stylesReady){','this.message','=',6,'Setup.DIV("message",{visibility:"hidden','"});}',27,893,'=',6,896,'",position:"absolute",','bottom:"1px",left:"2px",','backgroundColor',':"#E6E6E6",border:"solid 1px #959595",margin:"0px",padding:"1px 8px",zIndex:102,color:"black",fontSize:"small",width:"auto"});}','this.text','=',6,15,'createTextNode','("");',893,763,907,');',893,'.onmousedown=',6,'Translate.Cancel;},Set',263,'_38,_39){','if(this.clear){clearTimeout(this.clear',');','this.clear',802,'if(',6,517,604,'){',0,907,272,'Init();',0,907,577,'if(',6,325,'textNodeBug','){',893,'.innerHTML','=_38;}',27,907,'.nodeValue',946,893,'.style.visibility="','visible";if(_39){',893,'.style.cursor','="pointer";',0,893,955,'){',893,955,'="hand";}',893,'.title=" Cancel Processing of Math ";}',27,893,955,'="";',893,'.title="";}}',27,'if(_38.substr(0,8)!="Loading "){',6,1,660,'=_38;}}},Clear',338,923,');}',925,'=setTimeout("',6,640,'.doClear()",1000);},doClear',338,'if(',925,'){',925,462,6,1,660,'="";if(',907,'){',907,949,'="";}if(',893,'){',893,952,276,'";}}},Blank',338,'if(','this.blank','||!',6,15,'body',523,1009,'=',6,348,'DIV("blank",{position:(',6,325,'msiePositionFixedBug','?"absolute":"fixed"),top:"0px",left:"0px",bottom:"0px",right:"0px",zIndex:101,',905,':"white"});if(',6,325,'msieBlankBug','){',1009,945,'=" ";',1009,'.style.width="110%";',1009,'.style.height="110%";}},UnBlank',338,'if(',1009,'){',6,15,'body.removeChild(',1009,');}',1009,'=null;}};',6,'Setup={',7,':[],DIV',263,'id,_3b',8,'div=',6,15,21,'("div");div.id="jsMath_"+id;','for(var i in ','_3b){div.style[i]=_3b[i];}',0,6,15,'body.hasChildNodes){',6,15,'body',763,'div);}',27,6,15,752,'div,',6,15,748,');}return div;},Script',263,'_3e,_3f){if(','this.loaded[_3e',']){return;}',27,1082,']=1;}',0,'_3e.match("^([a-zA-Z]+:/?)?/")){_3e=',6,'root+_3e;}',6,631,'Load(_3e,_3f);},Hidden',338,6,276,'=this.DIV("Hidden",{visibility:"',276,903,'top:0,left:0,border:0,padding:0,margin:0});',6,'hiddenTop=',6,276,';return;},Source',338,'if(',6,'Autoload&&',6,'Autoload.root','){',6,'root=',6,1111,';}',27,6,'root="";var _40=',6,15,'getElementsByTagName("','script");if(_40){',449,'_40','.length;i++){var ','src=_40[i].src;if(src&&src.match("(^|/)',6,'js$")){',6,1114,'src.','replace(/',6,'js$/,"");if(',6,'root.charAt(0)=="/"){',6,1114,6,15,506,'+"//"+',6,15,'location.host+',6,'root;}',27,0,6,'root.match','(/^[a-z]+:/i)){src','=new String(',6,15,501,6,1114,'src','.replace(new RegExp','("[^/]*$"),"")+',6,'root;while(',6,1153,'("/[^/]*/\\\\.\\\\./")){',6,1114,6,'root',1162,'("/[^/]*/\\\\.\\\\./"),"/");}}}i=_40.length;}}}}',6,'Img.',1114,6,'root+"fonts/";',6,'blank=',6,'root+"blank.gif";this.Domain();},Domain',338,'try{',6,15,'domain;}',559,523,'var _43="";var _44=',6,15,'domain;if(',6,1153,'("://([^/]*)/")){_43=RegExp.$1;}_43=_43.replace(/:\\d+$/,"");if(_43==""||_43==_44',523,562,'onLine&&','navigator.',563,'&&',6,15,'all',523,'_43=_43.split(/\\./);_44=_44.split(/\\./);if(_43.length<2||_44.length<2||','_43[_43.length-','1',']!=_44[_44.length-','1]||',1209,'2',1211,'2]){this.','DomainWarning','();return;}var _45=',1209,'2]+"."+',1209,'1];for(var i=3;i<=_43.length&&i<=_44',451,1209,'i',1211,'i]){break;}_45=',1209,'i]+"."+_45;}',6,15,585,'_45;this.',623,'=1;},',1217,338,'alert("In order for jsMath to be able to load the additional "+"components that it may need, the ',6,'js file must be "+"',7,' from a server in the same domain as the page that "+"contains it. Because that is not the case for this page, "+"the',23,'displayed here may not appear correctly.");},','EncodeFont',263,'_47',8,'_48=',6,'TeX[_47];if(_48[0].c!=null',523,868,'128;k++){var _4a=_48[k];_48[k]=_4a[3];if(_48[k]==null){_48[k]={};}_48[k].w=_4a[0];_48[k].h=_4a[1];if(_4a[2]!=null){_48[k].d=_4a[2];}_48[k].c=',6,'TeX.encoding[k];}},Fonts',338,449,6,'TeX.fam',1127,'_4c=',6,1260,'[i];if(_4c',272,1245,'(_4c);}}},TeXfont',263,'_4d',8,'_4e=',6,'TeX[_4d];if(_4e==null',523,'var WH=',6,421,'=\\""+_4d+"\\">"+_4e[65','].c+"</span>");','_4e.hd=WH.h;_4e.dh=0.05;_4e.d=',6,421,'=\\""+_4d+"\\">"+_4e[65].c+',6,391,'_4e.hd)+"</span>").h-_4e.hd;_4e.h=_4e.hd-_4e.d;','if(_4d=="',110,'"){_4e.skewchar=','127;}',27,1288,114,1290,'48;}}},',419,338,449,6,1260,451,6,1260,'[i]){this.TeXfont(',6,1260,'[i]);}}},Sizes',338,6,'TeXparams','=[];for(var j=0;j<',6,'sizes.length;j++){',6,1311,'[j]={};}',1060,6,'TeX){',685,6,'TeX[i])!="object"){for(var j=0;j<',6,'sizes.length;j++){',6,1311,'[j][i]=',6,'sizes[j]*',6,'TeX[i]/100;}}}},Styles',263,'_54){',0,'_54){_54=',6,'styles;_54[".typeset .scale"]="font-size:"+',6,517,'.scale+"%";this.stylesReady=1;}',6,634,'this,"','AddStyleSheet','",_54);if(',6,325,'styleChangeDelay','){',6,634,6,'Script,"Delay",1);}},',1345,263,'_55',8,'_56=',6,15,1123,'head")[0];var _57="";for(var id in _55){_57+=id+" {"+_55[id]+"}\\n";}if(',6,15,'createStyleSheet){_56.insertAdjacentHTML("beforeEnd","<span',' style=\\"','display:none\\">x</span>"+"<style type=\\"text/css\\">"+_57+"</style>");}',27,'var _59=',6,15,21,'("style");_59.type="text/css";_59',763,6,15,911,'(_57));_56',763,'_59);}},Body',338,'if(this.inited',523,'this.inited=-','1;',6,348,'Hidden();',1385,'2;',6,325,935,1385,'3;if(',6,517,'.blank){',6,640,'.Blank();}',1385,'4;',6,348,'Styles();',1385,'5;',6,509,935,1385,'6;',6,634,6,'Setup,"User","pre-font");',1385,'7;',6,634,6,'Font,"Check");if(',6,'Font.register.length){',6,634,6,'Font,"LoadRegistered");}this.inited=1;},User',263,'_5a){}};',6,'Update={',419,263,'_5b){for(var ','_5c in ',1437,'_5d in _5b[_5c]){for(var id in _5b[_5c][_5d]){',6,'TeX[_5c][_5d][id]=_5b[_5c][_5d][id];}}}},TeXfontCodes',263,'_5f){for(var _60 in _5f){',449,'_5f[_60].length;i++){',6,'TeX[_60][i].c=_5f[_60][i];}}}};',6,'Browser={allowAbsolute:1,allowAbsoluteDelim:0,separateSkips:0,valignBug:0,operaHiddenFix:"",','msieCenterBugFix',':"",','msieInlineBlockFix',':"",','msieSpaceFix',':"",imgScale:1,renameOK:1,',1349,':0,delay:1,version:0,','TestSpanHeight',338,6,273,'="<span','><','span style=\\""+this.block+";','height:2em;width:','1px',365,'></span>";var ','_62=',6,'hidden.firstChild;','var img=_62.firstChild;','this.spanHeightVaries','=(_62',281,'>=img',281,'&&_62',281,'>0);','this.spanHeightTooBig','=(_62',281,'>img',281,');',6,273,'="";},','TestInlineBlock',338,'this.block','="display:-moz-inline-box";','this.hasInlineBlock','=',6,'BBoxFor("<span style=\\""+this.block+";','width:10px;height:5px\\"></span>").w>0;if','(',1495,'){',6,'styles[".typeset .','blank"]=',6,1504,'blank','"].replace(/',145,'/,',1493,');',6,1504,150,'"]=',6,1504,150,1509,145,'/,"");}',27,1493,'="',145,'";',1495,'=',6,1498,1499,'(!',1495,577,1493,'+=";',147,'";var h=',6,269,'("x").h;this.mozInlineBlockBug=',6,1498,'height:"+h+"px;width:1px',365,'>x"+"<',1465,1546,';vertical-align:-"+h+"px',365,'>").h>2*h;this.widthAddsBorder=',6,1498,147,';height:1px;width:10px',';border-left:','10px solid',365,'>").w>10;','this.msieBorderBug','=',6,1498,1546,365,'>x").h!=',6,1498,1546,1558,141,365,'>x").h;this.blankWidthBug=',1562,'||',6,1498,1466,'0px',365,'>").h==0;},','TestRenameOK',338,6,273,1463,1469,'_65=',6,1472,'_65.setAttribute("name","','jsMath_test','");this.renameOK=(',6,15,'getElementsByName("',1594,'").length>0);',6,273,1490,'TestStyleChange',338,6,273,1463,' ID=\\"',1594,'\\">x</span>";var _66=',6,1472,'var w=_66',277,';',6,348,1345,'({"#',1594,180,'200%"});this.',1349,'=(_66',277,'==w);',6,273,1490,'VersionAtLeast',263,'v',8,'bv',1155,'this.version',').split(".");','v',1155,'v',1638,'if(v[1]==null){v[1]="0";}return bv[0]>v[0]||(bv[0]==v[0]&&bv[1]>=v[1]);},Init',338,6,25,'="unknown";this.',1491,430,1459,430,1584,430,1604,430,'MSIE',430,'Mozilla',430,'Opera',430,'OmniWeb',430,'Safari',430,'Konqueror','();if(','this.allowAbsoluteDelim','){',6,'Box.DelimExtend=',6,'Box.DelimExtendAbsolute;',6,'Box.Layout=',6,'Box.LayoutAbsolute;}',27,6,'Box.DelimExtend=',6,'Box.DelimExtendRelative;',6,'Box.Layout=',6,'Box.LayoutRelative;}if(','this.separateSkips','){',6,'HTML.Place=',6,'HTML.','PlaceSeparateSkips',';',6,'Typeset.prototype.','Place=',6,1696,1693,';}},MSIE',338,'if(',1474,'&&!',1482,'){',6,25,'="MSIE";',521,'platform','=="Win32"){',1668,'=1;',1687,'=1',';this.buttonCheck=1;this.',1028,'=1;this.msieDivWidthBug=1;this.',1022,767,'msieIntegralBug',767,'waitForImages',767,'msieAlphaBug',767,'alphaPrintBug',767,1451,'="position:relative; ";this.',1453,'=" ',145,';";this.',1455,1463,1367,145,365,'>";',6,'Macro("joinrel","\\\\mathrel{\\\\kern-5mu}"),',6,1504,'arial"]="font-family: \'Arial unicode MS\'";',6,'styles["#jsMath_message','"]=',6,1749,1509,154,'/,"',205,'").',1134,166,'/,"");',6,'styles["#jsMath_panel','"]=',6,1762,1509,154,'/,"',205,'").',1134,166,1760,6,'styles["#jsMath_button','"]="width:','1px; "+',6,1775,1509,154,'/,"',205,'").',1134,166,1760,6,1,'.onscroll=',6,509,'MoveButton;',6,1504,150,'"]=',6,1504,150,1509,145,1760,'if(','screen.deviceXDPI','&&','screen.logicalXDPI','&&',1805,'!=',1807,272,'imgScale*=',1807,'/',1805,';',6,517,'.alpha=0;}this.',326,'="<i>x</i>";',6,'EmBoxFor=',6,306,';}',27,521,1712,'=="MacPPC"){this.msieAbsoluteBug',767,'msieButtonBug',1720,1028,'=1;',6,'Setup.Script("jsMath-','msie-mac.js");',6,'Parser.prototype.macros.angle=["Replace","ord","<font face=\\"Symbol\\">‹</font>","normal"];',6,1762,1776,'42em; "+',6,1762,1509,166,1760,6,517,'.printwarn','=0;}}',6,'Macro("not","\\\\mathrel{\\\\rlap{\\\\kern3mu','/}}");}},Mozilla',338,'if(',6,276,'.ATTRIBUTE_NODE){',6,25,'="Mozilla";',521,1712,'=="Win32"){this.',1729,'=1;}',1668,'=1;',6,1775,'"]=',6,1775,1509,199,'/,"cursor:pointer");',6,'styles["#jsMath_noFont .link','"]=',6,1882,1509,199,'/,"cursor:pointer");',6,1856,'/}}");',521,'vendor=="Firefox"){',1637,'=',1201,'vendorSub;}',27,521,'userAgent.match','(" Firefox/([0-9.]+)( |$)")){',1637,'=RegExp.$1;}}}},',1662,338,521,'accentColorName){',6,25,'="',1662,'";','this.allowAbsolute','=',1495,';',1668,'=',1913,';this.valignBug=!',1913,1718,942,'=1;',6,'noChangeGlobal=1;',0,1495,'){',6,1838,'old-browsers.js','");}}},Opera',338,'if(',1482,'){',6,25,'="Opera";var _6a=',1201,1900,'("Opera 7");',1913,'=0;this.delay=10;this.operaHiddenFix="[Processing]";if(_6a){',6,1838,1932,'");}}},Safari',338,521,'appVersion.match(/Safari\\//)){',6,25,'="Safari";var _6b=',1201,1900,'("Safari/([0-9]+)");_6b=(_6b)?_6b[1]:400;',449,6,1260,451,6,1260,'[i]&&',6,'TeX[',6,1260,'[i]]){',6,'TeX[',6,1260,'[i]].dh=0.1;}}',6,'TeX.axis_height+=0.05;',6,'TeX.default_rule_thickness+=0.025;',1668,'=_6b>=125;this.safariIFRAMEbug=_6b>=312&&_6b<412;this.safariButtonBug=_6b<412;this.safariImgBug',767,942,'=1',1718,1349,'=1;}},',1666,338,521,'product&&',1201,'product.match("',1666,'")){',6,25,'="',1666,'";',1913,'=0;',1668,'=0;',521,1900,'(/',1666,'\\/(\\d+)\\.(\\d+)/)){if(RegExp.$1<3||(RegExp.$1==3&&RegExp.$2<3)){',1687,767,'valignBug=1;',6,1838,1932,'");}}}}};',6,'Font={fallback:"symbol",register:[],message:"<b>No jsMath TeX fonts found</b> -- using',' image fonts instead','.<br/>\\n"+"These',' may be slow and might not print well.<br/>\\n"+"Use the jsMath control panel to get additional information.",','extra_message:"Extra TeX fonts not found: <b><span id=\\"jsMath_ExtraFonts',365,'></b><br/>"+"Using',2019,'. This',2021,'print_message',':"To print higher-resolution math symbols, click the<br/>\\n"+"<b>Hi-res Fonts for Printing</b> button on',' the jsMath control panel.<br/>\\n",','alpha_message',':"If the math symbols print as black boxes, turn off <b>image alpha channels</b><br/>\\n"+"using the <B>Options</B> pane of',2030,'Test1',263,'_6d,n,_6f,_70','){if(n==null){n=124;}if(','_6f==null){_6f=2;}if(_70==null){_70="";}var wh1=',6,'BBoxFor("<span style=\\"font-family',': "+_70+_6d+", serif\\">"+',6,'TeX[_6d][n',1280,'var wh2=',6,2040,': serif\\">"+',6,'TeX[_6d][n',1280,'return (wh1.w>_6f*wh2','.w&&wh1.h!=0);},','Test2',263,'_73,n,_75,_76',2037,'_75==null){_75=2;}if(_76==null){_76="";}var wh1=',6,2040,': "+_76+_73+", serif\\">"+',6,'TeX[_73][n',1280,'var wh2=',6,2040,': serif\\">"+',6,'TeX[_73][n',1280,'return (wh2.w>_75*wh1',2053,'CheckTeX',338,'var wh=',6,2040,': jsMath-',118,96,'\\">"+',6,432,'1',1280,6,'nofonts=((wh.w*3>wh.h||wh.h==0)&&!this.Test1("cmr10','",null,null,"jsMath-"));if(',6,'nofonts&&(',1201,1712,'!="MacPPC"||',6,25,'!="Mozilla"||!',6,325,1631,'(1.5))){wh=',6,2040,': ',118,96,'\\">"+',6,432,'1',1280,6,2088,'"));',0,6,'nofonts){',6,1838,'BaKoMa-fonts.js");}}},Check',338,'var _7a=',6,517,';this.CheckTeX();if(',6,2117,'if(_7a.autofont','||','_7a.font=="tex"){','_7a.font=this.fallback;if(_7a.warn){',6,'nofontMessage=1;_7a.warn=0;',6,509,544,'0);if(',6,1,'.NoFontMessage','){',6,1,2140,'();}',27,'this.',640,'(',893,');}}}}',27,2128,'){_7a.font="','tex";}if(',2130,'return;}}if(',6,'noImgFonts',2154,'unicode";}if(_7a.font=="unicode"){var _7b=({Win32:"pc",MacPPC:"mac"})[',1201,1712,']||"unix";',6,1838,'fallback-"+_7b+".js");',6,'Box.TeXnonfallback=',6,'Box.TeX;',6,'Box.TeX=',6,'Box.TeXfallback;return;}',0,'_7a.print&&_7a',1853,272,'PrintMessage((',6,325,1729,'&&',6,517,'.alpha)?this.',2028,'+this.',2031,275,2028,');}if(',6,325,'waitForI'], |
|
['mages){','jsMath.','Script','.Push(',1,2,',"WaitForImage",',1,'blank);}if(_7a.font=="symbol"){',1,'Setup.',2,'("jsMath-fallback-symbols.js");',1,'Box.TeXnonfallback=',1,'Box.TeX',';',1,16,'=',1,'Box.TeXfallback;','return;}',1,'Img.SetFont','({cmr10',':["all"],','cmmi10',27,'cmsy10',27,'cmex10',27,'cmbx10',27,'cmti10:["all"]});',1,'Img.LoadFont','("cm-fonts");},Message',':function(','_7c','){if(',1,'Element("','Warning")){','return;}var ','div=',1,10,'DIV("','Warning','",{});div.innerHTML="<center><table><tr><td>"+"<div ','id=\\"jsMath_noFont\\"><div ','class=\\"message\\">"+','_7c+"<div style=\\"text-align:left\\"><span style=\\"float:left; margin: 8px 0px 0px 20px\\">"+"<span onclick=\\"',1,'Controls.','Panel','()\\" title=\\" ','Open the ','jsMath Control Panel',' \\" class=\\"link\\">',61,'</span>"+"</span','><span style=\\"margin: 8px 20px 0px 0px; float:right\\">"+"<span onclick=\\"',1,'Font.','HideMessage',59,'Remove this font warning message',62,'Hide this Message',64,'></div><div style=\\"height:6px\\"></div><br clear=\\"all\\"/></div></','div>"+"<div style=\\"width:22em; height:1px\\"></div>"+"</td></tr></table></center><hr/>";},',68,':function(){','var _7e=',1,44,51,'");if(_7e){_7e','.style.display="none";}},','PrintMessage',40,'_7f',42,1,44,'PrintWarning','")){',46,'div=',1,10,50,90,52,54,'_7f+"</',75,'Register',40,'_81,_82',42,'typeof (_81)=="string"){_81={name:_81};}if(!',1,10,'inited&&!_82){','this.register','[',110,'.length]=_81;',46,'_83=_81.name;var _84=_83.replace(/10$/,"");var _85=',1,'TeX.fam.length;if(','_81.prefix','==null){',118,'="";}if(!_81.style){_81.style="font-family: "+',118,'+_83+", serif";}if(!','_81.styles','){',124,'={};}','if(!','_81.macros','){',129,127,1,'TeX.fam[_85]=_83;',1,'TeX.famName[_83]=_85;',129,'[_84]=["HandleFont",_85];',1,'Add(',1,'Parser.prototype.macros,',129,');',124,'[".typeset ."+_83]=_81.style;',1,10,'Styles(',124,');if(',1,'initialized){',1,2,'.Push(',1,'Setup,"TeXfont",_83);}var _86=!',1,'nofonts&&_81.test(_83,_81.testChar,_81.testFactor,',118,151,'_86&&',1,'Controls.cookie.font=="','tex"){if(_81.tex){_81.tex(_83,_85,_81);}',23,'if(!_86&&',1,57,'cookie.warn&&',1,165,'tex"&&!',1,'nofonts){if(!',1,44,45,'this.Message(this.extra_message);}var _87=',1,44,'ExtraFonts");if(_87',42,'_87.innerHTML','!=""){',185,'+=",";}',185,'+=" "+',118,'+_83;}}if(',1,165,'unicode"){if(_81.fallback){_81.fallback(_83,_85,_81);}',46,'_88={};_88[_83]=["all"];',1,25,'(_88);',1,38,'(_83',151,1,'initialized){',1,2,'.Push(',1,'Img,"Scale");',1,2,'.Push(',1,'Img,"UpdateFonts");}},LoadRegistered',77,'var i=0;while(i<',110,'.length){this.',102,'(',110,'[i++],1);}',110,'=[];},Load',40,'_8a){',1,10,2,'(this.URL(_8a));},URL',40,'_8b){return ',1,'Img.root+_8b+"/def.js";}};',1,'Controls={cookie:{scale:100,font:"tex",autofont:1,scaleImg:0,alpha:1,warn:1,printwarn:1,stayhires:0,button:1,progress:1,asynch:0,blank:0,print:0,keep:"0D",global:"auto",hiddenGlobal:1},cookiePath:"/",','noCookiePattern',':/^(file|mk):$/,Init',77,'this.panel=',1,10,50,'panel",{display:"none"});if(!',1,'Browser.msieButtonBug){this.Button();}else{setTimeout("',1,57,'Button()",500);}},',58,77,1,'Translate.Cancel();if(','this.loaded','){this.Main();}else{',1,2,'.delayedLoad(',1,'root+"jsMath-controls.html");}},Button',77,'var _8c=',1,10,50,'button",{});_8c.title=" Open ',61,' ";_8c.innerHTML="<span onclick=\\"',1,57,58,'()\\">jsMath</span>";if(!',1,'Global.','isLocal&&!',1,'noShowGlobal){_8c.innerHTML+="<span id=\\"jsMath_global\\" title=\\" Open jsMath Global ',58,' \\" "+"onclick=\\"',1,276,'Show(1)\\">Global </span>";}if(_8c.offsetWidth<30){_8c.style.width="auto";}if(!','this.cookie','.button){_8c',83,'MoveButton',77,'if(!this.button){this.button=',1,44,'button");}','this.button.style.visibility="','hidden";',294,'visible";},GetCookie',77,'if(','this.defaults',119,300,127,1,140,300,',',285,');this.userSet={};var _8d=',1,'document.cookie',';if(',1,'window.location','.protocol.match(this.',239,')){_8d=this.','localGetCookie','();','this.isLocalCookie','=1;}if(_8d.match(/jsMath=([^;]+)/)){var _8e=RegExp.$1.split(/,/);for(var i=0;i<_8e.length;i++){var x=_8e[i].match(/(.*):(.*)/);if(x[2].match(/^\\d+$/)){x[2]=1*x[2];}',285,'[x[1]]=x[2];this.userSet[x[1]]=1;}}},',318,77,'return unescape(',1,314,'.search.substr(1));},SetCookie',40,'_91){var _92=[];','for(var id in ',285,42,300,'[id]==null||',285,'[id]!=',300,'[id]){_92[_92.length]=id+":"+',285,'[id];}}_92=_92.join(",");if(',320,42,'_91==2){return "','jsMath="+escape(','_92);}this.','localSetCookie','(_92,_91);}else{if(_92==""){_91=0;}if(','this.cookiePath','){_92+="; ','path="+',350,';}if(','this.cookieDomain',351,'domain="+',355,';}if(',285,'.keep!="0D"){var ms={D',':1000*60*60*24',',W',362,'*7,M',362,'*30,Y',362,'*365};var exp=new Date;exp.setTime(exp.getTime()+',285,'.keep.substr(','0,1)*ms[',285,371,'1,1)]);_92+="; expires="+exp.toGMTString();}if(_92',186,1,311,'="jsMath="+_92;var _96=',1,311,';if(_91&&!_96.match(/jsMath=/)){alert("Cookies must be enabled in order to save jsMath options");}}}return null;},',348,40,'_97,_98){if(!_98){',46,'_99=String(',1,314,').replace(/\\?.*/,"");if(_97',186,'_99+="?',346,'_97);}if(_99!=',1,314,'.href){this.Reload(_99);}},Reload',40,'url){if(!',256,'){',23,256,'=0;',1,276,'ClearCache();if(url){',1,314,'.replace(url);}else{',1,314,'.reload();}}};',1,'Click={CheckClick',40,'_9b){if(!_9b){_9b=',1,'window.event;}if','(_9b.altKey){',1,57,58,'();}},CheckDblClick',40,'_9c){if(!_9c){_9c=',1,419,'(!',1,'Click.DblClick){',1,'Extension.Require("double-click",1);var _9d=_9c;_9c={};',332,'_9d){_9c[id]=_9d[id];}}',1,2,'.Push(',1,'Click,"DblClick",[_9c,this.alt]);}};',1,'TeX={thinmuskip:3/18,medmuskip:4/18,thickmuskip:5/18,x_height:0.430554,quad:1,num1:0.676508,num2:0.393732,num3:0.44373,denom1:0.685951,denom2:0.344841,sup1:0.412892,sup2:0.362892,sup3:0.288888,sub1:0.15,sub2:0.247217,sup_drop:0.386108,sub_drop:0.05,delim1:2.39,delim2:1,axis_height:0.25,default_rule_thickness:0.06,big_op_spacing1:0.111111,big_op_spacing2:0.166666,big_op_spacing3:0.2,big_op_spacing4:0.6,big_op_spacing5:0.1,integer:6553.6,scriptspace:0.05,nulldelimiterspace:0.12,delimiterfactor:901,delimitershortfall:0.5,scale:1,atom:["ord","op","bin","rel","open","close","punct","ord"],fam:["cmr10","cmmi10","cmsy10","cmex10","cmti10","","cmbx10",""],famName:{cmr10:0,cmmi10:1,cmsy10:2,cmex10:3,cmti10:4,cmbx10:6},encoding:["À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","°","Ñ","Ò","Ó","Ô","Õ","Ö","·","Ø","Ù","Ú","Û","Ü","µ","¶","ß","ï","!",""","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","ÿ"],cmr10:[[0.625',',0.683],[0.','833',443,'778',443,'694',443,'667',443,'75',443,'722',443,'778',443,'722',443,'778',443,'722',443,'583',',0.694,0,{ic:0.','0778,krn:{"39":0.0778,"63":0.0778,"33":0.0778,"41":0.0778,"93":0.0778},lig:{"105":','14,"108":15}}],[0.','556',',0.694],[0.','556',469,'833',469,'833',469,'278',',0.431],[0.','306,0.431',',0.194],[0.','5',469,'5',469,'5,0.628],[0.5',469,'5,0.568],[0.75',469,'444,0,0.17],[0.5',469,'722',477,'778',477,'5,0.528,0.0972],[0.903,0.683],[1.01',443,'778,0.732,0.0486],[','0.278',',0.431,0,{','krn:{"108":-0.','278,"76":-0.319}}],[',497,',0.694,0,{lig:{"96":','60}}],[0.5',469,'833',',0.694,0.194],[','0.5',',0.75,0.0556],[0.','833',508,'778',469,'278',',0.694,0,{krn:{"','63":0.111,"33":0.111','},lig:{"39":34}}],[0.','389',',0.75,0.25],[0.','389',518,'5,0.75],[','0.778,0.583,0.0833],[','0.278,0.106',479,'333',498,'lig:{"45":','123}}],[',523,'],[0.5',518,'5,0.644','],[0.5,0.644],[0.5,0.','644',533,'644',533,'644',533,'644],[0.5,0.644],[',497,477,'278,0.431',479,'278,0.5',479,'778',',0.367,-0.133],[','0.472,0.5',479,'472',502,'62}}],[0.778',469,'75',',0.683,0,{krn:{"','116','":-0.0278,"','67',558,'79',558,'71',558,'85',558,'81',558,'84":-0.0833,"89":-0.0833,"86":-0.111,"87":-0.111}}],[0.','708',443,'722',443,'764',556,'88',558,'87',558,'65',558,'86',558,'89":-','0.0278}}],[0.','681',443,'653',',0.683,0,{','krn:{"111":-0.0833,"101":-0.0833,"117":-0.0833,"114":-0.0833,"97":-0.0833,"65":-0.111,"79":-0.0278,"67":-0.0278,"71":-0.0278,"81":-0.0278}}],[','0.785',443,'75',443,'361',556,'73":',585,'514',443,'778',556,'79',558,'67',558,'71',558,'81":-',585,'625',556,569,'917',443,'75',443,'778',556,'88',558,'87',558,'65',558,'86',558,'89":-',585,'681',556,'65','":-0.0833,"','111',558,'101',558,'97',558,'46',633,'44":-0.','0833}}],[0.','778,0.683',479,'736',556,'116',558,'67',558,'79',558,'71',558,'85',558,'81',558,569,'556',443,'722',556,'121',558,'101',633,'111',633,'114',633,'97',633,'65',633,'117":-0.',643,'75',443,'75',',0.683,0,{ic:0.','0139,',590,'1.03',682,'0139,',590,'0.75',556,'79',558,'67',558,'71',558,'81":-',585,'75',682,'025,krn:{"101',633,'111',633,'114',633,'97',633,'65',633,677,643,'611',443,'278',518,'5',469,'278',518,'5',469,'278,0.668],[0.','278',502,'92}}],[0.5',498,'krn:{"118',558,'106":0.0556,"121',558,'119":-',585,'556,0.','694,0',',{krn:{"101":0.0278,"111":0.0278,"120":-0.0278,"100":0.0278,"99":0.0278,"113":0.0278,"118":-0.0278,"106":0.0556,"121":-0.0278,"119":-0.0278}}],[0.','444',498,'krn:{"104',558,'107":-',585,'556',469,'444',477,'306',465,466,'12,"102":11,"108":13}}],[0.5',',0.431,0.194,{','ic:0.','0139,krn:{"','106":',585,'556',514,'116',558,'117',558,'98',558,'121',558,'118',558,'119":-',585,723,'306,0.668',479,'528',514,'97','":-0.0556,"','101',558,'97',558,'111',558,'99":-',585,'278',469,'833',498,'krn:{"116',558,'117',558,'98',558,'121',558,'118',558,'119":-',585,'556',498,'krn:{"116',558,'117',558,'98',558,'121',558,'118',558,'119":-',585,'5,0.431',',0',736,734,'431,0.194',736,'528,0.431',479,'392',477,'394',477,'389,0.615,0,{krn:{"121',558,'119":-',585,'556',498,'krn:{"119":-',585,'528',',0.431,0,{ic:0.',753,'97',776,'101',558,'97',558,'111',558,'99":-',585,'722',836,753,'101',558,'97',558,'111',558,'99":-',585,'528',477,'528',751,'ic:0.',753,'111',558,'101',558,'97',558,'46',633,'44":-0.',643,'444',477,'5',836,'0278,',527,'124}}],[1',836,'0278}],[0.','5',469,'5,0.668],[0.5,0.668]],cmmi10:[[0.615',682,'139',',krn:{"61":-0.0556,"59":-0.111,"58":-0.111,"127":0.',643,'833',556,'127":0.167}}],[0.','763',682,879,'krn:{"127":0.0833}}],[0.','694',556,893,'742',682,'0757,',897,'831',682,'0812,krn:{"61',776,'59":-0.0556,"58":-0.0556,"127":0.','0556}}],[0.','78',682,'0576,',897,'583',682,'139',889,910,'667',589,897,'612',682,'11,krn:{"61',776,909,910,'772',682,'0502,',897,'64',836,'0037,','krn:{"127":',585,'566',',0.694,0.194,{ic:0.','0528,',897,'518',751,'ic:0.0556}],[0.444',465,'0378,krn:{"',909,910,'406',498,'krn:{"127":0.0556}}],[0.','438',939,'0738,',897,'497',751,'ic:0.0359',',',951,'469',465,879,897,'354',498,951,'576',477,'583',469,'603',751,936,585,'494',836,'0637,krn:{"',909,'0278}}],[0.','438',939,'046,',936,'0.111}}],[0.','57',836,'0359}],[0.','517',751,897,'571',836,'0359,krn:{"59',776,'58":-0.',910,'437',836,'113,krn:{"',909,980,'54',836,'0359,',936,585,'596,0.694,0.194,{',897,'626',751,951,'651',939,'0359,',936,985,'622',836,988,'466',498,897,'591',',0.694,0,{',897,'828',836,883,'517',751,897,'363,0.431,0.0972,{ic:0.0799,',897,'654',751,936,'0.0833}}],[1',548,'1',548,'1',548,'1',548,497,',0.464,-0.0363],[',497,1047,'0.5,0.465,-0.0347],[',1050,'0.5',477,'5',477,'5',477,815,479,815,479,815,',0.194',533,819,533,'431',479,'278,0.106],[',523,479,'778',',0.539,0.0391],[','0.5,0.75,0.25,{krn:{"1',776,'65',776,'77',776,'78',776,'89":0.0556,"90":-0.',910,'778',1073,1050,'0.531',465,'0556,',897,'75',556,'127":','0.','139}}],[0.','759',682,'0502,',897,'715',682,'0715,krn:{"61',558,909,643,'828',682,879,951,'738',682,'0576,',897,'643',682,'139',889,643,'786',589,897,'831',682,'0812,krn:{"61',776,909,910,'44',682,'0785,',936,985,'555',682,'0962',889,'167}}],[0.','849',682,'0715,krn:{"61',776,909,910,'681',556,1093,585,'97',682,'109,krn:{"','61',776,909,643,'803',682,1150,'61',633,'61',558,909,643,'763',682,879,897,'642',682,'139',889,643,'791,0.683,0.194,{',897,'759',682,'00773,',897,'613',682,'0576,krn:{"61',776,909,643,'584',682,'139,krn:{"61',558,909,643,'683',682,1150,'59":-0.111,"',996,'111,"61',776,1093,585,'583',682,'222',',krn:{"59":-0.167,"58":-0.167,"61":-0.111}}],[0.','944',682,'139',1203,'828',682,'0785,krn:{"61',633,'61',558,909,643,'581',682,'222',1203,'683',682,'0715,krn:{"61',776,909,643,'389,0.75],[0.389',506,'0.389',506,'1,0.358,-0.142],[',1230,'0.417',1025,936,985,'529',477,'429',469,'433',498,951,'52',514,'89":0.0556,"90',776,'106":-0.111,"102":-0.167,"',893,'466',498,951,'49',939,'108,krn:{"',909,1137,'477',751,958,',',936,585,'576',514,'127":-',585,'345,0.66],[0.412,0.66',',0.194,{ic:0.','0572,krn:{"59',776,996,910,'521',465,'0315}],[0.298',465,'0197,',897,'878',477,'6',477,'485',498,951,'503',751,897,'446',751,958,',',897,'451',836,879,'krn:{"',909,910,'469',498,951,'361,0.615,0,{',897,'572',498,936,585,'485',836,'0359,',936,585,'716',836,'0269,',897,'572',498,936,585,'49',751,958,',',951,'465',836,'044,',951,'322',498,936,585,'384',751,897,'636',751,936,985,'5,0.714,0,{ic:0.154}],[',497,465,'399}]],cmsy10:[[',522,497,',0.444,-0.0556],[',522,1050,522,'0.5,0.444,-0.0556],[',522,522,522,522,522,522,522,'1',506,1352,1352,'0.778',1047,'0.778,0.464,-0.0363','],[0.778,0.636,0.136',1367,1367,1367,1367,1367,'],[0.778',548,'0.778,0.483,-0.0169],[0.778',1073,'0.778',1073,'1',1073,'1',1073,'0.778',1073,'0.778',1073,'1',548,'1',548,'0.5',506,'0.5',506,'1',548,'1',506,'1',506,'0.778',1047,'1',548,'1',548,'0.611',506,'0.611',506,'1',548,'1',506,'1',506,'0.778',477,'275,0.556],[1',477,'667',1073,'0.667',1073,'0.889',506,'0.889',506,'0',506,'0',548,'0.556',469,'556',469,'667',477,'5',508,'722',469,'722',469,'778',469,'778',469,'611',469,'798',556,'48":0.','194}}],[0.657',682,'0304',',krn:{"48":0.',1095,'527',682,'0583',1457,1095,'771',682,'0278',1457,643,'528',682,'0894',1457,'111}}],[0.','719',682,'0993',1457,1473,'595',',0.683,0.0972,{ic:0.','0593',1457,1473,'845',682,'00965',1457,1473,'545',682,'0738,krn:{"48":',585,'678',1480,'185',1457,1137,'762',682,'0144',1457,910,'69',556,1453,'139}}],[1.2',556,1453,1095,'82',682,'147',1457,643,'796',682,1466,1457,1473,'696',682,'0822',1457,643,'817,0.683,0.0972,{krn:{"48":',985,'848',556,1453,643,'606',682,'075',1457,1095,'545',682,'254,krn:{"48":',585,'626',682,'0993',1457,643,'613',682,'0822,krn:{"48":',585,'988',682,'0822',1457,643,'713',682,'146',1457,1095,'668',1480,'0822',1457,643,'725',682,'0794',1457,1095,'667,0.556],[0.',1569,1569,1569,1569,'611',469,'611',469,'444',518,'444',518,'444',518,'444',518,'5',518,'5',518,'389',518,'389',518,'278',518,'5',518,'5',518,'611',518,'5',518,'278',506,'0.833,0.04,0.96],[0.75',443,'833',443,'417',939,'111}],[0.',1569,'667,0.556',1367,1367,'],[0.444',506,'0.444',506,'0.444',506,'0.611',506,'0.778,0.694,0.13','],[',1625,'],[',1625,'],[',1625,']],cmex10:[[0.458',',0.04,1.16,{n:','16}],[0.458',1633,'17}],[0.417',1633,'104}],[0.417',1633,'105}],[0.','472',1633,'106}],[0.472',1633,'107}],[0.472',1633,'108}],[0.472',1633,'109}],[0.583',1633,'110}],[0.583',1633,1612,'472',1633,'68}],[0.472',1633,'69}],[0.333',',0,0.6,{delim:{','rep:12}}],[0.556',1659,'rep:13}}],[0.578',1633,'46}],[0.578',1633,'47}],[0.597',',0.04,1.76,{','n:18}],[0.597',1667,'n:19}],[0.736',',0.04,2.36,{n:','32}],[0.736',1671,'33}],[0.528',1671,'34}],[0.528',1671,'35}],[0.583',1671,'36}],[0.583',1671,'37}],[0.583',1671,'38}],[0.583',1671,'39}],[0.75',1671,'40}],[0.75',1671,'41}],[0.75',1671,'42}],[0.75',1671,'43}],[1.04',1671,'44}],[1.04',1671,'45}],[0.792',',0.04,2.96,{n:','48}],[0.792',1699,'49}],[0.583',1699,'50}],[0.583',1699,'51}],[0.639',1699,'52}],[0.639',1699,'53}],[0.639',1699,'54}],[0.639',1699,'55}],[0.806',1699,'56}],[0.806',1699,'57}],[0.806',',0.04,2.96],[','0.806',1719,'1.28',1719,'1.28',1719,'0.811',1667,'n:30}],[0.811',1667,'n:31}],[0.875',1667,'delim:{top:','48,bot:64,rep:66}}],[0.875',1667,1732,'49,bot:65,','rep:67}}],[0.','667',1667,1732,'50,bot:52,rep:54}}],[0.667',1667,1732,'51,bot:53,rep:55}}],[0.667',1667,'delim:{bot:','52,rep:54}}],[0.667',1667,1746,'53,rep:55}}],[0.667',1659,'top:50,rep:54}}],[0.667',1659,'top:51,rep:55','}}],[0.889,0,0.9,{delim:{top:','56,mid:60,bot:58,rep:62',1755,'57,mid:61,bot:59,rep:62',1755,'56,bot:58,rep:62',1755,'57,bot:59,rep:62','}}],[0.889,0,1.8,{delim:{rep:','63',1763,'119}}],[0.889,0,0.3,{delim:{','rep:62}}],[0.','667',1659,'top:120,','bot:121,rep:63}}],[0.','875',1667,1732,'56,bot:59,',1767,'875',1667,1732,'57,bot:58,',1767,'875',1659,'rep:66}}],[0.875',1659,1737,'611',1667,'n:28}],[0.611',1667,'n:29','}],[0.833,0,1,{n:','71}],[1.11',',0.1,1.5],[','0.472,0,1.11,{ic:0.194,n:','73}],[','0.556,0,2.22,{ic:0.444}],[1.11,0',',1,{n:75}],[1.51,0','.1,1.5],[1.11,0',',1,{n:77}],[1.51,0',1799,',1,{n:79}],[1.51',1794,'1.06,0,1,{n:88}],[0.944,0,1,{n:89}],[',1795,'90',1792,'91',1792,'92',1792,'93',1792,'94',1792,'95}],[1.44',1794,'1.28',1794,1797,1799,1799,1799,1799,'.1,1.5],[0.944,0,1,{n:97}],[1.28',1794,'0.556,0.722,0,{n:','99','}],[1,0.75,0,{n:','100}],[1.44,0.75],[',1827,'102',1829,'103}],[1.44,0.75],[0.472',1667,'n:20}],[0.472',1667,'n:21}],[0.528',1667,'n:22}],[0.528',1667,'n:23}],[0.528',1667,'n:24}],[0.528',1667,'n:25}],[0.667',1667,'n:26}],[0.667',1667,'n:27}],[1',1633,'113}],[1',1667,'n:114}],[1',1671,'115}],[1',1699,'116}],[1.06,0,1.8,{',1732,'118,bot:116,rep:117}}],[1.06,0,0.6],[1.06,0.04,0.56],[0.778',1659,'top:126,','bot:127,rep:119','}}],[0.667',1659,1770,'rep:63}}],[0.667',1659,1771,'45,0.12],[0.',1870,1870,1870,'778',1659,1862,'rep:119}}],[0.778',1659,1863,'}}]],cmti10:[[0.627',682,'133}],[0.818',443,'767',682,'094}],[0.692',443,'664',682,'153}],[0.743',682,'164}],[0.','716',682,'12}],[0.','767',682,1612,'716',682,'0599}],[0.767',682,1612,'716',682,'103}],[0.','613',939,'212,krn:{"39":0.104,"63":0.104,"33":0.104,"41":0.104,"93":0.104},lig:{"105":',467,'562',939,1906,'588',939,1906,'882',939,1906,'894',939,1906,'307',836,'0767}],[0.332',751,'ic:0.0374}],[0.511',469,'511',465,'0969','}],[0.511,0.','628,0,{ic:0.083}],[0.511',465,'108',1932,'562,0,{ic:0.',1906,'831',469,'46,0,0.17],[0.537',939,1640,'716',836,'0751}],[0.716',836,'0751',1932,'528,0.0972,{ic:0.0919}],[0.883',682,1895,'985',682,1895,'767,0.732,0.0486,{ic:0.094}],[0.256',498,499,'256,"76":-0.321}}],[0.307',465,'124,lig:{"96":60}}],[0.514',465,'0696}],[0.818',939,'0662}],[0.769',469,'818,0.75,0.0556',',{ic:0.136}],[0.','767',465,'0969}],[0.307',465,'124,krn:{"63":0.102,"33":0.102',516,'409',',0.75,0.25,{ic:0.162}],[0.','409,0.75,0.25,{ic:0.0369',1932,'75,0,{ic:0.149}],[0.767,0.562,0.0567,{ic:0.0369}],[0.307,0.106',479,'358',836,'0283,',527,'123}}],[0.307,0.106],[0.511',1976,'511,0.644,0',',{ic:0.136}],[0.511,0.644,0',1988,1988,1988,'.194',1988,1988,1988,'.194',1988,1988,1968,'307',836,'0582}],[0.307',751,'ic:0.0582}],[0.307,0.5',1268,'0756}],[0.767,0.367,-0.133,{ic:0.0662',1932,'5',479,'511',465,'122,lig:{"96":62}}],[0.767',465,'096}],[0.743',556,'110":-','0.0256,"108":-0.0256,"114":-0.0256,"117":-0.0256,"109":-0.0256,"116":-0.0256,"105":-0.0256,"67":-0.0256,"79":-0.0256,"71":-0.0256,"104":-0.0256,"98":-0.0256,"85":-0.0256,"107":-0.0256,"118":-0.0256,"119":-0.0256,"81":-0.0256,"','84":-0.0767,"89":-0.0767,"86":-0.102,"87":-0.102,"101":-0.0511,"97":-0.0511,"111":-0.0511,"100":-0.0511,"99":-0.0511,"103":-0.0511,"113":-0.0511}}],[0.','704',682,1906,'716',682,'145}],[0.755',682,'094,krn:{"88','":-0.0256,"','87',2027,'65',2027,'86',2027,'89','":-0.0256}}],[0.','678',682,1895,'653',682,'133,krn:{"111','":-0.0767,"','101',2042,677,'0767,"114',2042,'97',2042,'65":-0.102,"','79":-0.0256,"67":-0.0256,"71":-0.0256,"81":-0.0256}}],[0.','774',682,'0872}],[0.743',682,1892,'386',682,'158}],[0.525',682,'14}],[0.769',682,'145,krn:{"',2051,'627',556,2018,'897',682,1892,'743',682,1892,'767',682,'094,krn:{"88',2027,'87',2027,'65',2027,'86',2027,'89',2035,'678',682,'103,krn:{"65":-0.0767}}],[0.767,0.683',1268,'094}],[0.729',682,'0387,krn:{"110":-',2017,2018,'562',589], |
|
['ic:0.12','}],[0.','716,0.683',',0,{ic:0.','133',',krn:{"','121','":-0.0767,"','101":-0.0767,"111":-0.0767,"114":-0.0767,"97":-0.0767,"117":-0.0767,"65":-0.0767}}],[0.','743,0.683',3,'164',1,'743,0.683',3,'184',5,'111',7,'101',7,'117',7,'114',7,'97',7,'65":-0.','102,"','79":-0.0256,"67":-0.0256,"71":-0.0256,"81":-0.0256}}],[0.','999,0.683',3,'184',5,27,'0767','}}],[0.743,0.683',3,'158',5,29,'743,0.683',3,'194',5,8,'613,0.683',3,'145','}],[0.307,0.','75,0.25',',{ic:0.','188',1,'514',',0.694',3,'169',49,50,51,'105','}],[0.511,0.','694',3,'0665',49,'668',3,'118',49,'694',3,'124,lig:{"96":92}}],[0.511,0.431',3,'0767}],[0.','46',55,3,'0631',',krn:{"101":-0.0511,"97":-0.0511,"111":-0.0511,"100":-0.0511,"99":-0.0511,"103":-0.0511,"113":-0.0511}}],[0.','46,0.431',3,'0565',80,'511',55,3,'103',',krn:{"108":0.0511}}],[0.','46,0.431',3,'0751',80,'307',55,',0.194,{ic:0.','212',5,'39":0.104,"63":0.104,"33":0.104,"41":0.104,"93":0.104},lig:{"105":','12,"102":11,"108":13}}],[0.','46',',0.431,0.194,{ic:0.0885}],[0.','511',55,3,35,49,'655',3,'102',49,'655',96,'145',1,'46',55,3,'108',1,'256',55,3,'103',89,'818,0.431',3,75,'562,0.431',3,35,5,'39":-0.102}}],[0.511,0.431',3,'0631',80,'511,0.431',96,'0631',80,'46',102,'422,0.431',3,'108',80,'409,0.431',3,'0821',1,'332,0.615',3,'0949',1,'537,0.431',3,75,'46,0.431',3,'108',1,'664,0.431',3,'108',89,'464,0.431',3,'12',1,'486',102,'409,0.431',3,'123',62,'431',3,'0921',',lig:{"45":124}}],[1.','02,0.431',3,178,62,'694',3,'122',62,'668',3,'116',62,'668',3,'105}]],cmbx10:[[0.692',',0.686],[0.','958',195,'894',195,'806',195,'767',195,'9',195,'831',195,'894',195,'831',195,'894',195,'831',195,'671',55,3,'109,krn:{"39":0.109,"63":0.109,"33":0.109,"41":0.109,"93":0.109},lig:{"105":','14,"108":15}}],[0.639',',0.694],[0.','639',221,'958',221,'958',221,'319',',0.444],[0.','351',',0.444,0.194','],[0.575,0.','694',232,'694',232,'632',232,'694',232,'596],[0.869',221,'511,0,0.17],[0.597',221,'831',229,'894,0.444',232,'542,0.0972],[1.04,0.686],[1.17',195,'894,0.735,0.0486],[0.319',',0.444,0,{krn:{"','108":-0.319,"76":-0.378}}],[0.35',',0.694,0,{lig:{"96":','60}}],[0.603',221,'958',55,',0.194',232,'75,0.0556],[0.','958,0.',261,'894',221,'319',',0.694,0,{krn:{"','63":0.128,"33":0.128},lig:{"39":34}}],[0.447,0.',50,'],[0.447,0.',50,232,'75],[0.894,0.633,0.133],[','0.319,0.156',',0.194],[0.','383,0.444,0,{lig:{"45":123}}],[',274,232,50,232,'644',232,'644',232,'644',232,'644',232,'644',232,'644',232,'644',232,'644',232,'644',232,'644],[0.319',229,'319',231,'],[0.35,0.5',275,'894,0.391,-0.109],[0.543,0.5',275,'543',254,'62}}],[0.894',221,'869',',0.686,0,{krn:{"','116','":-0.0319,"','67',314,'79',314,'71',314,'85',314,'81',314,'84":-0.0958,"89":-0.0958,"86":-0.128,"87":-0.128}}],[','0.818',195,'831',195,'882',312,'88',314,'87',314,'65',314,'86',314,'89','":-0.0319}}],[0.','756',195,'724,0.686,0,{','krn:{"111":-0.0958,"101":-0.0958,"117":-0.0958,"114":-0.0958,"97":-0.0958,"65":-0.128,"79":-0.0319,"67":-0.0319,"71":-0.0319,"81":-0.0319}}],[','0.904',195,'9',195,'436',312,'73','":0.0319}}],[0.','594',195,'901',312,'79',314,'67',314,'71',314,'81',341,'692',312,325,'1.09',195,'9',195,'864',312,'88',314,'87',314,'65',314,'86',314,'89',341,'786',312,27,'0958,"111',314,'101',314,'97',314,'46":-0.0958,"44":-0.0958}}],[0.','864,0.686',275,'862',312,'116',314,'67',314,'79',314,'71',314,'85',314,'81',314,325,'0.639',195,'8',312,'121',314,'101":-0.0958,"111":-0.0958,"114":-0.0958,"97":-0.0958,"65":-0.0958,"117":-0.0958}}],[0.','885',195,'869,0.686',3,'016,',345,'1.19,0.686',3,'016,',345,'0.869',312,'79',314,'67',314,'71',314,'81',341,'869,0.686',3,'0287',5,418,'703',195,'319,0.',50,'],[0.603',221,446,50,232,'694],[0.319',221,'319',254,'92}}],[0.559',252,'118',314,'106":0.0639,"121',314,'119',341,'639',55,',0',',{krn:{"101":0.0319,"111":0.0319,"120":-0.0319,"100":0.0319,"99":0.0319,"113":0.0319,"118":-0.0319,"106":0.0639,"121":-0.0319,"119":-0.0319}}],[0.','511',252,'104',314,'107',341,'639',221,'527',229,'351',55,3,219,100,'575',231,51,'016',5,'106',353,'639',267,'116',314,'117',314,'98',314,'121',314,'118',314,'119',341,'319',221,'351',55,275,'607',267,'97":-0.0639,"101',314,'97',314,'111',314,'99',341,'319',221,'958',252,'116',314,'117',314,'98',314,'121',314,'118',314,'119',341,'639',252,'116',314,'117',314,'98',314,'121',314,'118',314,'119',341,'575,0.444,0',468,'639',231,468,'607',231,'],[0.474',229,'454',229,'447,0.635,0,{krn:{"121',314,'119',341,'639',252,'119',341,'607,0.444',3,'016',5,'97":-0.0639,"101',314,'97',314,'111',314,'99',341,'831,0.444',3,'016',5,'101',314,'97',314,'111',314,'99',341,'607',229,'607',231,51,'016',5,'111',314,'101',314,'97',314,394,'511,0.444',232,'444',3,'0319',179,'15,0.444',3,611,1,'575',55,232,'694',232,'694]]};','jsMath.Img','={fonts:[50,60,70,85,100,120,144,173,207,249,298,358,430],w:{"50":6.9,"60":8.3,"70":9.7,"85":11.8,"100":13.9,"120":16.7,"144":20,"173":24,"207":28.8,"249":34.6,"298":41.4,"358":49.8,"430":59.8},best:4,update:{},factor:1,loaded:0,SetFont',':function(','_9f){for(var _a0 in _9f){if(!','this.update[_a0',']){',627,']=[];}',627,']=',627,'].concat(_9f[_a0]);}},AddFont',625,'_a1,def){if(!',623,'[_a1]){',623,'[_a1]={};}','jsMath.Add(',623,'[_a1],def);},UpdateFonts',':function(){','var _a3=this.update;','if(!this.loaded){','return;}var ','_a4=this[','jsMath.Img.fonts','[this.best]];','for(var _a5 in _a3){','for(var i=0;i<','_a3[_a5].length;i++){var c=_a3[_a5][i];if(c=="all"){for(c in ','jsMath.TeX[','_a5]){',654,'_a5][c].img','={};}}else{',654,657,'={};}}}this.update={};},BestSize',644,'var w=jsMath.em*this.factor;var m=','this.w[this.fonts[','0]];for(var i=1;i<','this.fonts','.length;i++){','if(w<(',664,'i]]+2*m)/3){','return ','i-1;}m=',664,'i]];}',671,'i-1;},Scale',644,646,'return;}this.best=this.BestSize();this.em=',623,'.w[',666,650,'this.scale','=(jsMath.em/this.em);','if(Math.abs(',684,'-1)<0.12){',684,'=1;}},URL',625,'_ab,_ac,C){var _ae=(','jsMath.Controls.cookie.','alpha)?"/alpha/":"/plain/";if(C==null){C="def.js";}else{C="char"+C+".png";}if(_ac!=""){_ac+="/";}','return this.','root+_ab+_ae+_ac+C;},LoadFont',625,'_af){',646,'this.Init();}jsMath.Setup.Script(this.URL(_af,""));},Init',644,'if(',693,'print||',693,'stayhires','){',693,'print=',693,706,';this.factor*=3;if(!','jsMath.Controls.','isLocalCookie||!jsMath.Global.isLocal){',713,'SetCookie(0);}if(','jsMath.Browser.','alphaPrintBug){',693,'alpha=0;}}var _b0="0123456789ABCDEF";this.HexCode=[];',652,'128;i++){var h=Math.floor(i/16);var l=i-16*h;this.HexCode[i]=_b0.charAt(h)+_b0.charAt(l);}this.loaded=1;}};jsMath.HTML={Em',625,'m){var n=5;if(m<0){n++;}',686,'m)<0.000001){m=0;}var s=String(m);s=s.replace(/(\\.\\d\\d\\d).+/,"$1");',671,'s+"em";},Spacer',625,'w){if(w==0){return "";}',671,717,'msieSpaceFix+"<','span class=\\"spacer\\" style=\\"margin-','left:"+this.Em(','w)+"\\"></span>";},Blank',625,'w,h,d,_bb){var _bc="";var _bd="";if(_bb){_bd+="border-',735,'w)+" solid;";if(',717,'widthAddsBorder){w=0;}}if(w==0){if(',717,'blankWidthBug){_bd+="width:1px;";_bc="<',734,'right:-1px\\"></span>";}}else{_bd+="width:"+this.Em(w)+";";}if(d==null){d=0;}if(h){var H=this.Em(h+d);if(_bb&&h*jsMath.em<1.5){H="1px";h=1/jsMath.em;}_bd+="height:"+H+";";}if(',717,'mozInlineBlockBug){d=-h;}if(',717,'msieBorderBug&&!_bb){d-=jsMath.d;}if(d){_bd+="','vertical-align:"+','this.Em(-d);}',671,'_bc+"<span class=\\"blank\\" ','style=\\""+','_bd+"\\"></span>";},Rule',625,'w,h){if(h==null){h=jsMath.TeX.default_rule_thickness;}',695,'Blank(w,h,0,1);},Class',625,'_c1,_c2){return "<span class=\\""+_c1+"\\">"+_c2+"</span>";},Place',625,'_c3',',x,y){if(Math.abs(x)<0.0001){x=0;}if(Math.abs(y)<0.0001){y=0;}','if(x||y){var _c6','="<span style=\\"position',': relative',';";if(x){_c6+=" margin-',735,'x)+";";}if(y){_c6+=" ','top:"+this.Em','(-y)+";";}_c3=_c6+"\\">"+_c3','+"</span>";}',671,'_c3;},PlaceSeparateSkips',625,'_c7',765,'if(y){_c7',767,768,'; ',772,'(-y)+";"+"\\">"+_c7',774,'if(x){_c7=this.Spacer(x)+_c7',';}return ','_c7;},PlaceAbsolute',625,'_ca',765,'_ca',767,':absolute','; ',735,'x)+"; "+"',772,'(y)+";\\">"+_ca+" </span>";',671,'_ca;},Absolute',625,'_cd,w,h,d,y,H){if(y!="none"){',686,'y)<0.0001){y=0;}_cd',767,795,'; "+"top:"+','jsMath.HTML.','Em(y)+"; left:0em',';\\">"+_cd','+" "+"</span>";}if(d=="none"){d=0;}_cd+=this.Blank(w,h-d,d);if(',717,'msieAbsoluteBug){_cd',767,':relative',812,774,'_cd',767,817,';"+" width: "+',810,'Em(w)+";"+" height: "+',810,'Em(H)+";"+',717,'msieInlineBlockFix+"\\">"+_cd+"</span>";',671,'_cd;}};','jsMath.Box','=function(','_d3,_d4,w,h,d){if(d==null){d=jsMath.d;}this.type="typeset";this.w=w;this.h=h;this.d=d;this.bh=h;this.bd=d;this.x=0;this.y=0;','this.html=','_d4;this.format=_d3;};',641,832,',{defaultH:0,Null:','new jsMath.Box("','null","",0,0,0),Text',625,'_d8,_d9,_da,_db,a,d){var _de=','jsMath.Typeset.AddClass(','_d9,_d8);_de=','jsMath.Typeset.','AddStyle(','_da,_db,_de);var BB','=jsMath.EmBoxFor(','_de);var TeX=',846,'TeX(_da,_db);var bd=((_d9=="cmsy10"||_d9=="cmex10")?BB.h-TeX.h:TeX.d*BB.h/TeX.hd);','var box=',840,'text",_d8,BB.w,BB.h-bd,bd);box.style=_da;box.size=_db;','box.tclass','=_d9;if(d','!=null){box.','d=d','*TeX.scale;}else{box.','d=0;}if(a==null||a==1){box.h=0.9*TeX.M_height;}else{box.h=1.1*TeX.x_height+TeX.scale*a;}','return box;},','TeX',625,'C,_e4,_e5,_e6){var c=',654,'_e4][C];if(','c.d==null){c.d=0;}','if(c.h','==null){c.','h=0',';}if(c.img!=null','&&c.c!=""){this.TeXIMG(_e4,C,',846,'StyleSize(_e5,_e6));}var _e8=',846,'TeX(_e5,_e6).scale;var h=c.h+',654,'_e4].dh;',853,840,'text",c.c,c.w*_e8,h*_e8,c.d*_e8);box.style=_e5;box.size=_e6;if(c.tclass){',856,'=c.tclass;if(c.img){box.bh=c.img.bh;box.bd=c.img.bd;}else{box.bh=_e8*jsMath.h;box.bd=_e8*jsMath.d;}}else{',856,'=_e4;box.bh=_e8*',654,'_e4].h;box.bd=_e8*',654,'_e4].d;if(',717,'msieFontBug&&box.html.match(/&#/)){box.html+="<span style=\\"display:none\\">x</span','>";}}',862,'TeXfallback',625,'C,_ec,_ed,_ee','){var c=',654,'_ec][C];if(!c.tclass){c.tclass=_ec',872,'){',695,'TeXnonfallback(',897,');}if(c.h!=null&&c.a',870,'a=c.h-1.1*jsMath.TeX.x_height;}',853,'this.Text(c.c,c.tclass,_ed,_ee,c.a||0,c.d||0);var _f1=',846,'TeX(_ed,_ee).scale;if(c.bh',858,'bh=c.bh*_f1;box.bd=c.bd*_f1;}else{var h=box.bd+box.bh;var _f3=',844,856,',box.html);_f3=',846,847,'_ed,_ee,_f3);box.bd',849,'_f3+',810,'Blank(1,h)).h-h;box.bh=h-box.bd;if(_f1==1){c.bh=box.bh;c.bd=box.bd;}}if(jsMath.',892,'>";}',862,'TeXIMG',625,'_f4,C,_f6){var c=',654,'_f4][C];if(c.img.size!=null&&c.img.size==_f6&&c.img.best!=null&&c.img.best==','jsMath.Img.best','){',647,'_f8=(',623,'.scale!=1);var id=',933,'+_f6-4;if(id<0){id=0;_f8=1;}else{if(id>=',649,'.length){','id=',649,'.length-1;_f8=1;}}var _fa=',623,'[',649,'[id]];var img=_fa[_f4][C];var _fc=1/',623,'.w[',649,'[id]];if(id!=',933,'+_f6-4){if(c.w!=null){_fc=c.w/img[0];}else{_fc*=',649,'[_f6]/',649,'[4]*',649,'[',933,']/',649,'[id];}}var w=img[0]*_fc;var h=img[1]*_fc;var d=-img[2]*_fc;var v;var _101=(c.w==null||Math.abs(c.w-w)<0.01)?"":" margin-right:"+',810,'Em(c.w-w)+";";var _102="";C=',623,'.HexCode[C];if(!_f8&&!',693,'scaleImg){if(2*w<h||(',717,'msieAlphaBug&&',693,'alpha)){_102="height',':"+(img[1]*',717,'imgScale',')+"px;";}_102+=" width:"+(img[0]*',717,978,')+"px;";v=-img[2]+"px";}else{if(2*w<h||(',717,'msieAlphaBug&&',693,975,':"+',810,'Em(h*',717,978,')+";";}_102+=" width:"+',810,'Em(w*',717,978,')+";";v=',810,'Em(d);}var _103=(Math.abs(d)<0.01&&!',717,'valignBug)?"":" ',751,'v+";";var URL=',623,'.URL(_f4,',649,'[id],C);if(',717,'msieAlphaBug&&',693,'alpha){','c.c="<img src=\\""+','jsMath.blank+"\\" "+"',755,717,'msieCenterBugFix+_102+_103+_101','+" filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+"\'"+URL+"\', sizingMethod=\'scale\'"+");\\" />";}else{',1012,'URL+"\\" ',755,717,1016,'+"\\" />";}c.tclass="normal";c.img.bh=h+d;c.img.bd=-d;c.img.size=_f6;c.img.best=',933,';},Space',625,'w){',671,840,'html",',810,'Spacer(w),w,0,0);},Rule',625,758,'var html=',810,'Rule(w,h);',671,840,'html",html,w',',h,0);},GetChar',625,'code,font){var c=',654,'font][code];','if(c.img!=null){this.TeXIMG(font,code',',4);}if(c.tclass',870,'tclass=font;}if(!c.computedW){c.w',849,844,'c.tclass,c.c)).w',';if(c.h==null){c','.h=jsMath.Box.defaultH;}if(',868,'c.computedW=1',788,'c;},DelimBestFit',625,'H,c,font,','_10f){if(c==0&&font','==0){return null;}','var C;var h;','font=jsMath.TeX.fam[','font];var ','isSS=(_10f.charAt(1)=="S");var isS=(_10f.charAt(0)=="S");while(c!=null){C=',654,'font][c];','if(C.h==null){C',1054,'C.d==null){C.d=0;}h=C.h+C.d;if(C.delim','){return [c,font',',"",H];}if(isSS&&0.5*h>=H',1072,',"SS",0.5*h];}if(isS&&0.7*h>=H',1072,',"S",0.7*h];}if(h>=H||C.n==null',1072,',"T",h];}c=C.n',788,'null;},DelimExtendRelative',625,1060,'a,_118){var C=',654,1068,'var top=this.GetChar(C.delim.top?C.delim.top:C.delim.rep,font);var rep=this.GetChar(C.delim.rep,font);var bot=this.GetChar(C.delim.bot?C.delim.bot:C.delim.rep,font);','var ext=',844,'rep.tclass,rep.c);','var w=rep.w;var h=','rep.h+rep.d',';var y;var dx;','if(C.delim.mid){var mid=this.GetChar(C.delim.mid,font);var n=Math.ceil((H-(top.h+top.d)-(mid.h+mid.d',')-(','bot.h+bot.d','))/(2*(',1092,')));H=2*n*(',1092,')+(top.h+top.d)+(','mid.h+mid.d',')+(',1096,');if(_118){y','=0;}else{','y=H/2+a;}var Y=y;',1035,810,'Place(',844,'top.tclass,top.c),0,','y-top.h)+',810,1110,844,'bot.tclass,bot.c),-(','top.w+bot.w)/2,y-(H-bot.d))+',810,1110,844,'mid.tclass,mid.c','),-(bot.w+mid.w)/2,y-(H+mid.h-mid.d)/2);dx=(w-mid','.w)/2;if(Math.abs(dx)<0.0001){dx=0;}if(dx){html+=jsMath.HTML.Spacer(dx);}y-=top.h+top.d+rep.h;for(var i=0;i<n;i++){html+=jsMath.HTML.Place(ext,-w,y-i*h);}','y-=H/2-rep.h/2;',652,'n;i++){','html+=',810,1110,'ext,-w,y-i*h);}}','else{var n=Math.ceil((H-(top.h+top.d)-(bot.h+bot.d','))/(',1092,'));if(top.h+top.d<0.9*(',1092,')){n=Math.max(1,n);}H=n*(',1092,1101,1096,');if(_118){y',1106,'y=H/2+a;}var Y=y;',1035,810,1110,844,1112,'y-top.h);dx=(w-top',1124,1128,810,1110,844,1117,'w+bot.w)/2,Y-(H-bot.d));}if(_118){h=top.h;}else{h=H/2+a;}','var box=new jsMath.Box("html",html,rep.w,h,H-h);box.bh=jsMath.TeX[font].h;box.bd=jsMath.TeX[font].d;return box;},','DelimExtendAbsolute',625,1060,'a,_131){var Font=',654,1065,'C=Font[c];var html;',1087,1094,'-0.05)-(',1096,'-0.05))/(','2*(','rep.h+rep.d-0.05',')));H=2*n*(',1171,1101,1102,'-0.05)+(',1096,'-0.05);html=','jsMath.HTML.PlaceAbsolute(',844,1112,'0);var h=',1171,';var y=top.d-0.05+rep.h;var ext=',844,'font,rep.c);',652,'n;i++){',1128,1179,'ext,0,y+i*h);}',1128,1179,844,1122,'),0,y+n*h-rep.h+mid.h);y+=n*h+',1102,'-0.05;',652,'n;i++){',1128,1179,'ext,0,y+i*h);}',1128,1179,844,'bot.tclass,bot.c),0,y+n*h-rep.h+bot.h);}',1132,1169,1171,'));H=n*(',1171,1101,1096,'-0.05);html=',1179,844,1112,'0);var h=',1171,';var y=top.d-0.05+rep.h;var ext=',844,1090,652,'n;i++){',1128,1179,'ext,0,y+i*h);}',1128,1179,844,1207,'var w=top.w;if(_131){h=top.h;y',1106,'h=H/2+a;y=h-top.h;}html=',810,'Absolute(html,w,','Font.h,"none",-y,top.h);',1157,'Delimiter',625,'H,_147,_148,_149){var size=4;var TeX=',846,'TeX(_148,size);if(!_147){',695,'Space(TeX.nulldelimiterspace);}','var ','CFSH=this.DelimBestFit(H,_147[','2],_147[1],_148);if(CFSH==null||CFSH[3]<H){',1248,'4],_147[3],_148);}if(CFSH==null){',695,1246,'if(CFSH[2]==""){',695,'DelimExtend(H,','CFSH[0],CFSH[1],','TeX.axis_height',',_149);}',853,832,'.TeX(',1257,'CFSH[2],size',').Styled();if(_149){box.y=-',654,'CFSH[1]].dh',860,'y=-((box.h+box.d)/2-box.d-',1258,');}',686,'box.y)<0.0001){box.y=0;}if(box.y','){box=jsMath.Box.SetList','([box],',1264,');}',862,'GetCharCode',625,'code){var ',1064,'code[0]];var Font=',654,1065,'c=Font[code[1]];',1046,'[1],4);}if(c.w',870,'w',849,844,1052,';}if(c.font',870,'font=font',788,'c;},AddClass',625,'_152,html',',font){if(_152==null){_152=font',788,844,1300,');},LayoutRelative',625,'size,_156,_157,_158,_159,_15a){if(_157==null){_157=[];}if(_158==null){_158=[];}if(_159==null){_159=[];}var _15b=jsMath.sizes[size]/100',';var W=[];var H=[];var D=[];var ','_15f=-1000;var bh=_15f;var bd=_15f',';var i;var j;var row;for(i=0;i<','_156',667,'if(_159[i]==null){_159[i]=0;}row=_156','[i];H[i]=jsMath.h*','_15b',';D[i]=jsMath.d*','_15b',';for(j=0;j<','row.length;j++){row[j]=row[j].Remeasured();if(row[j].h>H[i]){H[i]=row[j].h;}if(row[j].d>D[i]){D[i]=row[j].d;}if(j>=W.length){W[j]=row[j].w;}else{if(row[j].w>W[j]){W[j]=row[j].','w;}}if(row[j].bh>bh){bh=row[j].bh;}if(row[j].bd>bd){bd=row[j].bd;}}}if(_159[_156','.length]==null){','_159[_156','.length]=','0;}if(bh==_15f){bh=0;}if(bd==_15f){bd=0;}','var HD=(jsMath.hd-0.01)*','_15b;var dy=(_15a||1)*_15b/6;','var html="";var ','pW=0;var cW=0;var w;var h;var y;var box;var _16e;var _16f',';for(j=0;j<W.length;j++){','_16e=[];y=-H[0]-_159[0];pW=0;','for(i=0;i<','_156',667,'_16f=_156[i][j];if(_16f&&_16f.format!="null"){','if(_157[j]=="','l"){w',1106,1335,'r"){w=W[j]-_16f.w;}else{w=(W[j]-_16f.w)/2;}}_16f.x=w-pW;pW=_16f.w+w;_16f.y=y;_16e[_16e',1323,'_16f;}if(i+1<_156',942,'y-=','Math.max(HD,D[i]+H[i+1])+dy+','_159[i+1];}}if(_158[j]==null){_158[j]=_15b;}if(_16e.length>0',1274,'(_16e,"T",size);',1128,810,1110,'box.html,cW,0);cW=W[j]-box.w+_158[j];}else{cW+=_158[j];}}w=-_158[W.length-1];','y=(H.length-1)*dy+','_159[0];',1331,'W',667,'w+=W[i]+_158[i];}',1331,'H',667,'y+=Math.max(HD,H[i]+D[i])+','_159','[i+1];}h=y/2+jsMath.TeX.axis_height;var d=y-h;',1128,810,'Spacer(cW-_158[W.length-1]+_15b/6);html=',810,1110,'html,_15b/6,h);box=',840,1040,'+_15b/3,h,d);box.bh=bh;box.bd=bd;',862,'LayoutAbsolute',625,'size,_172,_173,_174,_175,_176){if(_173==null){_173=[];}if(_174==null){_174=[];}if(_175==null){_175=[];}var _177=jsMath.sizes[size]/100;',1325,'_177;var dy=(_176||1)*_177/6',1308,'w=0;var h;var x;var y',1310,'_172',667,'if(_175[i]==null){_175[i]=0;}row=_172',1314,'_177',1316,'_177',1318,1319,'w;}}}}if(_175[_172',1321,'_175[_172',1323,'0;}',1352,'_175[0];',1331,'H',667,1361,'_175',1363,1327,'_186;w=_177/6',1329,'y=H[0]-h+_175[0];',1331,'_172',667,'_186=_172[i][j];if(_186&&_186.format!="null"){','if(_173[j]&&_173[j]=="','l"){x',1106,1412,'r"){x=W[j]-_186.w;}else{x=(W[j]-_186.w)/2;}}',1128,1179,'_186.html,w+x,y-Math.max(0,_186.bh-jsMath.h*_177));}if(i+1<_172',942,'y+=',1344,'_175[i+1];}}if(_174[j]==null){_174[j]=_177;}w+=W[j]+_174[j];}w=-_174[W.length-1]+_177/3;',1331,'W',667,'w+=W[i]+_174[i];}html=',810,'Spacer(_177/6',')+html+',810,1429,');if(',717,'spanHeightVaries){y=h-jsMath.h;}else{y=0;}html=',810,1237,'h+d,d,y,H[0]);',853,840,1040,'+_177/3,h,d);',862,'InternalMath',625,'text,size){if(!text.match(/\\$|\\\\\\(/)){',695,'Text(text,"normal","T",size).Styled();}var i=0;var k=0;var c;var _18d="";var _18e=[];var _18f;var html;var box;while(i<text',942,'c=text.charAt(i++);if(c','=="$"){if(_18d=="$"){','_18f=jsMath.Parse(text.slice(k,i-','1','),null,size);if(_18f.error){_18e[_18e.length]=this.Text(_18f.error,"error","T",size,1,0.2);}else{_18f.Atomize();_18e[_18e.length]=_18f.mlist.Typeset("T",size).Styled();}_18d="";k=i',';}else{','_18e[_18e.length]=this.Text(text.slice(k',',i-1','),"normal","T",size,1,0.2);','_18d="$";k=i;}}else{if(c=="\\\\"){',1450,'=="("&&_18d==""){',1456,',i-2',1458,'_18d=")";k=i;}else{if(c==")"&&_18d==")"){',1452,'2',1454,';}}}}}',1456,1458,695,'SetList(_18e,"T",size);},Set',625,'box',',_193,size',',_195){if(box&&box.type){','if(box.type=="typeset"){',671,'box;}if(box.type=="mlist"){box.mlist.Atomize(_193,size);',671,'box.mlist.Typeset(_193,size);}if(box.type=="text"){box=this.Text(box.text,',856,1476,',box.ascend||null,box.descend||null',');if(_195!=0){box.Styled();}return box;}','box=this.TeX(box.c,box.font',1476,1486,671,832,'.Null;},SetList',625,'_196,_197,size){var _199=[];var box;',652,'_196',667,'box=_196[i];',1478,'box=','jsMath.mItem','.Typeset(box);}_199[_199',1323,'box;}var _19c=new jsMath.Typeset(_199);',671,'_19c.Typeset(_197,size);}});','jsMath.Package(jsMath.','Box,{Styled',644,'if(this.format=="text"){',835,844,'this.tclass,this.html);',835,846,847,'this.style,this.size,this.html);delete this.tclass;delete this.style;this.format="html";}',671,'this;},Remeasured',644,'if(this.w>0){this.w',849,'this.html).w',788,'this;}});',1501,833,'type,def){this.type=type;',641,'this,def);};',641,1501,',{Atom',625,'type,_1a0','){return new jsMath.mItem','(type,{atom:1,nuc',':_1a0});},TextAtom',625,'type,text,_1a3,a,d){var atom=new ',1501,1537,':{type:"text",text:text,tclass:_1a3}});if(a','!=null){atom.nuc.','ascend=a;}if(d',1544,'descend=d',788,'atom;},TeXAtom',625,'type,c,font',1536,1537,':{type:"TeX",c:c,font:font}});},Fraction',625,'name,num,den,_1ad,left,_1af',1536,'("fraction",{from:name,num:num,den:den,thickness:_1ad,left:left,right:_1af});},Space',625,'w',1536,'("space",{w:w});},Typeset',625,'box',1536,'("ord",{atom:1,nuc:box});},HTML',625,'html',1536,'("html",{html:html});}});jsMath.mList',833,'list,font,size,_1b6){if(list){this.mlist=list;}else{this.mlist=[];}if(_1b6==null){_1b6="T";}if(size==null){size=4;}this.data={openI:null,overI:null,overF:null,font:font,','size:size,style:_1b6','};this.init={',1573,'};};',1507,'mList,{Add',625,'box){return (','this.mlist[','this.mlist.length',']=box);},Get',625,'i){',695,'mlist[i];},Length',644,671,1582,';},Last',644,'if(',1582,1062,695,'mlist[',1582,'-1];},Range',625,'i,j){if(j==null){j=',1582,788,'new jsMath.mList(this.mlist.slice(i,j+1));},Delete',625,1601,'i;}if(','this.mlist.splice','){',1608,'(i,j-i+1);}else{var _1bd=[];for(var k=0;k<',1582,';k++){if(k<i||k>j){_1bd[_1bd',1323,1581,'k];}}this.mlist=_1bd;}},Open',625,'left){',853,'this.Add(new ',1501,'("boundary",{','data:this.data}));var _1c1=this.data;this.data={};for(var i in _1c1){this.data[i]=_1c1[i];}delete ','this.data.overI;','delete ','this.data.overF;this.data','.openI=',1582,'-1;if(left',858,'left=left;}',862,'Close',625,'_1c3){if(_1c3!=null){_1c3=new ',1501,1622,'right:_1c3});}var atom;var open=this.data.openI;var over=',1624,'var from=',1626,'=',1581,'open].data;if(over){atom=',1501,'.Fraction(from.name,{','type:"mlist",mlist:this.Range(','open+1,over-1)},{',1647,'over)},from.thickn'], |
|
['ess',',from.left,from.right);','if(_1c3','){var ','_1c8=new ','jsMath.','mList','([','this.mlist','[open],atom,_1c3]);atom=','jsMath.mItem.','Atom("inner",{type:"mlist",mlist:_1c8});}}else{var _1c9=open+1;if(_1c3','){this.','Add(','_1c3);_1c9--;}atom=',10,'Atom((_1c3)?"inner":"ord",{','type:"mlist",mlist:this.Range(','_1c9)});}this.Delete(open,this.Length());','return this.',13,'atom);},Over',':function(){','var over=this.data.overI;var from=this.data.overF;var atom=',10,'Fraction(from.name,{',17,'open+1,over-1)},{',17,'over)},from','.thickness',1,8,'=[atom];},Atomize',':function(','_1cd,size',3,'_1cf;var prev="";','this.style','=_1cd;','this.size','=size;for(var i=0;i<',8,'.length;i++){','_1cf=',8,'[i];_1cf','.delta=0;','if(_1cf.type=="choice"){',8,'=this.Atomize.choice(',38,',_1cf,i,',8,');i--;}','else{if(','this.Atomize[_1cf.type',']){var f=',56,'];f(',38,',',40,',_1cf,prev,this,i);}}prev=_1cf;}if(_1cf&&_1cf','.type=="bin"){','_1cf','.type="ord";}','if(',8,'.length>=2&&_1cf.','type=="boundary','"&&',8,'[0].',70,'"){this.','AddDelimiters','(',35,');}},',76,34,'_1d3,size',3,'_1d5=-10000;var h=_1d5;var d=_1d5;for(var i=0;i<',8,43,'var _1d9=',8,'[i];if(_1d9.atom||_1d9.type=="box"){h','=Math.max(','h,_1d9.nuc.h+_1d9.nuc.y);d',90,'d,_1d9.nuc.d-_1d9.nuc.y);}}var TeX=',5,'TeX;var a=','jsMath.Typeset.','TeX(',82,').axis_height;var _1dc',90,'h-a,d+a);var H',90,'Math.floor(','TeX.integer','*_1dc/500)*TeX.delimiterfactor,',104,'*(2*_1dc-TeX.delimitershortfall))/',104,';var left=',8,'[0];var _1df=',8,'[',8,'.length-1];left.nuc','=jsMath.Box.','Delimiter(H,','left.left',',_1d3);_1df.nuc',116,117,'_1df.right',',_1d3);left.type="open";left','.atom=1;delete ',118,';_1df.type="close";_1df',124,122,';},','Typeset',34,'_1e0,size',3,'_1e2=new ',5,130,'(',8,');','return ','_1e2.',130,'(',132,');}});',5,13,5,6,'.prototype.Atomize,{style',34,'_1e3,size,_1e5,prev,_1e7){_1e7.style=_1e5.style;},size',34,'_1e8,size,_1ea,prev,_1ec){_1ec.size=_1ea.size;},phantom',34,'_1ed,size,_1ef){','var box','=_1ef.nuc',116,'Set(','_1ef.phantom',',_1ed',',size);','if(_1ef.h){box','.Remeasured();','box','.html=',5,'HTML.Spacer(','box.w);}else{','box.html="",box.w=0;}if(!_1ef.v){','box.h=box.d=','0;}','box.bd=box.bh=0;delete ',161,';_1ef','.type="box";},','smash',34,'_1f1,size,_1f3){',157,'=_1f3.nuc',116,160,'_1f3.smash',',_1f1,','size).Remeasured();',172,174,185,';_1f3',177,'raise',34,'_1f5,size,_1f7){','_1f7.nuc',116,160,196,',_1f5',',size);var ','y=_1f7.raise;',196,167,5,'HTML.Place(',196,'.html,0,y);',196,'.h+=y;',196,'.d-=y;_1f7','.type="ord";','_1f7.atom=1;},lap',34,'_1f9,size,_1fb){',157,116,160,'_1fb.nuc,_1f9,',187,'var _1fd=[box];','if(_1fb.lap=="','llap"){box.x=-box.w;}else{',223,'rlap"){_1fd[1]=',10,'Space(-',170,223,'ulap"){box.y=box.d;',172,'0;}else{',223,'dlap"){box.y=-box.h;',172,'0;}}}}_1fb.nuc',116,'SetList(','_1fd,_1f9',163,223,'ulap"||_1fb.lap=="dlap"){_1fb.nuc.h=_1fb.nuc.d=0;}_1fb.type="box";delete _1fb.atom;},bin',34,'_1fe,size,_200',',prev){if(prev','&&prev.type',3,'type=prev.type;if(type=="bin"||type=="op"||type=="rel"||type=="open"||type=="punct"||type==""||(',70,'"&&prev.left!="")){_200.type="ord";}}else{_200',66,'jsMath.mList.prototype.Atomize.SupSub(',245,');},rel',34,'_203,size,_205',246,'.type&&prev',64,'prev',66,253,257,');},close',34,'_207,size,_209',246,'.type&&prev',64,'prev',66,253,267,');},punct',34,'_20b,size,_20d',246,'.type&&prev',64,'prev',66,253,277,');},open',34,'_20f,size,_211','){',253,287,');},inner',34,'_212,size,_214','){',253,293,');},','vcenter',34,'_215,size,_217','){',157,116,160,'_217.nuc,_215',201,'TeX=',96,'TeX(_215',163,'box.y=','TeX.axis_height','-(box.h-box.d)/2;_217.nuc=box;_217',213,253,300,');},','overline',34,'_21a,size,_21c',3,'TeX=',96,'TeX(_21a',201,'box',116,160,'_21c.nuc',',',96,'PrimeStyle','(_21a),',187,'var t=','TeX.default_rule_thickness',';var rule',116,'Rule(box.w,t);rule.x=-rule.w;rule.y','=box.h+3*t;',329,116,'SetList([box,','rule],_21a',163,329,'.h+=t;_21c',213,253,320,');},','underline',34,'_221,size,_223',3,'TeX=',96,'TeX(_221',201,'box',116,160,'_223.nuc',',',96,332,'(_221),',187,335,336,';var rule',116,339,'=-box.d-3*t-t;',363,116,343,'rule],_221',163,363,'.d+=t;_223',213,253,354,');},radical',34,'_228,size,_22a',3,'TeX=',96,'TeX(_228',201,'Cp=',96,332,'(_228);',157,116,160,'_22a.nuc,Cp,',187,335,336,';var p=t;if(_228=="D"||_228=="D\'"){p=TeX.x_height;}var r=t+p/4;var surd',116,'Delimiter(','box.h+box.d','+r+t,[0,2,112,3,112],_228,1);if(surd.d>',407,'+r){r=(r+surd.d-box.h-box.d)/2;}surd.y=box.h+r;var rule',116,'Rule(box.w,t);rule.y=surd.y-t/2;rule.h+=3*t/2;box.x=-box.w;var Cr=',96,'UpStyle(',96,414,'_228));var root',116,160,'_22a.root||null,Cr,',187,'if(_22a.root){root.y=0.55*(',407,'+3*t+r)-box.d;surd.x',90,'root.w-(11/18)*surd.w,0);rule.x=(7/18)*surd.w;root.x=-(root.w+rule.x);}_22a.nuc',116,'SetList([','surd,root,rule,box],_228',163,'_22a',213,253,387,');},accent',34,'_235,size',',_237',3,'TeX=',96,'TeX(_235',201,'Cp=',96,332,'(_235);',157,116,160,'_237.nuc',',Cp',201,'u=box.w;var s;var Font;if(_237.','nuc.type=="TeX','"){Font=',5,'TeX[',451,'.font];if(','Font[_237.nuc.c].krn','&&Font.skewchar){s=',461,'[Font.skewchar];}}if(s==null){s=0;}var c=_237.accent[2];var font=',5,'TeX.fam[_237.accent[1]];Font=',5,'TeX[font];while(Font[c].n&&Font[Font[c].n].w<=u){c=Font[c].n;}var _240=Math.min(box.h,TeX.','x_height);','if(_237.',455,'"){var _241=',10,'Atom("ord",',451,');_241.sup=_237.sup;_241.sub=_237.sub;_241',47,253,437,',_241);_240+=(_241.nuc.h-box.h);box=',451,'=_241.nuc;delete _237.sup;delete _237.sub;}var acc',116,'TeX(c,font,',437,');acc.y=box.h-_240;acc.x=-box.w+s+(u-acc.w)/2;if(Font[c].ic){acc.x-=Font[c].ic*TeX.scale;}',451,116,343,'acc],',437,');if(',451,'.w!=box.w',3,'_243=',10,'Space(box.w-',451,'.w);',451,116,428,451,',_243],',437,');}_237',213,253,437,',_237);},op',34,'_244,size,_246',3,'TeX=',96,'TeX(_244',201,'box;_246',47,'var isD=(_244','.charAt(0)=="','D");if','(_246.limits','==null&&isD){_246.limits=1;}if(_246.',455,'"){var C=',5,'TeX[_246.nuc.font][','_246.nuc','.c];if(isD&&C.n){',530,'.c=C.n;C=',5,529,'C.n];}box',116,'Set(_246.nuc,_244,size',');if(C.ic){_246','.delta=C.ic*TeX.scale;if',524,'||!_246.sub||',5,'Browser.msieIntegralBug','){box',116,343,10,'Space(_246.delta)],','_244,size);}}','box.y=-((',407,')/2-box.d-',312,');if(Math.abs(box.y)<0.0001){box.y=0;}}if(!box){box',116,538,').Remeasured();}if',524,3,'W=box.w;var x=box.w;var _24d=[box];var dh=0;var dd=0;if(_246.sup',3,'sup',116,160,'_246.sup,',96,414,'_244),',187,'sup.x=((box.w-sup.w)/2+','_246.delta/2)-x;','dh=TeX.big_op_spacing5;W',90,'W,sup.w);x+=sup.x+sup.w;sup.y=box.h+sup.d+box.y+Math.max(TeX.big_op_spacing1,TeX.big_op_spacing3-sup.d);','_24d[_24d.length]=','sup;delete _246.sup;}if(_246.sub',3,'sub',116,160,'_246.sub,',96,'DownStyle','(_244),',187,'sub.x=((box.w-sub.w)/2-',572,'dd=TeX.big_op_spacing5;W',90,'W,sub.w);x+=sub.x+sub.w;sub.y=-box.d-sub.h+box.y-Math.max(TeX.big_op_spacing2,TeX.big_op_spacing4-sub.h);',576,'sub;delete _246.sub;}if(W>box.w){box.x=(W-box.w)/2;x+=box.x;}if(x<W){',576,10,'Space(W-x);}',530,116,239,'_24d,_244',163,530,'.h+=dh;',530,'.d+=dd;}',55,5,544,'&&_246.sub&&C&&C.ic){',530,116,343,5,'Box.Space','(-C.ic*TeX.scale)],_244,size);}',55,'box.y){',530,116,428,'box],',550,253,513,79,'ord',34,'_252,size,_254',',prev,_256,i){if(_254.',455,'"&&!_254.sup&&!_254.sub',3,'_258=','_256.mlist[','i+1];if(_258&&_258.atom&&_258.type&&(_258.type=="ord','"||_258.type=="','op',636,'bin',636,'rel',636,'open',636,'close',636,'punct")){if(_258.',455,'"&&_258.nuc.font==_254.nuc.font){_254.textsymbol=1;var krn=',5,'TeX[_254.nuc.font][_254.nuc.c].krn;krn*=',96,'TeX(_252,size).scale;if(krn&&krn[_258.nuc.c]){for(var k=_256.mlist.length-1;k>i;k--){',634,'k+1]=',634,'k];}',634,'i+1]=',10,'Space(krn[_258.nuc.c]);}}}}',253,628,');},fraction',34,'_25b,size,_25d',3,'TeX=',96,'TeX(_25b',201,'t=0;if(_25d',30,'!=null){t=_25d',30,';}',55,'_25d.from.match(/over/)){t=',336,';}}var isD=(_25b',522,'D");var Cn=(_25b=="D")?"T":(_25b=="D\'")?"T\'":',96,414,'_25b);var Cd=(isD)?"T\'":',96,584,'(_25b);var num',116,160,'_25d.num,Cn,',187,'var den',116,160,'_25d.den,Cd,',187,'var u;var v;var w;var H=(isD)?TeX.delim1:TeX.delim2;var _269=[',5,'Box.',117,'_25d.left,_25b)];var _26a',116,117,'_25d.right,_25b);if(num.w<den.w){num.x=(den.w-num.w)/2;den.x=-(num.w+num.x);w=den.w;_269[1]=num;_269[2]=den;}else{den.x=(num.w-den.w)/2;num.x=-(den.w+den.x);w=num.w;_269[1]=den;_269[2]=num;}if(isD){u=TeX.num1;v=TeX.denom1;}else{u=(t!=0)?TeX.num2:TeX.num3;v=TeX.denom2;}if(t==0',3,'p=(isD)?7*',336,':3*',336,';var r=(u-num.d)-(','den.h-v);if(r<p){','u+=(p-r)/2;v+=(p-r)/2;}}else{var p=(isD)?3*t:t;var a=',312,711,'a+t/2);if(r<p){u+=p-r;}r=(a-t/2)-(',712,'v+=p-r;}var rule',116,'Rule(w,t);rule.x=-w;rule.y=a-t/2',';_269[_269.length]=','rule;}num.y=u;den.y=-v',721,'_26a;_25d.nuc',116,239,'_269,_25b',163,'_25d',213,'_25d',124,'_25d.num;delete _25d.den;',253,666,');},SupSub',34,'_271,size,_273',3,'TeX=',96,'TeX(_271',201,'nuc=','_273.nuc',';',157,'=',745,116,160,745,',_271,size,0);if(box.format=="null"){box=',745,116,'Text("","normal",','_271,size);}','if(',455,'"){if(!_273.textsymbol',3,'C=',5,'TeX[nuc.font][nuc.c];if(C.ic){_273',540,'(!_273.sub){','box=',745,116,343,5,614,'(','_273.delta',')],_271',163,774,'=0;}}}else{',774,'=0;}}if(!_273.sup&&!_273.sub){return;}',745,'.Styled();var Cd=',96,584,'(_271);var Cu=',96,414,'_271);var q=',96,'TeX(Cu,size).','sup_drop;var r=',96,'TeX(Cd,size).','sub_drop;var u=0;var v=0;var p;if(nuc.type&&nuc.type!="text"&&nuc.type!="TeX"&&nuc.type!="null"){u=box.h-q;v=box.d+r;}if(_273.sub',3,'sub',116,160,'_273.sub,Cd',163,'sub',116,428,'sub,',10,'Space(TeX.scriptspace)],_271,size',');}if(!_273.sup){sub.y=-Math.max(v,TeX.sub1,sub.h-(4/5)*',96,793,469,745,116,343,'sub],_271,size).Styled();','delete _273.','sub;return;}var sup',116,160,'_273.sup,Cu',163,'sup',116,428,'sup,',10,806,');if(_271=="D"){p=TeX.sup1;}',55,'_271','.charAt(','_271','.length-1)=="\'"){','p=TeX.sup3;}else{p=TeX.sup2;}}u',90,'u,p,sup.d+',96,790,'x_height/4);if',766,'sup.y=u;',745,116,343,'sup],_271',163,815,'sup;return;}v',90,'v,',96,793,'sub2);',335,336,';if((u-sup.d)-(sub.h-v)<4*t){v=4*t+sub.h-(u-sup.d);p=(4/5)*TeX.x_height-(u-sup.d);if(p>0){u+=p;v-=p;}}sup',165,'sub',165,840,'sub.y=-v;sup.x=',774,';if(sup.w+sup.x>sub.w){sup.x-=sub.w;',745,116,343,'sub,sup],',757,'else{sub.x-=(sup.w+sup.x);',745,116,343,'sup,sub],',757,815,'sup;',815,'sub;}});',5,130,'=function(_282',12,'type="typeset";',8,'=_282;};',5,13,5,130,',{upStyle:{D:"S",T:"S","','D\'":"S\'","T\'":"S\'",S:"SS','",SS:"SS","','S\'":"SS\'","SS\'":"SS\'"},','downStyle',':{D:"S\'",T:"S\'","',890,'\'",SS:"SS\'","',892,'UpStyle',34,'_283){',19,'upStyle[_283];},',584,34,'_284){',19,893,'[_284];},',332,34,'_285){if(_285',830,'_285',832,140,'_285;}',140,'_285+"\'";},StyleValue',34,'_286,v){if(_286=="S"||_286=="S\'"){',140,'0.7*v;}if(_286=="SS"||_286=="SS\'"){',140,'0.5*v;}',140,'v;},StyleSize',34,'_288,size){if(_288=="S"||_288=="S','\'"){size=Math.max(0,size-','2);}else{if(','_288=="SS','"||',931,929,'4);}}return ','size;},TeX',34,'_28a,size){if(_28a=="S"||_28a=="S',929,930,'_28a=="SS','"||',941,929,935,5,'TeXparams[size];},AddStyle',34,'_28c,size,html){if(_28c=="S"||_28c=="S',929,930,'_28c=="SS','"||',952,929,'4);}}if(size!=4){html="<span class=\\"size"+size+"\\">"+','html+"</span>";}',140,'html;},AddClass',34,'_28f,html){if(_28f!=""&&_28f!="normal"){html=',5,'HTML.Class(_28f,html);}',140,'html;}});',5,'Package(',5,130,',{DTsep:{ord',':{op:1,bin:2,rel:3,inner:1},','op',':{ord:1,op:1',',rel:3,inner:1},bin:{ord:2,op:2,open:2,inner:2},rel:{ord:3,op:3,open:3,inner:3},open:{},close',971,'punct',973,',rel:1,open:1,close',':1,punct:1,inner:1','},inner',973,',bin:2,rel:3,open',979,'}},SSsep:{ord:{op:1},op',973,'},bin:{},rel:{},open:{},close:{op:1},punct:{},inner:{op:1}},sepW:["","thinmuskip","medmuskip","thickmuskip"],','GetSeparation',34,'l,r,_293){if(l&&l.atom&&r.atom',3,'_294=this.DTsep;if(_293',522,'S"){_294=this.SSsep;}var row=_294[l.type];if(row&&row[r.type]!=null){',140,5,'TeX[this.sepW[row[r.type]]];}}',140,'0;},',130,34,'_296,size){',38,'=_296;',40,'=size;var _298=-10000;this.w=0;this.h=_298;this.d=_298;this.bh=this.h;this.bd=this.d;this.tbuf="";this.tx=0;','this.tclass','="";','this.cbuf','="";this.hbuf="";this.hx=0;var _299=null;var prev;this.x=0;this.dx=0;for(var i=0;i<',8,43,'prev=_299;_299=',8,'[i];switch(_299.type){case "size":','this.FlushClassed();',40,'=_299.size;','_299=prev;break;case "','style":',1015,'if(',38,830,38,832,38,'=_299.style','+"\'";}else{',38,1027,';}',1018,'space":if(typeof (_299.w)=="object"){if(',38,830,'1)=="','S"){_299.w=0.','5*','_299.w[0]/18',';}',55,38,522,1037,'7*',1039,';}else{_299.w=',1039,';}}}this.dx+=_299.w-0;',1018,'html":',1015,'if(this.hbuf==""){this.hx=this.','x;}','this.hbuf+=','_299.html;_299=prev;break;default:if(!_299.atom&&_299.type!="box"){break;}','_299.nuc.','x+=this.dx+this.',987,'(prev,_299,',38,');if(',1057,'y||',1057,'x){',1057,'Styled();}this.dx=0;this.x=this.x+this.w;this.w+=',1057,'w+',1057,'x;if(',1057,'format=="text"){if(',1006,'!=',1057,'tclass&&',1006,'!=""){','this.FlushText','();}','if(this.tbuf','==""&&',1008,'==""){this.tx=this.x;}this.tbuf+=',1057,'html;',1006,'=',1057,'tclass;}else{',1015,'if(',1057,'x||',1057,'y',12,'Place(_299.nuc);}',1053,'x;}',1055,1057,'html;}this.h',90,'this.h,',1057,'h+',1057,'y);this.bh',90,'this.bh,',1057,'bh);this.d',90,'this.d,',1057,'d-',1057,'y);this.bd',90,'this.bd,',1057,'bd);break;}}',1015,'if(this.dx){',1055,5,169,'this.dx);this.w+=this.dx;}if(this.hbuf==""){',140,5,'Box.Null;}if(this.h==_298',12,'h=0;}if(this.d==_298',12,'d=0;}',157,'=new ',5,'Box("html",this.hbuf,this.w,this.h,this.d);box.bh=this.bh;box.bd=this.bd;',140,'box;},FlushText',22,1083,'==""){return;}',1008,'+=',96,'AddClass(',1006,',this.tbuf);this.tbuf="";',1006,'="";},FlushClassed',22,1081,'();if(',1008,1147,1053,'tx;}',1055,96,'AddStyle(',38,',',40,',',1008,');',1008,'="";},Place',34,'item',3,'html="<span style=\\"position: relative',';";if(item.x){html+=" margin-left:"+',5,'HTML.Em(item.x)+";";}if(item.y){html+=" top:"+',5,'HTML.Em(-item.y',')+";";}item',167,'html+"\\">"+item.html+"</span>";','item.h+=item.y;item.d-=item.y;item.x=0;item.y=0',';},PlaceSeparateSkips',34,'item){if(item.y){item.',1177,'; "+"top:"+',5,1182,')+";"+"\\">"+item.',957,'if(item.x){item',167,5,169,'item.x)+item.html;}',1186,';}});',5,'Parse','=function(s,font,size,','_2a3',3,'_2a4=new ',5,'Parser','(s,font,size,_2a3);_2a4.Parse();',140,'_2a4;};',5,1210,1205,'_2a8',12,'string=s;this.i=0;',8,'=new ',5,6,'(null,font,size,_2a8);};',5,'Package(',5,1210,',{cmd:"\\\\",open:"{",close:"}",letter:/[a-z]/i,number:/[0-9]/,scriptargs:/^((math|text)..|mathcal|[hm]box)$/,mathchar:{"!":[5,0,33],"(":[4,0,40],")":[5,0,41],"*":[2,2,3],"+":[2,0,43],",":[6,1,59],"-":[2,2,0],".":[0,1,58],"/":[0,1,61],":":[3,0,58],";":[6,0,59],"<":[3,1,60],"=":[3,0,61],">":[3,1,62],"?":[5,0,63],"[":[4,0,91],"]":[5,0,93],"|":[0,2,106]},special:{"~":"Tilde","^":"HandleSuperscript","_":"HandleSubscript"," ":"Space","\\x01','":"Space","\\','t',1230,'r',1230,'n":"Space","\'":"Prime","%":"HandleComment","&":"HandleEntry"},mathchardef:{braceld:[0,3,122],bracerd:[0,3,123],bracelu:[0,3,124],braceru:[0,3,125],alpha:[0,1,11],beta:[0,1,12],gamma:[0,1,13],delta:[0,1,14],epsilon:[0,1,15],zeta:[0,1,16],eta:[0,1,17],theta:[0,1,18],iota:[0,1,19],kappa:[0,1,20],lambda:[0,1,21],mu:[0,1,22],nu:[0,1,23],xi:[0,1,24],pi:[0,1,25],rho:[0,1,26],sigma:[0,1,27],tau:[0,1,28],upsilon:[0,1,29],phi:[0,1,30],chi:[0,1,31],psi:[0,1,32],omega:[0,1,33],varepsilon:[0,1,34],vartheta:[0,1,35],varpi:[0,1,36],varrho:[0,1,37],varsigma:[0,1,38],varphi:[0,1,39],Gamma:[7,0,0],Delta:[7,0,1],Theta:[7,0,2],Lambda:[7,0,3],Xi:[7,0,4],Pi:[7,0,5],Sigma:[7,0,6],Upsilon:[7,0,7],Phi:[7,0,8],Psi:[7,0,9],Omega:[7,0,10],aleph:[0,2,64],imath:[0,1,123],jmath:[0,1,124],ell:[0,1,96],wp:[0,1,125],Re:[0,2,60],Im:[0,2,61],partial:[0,1,64],infty:[0,2,49],prime:[0,2,48],emptyset:[0,2,59],nabla:[0,2,114],surd:[1,2,112],top:[0,2,62],bot:[0,2,63],triangle:[0,2,52],forall:[0,2,56],exists:[0,2,57],neg:[0,2,58],lnot:[0,2,58],flat:[0,1,91],natural:[0,1,92],sharp:[0,1,93],clubsuit:[0,2,124],diamondsuit:[0,2,125],heartsuit:[0,2,126],spadesuit:[0,2,127],coprod:[1,3,96],bigvee:[1,3,87],bigwedge:[1,3,86],biguplus:[1,3,85],bigcap:[1,3,84],bigcup:[1,3,83],intop:[1,3,82],prod:[1,3,81],sum:[1,3,80],bigotimes:[1,3,78],bigoplus:[1,3,76],bigodot:[1,3,74],ointop:[1,3,72],bigsqcup:[1,3,70],smallint:[1,2,115],triangleleft:[2,1,47],','triangleright',':[2,1,46],bigtriangleup:[2,2,52],bigtriangledown:[2,2,53],wedge:[2,2,94],land:[2,2,94],vee:[2,2,95],lor:[2,2,95],cap:[2,2,92],cup:[2,2,91],ddagger:[2,2,122],dagger:[2,2,121],sqcap:[2,2,117],sqcup:[2,2,116],uplus:[2,2,93],amalg:[2,2,113],diamond:[2,2,5],bullet:[2,2,15],wr:[2,2,111],div:[2,2,4],odot:[2,2,12],oslash:[2,2,11],otimes:[2,2,10],ominus:[2,2,9],oplus:[2,2,8],mp:[2,2,7],pm:[2,2,6],circ:[2,2,14],bigcirc:[2,2,13],setminus:[2,2,110],cdot:[2,2,1],ast:[2,2,3],times:[2,2,2],star:[2,1,63],propto:[3,2,47],sqsubseteq:[3,2,118],sqsupseteq:[3,2,119],parallel:[3,2,107],mid:[3,2,106],dashv:[3,2,97],vdash:[3,2,96],leq:[3,2,20],le:[3,2,20],geq:[3,2,21],ge:[3,2,21],succ:[3,2,31],prec:[3,2,30],approx:[3,2,25],succeq:[3,2,23],preceq:[3,2,22],supset:[3,2,27],subset:[3,2,26],supseteq:[3,2,19],subseteq:[3,2,18],"in":[3,2,50],ni:[3,2,51],owns:[3,2,51],gg:[3,2,29],ll:[3,2,28],not:[3,2,54],sim:[3,2,24],simeq:[3,2,39],perp:[3,2,63],equiv:[3,2,17],asymp:[3,2,16],smile:[3,1,94],frown:[3,1,95],Leftrightarrow:[3,2,44],Leftarrow:[3,2,40],Rightarrow:[3,2,41],leftrightarrow:[3,2,36],leftarrow:[3,2,32],gets:[3,2,32],rightarrow:[3,2,33],to:[3,2,33],mapstochar:[3,2,55],leftharpoonup:[3,1,40],','leftharpoondown',':[3,1,41],rightharpoonup:[3,1,42],rightharpoondown:[3,1,43],nearrow:[3,2,37],searrow:[3,2,38],nwarrow:[3,2,45],swarrow:[3,2,46],hbarchar:[0,0,22],lhook:[3,1,44],rhook:[3,1,45],ldotp:[6,1,58],cdotp:[6,2,1],colon:[6,0,58],"#":[7,0,35],"$":[7,0,36],"%":[7,0,37],"&":[7,0,38]},delimiter:{"(":[0,0,40,3,0],")":[0,0,41,3,1],"[":[0,0,91,3,2],"]":[0,0,93,3,3],"<":[0,2,104,3,10],">":[0,2,105,3,11],"/":[0,0,47,3,14],"|":[0,2,106,3,12],".":[0,0,0,0,0],"\\\\":[','0,2,110,3,15],"\\\\','lmoustache":[4,3,122,3,64],"\\\\rmoustache":[5,3,123,3,65],"\\\\lgroup":[4,6,40,3,58],"\\\\rgroup":[5,6,41,3,59],"\\\\arrowvert','":[0,2,106,3,','60],"\\\\Arrowvert":[0,2,107,3,61],"\\\\bracevert',1242,'62],"\\\\Vert":[0,2,107,3,13],"\\\\|":[0,2,107,3,13],"\\\\vert',1242,'12],"\\\\uparrow":[3,2,34,3,120],"\\\\downarrow":[3,2,35,3,121],"\\\\updownarrow":[3,2,108,3,63],"\\\\Uparrow":[3,2,42,3,126],"\\\\Downarrow":[3,2,43,3,127],"\\\\Updownarrow":[3,2,109,3,119],"\\\\backslash":[',1240,'rangle":[5,2,105,3,11],"\\\\langle":[4,2,104,3,10],"\\\\rbrace":[5,2,103,3,9],"\\\\lbrace":[4,2,102,3,8],"\\\\}":[5,2,103,3,9],"\\\\{":[4,2,102,3,8],"\\\\rceil":[5,2,101,3,7],"\\\\lceil":[4,2,100,3,6],"\\\\rfloor":[5,2,99,3,5],"\\\\lfloor":[4,2,98,3,4],"\\\\lbrack":[0,0,91,3,2],"\\\\rbrack":[0,0,93,3,3]},macros:{displaystyle',':["HandleStyle","','D"],textstyle',1250,'T"],scriptstyle',1250,'S"],scriptscriptstyle',1250,'SS"],rm',':["HandleFont",','0],mit',1258,'1],oldstyle',1258,'1],cal',1258,'2],it',1258,'4],bf',1258,'6],font',':["Extension","','font"],left:"HandleLeft",right:"HandleRight",arcsin',':["NamedOp",0],','arccos',1272,'arctan',1272,'arg',1272,'cos',1272,'cosh',1272,'cot',1272,'coth',1272,'csc',1272,'deg',1272,'det',':"NamedOp",','dim',1272,'exp',1272,'gcd',1292,'hom',1272,'inf',1292,'ker',1272,'lg',1272,'lim',1292,'liminf',':["NamedOp",null,"lim<span style=\\"margin-left: "+1/6+"em\\"></span>','inf"],limsup',1310,'sup"],ln',1272,'log',1272,'max',1292,'min',1292,'Pr',1292,'sec',1272,'sin',1272,'sinh',1272,'sup',1292,'tan',1272,'tanh',1272,298,':["HandleAtom","',298,'"],',318,1336,318,'"],',352,1336,352,'"],over',':"HandleOver",','overwithdelims',1347,'atop',1347,'atopwithdelims',1347,'above',1347,'abovewithdelims',1347,'brace',':["HandleOver','","\\\\{","\\\\}"],brack',1359,'","[","]"],choose',1359,'","(",")"],overbrace',1270,'leaders"],','underbrace',1270,1366,'overrightarrow',1270,1366,'overleftarrow',1270,1366,'overset',1270,'underset-overset"],','underset',1270,1378,'llap',':"HandleLap",','rlap',1383,'ulap',1383,'dlap',1383,'raise:"RaiseLower",lower:"RaiseLower",moveleft',':"MoveLeftRight",','moveright',1391,'frac:"Frac",root:"Root",sqrt:"Sqrt",hbar',':["Macro","\\\\','hbarchar\\\\kern-.5em h"],ne',1395,'not="],neq',1395,'not="],notin',1395,'mathrel{\\\\','rlap{\\\\kern2mu/}}\\\\in"],cong',1395,1402,'lower2mu{\\\\','mathrel','{{\\\\rlap{=}\\\\raise6mu\\\\sim}}}}"],bmod',1395,'mathbin{\\\\rm mod}"],pmod',1395,'kern 18mu ({\\\\rm mod}\\\\,\\\\,#1)",1],"int":["Macro","\\\\intop\\\\nolimits"],oint',1395,'ointop\\\\nolimits"],doteq',1395,'buildrel\\\\textstyle.\\\\over="],ldots',1395,'mathinner{\\\\','ldotp\\\\ldotp\\\\ldotp}"],cdots',1395,1418,'cdotp\\\\cdotp\\\\cdotp}"],vdots',1395,1418,'rlap{\\\\raise8pt{.\\\\rule 0pt 6pt 0pt}}\\\\rlap{\\\\raise4pt{.}}.}"],ddots',1395,1418,'kern1mu\\\\raise7pt{\\\\rule 0pt 7pt 0pt .}\\\\kern2mu\\\\raise4pt{.}\\\\kern2mu\\\\raise1pt{.}\\\\kern1mu}"],joinrel',1395,1402,'kern-4mu}"],relbar',1395,1402,'smash-}"],','Relbar',1395,1407,'="],bowtie',1395,1407,'\\\\',1236,'\\\\joinrel\\\\',1407,'\\\\triangleleft"],models',1395,1407,'|\\\\joinrel="],mapsto',1395,'mapstochar\\\\','rightarrow"],rightleftharpoons',1395,298,'{\\\\',1402,'rlap{\\\\raise3mu{\\\\rightharpoonup}}}\\\\',1238,'}"],hookrightarrow',1395,'lhook\\\\','joinrel\\\\rightarrow"],','hookleftarrow',1395,'leftarrow\\\\joinrel\\\\','rhook"],Longrightarrow',1395,1435,1443,'Rightarrow"],','longrightarrow',1395,'relbar\\\\',1461,'longleftarrow',1395,1464,'relbar"],Longleftarrow',1395,'Leftarrow\\\\joinrel\\\\',1435,'"],longmapsto',1395,1450,'char{cmsy10}{0}\\\\',1461,'longleftrightarrow',1395,'leftarrow\\\\',1461,'Longleftrightarrow',1395,1479,1469,'iff:["Macro","\\\\;\\\\',1490,'\\\\;"],mathcal',':["Macro","{\\\\','cal #1}",1],mathrm',1497,'rm #1}",1],mathbf',1497,'bf #1}",1],','mathbb',1497,1502,'mathit',1497,'it #1}",1],textrm',1395,'mathord{\\\\hbox{#1}}",1],','textit',1395,'mathord{\\\\class{',1511,'}{\\\\hbox{#1}}}",1],','textbf',1395,1513,1516,1515,'TeX:["Macro","T\\\\kern-.1667em\\\\lower.5ex{E}\\\\kern-.125em X"],limits:["Limits",1],nolimits:["Limits",0],",":["Spacer",1/6],":":["Spacer",1/6],">":["Spacer",2/9],";":["Spacer",5/18],"!":["Spacer",-1/6],enspace',':["Spacer",','1/2],quad',1522,'1],qquad',1522,'2],thinspace',1522,'1/6],negthinspace:["Spacer",-1/6],hskip:"Hskip",kern:"Hskip",rule:["Rule","colored"],space:["Rule","blank"],big',':["MakeBig","','ord",0.85],Big',1530,'ord",1.15],bigg',1530,'ord",1.45],Bigg',1530,'ord",1.75],bigl',1530,'open",0.85],Bigl',1530,'open",1.','15],biggl',1530,1541,'45],Biggl',1530,1541,'75],bigr',1530,'close",0.85],Bigr',1530,'close",1.','15],biggr',1530,1552,'45],Biggr',1530,1552,'75],bigm',1530,'rel",0.85],Bigm',1530,'rel",1.15],biggm',1530,'rel",1.45],Biggm',1530,'rel",1.75],mathord',1336,'ord"],mathop',1336,'op"],mathopen',1336,'open"],mathclose',1336,'close"],mathbin',1336,'bin"],',1407,1336,'rel"],mathpunct',1336,'punct"],mathinner',1336,'inner"],','mathchoice',1270,1585,'"],buildrel:"BuildRel",hbox:"HBox",text:"HBox",mbox:"HBox",fbox',1270,'fbox"],strut:"Strut",mathstrut',1395,'vphantom{(}"],phantom:["Phantom",1,1],vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute',':["MathAccent",[7,0,','19]],grave',1593,'18]],ddot',1593,'127]],tilde',1593,'126]],bar',1593,'22]],breve',1593,'21]],check',1593,'20]],hat',1593,'94]],vec',':["MathAccent",[0,','1,126]],dot',1593,'95]],widetilde',1609,'3,101]],widehat',1609,'3,98]],"_":["','Replace","ord','","_","normal",-0.4,0.1]," ":["',1617,'"," ","normal"],angle:["',1617,'","∠","normal"],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")","c"],cases:["Matrix","\\\\{",".",["l","l"],null,2],eqalign',':["Matrix",null,null,["','r","l"],[5/18],3,"D"],displaylines',1623,'c"],null,3,"D"],cr:"HandleRow","\\\\":"HandleRow",noalign:"HandleNoAlign",eqalignno',1623,'r","l","r"],[5/8,3],3,"D"],','leqalignno',1623,1628,'begin:"Begin",end:"End",tiny',':["HandleSize",','0],Tiny',1633,'1],scriptsize',1633,'2],small',1633,'3],normalsize',1633,'4],large',1633,'5],Large',1633,'6],LARGE',1633,'7],huge',1633,'8],Huge',1633,'9],dots',1395,'ldots"],','newcommand',1270,1655,'"],def',1270,1655,'"],color',1270,'HTML"],href:['], |
|
['"','Extension','","HTML"],"class":["',1,'","HTML"],','style:["',1,4,'cssId:["',1,4,'unicode:["',1,4,'bbox:["',1,'","bbox"],require:"','Require','","char":"Char"},','environments',':{array:"Array",','matrix',':["Array",null,null,"','c"],pmatrix',':["Array','","(",")","c"],bmatrix',24,'","[","]","c"],Bmatrix',24,'","\\\\{","\\\\}","c"],vmatrix',24,'","\\\\vert","\\\\vert","c"],Vmatrix',24,'","\\\\Vert","\\\\Vert","c"],cases',24,'","\\\\{",".","ll",null,2],eqnarray',22,'rcl",[5/18,5/18],3,"D"]},AddSpecial',':function','(obj){','for(var id in obj){','jsMath.Parser.prototype','.special[',41,'[id]]=obj[id];}},Error',38,'(s){','this.i','=this.','string.length;if(s','.error){','this.error','=s.error;}else{if(!this',50,51,'=s;}}},nextIsSpace',38,'(){','return ','this.string.charAt(this.i',')==" ";},trimSpaces',38,'(text){','if(typeof (','text)!="string"){',58,'text;}',58,'text','.replace(/^\\s+|\\s','+/g,"");},','Process',38,'(arg','){var ','data=','this.mlist.','data;','arg=','jsMath.','Parse(arg,','data.font',',','data.size',',data.style',');if(arg',50,'this.Error(','arg);','return null;}','if(arg.mlist.Length()==','0){',89,90,'1',74,'atom=','arg.mlist.','Last();if','(atom','.atom&&','atom.type=="ord"&&atom.nuc&&!atom.sub&&!atom.sup&&(','atom.nuc.type=="','text"||',102,'TeX")){',58,'atom.nuc;}}return {type:"mlist",mlist:arg.mlist};},','GetCommand',38,'(){var ','_2b0=/^([a-z]+|.) ?/i;var cmd=_2b0.exec(','this.string.slice(','this.i));','if(','cmd){','this.i+=','cmd[1].length;',58,'cmd[1];}','this.i++;','return " ";},','GetArgument',':function(name',',','_2b3){','while','(this.nextIsSpace()){this.i','++;}if(',47,'>=','this.string','.length){','if(!',125,'this.Error("','Missing',' argument for "+name);}',89,'if(',59,')==this.','close){if(!',125,135,'Extra close brace','");}',89,'if(',59,141,115,120,58,'this.cmd+','this.',108,'();}if(',59,')!=this.open','){return ',59,'++);}var j','=++this.i;var ','_2b5=1;var c="";',126,'(this.i<this.string.length){','c=',59,'++);','if(c==this.cmd){',47,'++;}else{if(c','==this.open){_2b5',172,'==this.close){if(_2b5==0){',135,145,'");',89,'if(--_2b5==0',160,112,'j,',47,'-1);}}}}}',135,'Missing close brace','");return',' null;},ProcessArg',123,'){var arg=this.',122,'(','name);','if(this.error){return',' null;}','return this.Process(arg);},','ProcessScriptArg',123,191,122,'(',194,195,196,'if(arg.charAt(0',141,'cmd',74,'_2bb=arg.substr(1);if(_2bb=="frac"){arg+="{"+this.',122,'(_2bb)+"}";',195,196,'arg+="{"+this.',122,'(_2bb)+"}";',195,' null;}}else{if(_2bb','=="sqrt"){arg+="["+this.','GetBrackets','(_2bb)+"]";',195,196,'arg+="{"+this.',122,'(_2bb)+"}";',195,219,'.match(this.scriptargs)){arg+="{"+this.',122,'(_2bb)+"}";',195,' null;}}}}}',197,'GetDelimiter',123,'){',126,127,'++;}var ','c=',59,');if',166,120,170,'c="\\\\"+this.',108,'(',194,195,' null;}}','if(','this.delimiter[','c]!=null',160,255,'c];}}',135,136,' or unrecognized delimiter for "+','name);return null;},','GetDimen',123,',nomu',74,'rest;var _2c1=0;if',127,'++;}if(',59,')=="{"){rest',48,122,'(name);}else{rest=',112,47,');_2c1=1;}',58,'this.','ParseDimen','(rest,name,_2c1,nomu);},',281,38,'(_2c2,name,_2c4,nomu',74,'_2c6=_2c2.match(/^\\s*([-+]?(\\.\\d+|\\d+(\\.\\d*)?))(pt|em|ex|mu|px)/);if(!_2c6){',135,136,' dimension or its units for "+',194,89,'if(_2c4){',116,'_2c6[0].length;if',127,'++;}}var d=_2c6[1]-0;if(_2c6[4]=="px"){d/=',79,'em',';}else{if(_2c6[4]=="','pt"){d/=10',300,'ex"){d*=','jsMath.TeX.','x_height',300,'mu"){if(nomu){d=d/18;}else{d=[d,"mu"];}}}}}',58,'d;},GetNext',38,'(){',126,127,'++;}',58,59,');},',221,123,74,'c',48,'GetNext();if(c','!="["){return "";}var _2ca',163,'_2cb=0;',126,166,'var c=',59,'++);if(c=="{"){','_2cb',172,'=="}"){if(','_2cb==0){',135,145,' while looking for',' \']\'");',89,'_2cb--;}else{',170,47,172,'=="]"){if(_2cb==0',160,112,'_2ca,',47,'-1);}}}}}}',135,'Couldn\'t find',' closing \']\' for argument to "+',154,263,'GetUpto',123,',_2ce){',126,127,241,'_2cf',48,'i;var _2d0=0;',126,166,'var c=',59,331,'_2d0',172,334,'_2d0==0){',135,145,338,' "+',154,'_2ce);',89,'_2d0--;}else{',170,'if(',112,'this.i,this.i+','5)=="begin"){_2d0++;',116,'4;}else{if(',112,385,'3)=="end"){if(_2d0>0){_2d0--;',116,'2;}}}if(',373,'if(',112,385,'_2ce.length',')==_2ce){c=',59,'+',398,');if(c.match(/[^a-z]/i)||!_2ce.match(/[a-z]/i)){var arg=',112,'_2cf,',47,'-1);',116,398,';',58,'arg;}}}',47,'++;}}}}',135,352,' "+',154,'_2ce+" for "+',263,'ProcessUpto',123,',_2d4',191,356,'(name,_2d4);',195,196,197,'GetEnd',38,'(env',74,'body="";var name="";',126,'(name!=env){body+=this.',356,'("begin{"+env+"}","end");',195,196,'name',48,122,'(this.cmd+"','end");',195,253,58,'body;},Space',38,'(){},','Prime',38,'(c',74,'base=',76,98,'(base==null||(!base',100,'base.type!="','box"&&',461,'frac")){',456,'this.mlist.Add(jsMath.mItem.','Atom("ord",{type:null}));}','if(base.sup){',135,'Prime causes double exponent',': use braces to clarify");return',';}var ','sup="";',126,'(c=="\'"){sup+=this.cmd+"prime";c',48,323,'=="\'"){',47,'++;}}base.sup',48,71,'(sup);','base.sup.isPrime','=1;},RaiseLower',123,74,'h','=this.GetDimen(this.cmd+name',',1);',195,472,'box',48,198,'(this.cmd+name);if(this.error){return',';}if(name=="','lower"){h=-h;}',76,'Add(new jsMath.mItem("','raise",{nuc:box,raise:h}));},MoveLeftRight',123,74,'x',489,490,195,472,'box','=this.ProcessArg',496,497,'moveleft"){x=-x;}',466,'Space(x));',466,'Atom("ord",box));',466,'Space(-x));},',17,123,74,'file',48,122,496,';}file=',79,1,'.URL(file);if(','jsMath.Setup.','loaded[file',']){','return;}','this.',1,'(null,[','file]);},',1,123,',data){','jsMath.Translate','.restart=1;if(name','!=null){','delete ',41,'[data[1]||"macros"][name];}',79,1,'.',17,'(data[0],',542,'.asynchronous',');throw "restart";},Frac',123,74,'num',510,496,472,'den',510,496,';}',466,'Fraction("over",num,den));},Sqrt',123,74,'n',48,221,496,472,'arg',510,496,';}var box=jsMath.mItem.Atom("radical",arg);','if(n!=""){box.root',48,71,'(n);',195,';}}',76,'Add(box);},','Root',123,74,'n',48,421,'(',154,'name,"of");',195,472,'arg',510,496,578,'box.root=n;',76,586,'BuildRel',123,74,'top',48,421,'(',154,'name,"over");',195,472,'bot',510,496,472,'op=',79,'mItem.Atom("','op",bot);op.limits=1;op.sup=top;',76,'Add(op);},MakeBig',123,',data){var ','type=data[0];var h=data[1]*',79,'p_height;var _2f9',48,236,496,';}',466,'Atom(type,',79,'Box.Delimiter(h,_2f9,"T")));},Char',123,74,'font',48,122,496,472,'n',48,122,496,';}if(!','jsMath.TeX[font',']){',651,']=[];this.',1,537,'jsMath.Font.URL(font',')]);}else{',466,'Typeset(',79,'Box.TeX(n-0,font,"T",',76,83,')));}},Matrix',123,',_2fe',74,'data=',76,77,'var arg',48,122,496,472,'_301','=new jsMath.Parser(arg+this.cmd+"\\\\",null,data.size,','_2fe[5]||"T");_301.',21,'=name;_301.row=[];_301.table=[];_301.rspacing=[];_301.Parse();if(_301',50,87,'_301);',534,'_301','.HandleRow(name,1);var box=jsMath.Box.Layout(data.size,','_301.table,_2fe[2]||null,_2fe[3]||null,_301.rspacing,_2fe[4]||null);if(_2fe[0]&&_2fe[1]){var left','=jsMath.Box.Delimiter(box.h+box.d-jsMath.hd/4,this.delimiter[','_2fe[0]],"T");var _304',689,'_2fe','[1]],"T");box=jsMath.Box.SetList([left,box,','_304],','data.style,data.size',');}',466,'Atom((_2fe','[0]?"inner":"ord"),box));},','HandleEntry',123,'){','if(!this.',21,'){',87,'name+" can only appear in a matrix or array");return;}if(',76,'data.openI',544,'var open=',76,'Get(',76,709,');if(open','.left){',135,136,' "+this.cmd+"right','");}else{',135,187,'");}}if(',76,'data.overI',544,76,'Over();}var data=',76,77,76,'Atomize(',695,');var box=',76,660,695,');this.row[','this.row.length',']=box;this.mlist=new ',79,'mList(null,null,',83,84,');},HandleRow',123,',last',74,'_30b;',703,21,'){',87,154,707,'name=="\\\\"){_30b',48,221,496,';}if(_30b){','_30b',48,281,'(_30b,',154,'name,0,1);}}this.',700,'(',194,'if(!last||',740,'>1||this.row[0].format!="null"){this.table[this.table','.length]=this.','row',761,'this.rspacing[this.table.length',']=_30b;}this.row=[];},HandleNoAlign',123,191,122,496,472,'skip=arg.replace(/^.*(vskip|vspace)([^a-z])/i,"$2");if(skip.length==arg',132,'return',472,'d',48,281,'(skip,',154,'RegExp.$1,0',490,195,';}',777,']=(',777,']||0)+d;},Array',123,',_311',74,'_312=_311[2];var _313=_311[3];if(!_312){_312',48,122,444,'begin{"+name+"}");',195,';}}_312=_312.replace(/[^clr]/g,"");_312=_312.split("");var data=',76,77,'var _315=_311[5]||"T";var arg',48,430,'(',194,195,472,'_317',678,'_315);_317.',21,'=name;_317.row=[];_317.table=[];_317.rspacing=[];_317.Parse();if(_317',50,87,'_317);',534,'_317',687,'_317.table,_312,_313,_317.rspacing,_311[4]);if(_311[0]&&_311[1]){var left',689,'_311[0]],"T");var _31a',689,'_311',693,'_31a],',695,');}',466,'Atom((_311',699,'Begin',123,74,'env',48,122,496,';}if(env.match(/[^a-z*]/i)){',135,'Invalid',' environment',' name',' \\""+env+"\\"");return;}',703,19,'[env]){',135,'Unknown',853,855,'var cmd',48,19,'[env];',63,'cmd',')=="string"){','cmd=[cmd];}this[cmd[0]](env,cmd.slice(1));},End',123,74,'env',48,122,496,';}',87,154,'name+"{"+env+"} without matching "+this.cmd+"begin");},Spacer',123,',w){',466,'Space(w-0));},Hskip',123,74,'w',48,264,496,';}',466,'Space(w));},HBox',123,'){var text=this.',122,496,';}','var box=jsMath.','Box.InternalMath(text,',76,83,');',466,660,'box));},Rule',123,',_328',74,'w',489,490,195,472,'h',489,490,195,472,'d',489,490,195,';}h+=d;var html;if(h!=0){h=Math.max(1.05/',79,'em,h);}if(h==0||w==0||_328=="blank"){html=','jsMath.HTML.','Blank(w,h);}else{html=',927,'Rule(w,h);}if(d){html','="<span style=\\"','vertical-align:"+',927,'Em(-d)+"\\">"+','html+"</span','>";}',466,660,'new ',79,'Box("html",html,w,h-d,d)));},Strut',38,110,'size=',76,83,';',899,'Box.Text("","normal","T",size).Styled();box.bh=box.bd=0;box.h=0.8;box.d=0.3;box.w=0;',466,660,'box));},Phantom',123,627,'arg',510,496,';}',76,500,'phantom",{phantom:arg,v:data[0],h:data[1]}));},Smash',123,627,'arg',510,496,';}',76,500,'smash",{smash:arg}));},MathAccent',123,',_336',74,'c',510,496,472,96,79,622,'accent",c);atom.accent=_336[0];',76,'Add(atom);},NamedOp',123,627,'a=(name.match(/[^acegm-su-z]/))?1:0;var d=(name.match(/[gjpqy]/))?0.2:0;if(data[1]){name=data[1];}',899,'mItem.TextAtom("op",name,"cmr10",a,d);if(data[0]!=null){box.limits=data[0];}',76,586,'Limits',123,627,96,76,98,'(!atom||atom.type!="op"){',87,154,'name+" is allowed only on operators',188,';}atom.limits=data[0];},Macro',123,627,'text=data[0];if(data[1]){var args=[];','for(var i=0;i<','data[1];i++){args[args',774,122,496,';}}text',48,'SubstituteArgs','(args,text);}',131,48,'AddArgs(','text,',112,113,47,'=0;},',1013,38,'(args,_347',74,'text="";var _349="";var c;var i','=0;while(i<','_347',132,'c=','_347.charAt(i','++);',170,'text+=c+',1032,'++);}else{if(c=="#"){c=',1032,'++);if(','c=="#"){text+=c;}else{if(!c.match(/[1-9]/)||c>args',132,135,'Illegal macro parameter reference");',89,'_349',48,1017,'this.AddArgs(_349,text','),args[c-1]);text="";}}else{text+=c;}}}',58,1048,');},AddArgs',38,'(s1,s2){if(s2.match(/^[a-z]/i)&&s1.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)){s1+=" ";}',58,'s1+s2;},Replace',123,541,466,'TextAtom',552,'data[1],data[2],data[3]));},Tilde',123,'){',466,'TextAtom("ord','"," ","normal"));},HandleLap',123,74,'box',510,'();',195,';}box=',76,500,'lap",{nuc:box,lap:name}));},HandleAtom',123,627,'arg',510,496,';}',466,'Atom(data,arg));},HandleMathCode',123,',code','){this.HandleTeXchar(','code[0],code[1],code[2]);},HandleTeXchar',38,'(type,font,code){if(type==7&&',76,81,544,'font=',76,81,';}font=',304,'fam[font];if(!',651,']){',651,']=[];this.',1,537,657,')]);}else{',466,'TeXAtom(',304,'atom[type],code,font));}},','HandleVariable',38,'(c',1088,'7,1',',c.charCodeAt(0));},','HandleNumber',38,'(c',1088,'7,0',1118,'HandleOther',38,'(c){',466,1066,'",c,"normal"));},HandleComment',38,110,'c;',126,166,'c=',59,1039,'c=="\\r"||c=="\\n"){return;}}},HandleStyle',123,',_360){',76,'data.style=_360[0];',76,500,'style",{style:_360[0]}));},HandleSize',123,',size){',76,83,'=size[0];',76,500,'size",{size:size[0]}));},HandleFont',123,',font){',76,81,'=font[0];},HandleCS',38,110,'cmd',48,108,'();',195,';}if(this.macros[cmd]){var _366',48,'macros[cmd];',63,'_366',869,'_366=[_366];}this[_366[0]](cmd,_366.slice(1));',534,'if(','this.mathchardef[cmd',']){this.HandleMathCode(','cmd,',1176,']);',534,'if(',255,154,'cmd',1177,'cmd,',255,154,'cmd].slice(0,3));',534,135,'Unknown control sequence \'"+',154,'cmd+"\'");},HandleOpen',38,'(){',76,'Open();},HandleClose',38,'(){if(',76,709,'==null){',135,145,188,472,'open=',76,'Get(',76,709,');if(!open||','open.left',1204,76,'Close();}else{',135,145,' or missing',720,188,';}},HandleLeft',123,74,'left',48,236,496,';}',76,'Open(left);},HandleRight',123,74,'_36b',48,236,496,472,'open=',76,'Get(',76,709,716,'&&',1215,544,76,'Close(_36b);}else{',135,'Extra open brace or missing "+this.cmd+"left");}},HandleOver',123,541,'if(',76,726,544,135,'Ambiguous use of "+',154,194,534,76,726,'=',76,'Length();',76,'data.overF={name:name};if(data.length>0){',76,'data.overF.','left=',255,'data[0]];',76,1273,'right=',255,'data[1]];}else{if(name.match(/withdelims$/)){',76,1273,'left',48,236,496,';}',76,1273,'right',48,236,496,';}}else{',76,1273,'left=null;',76,1273,1279,'null;}}if(name.match(/^above/)){',76,1273,'thickness',489,490,195,1295,76,1273,'thickness=null;}},HandleSuperscript',38,110,456,76,98,'(base==null||(!base',100,461,'box"&&',461,'frac")){',456,466,467,468,'if(',484,'){',456,466,467,'else{',135,'Double exponent',471,';}}base.sup',48,198,'("superscript");',195,';}},HandleSubscript',38,110,456,76,98,'(base==null||(!base',100,461,'box"&&',461,'frac")){',456,466,467,'if(base.sub){',135,'Double subscripts',471,';}base.sub',48,198,'("subscript");',195,';}},Parse',38,110,'c;',126,166,'c=',59,1039,'this.mathchar[c',1177,'c,',1376,']);}else{if(this',42,'c]){this[this',42,'c]](c',');}else{if(','this.letter','.test(c)){this.',1113,'(c',1385,'this.number',1387,1119,'(c);}else{this.',1125,'(c);}}}}}if(',76,709,544,'var open=',76,'Get(',76,709,716,'.left){',135,136,720,721,135,187,'");}}if(',76,726,544,76,'Over();}},Atomize',38,110,'data=',76,'init;if(!this',50,76,733,695,');}},Typeset',38,110,'data=',76,'init;var box',48,'typeset=',76,660,695,');',195,' "<span class=\\"error\\">"+',51,'+"</span>";}if(box.format=="null"){return "";}box.Styled().Remeasured();var _376=0;var _377','=0;if(box.bh>','box.h&&box.bh>',79,'h','+0.001){_376=1;}if(box.','bd>box.d&&box.bd>',79,'d',1448,'h>',79,'h||box.d>',79,'d){_377=1',472,'html=box.html;if(_376){if(','jsMath.Browser.','allowAbsolute',74,'y',1444,79,'h+0.001){y=',79,'h-box.bh;}html=',927,'Absolute(html,box.w,',79,'h,0,y,',79,'h',1385,1460,'valignBug){','html="<span style=\\"line-height:"+jsMath.HTML.Em(jsMath.d',')+";\\">"+',935,'>";}else{var dy=',927,'Em(Math.max(0,box.bd-',79,'hd)/3);',1478,')+";"+" position:relative; top:"+dy+"; ',932,'dy+"\\">"+',935,'>";}}_377=1;}if(_377){html+=',927,'Blank(0,box.h+0.05,box.d+0.05);}return "<nobr><span class=\\"scale\\">"+',935,'></nobr>";}});',41,'.AddSpecial({cmd:"HandleCS",open:"HandleOpen",close:"HandleClose"});','jsMath.Add(jsMath,{','Macro',123,74,'_37c=',41,'.macros;','_37c','[name]=["','Macro"];for(var i=1;i<arguments.length;i++){_37c[name][_37c[name].length]=arguments[i];}}});',79,1,'={safeRequire:1,Macro',123,',file',74,'_380=',41,1504,'if(file',1204,'file=name;}_380',1506,1,'",file];},LaTeX',38,'(env,file',74,'_383=',41,'.',19,';_383[env]=["',1,'",file,"',19,'"];},Font',123,1156,'if(font',1204,'font=name+"10";}var _386=',41,1504,'_386',1506,1,'",',657,')];},MathChar',38,'(font,defs',74,'fam=',304,'famName[font','];if(fam',1204,1551,304,'fam.length;',304,'fam[fam]=font;',304,1553,']=fam',472,'_38a=',41,'.mathchardef;for(var c in defs){_38a[c]=[defs[c][0],fam,defs[c][1]];}},',17,38,'(file,show){if(this.safeRequire&&(file.match(/\\.\\.\\/|[^-a-z0-9.\\/:_+=%~]/i)||(file.match(/:/)&&file.substr(0,',79,'root.length)!=',79,'root))){',531,532,']=1;',534,531,'Script(this.URL(file),show);},URL',38,'(file){file=file',69,'+$/g,"");if(!file.match(/^([a-z]+:|\\/|fonts|extensions\\/)/i)){file="extensions/"+file;}if(!file.match(/\\.js$/)){file+=".js";}',58,'file;}};',1498,71,38,39,531,'Body();','jsMath.Script.','Push(',542,',"','Asynchronous','",obj);},ProcessBeforeShowing',38,39,531,1592,'var _391=(','jsMath.Controls.cookie.','asynch?"',1597,'":"','Synchronous','");',1593,1594,542,',_391,obj);}});',542,'={element:[],cancel:0,Parse',38,'(_392,s,_394',74,'_395=',79,'Global.','cache[_392];if(!','_395[jsMath.em',']){',1623,']={};}var HTML=',1623,'][s];if(!HTML||_394',74,'_397=',79,'Parse(s,null,null,_392);_397.Atomize();HTML=_397.Typeset();if(!_394){',1623,'][s]=HTML;}}',58,'HTML;},TextMode',38,'(s,_399){this.Parse("T",s,_399);},DisplayMode',38,'(s,_39b){this.Parse("D",s,_39b);},','GetElementText',38,'(_39c',895,'recursiveElementText','(_39c);_39c.alt=text;if(text.search("&")>=0){','text=text.replace(/&','lt;/g,"<");',1647,'gt;/g,">");',1647,'quot;/g,"\\"");',1647,'amp;/g,"&");}',58,'text;},',1645,38,'(_39e){if(','_39e.nodeValue','!=null',160,1660,';}if(','_39e.childNodes.length','==0){return " ";}var text="";',1006,1665,';i++){text+=this.',1645,'(_39e.childNodes[i]);}',58,1656,'ResetHidden',38,'(_3a1){_3a1.innerHTML',931,'visibility: hidden; position:absolute; top:0px;left:0px;\\"></span>"+',1460,'operaHiddenFix;_3a1.className="";',79,'hidden=_3a1.firstChild;if(!',79,'BBoxFor("x").w){','jsMath.hidden=jsMath.hiddenTop',';}',79,'ReInit();},','ConvertText',38,'(_3a2,_3a3',895,1641,'(_3a2',');this.ResetHidden(','_3a2',');if(text.match(/^\\s*\\\\nocache([^a-zA-Z])/)){','_3a3','=true;text=text.replace(/\\s*\\\\nocache/,"");}text=this.Parse("','T",text,_3a3);_3a2','.className="typeset";','_3a2','.innerHTML=text;},','ConvertDisplay',38,'(_3a5,_3a6',895,1641,'(_3a5',1695,'_3a5',1697,'_3a6',1699,'D",text,_3a6);_3a5',1701,'_3a5',1703,'ProcessElement',38,'(_3a8){','this.restart','=0;var _3a9=(','_3a8.className','.toLowerCase().match(/(^| )nocache( |$)/)!=null);try','{if(_3a8.tagName.toLowerCase()=="','div"){this.',1704,'(_3a8,_3a9);_3a8.onclick=jsMath.Click.CheckClick;_3a8.ondblclick=jsMath.Click.CheckDblClick',';}else',1726,'span"){this.',1689,1729,';}}}catch(err){if(_3a8.alt',74,'tex=_3a8.alt;','tex=tex.replace','(/&/g,"&");',1738,'(/</g,"<");',1738,'(/>/g,">");_3a8.innerHTML=tex;',1724,'="math";if(_3a9){',1724,'+=" nocache";}}',1685,';}},','ProcessElements',38,'(k){',1593,'blocking=','1;if(k>=','this.element.length','||','this.cancel','){this.','ProcessComplete','();if(',1758,'){','jsMath.Message.','Set("',71,' Math: Canceled");',1764,'Clear();}',1593,1754,'0;',1593,71,'();}else{','this.ProcessElement(this.element[','k]);if(',1722,'){',1593,1594,'this,"',1750,'",k);',1593,1754,'0;setTimeout("',1593,71,'()",',1460,'delay);}else{k++;var p=Math.floor(100*k/',1756,');','jsMath.Message.Set("Processing Math',': "+p+"%");setTimeout("',542,'.',1750,'("+k+")",',1460,'delay);}}},',1597,38,'(obj','){if(!jsMath.initialized){jsMath.Init();}this.element=this.GetMathElements(obj);',1758,'=0;this',554,'=1;',1593,1754,'1;',1795,': 0%",1);setTimeout("',542,'.',1750,'(0)",',1460,'delay);},',1608,38,'(obj,i){if(i==null',1806,'i=0;}this',554,1028,1756,'){',1776,'i]);if(',1722,'){',79,'Synchronize','("',542,'.',1608,'(null,"+i+")");',1593,71,'();',534,'i++;}this.',1760,'(1);},GetMathElements',38,39,'var _3b1=[];if(!obj){obj=','jsMath.document',';}',63,'obj',869,'obj=',1852,'.getElementById(obj);}if(!','obj.getElementsByTagName','){',89,'var math=',1860,'("div','");for(var k=0;k<math.length;k++){if(math[k].className.match(/(^| )math( |$)/)){if(jsMath.Browser.renameOK&&obj.getElementsByName){math[k].setAttribute("name","_jsMath_");}else{_3b1[_3b1.length]=math[k];}}}','math=',1860,'("span',1866,'if(',1460,'renameOK','&&obj','.getElementsByName','){_3b1=obj',1875,'("_jsMath_',721,'if(',79,'hidden','.sourceIndex','){_3b1.sort(function(a,b',160,'a',1883,'-b',1883,';});}}',58,'_3b1;},',1760,38,'(_3b7){if(',1460,1873,74,'_3b8=',1852,1875,1878,'");for(var i=_3b8.length-1;i>=0;i--){_3b8[i].removeAttribute("name");}}',1685,';this.element=[];if(!_3b7){',1795,': Done");',1764,'Clear();}',1764,'UnBlank();if(',1460,'safariImgBug&&(',1604,'font=="symbol"||',1604,'font=="image")){if(','this.timeout','){clearTimeout(',1918,');}',1918,'=setTimeout("','jsMath.window.resizeBy','(-1,0); "+"',1924,'(1,0); "+"',542,'.timeout = null",2000);}},Cancel',38,'(){',542,'.cancel=1;if(',1593,'cancelTimer){',1593,'cancelLoad();}}};',1498,'ConvertTeX',38,'(_3ba){',1593,'Push(jsMath.tex2math,"',1939,'",_3ba);},','ConvertTeX2',38,'(_3bb){',1593,1943,1946,'",_3bb);},','ConvertLaTeX',38,'(_3bc){',1593,1943,1953,'",_3bc);},','ConvertCustom',38,'(_3bd){',1593,1943,1960,'",_3bd);},','CustomSearch',38,'(om,cm,od,cd','){',1593,1594,'null,function(){',79,'tex2math.',1967,1969,');});},tex2math:{',1939,38,451,1946,38,451,1953,38,451,1960,38,451,1967,38,'(){}}});',79,1836,'=',1593,1836,';try{if(','window.parent','!=window&&window.jsMathAutoload){',2000,'.jsMath=jsMath;',1852,'=',2000,'.document;',79,'window=',2000,';}}catch(err){}',79,1621,'Register();',79,'Loaded();',79,'Controls.GetCookie();',531,'Source();',79,1621,'Init();',1593,'Init();',531,'Fonts();if(',1852,'.body){jsMath.Setup.Body();}}}'] |
|
]); |
|
//end = new Date().getTime(); |
|
//alert(end-start); |