File:
[LON-CAPA] /
loncom /
html /
adm /
jsMath /
extensions /
leaders.js
Revision
1.2:
download - view:
text,
annotated -
select for diffs
Tue Oct 9 21:29:22 2007 UTC (16 years, 11 months ago) by
albertel
Branches:
MAIN
CVS tags:
version_2_9_X,
version_2_9_99_0,
version_2_9_1,
version_2_9_0,
version_2_8_X,
version_2_8_99_1,
version_2_8_99_0,
version_2_8_2,
version_2_8_1,
version_2_8_0,
version_2_7_X,
version_2_7_99_1,
version_2_7_99_0,
version_2_7_1,
version_2_7_0,
version_2_6_X,
version_2_6_99_1,
version_2_6_99_0,
version_2_6_3,
version_2_6_2,
version_2_6_1,
version_2_6_0,
version_2_5_99_1,
version_2_5_99_0,
version_2_12_X,
version_2_11_X,
version_2_11_5_msu,
version_2_11_5,
version_2_11_4_uiuc,
version_2_11_4_msu,
version_2_11_4,
version_2_11_3_uiuc,
version_2_11_3_msu,
version_2_11_3,
version_2_11_2_uiuc,
version_2_11_2_msu,
version_2_11_2_educog,
version_2_11_2,
version_2_11_1,
version_2_11_0_RC3,
version_2_11_0_RC2,
version_2_11_0_RC1,
version_2_11_0,
version_2_10_X,
version_2_10_1,
version_2_10_0_RC2,
version_2_10_0_RC1,
version_2_10_0,
loncapaMITrelate_1,
language_hyphenation_merge,
language_hyphenation,
bz6209-base,
bz6209,
bz5969,
bz2851,
PRINT_INCOMPLETE_base,
PRINT_INCOMPLETE,
HEAD,
GCI_3,
GCI_2,
GCI_1,
BZ5971-printing-apage,
BZ5434-fox,
BZ4492-merge,
BZ4492-feature_horizontal_radioresponse
- jsMath 3.4e
1: /*
2: * extensions/leaders.js
3: *
4: * Part of the jsMath package for mathematics on the web.
5: *
6: * This file implements the \overbrace, \underbrace, \overrightarrow
7: * and \overleftarrow macros. It will be loaded automatically when needed,
8: * or can be loaded by
9: *
10: * jsMath.Extension.Require('leaders');
11: *
12: * ---------------------------------------------------------------------
13: *
14: * Copyright 2005-2006 by Davide P. Cervone
15: *
16: * Licensed under the Apache License, Version 2.0 (the "License");
17: * you may not use this file except in compliance with the License.
18: * You may obtain a copy of the License at
19: *
20: * http://www.apache.org/licenses/LICENSE-2.0
21: *
22: * Unless required by applicable law or agreed to in writing, software
23: * distributed under the License is distributed on an "AS IS" BASIS,
24: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25: * See the License for the specific language governing permissions and
26: * limitations under the License.
27: */
28:
29: /********************************************************************/
30:
31: jsMath.Add(jsMath.Box,{
32:
33: /*
34: * Create a horizontally stretchable "delimiter" (like over- and
35: * underbraces).
36: */
37: //### Add size?
38: Leaders: function (W,leader) {
39: var h; var d; var w; var html; var font;
40: if (leader.lmid) {// braces
41: font = jsMath.TeX.fam[leader.left[0]];
42: var left = this.GetCharCode(leader.left);
43: var right = this.GetCharCode(leader.right);
44: var lmid = this.GetCharCode(leader.lmid);
45: var rmid = this.GetCharCode(leader.rmid);
46: w = (W - left.w - right.w - lmid.w - rmid.w)/2 - .1; h = .4; d = .3;
47: if (w < 0) {w = 0}
48: html = this.AddClass(left.tclass,left.c,left.font)
49: + jsMath.HTML.Rule(w,left.h)
50: + this.AddClass(lmid.tclass,lmid.c+rmid.c,lmid.font)
51: + jsMath.HTML.Rule(w,right.h)
52: + this.AddClass(right.tclass,right.c,right.font);
53: } else { //arrows
54: font = jsMath.TeX.fam[leader.rep[0]];
55: var left = this.GetCharCode(leader.left? leader.left: leader.rep);
56: var rep = this.GetCharCode(leader.rep);
57: var right = this.GetCharCode(leader.right? leader.right: leader.rep);
58: var n = Math.ceil((W - left.w - right.w + .4)/(rep.w - .3));
59: w = (W - left.w - right.w + .4 - n*(rep.w - .3));
60: if (leader.left) {h = left.h; d = left.d} else {h = right.h; d = right.d}
61: if (d == null) {d = 0}; if (h == null) {h = 0}
62: var html = this.AddClass(left.tclass,left.c,left.font); var m = Math.floor(n/2);
63: var ext = jsMath.HTML.Place(rep.c,-.3,0);
64: var ehtml = ''; for (var i = 0; i < m; i++) {ehtml += ext};
65: html += this.AddClass(rep.tclass,ehtml,rep.font) + jsMath.HTML.Spacer(w);
66: ehtml = ''; for (var i = m; i < n; i++) {ehtml += ext};
67: html += this.AddClass(rep.tclass,ehtml,rep.font);
68: if (jsMath.Browser.msieFontBug) {html += '<span style="display: none">x</span>'}
69: html += jsMath.HTML.Place(this.AddClass(right.tclass,right.c,right.font),-.4,0);
70: }
71: w = jsMath.EmBoxFor(html).w;
72: if (w != W) {
73: w = jsMath.HTML.Spacer((W-w)/2);
74: html = w + html + w;
75: }
76: var box = new jsMath.Box('html',html,W,h,d);
77: box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d;
78: return box;
79: }
80:
81: });
82:
83: jsMath.Package(jsMath.Parser,{
84:
85: macros: {
86: overbrace: ['HandleLeaders','downbrace',1],
87: underbrace: ['HandleLeaders','upbrace',1,1,-.05],
88: overrightarrow: ['HandleLeaders','rightarrow',],
89: underrightarrow: ['HandleLeaders','rightarrow',null,1,-.2],
90: overleftarrow: ['HandleLeaders','leftarrow'],
91: underleftarrow: ['HandleLeaders','leftarrow',null,1,-.2],
92: overleftrightarrow: ['HandleLeaders','leftrightarrow'],
93: underleftrightarrow: ['HandleLeaders','leftrightarrow',null,1,-.2]
94: },
95:
96: /*
97: * The horizontally stretchable delimiters
98: */
99: leaders: {
100: downbrace: {left: [3,0x7A], lmid: [3,0x7D], rmid: [3,0x7C], right: [3,0x7B]},
101: upbrace: {left: [3,0x7C], lmid: [3,0x7B], rmid: [3,0x7A], right: [3,0x7D]},
102: leftarrow: {left: [2,0x20], rep: [2,0x00]},
103: rightarrow: {rep: [2,0x00], right: [2,0x21]},
104: leftrightarrow: {left: [2,0x20], rep: [2, 0x00], right: [2,0x21]}
105: },
106:
107: /*
108: * Implements \overbrace, \underbrace, etc.
109: */
110: HandleLeaders: function (name,data) {
111: var box = this.ProcessArg(this.cmd+name); if (this.error) return;
112: box = jsMath.Box.Set(box,'D',this.mlist.data.size).Remeasured();
113: var leader = jsMath.Box.Leaders(box.w,this.leaders[data[0]]);
114: if (data[2]) {leader.y = -leader.h-box.d+(data[3]||0)}
115: else {leader.y = box.h + Math.max(0,leader.d)+(data[3]||0)}
116: box.x = -(leader.w + box.w)/2;
117: var space = jsMath.Box.Space((leader.w-box.w)/2);
118: box = jsMath.mItem.Atom(data[1]? 'op': 'ord',
119: jsMath.Box.SetList([leader,box,space],'T',this.mlist.data.size));
120: box.limits = (data[1]? 1: 0);
121: this.mlist.Add(box);
122: }
123:
124: });
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>