2 * extensions/moreArrows.js
4 * Part of the jsMath package for mathematics on the web.
6 * This file implements additional arrow macros with under- and
7 * overset labels. It can be loaded by
9 * jsMath.Extension.Require('moreArrows');
11 * or using \require{moreArrows} within a math formula.
13 * ---------------------------------------------------------------------
15 * Copyright 2005-2006 by Davide P. Cervone
17 * Licensed under the Apache License, Version 2.0 (the "License");
18 * you may not use this file except in compliance with the License.
19 * You may obtain a copy of the License at
21 * http://www.apache.org/licenses/LICENSE-2.0
23 * Unless required by applicable law or agreed to in writing, software
24 * distributed under the License is distributed on an "AS IS" BASIS,
25 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26 * See the License for the specific language governing permissions and
27 * limitations under the License.
30 /********************************************************************/
32 jsMath.Extension.Require('leaders');
34 jsMath.Package(jsMath.Parser,{
37 xrightarrow: ['HandleArrows','rightarrow'],
38 xleftarrow: ['HandleArrows','leftarrow'],
39 xuprightharpoon: ['HandleArrows','uprightharpoon'],
40 xupleftharpoon: ['HandleArrows','upleftharpoon'],
41 xdownrightharpoon: ['HandleArrows','downrightharpoon'],
42 xdownleftharpoon: ['HandleArrows','downleftharpoon']
46 upleftharpoon: {left: [1,0x28], rep: [2,0x00]},
47 uprightharpoon: {rep: [2,0x00], right: [1,0x2A]},
48 downleftharpoon: {left: [1,0x29], rep: [2,0x00]},
49 downrightharpoon: {rep: [2,0x00], right: [1,0x2B]}
52 HandleArrows: function (name,data) {
53 var bot = this.GetBrackets(this.cmd+name); if (this.error) return;
54 var top = this.ProcessArg(this.cmd+name); if (this.error) return;
55 var box = jsMath.Box.Set(top,'S',this.mlist.data.size).Remeasured();
58 bot = this.Process(bot); if (this.error) return;
59 var box = jsMath.Box.Set(bot,'S',this.mlist.data.size).Remeasured();
60 w = Math.max(w,box.w);
62 var leader = jsMath.Box.Leaders(w+.75,this.leaders[data[0]]);
63 box = jsMath.mItem.Atom('op',jsMath.Box.SetList([leader],'T',this.mlist.data.size));
64 box.limits = 1; box.sup = top; box.sub = bot;