diff options
Diffstat (limited to '')
-rw-r--r-- | source-builder/sb/asciidoc/javascripts/ASCIIMathML.js | 938 | ||||
-rw-r--r-- | source-builder/sb/asciidoc/javascripts/LaTeXMathML.js | 1223 | ||||
-rw-r--r-- | source-builder/sb/asciidoc/javascripts/asciidoc.js | 189 | ||||
-rw-r--r-- | source-builder/sb/asciidoc/javascripts/slidy.js | 2845 | ||||
-rw-r--r-- | source-builder/sb/asciidoc/javascripts/toc.js | 77 |
5 files changed, 0 insertions, 5272 deletions
diff --git a/source-builder/sb/asciidoc/javascripts/ASCIIMathML.js b/source-builder/sb/asciidoc/javascripts/ASCIIMathML.js deleted file mode 100644 index 489b312..0000000 --- a/source-builder/sb/asciidoc/javascripts/ASCIIMathML.js +++ /dev/null @@ -1,938 +0,0 @@ -/* -ASCIIMathML.js -============== -This file contains JavaScript functions to convert ASCII math notation -to Presentation MathML. The conversion is done while the (X)HTML page -loads, and should work with Firefox/Mozilla/Netscape 7+ and Internet -Explorer 6+MathPlayer (http://www.dessci.com/en/products/mathplayer/). -Just add the next line to your (X)HTML page with this file in the same folder: -This is a convenient and inexpensive solution for authoring MathML. - -Version 1.4.7 Dec 15, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen -Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js -For changes see http://www.chapman.edu/~jipsen/mathml/asciimathchanges.txt -If you use it on a webpage, please send the URL to jipsen@chapman.edu - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - -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 (at http://www.gnu.org/copyleft/gpl.html) -for more details. -*/ - -var checkForMathML = true; // check if browser can display MathML -var notifyIfNoMathML = true; // display note if no MathML capability -var alertIfNoMathML = false; // show alert box if no MathML capability -var mathcolor = ""; // change it to "" (to inherit) or any other color -var mathfontfamily = "serif"; // change to "" to inherit (works in IE) - // or another family (e.g. "arial") -var displaystyle = true; // puts limits above and below large operators -var showasciiformulaonhover = true; // helps students learn ASCIIMath -var decimalsign = "."; // change to "," if you like, beware of `(1,2)`! -var AMdelimiter1 = "`", AMescape1 = "\\\\`"; // can use other characters -var AMdelimiter2 = "$", AMescape2 = "\\\\\\$", AMdelimiter2regexp = "\\$"; -var doubleblankmathdelimiter = false; // if true, x+1 is equal to `x+1` - // for IE this works only in <!-- --> -//var separatetokens;// has been removed (email me if this is a problem) -var isIE = document.createElementNS==null; - -if (document.getElementById==null) - alert("This webpage requires a recent browser such as\ -\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer") - -// all further global variables start with "AM" - -function AMcreateElementXHTML(t) { - if (isIE) return document.createElement(t); - else return document.createElementNS("http://www.w3.org/1999/xhtml",t); -} - -function AMnoMathMLNote() { - var nd = AMcreateElementXHTML("h3"); - nd.setAttribute("align","center") - nd.appendChild(AMcreateElementXHTML("p")); - nd.appendChild(document.createTextNode("To view the ")); - var an = AMcreateElementXHTML("a"); - an.appendChild(document.createTextNode("ASCIIMathML")); - an.setAttribute("href","http://www.chapman.edu/~jipsen/asciimath.html"); - nd.appendChild(an); - nd.appendChild(document.createTextNode(" notation use Internet Explorer 6+")); - an = AMcreateElementXHTML("a"); - an.appendChild(document.createTextNode("MathPlayer")); - an.setAttribute("href","http://www.dessci.com/en/products/mathplayer/download.htm"); - nd.appendChild(an); - nd.appendChild(document.createTextNode(" or Netscape/Mozilla/Firefox")); - nd.appendChild(AMcreateElementXHTML("p")); - return nd; -} - -function AMisMathMLavailable() { - if (navigator.appName.slice(0,8)=="Netscape") - if (navigator.appVersion.slice(0,1)>="5") return null; - else return AMnoMathMLNote(); - else if (navigator.appName.slice(0,9)=="Microsoft") - try { - var ActiveX = new ActiveXObject("MathPlayer.Factory.1"); - return null; - } catch (e) { - return AMnoMathMLNote(); - } - else return AMnoMathMLNote(); -} - -// character lists for Mozilla/Netscape fonts -var AMcal = [0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46]; -var AMfrk = [0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128]; -var AMbbb = [0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124]; - -var CONST = 0, UNARY = 1, BINARY = 2, INFIX = 3, LEFTBRACKET = 4, - RIGHTBRACKET = 5, SPACE = 6, UNDEROVER = 7, DEFINITION = 8, - LEFTRIGHT = 9, TEXT = 10; // token types - -var AMsqrt = {input:"sqrt", tag:"msqrt", output:"sqrt", tex:null, ttype:UNARY}, - AMroot = {input:"root", tag:"mroot", output:"root", tex:null, ttype:BINARY}, - AMfrac = {input:"frac", tag:"mfrac", output:"/", tex:null, ttype:BINARY}, - AMdiv = {input:"/", tag:"mfrac", output:"/", tex:null, ttype:INFIX}, - AMover = {input:"stackrel", tag:"mover", output:"stackrel", tex:null, ttype:BINARY}, - AMsub = {input:"_", tag:"msub", output:"_", tex:null, ttype:INFIX}, - AMsup = {input:"^", tag:"msup", output:"^", tex:null, ttype:INFIX}, - AMtext = {input:"text", tag:"mtext", output:"text", tex:null, ttype:TEXT}, - AMmbox = {input:"mbox", tag:"mtext", output:"mbox", tex:null, ttype:TEXT}, - AMquote = {input:"\"", tag:"mtext", output:"mbox", tex:null, ttype:TEXT}; - -var AMsymbols = [ -//some greek symbols -{input:"alpha", tag:"mi", output:"\u03B1", tex:null, ttype:CONST}, -{input:"beta", tag:"mi", output:"\u03B2", tex:null, ttype:CONST}, -{input:"chi", tag:"mi", output:"\u03C7", tex:null, ttype:CONST}, -{input:"delta", tag:"mi", output:"\u03B4", tex:null, ttype:CONST}, -{input:"Delta", tag:"mo", output:"\u0394", tex:null, ttype:CONST}, -{input:"epsi", tag:"mi", output:"\u03B5", tex:"epsilon", ttype:CONST}, -{input:"varepsilon", tag:"mi", output:"\u025B", tex:null, ttype:CONST}, -{input:"eta", tag:"mi", output:"\u03B7", tex:null, ttype:CONST}, -{input:"gamma", tag:"mi", output:"\u03B3", tex:null, ttype:CONST}, -{input:"Gamma", tag:"mo", output:"\u0393", tex:null, ttype:CONST}, -{input:"iota", tag:"mi", output:"\u03B9", tex:null, ttype:CONST}, -{input:"kappa", tag:"mi", output:"\u03BA", tex:null, ttype:CONST}, -{input:"lambda", tag:"mi", output:"\u03BB", tex:null, ttype:CONST}, -{input:"Lambda", tag:"mo", output:"\u039B", tex:null, ttype:CONST}, -{input:"mu", tag:"mi", output:"\u03BC", tex:null, ttype:CONST}, -{input:"nu", tag:"mi", output:"\u03BD", tex:null, ttype:CONST}, -{input:"omega", tag:"mi", output:"\u03C9", tex:null, ttype:CONST}, -{input:"Omega", tag:"mo", output:"\u03A9", tex:null, ttype:CONST}, -{input:"phi", tag:"mi", output:"\u03C6", tex:null, ttype:CONST}, -{input:"varphi", tag:"mi", output:"\u03D5", tex:null, ttype:CONST}, -{input:"Phi", tag:"mo", output:"\u03A6", tex:null, ttype:CONST}, -{input:"pi", tag:"mi", output:"\u03C0", tex:null, ttype:CONST}, -{input:"Pi", tag:"mo", output:"\u03A0", tex:null, ttype:CONST}, -{input:"psi", tag:"mi", output:"\u03C8", tex:null, ttype:CONST}, -{input:"Psi", tag:"mi", output:"\u03A8", tex:null, ttype:CONST}, -{input:"rho", tag:"mi", output:"\u03C1", tex:null, ttype:CONST}, -{input:"sigma", tag:"mi", output:"\u03C3", tex:null, ttype:CONST}, -{input:"Sigma", tag:"mo", output:"\u03A3", tex:null, ttype:CONST}, -{input:"tau", tag:"mi", output:"\u03C4", tex:null, ttype:CONST}, -{input:"theta", tag:"mi", output:"\u03B8", tex:null, ttype:CONST}, -{input:"vartheta", tag:"mi", output:"\u03D1", tex:null, ttype:CONST}, -{input:"Theta", tag:"mo", output:"\u0398", tex:null, ttype:CONST}, -{input:"upsilon", tag:"mi", output:"\u03C5", tex:null, ttype:CONST}, -{input:"xi", tag:"mi", output:"\u03BE", tex:null, ttype:CONST}, -{input:"Xi", tag:"mo", output:"\u039E", tex:null, ttype:CONST}, -{input:"zeta", tag:"mi", output:"\u03B6", tex:null, ttype:CONST}, - -//binary operation symbols -{input:"*", tag:"mo", output:"\u22C5", tex:"cdot", ttype:CONST}, -{input:"**", tag:"mo", output:"\u22C6", tex:"star", ttype:CONST}, -{input:"//", tag:"mo", output:"/", tex:null, ttype:CONST}, -{input:"\\\\", tag:"mo", output:"\\", tex:"backslash", ttype:CONST}, -{input:"setminus", tag:"mo", output:"\\", tex:null, ttype:CONST}, -{input:"xx", tag:"mo", output:"\u00D7", tex:"times", ttype:CONST}, -{input:"-:", tag:"mo", output:"\u00F7", tex:"divide", ttype:CONST}, -{input:"@", tag:"mo", output:"\u2218", tex:"circ", ttype:CONST}, -{input:"o+", tag:"mo", output:"\u2295", tex:"oplus", ttype:CONST}, -{input:"ox", tag:"mo", output:"\u2297", tex:"otimes", ttype:CONST}, -{input:"o.", tag:"mo", output:"\u2299", tex:"odot", ttype:CONST}, -{input:"sum", tag:"mo", output:"\u2211", tex:null, ttype:UNDEROVER}, -{input:"prod", tag:"mo", output:"\u220F", tex:null, ttype:UNDEROVER}, -{input:"^^", tag:"mo", output:"\u2227", tex:"wedge", ttype:CONST}, -{input:"^^^", tag:"mo", output:"\u22C0", tex:"bigwedge", ttype:UNDEROVER}, -{input:"vv", tag:"mo", output:"\u2228", tex:"vee", ttype:CONST}, -{input:"vvv", tag:"mo", output:"\u22C1", tex:"bigvee", ttype:UNDEROVER}, -{input:"nn", tag:"mo", output:"\u2229", tex:"cap", ttype:CONST}, -{input:"nnn", tag:"mo", output:"\u22C2", tex:"bigcap", ttype:UNDEROVER}, -{input:"uu", tag:"mo", output:"\u222A", tex:"cup", ttype:CONST}, -{input:"uuu", tag:"mo", output:"\u22C3", tex:"bigcup", ttype:UNDEROVER}, - -//binary relation symbols -{input:"!=", tag:"mo", output:"\u2260", tex:"ne", ttype:CONST}, -{input:":=", tag:"mo", output:":=", tex:null, ttype:CONST}, -{input:"lt", tag:"mo", output:"<", tex:null, ttype:CONST}, -{input:"<=", tag:"mo", output:"\u2264", tex:"le", ttype:CONST}, -{input:"lt=", tag:"mo", output:"\u2264", tex:"leq", ttype:CONST}, -{input:">=", tag:"mo", output:"\u2265", tex:"ge", ttype:CONST}, -{input:"geq", tag:"mo", output:"\u2265", tex:null, ttype:CONST}, -{input:"-<", tag:"mo", output:"\u227A", tex:"prec", ttype:CONST}, -{input:"-lt", tag:"mo", output:"\u227A", tex:null, ttype:CONST}, -{input:">-", tag:"mo", output:"\u227B", tex:"succ", ttype:CONST}, -{input:"-<=", tag:"mo", output:"\u2AAF", tex:"preceq", ttype:CONST}, -{input:">-=", tag:"mo", output:"\u2AB0", tex:"succeq", ttype:CONST}, -{input:"in", tag:"mo", output:"\u2208", tex:null, ttype:CONST}, -{input:"!in", tag:"mo", output:"\u2209", tex:"notin", ttype:CONST}, -{input:"sub", tag:"mo", output:"\u2282", tex:"subset", ttype:CONST}, -{input:"sup", tag:"mo", output:"\u2283", tex:"supset", ttype:CONST}, -{input:"sube", tag:"mo", output:"\u2286", tex:"subseteq", ttype:CONST}, -{input:"supe", tag:"mo", output:"\u2287", tex:"supseteq", ttype:CONST}, -{input:"-=", tag:"mo", output:"\u2261", tex:"equiv", ttype:CONST}, -{input:"~=", tag:"mo", output:"\u2245", tex:"cong", ttype:CONST}, -{input:"~~", tag:"mo", output:"\u2248", tex:"approx", ttype:CONST}, -{input:"prop", tag:"mo", output:"\u221D", tex:"propto", ttype:CONST}, - -//logical symbols -{input:"and", tag:"mtext", output:"and", tex:null, ttype:SPACE}, -{input:"or", tag:"mtext", output:"or", tex:null, ttype:SPACE}, -{input:"not", tag:"mo", output:"\u00AC", tex:"neg", ttype:CONST}, -{input:"=>", tag:"mo", output:"\u21D2", tex:"implies", ttype:CONST}, -{input:"if", tag:"mo", output:"if", tex:null, ttype:SPACE}, -{input:"<=>", tag:"mo", output:"\u21D4", tex:"iff", ttype:CONST}, -{input:"AA", tag:"mo", output:"\u2200", tex:"forall", ttype:CONST}, -{input:"EE", tag:"mo", output:"\u2203", tex:"exists", ttype:CONST}, -{input:"_|_", tag:"mo", output:"\u22A5", tex:"bot", ttype:CONST}, -{input:"TT", tag:"mo", output:"\u22A4", tex:"top", ttype:CONST}, -{input:"|--", tag:"mo", output:"\u22A2", tex:"vdash", ttype:CONST}, -{input:"|==", tag:"mo", output:"\u22A8", tex:"models", ttype:CONST}, - -//grouping brackets -{input:"(", tag:"mo", output:"(", tex:null, ttype:LEFTBRACKET}, -{input:")", tag:"mo", output:")", tex:null, ttype:RIGHTBRACKET}, -{input:"[", tag:"mo", output:"[", tex:null, ttype:LEFTBRACKET}, -{input:"]", tag:"mo", output:"]", tex:null, ttype:RIGHTBRACKET}, -{input:"{", tag:"mo", output:"{", tex:null, ttype:LEFTBRACKET}, -{input:"}", tag:"mo", output:"}", tex:null, ttype:RIGHTBRACKET}, -{input:"|", tag:"mo", output:"|", tex:null, ttype:LEFTRIGHT}, -//{input:"||", tag:"mo", output:"||", tex:null, ttype:LEFTRIGHT}, -{input:"(:", tag:"mo", output:"\u2329", tex:"langle", ttype:LEFTBRACKET}, -{input:":)", tag:"mo", output:"\u232A", tex:"rangle", ttype:RIGHTBRACKET}, -{input:"<<", tag:"mo", output:"\u2329", tex:null, ttype:LEFTBRACKET}, -{input:">>", tag:"mo", output:"\u232A", tex:null, ttype:RIGHTBRACKET}, -{input:"{:", tag:"mo", output:"{:", tex:null, ttype:LEFTBRACKET, invisible:true}, -{input:":}", tag:"mo", output:":}", tex:null, ttype:RIGHTBRACKET, invisible:true}, - -//miscellaneous symbols -{input:"int", tag:"mo", output:"\u222B", tex:null, ttype:CONST}, -{input:"dx", tag:"mi", output:"{:d x:}", tex:null, ttype:DEFINITION}, -{input:"dy", tag:"mi", output:"{:d y:}", tex:null, ttype:DEFINITION}, -{input:"dz", tag:"mi", output:"{:d z:}", tex:null, ttype:DEFINITION}, -{input:"dt", tag:"mi", output:"{:d t:}", tex:null, ttype:DEFINITION}, -{input:"oint", tag:"mo", output:"\u222E", tex:null, ttype:CONST}, -{input:"del", tag:"mo", output:"\u2202", tex:"partial", ttype:CONST}, -{input:"grad", tag:"mo", output:"\u2207", tex:"nabla", ttype:CONST}, -{input:"+-", tag:"mo", output:"\u00B1", tex:"pm", ttype:CONST}, -{input:"O/", tag:"mo", output:"\u2205", tex:"emptyset", ttype:CONST}, -{input:"oo", tag:"mo", output:"\u221E", tex:"infty", ttype:CONST}, -{input:"aleph", tag:"mo", output:"\u2135", tex:null, ttype:CONST}, -{input:"...", tag:"mo", output:"...", tex:"ldots", ttype:CONST}, -{input:":.", tag:"mo", output:"\u2234", tex:"therefore", ttype:CONST}, -{input:"/_", tag:"mo", output:"\u2220", tex:"angle", ttype:CONST}, -{input:"\\ ", tag:"mo", output:"\u00A0", tex:null, ttype:CONST}, -{input:"quad", tag:"mo", output:"\u00A0\u00A0", tex:null, ttype:CONST}, -{input:"qquad", tag:"mo", output:"\u00A0\u00A0\u00A0\u00A0", tex:null, ttype:CONST}, -{input:"cdots", tag:"mo", output:"\u22EF", tex:null, ttype:CONST}, -{input:"vdots", tag:"mo", output:"\u22EE", tex:null, ttype:CONST}, -{input:"ddots", tag:"mo", output:"\u22F1", tex:null, ttype:CONST}, -{input:"diamond", tag:"mo", output:"\u22C4", tex:null, ttype:CONST}, -{input:"square", tag:"mo", output:"\u25A1", tex:null, ttype:CONST}, -{input:"|__", tag:"mo", output:"\u230A", tex:"lfloor", ttype:CONST}, -{input:"__|", tag:"mo", output:"\u230B", tex:"rfloor", ttype:CONST}, -{input:"|~", tag:"mo", output:"\u2308", tex:"lceiling", ttype:CONST}, -{input:"~|", tag:"mo", output:"\u2309", tex:"rceiling", ttype:CONST}, -{input:"CC", tag:"mo", output:"\u2102", tex:null, ttype:CONST}, -{input:"NN", tag:"mo", output:"\u2115", tex:null, ttype:CONST}, -{input:"QQ", tag:"mo", output:"\u211A", tex:null, ttype:CONST}, -{input:"RR", tag:"mo", output:"\u211D", tex:null, ttype:CONST}, -{input:"ZZ", tag:"mo", output:"\u2124", tex:null, ttype:CONST}, -{input:"f", tag:"mi", output:"f", tex:null, ttype:UNARY, func:true}, -{input:"g", tag:"mi", output:"g", tex:null, ttype:UNARY, func:true}, - -//standard functions -{input:"lim", tag:"mo", output:"lim", tex:null, ttype:UNDEROVER}, -{input:"Lim", tag:"mo", output:"Lim", tex:null, ttype:UNDEROVER}, -{input:"sin", tag:"mo", output:"sin", tex:null, ttype:UNARY, func:true}, -{input:"cos", tag:"mo", output:"cos", tex:null, ttype:UNARY, func:true}, -{input:"tan", tag:"mo", output:"tan", tex:null, ttype:UNARY, func:true}, -{input:"sinh", tag:"mo", output:"sinh", tex:null, ttype:UNARY, func:true}, -{input:"cosh", tag:"mo", output:"cosh", tex:null, ttype:UNARY, func:true}, -{input:"tanh", tag:"mo", output:"tanh", tex:null, ttype:UNARY, func:true}, -{input:"cot", tag:"mo", output:"cot", tex:null, ttype:UNARY, func:true}, -{input:"sec", tag:"mo", output:"sec", tex:null, ttype:UNARY, func:true}, -{input:"csc", tag:"mo", output:"csc", tex:null, ttype:UNARY, func:true}, -{input:"log", tag:"mo", output:"log", tex:null, ttype:UNARY, func:true}, -{input:"ln", tag:"mo", output:"ln", tex:null, ttype:UNARY, func:true}, -{input:"det", tag:"mo", output:"det", tex:null, ttype:UNARY, func:true}, -{input:"dim", tag:"mo", output:"dim", tex:null, ttype:CONST}, -{input:"mod", tag:"mo", output:"mod", tex:null, ttype:CONST}, -{input:"gcd", tag:"mo", output:"gcd", tex:null, ttype:UNARY, func:true}, -{input:"lcm", tag:"mo", output:"lcm", tex:null, ttype:UNARY, func:true}, -{input:"lub", tag:"mo", output:"lub", tex:null, ttype:CONST}, -{input:"glb", tag:"mo", output:"glb", tex:null, ttype:CONST}, -{input:"min", tag:"mo", output:"min", tex:null, ttype:UNDEROVER}, -{input:"max", tag:"mo", output:"max", tex:null, ttype:UNDEROVER}, - -//arrows -{input:"uarr", tag:"mo", output:"\u2191", tex:"uparrow", ttype:CONST}, -{input:"darr", tag:"mo", output:"\u2193", tex:"downarrow", ttype:CONST}, -{input:"rarr", tag:"mo", output:"\u2192", tex:"rightarrow", ttype:CONST}, -{input:"->", tag:"mo", output:"\u2192", tex:"to", ttype:CONST}, -{input:"|->", tag:"mo", output:"\u21A6", tex:"mapsto", ttype:CONST}, -{input:"larr", tag:"mo", output:"\u2190", tex:"leftarrow", ttype:CONST}, -{input:"harr", tag:"mo", output:"\u2194", tex:"leftrightarrow", ttype:CONST}, -{input:"rArr", tag:"mo", output:"\u21D2", tex:"Rightarrow", ttype:CONST}, -{input:"lArr", tag:"mo", output:"\u21D0", tex:"Leftarrow", ttype:CONST}, -{input:"hArr", tag:"mo", output:"\u21D4", tex:"Leftrightarrow", ttype:CONST}, - -//commands with argument -AMsqrt, AMroot, AMfrac, AMdiv, AMover, AMsub, AMsup, -{input:"hat", tag:"mover", output:"\u005E", tex:null, ttype:UNARY, acc:true}, -{input:"bar", tag:"mover", output:"\u00AF", tex:"overline", ttype:UNARY, acc:true}, -{input:"vec", tag:"mover", output:"\u2192", tex:null, ttype:UNARY, acc:true}, -{input:"dot", tag:"mover", output:".", tex:null, ttype:UNARY, acc:true}, -{input:"ddot", tag:"mover", output:"..", tex:null, ttype:UNARY, acc:true}, -{input:"ul", tag:"munder", output:"\u0332", tex:"underline", ttype:UNARY, acc:true}, -AMtext, AMmbox, AMquote, -{input:"bb", tag:"mstyle", atname:"fontweight", atval:"bold", output:"bb", tex:null, ttype:UNARY}, -{input:"mathbf", tag:"mstyle", atname:"fontweight", atval:"bold", output:"mathbf", tex:null, ttype:UNARY}, -{input:"sf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"sf", tex:null, ttype:UNARY}, -{input:"mathsf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"mathsf", tex:null, ttype:UNARY}, -{input:"bbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"bbb", tex:null, ttype:UNARY, codes:AMbbb}, -{input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb}, -{input:"cc", tag:"mstyle", atname:"mathvariant", atval:"script", output:"cc", tex:null, ttype:UNARY, codes:AMcal}, -{input:"mathcal", tag:"mstyle", atname:"mathvariant", atval:"script", output:"mathcal", tex:null, ttype:UNARY, codes:AMcal}, -{input:"tt", tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"tt", tex:null, ttype:UNARY}, -{input:"mathtt", tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"mathtt", tex:null, ttype:UNARY}, -{input:"fr", tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"fr", tex:null, ttype:UNARY, codes:AMfrk}, -{input:"mathfrak", tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"mathfrak", tex:null, ttype:UNARY, codes:AMfrk} -]; - -function compareNames(s1,s2) { - if (s1.input > s2.input) return 1 - else return -1; -} - -var AMnames = []; //list of input symbols - -function AMinitSymbols() { - var texsymbols = [], i; - for (i=0; i<AMsymbols.length; i++) - if (AMsymbols[i].tex) - texsymbols[texsymbols.length] = {input:AMsymbols[i].tex, - tag:AMsymbols[i].tag, output:AMsymbols[i].output, ttype:AMsymbols[i].ttype}; - AMsymbols = AMsymbols.concat(texsymbols); - AMsymbols.sort(compareNames); - for (i=0; i<AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input; -} - -var AMmathml = "http://www.w3.org/1998/Math/MathML"; - -function AMcreateElementMathML(t) { - if (isIE) return document.createElement("m:"+t); - else return document.createElementNS(AMmathml,t); -} - -function AMcreateMmlNode(t,frag) { -// var node = AMcreateElementMathML(name); - if (isIE) var node = document.createElement("m:"+t); - else var node = document.createElementNS(AMmathml,t); - node.appendChild(frag); - return node; -} - -function newcommand(oldstr,newstr) { - AMsymbols = AMsymbols.concat([{input:oldstr, tag:"mo", output:newstr, - tex:null, ttype:DEFINITION}]); -} - -function AMremoveCharsAndBlanks(str,n) { -//remove n characters and any following blanks - var st; - if (str.charAt(n)=="\\" && str.charAt(n+1)!="\\" && str.charAt(n+1)!=" ") - st = str.slice(n+1); - else st = str.slice(n); - for (var i=0; i<st.length && st.charCodeAt(i)<=32; i=i+1); - return st.slice(i); -} - -function AMposition(arr, str, n) { -// return position >=n where str appears or would be inserted -// assumes arr is sorted - if (n==0) { - var h,m; - n = -1; - h = arr.length; - while (n+1<h) { - m = (n+h) >> 1; - if (arr[m]<str) n = m; else h = m; - } - return h; - } else - for (var i=n; i<arr.length && arr[i]<str; i++); - return i; // i=arr.length || arr[i]>=str -} - -function AMgetSymbol(str) { -//return maximal initial substring of str that appears in names -//return null if there is none - var k = 0; //new pos - var j = 0; //old pos - var mk; //match pos - var st; - var tagst; - var match = ""; - var more = true; - for (var i=1; i<=str.length && more; i++) { - st = str.slice(0,i); //initial substring of length i - j = k; - k = AMposition(AMnames, st, j); - if (k<AMnames.length && str.slice(0,AMnames[k].length)==AMnames[k]){ - match = AMnames[k]; - mk = k; - i = match.length; - } - more = k<AMnames.length && str.slice(0,AMnames[k].length)>=AMnames[k]; - } - AMpreviousSymbol=AMcurrentSymbol; - if (match!=""){ - AMcurrentSymbol=AMsymbols[mk].ttype; - return AMsymbols[mk]; - } -// if str[0] is a digit or - return maxsubstring of digits.digits - AMcurrentSymbol=CONST; - k = 1; - st = str.slice(0,1); - var integ = true; - while ("0"<=st && st<="9" && k<=str.length) { - st = str.slice(k,k+1); - k++; - } - if (st == decimalsign) { - st = str.slice(k,k+1); - if ("0"<=st && st<="9") { - integ = false; - k++; - while ("0"<=st && st<="9" && k<=str.length) { - st = str.slice(k,k+1); - k++; - } - } - } - if ((integ && k>1) || k>2) { - st = str.slice(0,k-1); - tagst = "mn"; - } else { - k = 2; - st = str.slice(0,1); //take 1 character - tagst = (("A">st || st>"Z") && ("a">st || st>"z")?"mo":"mi"); - } - if (st=="-" && AMpreviousSymbol==INFIX) { - AMcurrentSymbol = INFIX; //trick "/" into recognizing "-" on second parse - return {input:st, tag:tagst, output:st, ttype:UNARY, func:true}; - } - return {input:st, tag:tagst, output:st, ttype:CONST}; -} - -function AMremoveBrackets(node) { - var st; - if (node.nodeName=="mrow") { - st = node.firstChild.firstChild.nodeValue; - if (st=="(" || st=="[" || st=="{") node.removeChild(node.firstChild); - } - if (node.nodeName=="mrow") { - st = node.lastChild.firstChild.nodeValue; - if (st==")" || st=="]" || st=="}") node.removeChild(node.lastChild); - } -} - -/*Parsing ASCII math expressions with the following grammar -v ::= [A-Za-z] | greek letters | numbers | other constant symbols -u ::= sqrt | text | bb | other unary symbols for font commands -b ::= frac | root | stackrel binary symbols -l ::= ( | [ | { | (: | {: left brackets -r ::= ) | ] | } | :) | :} right brackets -S ::= v | lEr | uS | bSS Simple expression -I ::= S_S | S^S | S_S^S | S Intermediate expression -E ::= IE | I/I Expression -Each terminal symbol is translated into a corresponding mathml node.*/ - -var AMnestingDepth,AMpreviousSymbol,AMcurrentSymbol; - -function AMparseSexpr(str) { //parses str and returns [node,tailstr] - var symbol, node, result, i, st,// rightvert = false, - newFrag = document.createDocumentFragment(); - str = AMremoveCharsAndBlanks(str,0); - symbol = AMgetSymbol(str); //either a token or a bracket or empty - if (symbol == null || symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0) { - return [null,str]; - } - if (symbol.ttype == DEFINITION) { - str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length); - symbol = AMgetSymbol(str); - } - switch (symbol.ttype) { - case UNDEROVER: - case CONST: - str = AMremoveCharsAndBlanks(str,symbol.input.length); - return [AMcreateMmlNode(symbol.tag, //its a constant - document.createTextNode(symbol.output)),str]; - case LEFTBRACKET: //read (expr+) - AMnestingDepth++; - str = AMremoveCharsAndBlanks(str,symbol.input.length); - result = AMparseExpr(str,true); - AMnestingDepth--; - if (typeof symbol.invisible == "boolean" && symbol.invisible) - node = AMcreateMmlNode("mrow",result[0]); - else { - node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); - node = AMcreateMmlNode("mrow",node); - node.appendChild(result[0]); - } - return [node,result[1]]; - case TEXT: - if (symbol!=AMquote) str = AMremoveCharsAndBlanks(str,symbol.input.length); - if (str.charAt(0)=="{") i=str.indexOf("}"); - else if (str.charAt(0)=="(") i=str.indexOf(")"); - else if (str.charAt(0)=="[") i=str.indexOf("]"); - else if (symbol==AMquote) i=str.slice(1).indexOf("\"")+1; - else i = 0; - if (i==-1) i = str.length; - st = str.slice(1,i); - if (st.charAt(0) == " ") { - node = AMcreateElementMathML("mspace"); - node.setAttribute("width","1ex"); - newFrag.appendChild(node); - } - newFrag.appendChild( - AMcreateMmlNode(symbol.tag,document.createTextNode(st))); - if (st.charAt(st.length-1) == " ") { - node = AMcreateElementMathML("mspace"); - node.setAttribute("width","1ex"); - newFrag.appendChild(node); - } - str = AMremoveCharsAndBlanks(str,i+1); - return [AMcreateMmlNode("mrow",newFrag),str]; - case UNARY: - str = AMremoveCharsAndBlanks(str,symbol.input.length); - result = AMparseSexpr(str); - if (result[0]==null) return [AMcreateMmlNode(symbol.tag, - document.createTextNode(symbol.output)),str]; - if (typeof symbol.func == "boolean" && symbol.func) { // functions hack - st = str.charAt(0); - if (st=="^" || st=="_" || st=="/" || st=="|" || st==",") { - return [AMcreateMmlNode(symbol.tag, - document.createTextNode(symbol.output)),str]; - } else { - node = AMcreateMmlNode("mrow", - AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output))); - node.appendChild(result[0]); - return [node,result[1]]; - } - } - AMremoveBrackets(result[0]); - if (symbol.input == "sqrt") { // sqrt - return [AMcreateMmlNode(symbol.tag,result[0]),result[1]]; - } else if (typeof symbol.acc == "boolean" && symbol.acc) { // accent - node = AMcreateMmlNode(symbol.tag,result[0]); - node.appendChild(AMcreateMmlNode("mo",document.createTextNode(symbol.output))); - return [node,result[1]]; - } else { // font change command - if (!isIE && typeof symbol.codes != "undefined") { - for (i=0; i<result[0].childNodes.length; i++) - if (result[0].childNodes[i].nodeName=="mi" || result[0].nodeName=="mi") { - st = (result[0].nodeName=="mi"?result[0].firstChild.nodeValue: - result[0].childNodes[i].firstChild.nodeValue); - var newst = []; - for (var j=0; j<st.length; j++) - if (st.charCodeAt(j)>64 && st.charCodeAt(j)<91) newst = newst + - String.fromCharCode(symbol.codes[st.charCodeAt(j)-65]); - else newst = newst + st.charAt(j); - if (result[0].nodeName=="mi") - result[0]=AMcreateElementMathML("mo"). - appendChild(document.createTextNode(newst)); - else result[0].replaceChild(AMcreateElementMathML("mo"). - appendChild(document.createTextNode(newst)),result[0].childNodes[i]); - } - } - node = AMcreateMmlNode(symbol.tag,result[0]); - node.setAttribute(symbol.atname,symbol.atval); - return [node,result[1]]; - } - case BINARY: - str = AMremoveCharsAndBlanks(str,symbol.input.length); - result = AMparseSexpr(str); - if (result[0]==null) return [AMcreateMmlNode("mo", - document.createTextNode(symbol.input)),str]; - AMremoveBrackets(result[0]); - var result2 = AMparseSexpr(result[1]); - if (result2[0]==null) return [AMcreateMmlNode("mo", - document.createTextNode(symbol.input)),str]; - AMremoveBrackets(result2[0]); - if (symbol.input=="root" || symbol.input=="stackrel") - newFrag.appendChild(result2[0]); - newFrag.appendChild(result[0]); - if (symbol.input=="frac") newFrag.appendChild(result2[0]); - return [AMcreateMmlNode(symbol.tag,newFrag),result2[1]]; - case INFIX: - str = AMremoveCharsAndBlanks(str,symbol.input.length); - return [AMcreateMmlNode("mo",document.createTextNode(symbol.output)),str]; - case SPACE: - str = AMremoveCharsAndBlanks(str,symbol.input.length); - node = AMcreateElementMathML("mspace"); - node.setAttribute("width","1ex"); - newFrag.appendChild(node); - newFrag.appendChild( - AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output))); - node = AMcreateElementMathML("mspace"); - node.setAttribute("width","1ex"); - newFrag.appendChild(node); - return [AMcreateMmlNode("mrow",newFrag),str]; - case LEFTRIGHT: -// if (rightvert) return [null,str]; else rightvert = true; - AMnestingDepth++; - str = AMremoveCharsAndBlanks(str,symbol.input.length); - result = AMparseExpr(str,false); - AMnestingDepth--; - var st = ""; - if (result[0].lastChild!=null) - st = result[0].lastChild.firstChild.nodeValue; - if (st == "|") { // its an absolute value subterm - node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); - node = AMcreateMmlNode("mrow",node); - node.appendChild(result[0]); - return [node,result[1]]; - } else { // the "|" is a \mid - node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); - node = AMcreateMmlNode("mrow",node); - return [node,str]; - } - default: -//alert("default"); - str = AMremoveCharsAndBlanks(str,symbol.input.length); - return [AMcreateMmlNode(symbol.tag, //its a constant - document.createTextNode(symbol.output)),str]; - } -} - -function AMparseIexpr(str) { - var symbol, sym1, sym2, node, result, underover; - str = AMremoveCharsAndBlanks(str,0); - sym1 = AMgetSymbol(str); - result = AMparseSexpr(str); - node = result[0]; - str = result[1]; - symbol = AMgetSymbol(str); - if (symbol.ttype == INFIX && symbol.input != "/") { - str = AMremoveCharsAndBlanks(str,symbol.input.length); -// if (symbol.input == "/") result = AMparseIexpr(str); else ... - result = AMparseSexpr(str); - if (result[0] == null) // show box in place of missing argument - result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1")); - else AMremoveBrackets(result[0]); - str = result[1]; -// if (symbol.input == "/") AMremoveBrackets(node); - if (symbol.input == "_") { - sym2 = AMgetSymbol(str); - underover = (sym1.ttype == UNDEROVER); - if (sym2.input == "^") { - str = AMremoveCharsAndBlanks(str,sym2.input.length); - var res2 = AMparseSexpr(str); - AMremoveBrackets(res2[0]); - str = res2[1]; - node = AMcreateMmlNode((underover?"munderover":"msubsup"),node); - node.appendChild(result[0]); - node.appendChild(res2[0]); - node = AMcreateMmlNode("mrow",node); // so sum does not stretch - } else { - node = AMcreateMmlNode((underover?"munder":"msub"),node); - node.appendChild(result[0]); - } - } else { - node = AMcreateMmlNode(symbol.tag,node); - node.appendChild(result[0]); - } - } - return [node,str]; -} - -function AMparseExpr(str,rightbracket) { - var symbol, node, result, i, nodeList = [], - newFrag = document.createDocumentFragment(); - do { - str = AMremoveCharsAndBlanks(str,0); - result = AMparseIexpr(str); - node = result[0]; - str = result[1]; - symbol = AMgetSymbol(str); - if (symbol.ttype == INFIX && symbol.input == "/") { - str = AMremoveCharsAndBlanks(str,symbol.input.length); - result = AMparseIexpr(str); - if (result[0] == null) // show box in place of missing argument - result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1")); - else AMremoveBrackets(result[0]); - str = result[1]; - AMremoveBrackets(node); - node = AMcreateMmlNode(symbol.tag,node); - node.appendChild(result[0]); - newFrag.appendChild(node); - symbol = AMgetSymbol(str); - } - else if (node!=undefined) newFrag.appendChild(node); - } while ((symbol.ttype != RIGHTBRACKET && - (symbol.ttype != LEFTRIGHT || rightbracket) - || AMnestingDepth == 0) && symbol!=null && symbol.output!=""); - if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) { -// if (AMnestingDepth > 0) AMnestingDepth--; - var len = newFrag.childNodes.length; - if (len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && len>1 && - newFrag.childNodes[len-2].nodeName == "mo" && - newFrag.childNodes[len-2].firstChild.nodeValue == ",") { //matrix - var right = newFrag.childNodes[len-1].lastChild.firstChild.nodeValue; - if (right==")" || right=="]") { - var left = newFrag.childNodes[len-1].firstChild.firstChild.nodeValue; - if (left=="(" && right==")" && symbol.output != "}" || - left=="[" && right=="]") { - var pos = []; // positions of commas - var matrix = true; - var m = newFrag.childNodes.length; - for (i=0; matrix && i<m; i=i+2) { - pos[i] = []; - node = newFrag.childNodes[i]; - if (matrix) matrix = node.nodeName=="mrow" && - (i==m-1 || node.nextSibling.nodeName=="mo" && - node.nextSibling.firstChild.nodeValue==",")&& - node.firstChild.firstChild.nodeValue==left && - node.lastChild.firstChild.nodeValue==right; - if (matrix) - for (var j=0; j<node.childNodes.length; j++) - if (node.childNodes[j].firstChild.nodeValue==",") - pos[i][pos[i].length]=j; - if (matrix && i>1) matrix = pos[i].length == pos[i-2].length; - } - if (matrix) { - var row, frag, n, k, table = document.createDocumentFragment(); - for (i=0; i<m; i=i+2) { - row = document.createDocumentFragment(); - frag = document.createDocumentFragment(); - node = newFrag.firstChild; // <mrow>(-,-,...,-,-)</mrow> - n = node.childNodes.length; - k = 0; - node.removeChild(node.firstChild); //remove ( - for (j=1; j<n-1; j++) { - if (typeof pos[i][k] != "undefined" && j==pos[i][k]){ - node.removeChild(node.firstChild); //remove , - row.appendChild(AMcreateMmlNode("mtd",frag)); - k++; - } else frag.appendChild(node.firstChild); - } - row.appendChild(AMcreateMmlNode("mtd",frag)); - if (newFrag.childNodes.length>2) { - newFrag.removeChild(newFrag.firstChild); //remove <mrow>)</mrow> - newFrag.removeChild(newFrag.firstChild); //remove <mo>,</mo> - } - table.appendChild(AMcreateMmlNode("mtr",row)); - } - node = AMcreateMmlNode("mtable",table); - if (typeof symbol.invisible == "boolean" && symbol.invisible) node.setAttribute("columnalign","left"); - newFrag.replaceChild(node,newFrag.firstChild); - } - } - } - } - str = AMremoveCharsAndBlanks(str,symbol.input.length); - if (typeof symbol.invisible != "boolean" || !symbol.invisible) { - node = AMcreateMmlNode("mo",document.createTextNode(symbol.output)); - newFrag.appendChild(node); - } - } - return [newFrag,str]; -} - -function AMparseMath(str) { - var result, node = AMcreateElementMathML("mstyle"); - if (mathcolor != "") node.setAttribute("mathcolor",mathcolor); - if (displaystyle) node.setAttribute("displaystyle","true"); - if (mathfontfamily != "") node.setAttribute("fontfamily",mathfontfamily); - AMnestingDepth = 0; - node.appendChild(AMparseExpr(str.replace(/^\s+/g,""),false)[0]); - node = AMcreateMmlNode("math",node); - if (showasciiformulaonhover) //fixed by djhsu so newline - node.setAttribute("title",str.replace(/\s+/g," "));//does not show in Gecko - if (mathfontfamily != "" && (isIE || mathfontfamily != "serif")) { - var fnode = AMcreateElementXHTML("font"); - fnode.setAttribute("face",mathfontfamily); - fnode.appendChild(node); - return fnode; - } - return node; -} - -function AMstrarr2docFrag(arr, linebreaks) { - var newFrag=document.createDocumentFragment(); - var expr = false; - for (var i=0; i<arr.length; i++) { - if (expr) newFrag.appendChild(AMparseMath(arr[i])); - else { - var arri = (linebreaks ? arr[i].split("\n\n") : [arr[i]]); - newFrag.appendChild(AMcreateElementXHTML("span"). - appendChild(document.createTextNode(arri[0]))); - for (var j=1; j<arri.length; j++) { - newFrag.appendChild(AMcreateElementXHTML("p")); - newFrag.appendChild(AMcreateElementXHTML("span"). - appendChild(document.createTextNode(arri[j]))); - } - } - expr = !expr; - } - return newFrag; -} - -function AMprocessNodeR(n, linebreaks) { - var mtch, str, arr, frg, i; - if (n.childNodes.length == 0) { - if ((n.nodeType!=8 || linebreaks) && - n.parentNode.nodeName!="form" && n.parentNode.nodeName!="FORM" && - n.parentNode.nodeName!="textarea" && n.parentNode.nodeName!="TEXTAREA" && - n.parentNode.nodeName!="pre" && n.parentNode.nodeName!="PRE") { - str = n.nodeValue; - if (!(str == null)) { - str = str.replace(/\r\n\r\n/g,"\n\n"); - if (doubleblankmathdelimiter) { - str = str.replace(/\x20\x20\./g," "+AMdelimiter1+"."); - str = str.replace(/\x20\x20,/g," "+AMdelimiter1+","); - str = str.replace(/\x20\x20/g," "+AMdelimiter1+" "); - } - str = str.replace(/\x20+/g," "); - str = str.replace(/\s*\r\n/g," "); - mtch = false; - str = str.replace(new RegExp(AMescape2, "g"), - function(st){mtch=true;return "AMescape2"}); - str = str.replace(new RegExp(AMescape1, "g"), - function(st){mtch=true;return "AMescape1"}); - str = str.replace(new RegExp(AMdelimiter2regexp, "g"),AMdelimiter1); - arr = str.split(AMdelimiter1); - for (i=0; i<arr.length; i++) - arr[i]=arr[i].replace(/AMescape2/g,AMdelimiter2). - replace(/AMescape1/g,AMdelimiter1); - if (arr.length>1 || mtch) { - if (checkForMathML) { - checkForMathML = false; - var nd = AMisMathMLavailable(); - AMnoMathML = nd != null; - if (AMnoMathML && notifyIfNoMathML) - if (alertIfNoMathML) - alert("To view the ASCIIMathML notation use Internet Explorer 6 +\nMathPlayer (free from www.dessci.com)\n\ - or Firefox/Mozilla/Netscape"); - else AMbody.insertBefore(nd,AMbody.childNodes[0]); - } - if (!AMnoMathML) { - frg = AMstrarr2docFrag(arr,n.nodeType==8); - var len = frg.childNodes.length; - n.parentNode.replaceChild(frg,n); - return len-1; - } else return 0; - } - } - } else return 0; - } else if (n.nodeName!="math") { - for (i=0; i<n.childNodes.length; i++) - i += AMprocessNodeR(n.childNodes[i], linebreaks); - } - return 0; -} - -function AMprocessNode(n, linebreaks, spanclassAM) { - var frag,st; - if (spanclassAM!=null) { - frag = document.getElementsByTagName("span") - for (var i=0;i<frag.length;i++) - if (frag[i].className == "AM") - AMprocessNodeR(frag[i],linebreaks); - } else { - try { - st = n.innerHTML; - } catch(err) {} - if (st==null || - st.indexOf(AMdelimiter1)!=-1 || st.indexOf(AMdelimiter2)!=-1) - AMprocessNodeR(n,linebreaks); - } - if (isIE) { //needed to match size and font of formula to surrounding text - frag = document.getElementsByTagName('math'); - for (var i=0;i<frag.length;i++) frag[i].update() - } -} - -var AMbody; -var AMnoMathML = false, AMtranslated = false; - -function translate(spanclassAM) { - if (!AMtranslated) { // run this only once - AMtranslated = true; - AMinitSymbols(); - AMbody = document.getElementsByTagName("body")[0]; - AMprocessNode(AMbody, false, spanclassAM); - } -} - -if (isIE) { // avoid adding MathPlayer info explicitly to each webpage - document.write("<object id=\"mathplayer\"\ - classid=\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\"></object>"); - document.write("<?import namespace=\"m\" implementation=\"#mathplayer\"?>"); -} - -// GO1.1 Generic onload by Brothercake -// http://www.brothercake.com/ -//onload function (replaces the onload="translate()" in the <body> tag) -function generic() -{ - translate(); -}; -//setup onload function -if(typeof window.addEventListener != 'undefined') -{ - //.. gecko, safari, konqueror and standard - window.addEventListener('load', generic, false); -} -else if(typeof document.addEventListener != 'undefined') -{ - //.. opera 7 - document.addEventListener('load', generic, false); -} -else if(typeof window.attachEvent != 'undefined') -{ - //.. win/ie - window.attachEvent('onload', generic); -} -//** remove this condition to degrade older browsers -else -{ - //.. mac/ie5 and anything else that gets this far - //if there's an existing onload function - if(typeof window.onload == 'function') - { - //store it - var existing = onload; - //add new onload handler - window.onload = function() - { - //call existing onload function - existing(); - //call generic onload function - generic(); - }; - } - else - { - //setup onload function - window.onload = generic; - } -} diff --git a/source-builder/sb/asciidoc/javascripts/LaTeXMathML.js b/source-builder/sb/asciidoc/javascripts/LaTeXMathML.js deleted file mode 100644 index 51dba70..0000000 --- a/source-builder/sb/asciidoc/javascripts/LaTeXMathML.js +++ /dev/null @@ -1,1223 +0,0 @@ -/*
-LaTeXMathML.js
-==============
-
-This file, in this form, is due to Douglas Woodall, June 2006.
-It contains JavaScript functions to convert (most simple) LaTeX
-math notation to Presentation MathML. It was obtained by
-downloading the file ASCIIMathML.js from
- http://www1.chapman.edu/~jipsen/mathml/asciimathdownload/
-and modifying it so that it carries out ONLY those conversions
-that would be carried out in LaTeX. A description of the original
-file, with examples, can be found at
- www1.chapman.edu/~jipsen/mathml/asciimath.html
- ASCIIMathML: Math on the web for everyone
-
-Here is the header notice from the original file:
-
-ASCIIMathML.js
-==============
-This file contains JavaScript functions to convert ASCII math notation
-to Presentation MathML. The conversion is done while the (X)HTML page
-loads, and should work with Firefox/Mozilla/Netscape 7+ and Internet
-Explorer 6+MathPlayer (http://www.dessci.com/en/products/mathplayer/).
-Just add the next line to your (X)HTML page with this file in the same folder:
-This is a convenient and inexpensive solution for authoring MathML.
-
-Version 1.4.7 Dec 15, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen
-Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js
-For changes see http://www.chapman.edu/~jipsen/mathml/asciimathchanges.txt
-If you use it on a webpage, please send the URL to jipsen@chapman.edu
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-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 (at http://www.gnu.org/copyleft/gpl.html)
-for more details.
-
-LaTeXMathML.js (ctd)
-==============
-
-The instructions for use are the same as for the original
-ASCIIMathML.js, except that of course the line you add to your
-file should be
-Or use absolute path names if the file is not in the same folder
-as your (X)HTML page.
-*/
-
-var checkForMathML = true; // check if browser can display MathML
-var notifyIfNoMathML = true; // display note if no MathML capability
-var alertIfNoMathML = false; // show alert box if no MathML capability
-// was "red":
-var mathcolor = ""; // change it to "" (to inherit) or any other color
-// was "serif":
-var mathfontfamily = ""; // change to "" to inherit (works in IE)
- // or another family (e.g. "arial")
-var showasciiformulaonhover = true; // helps students learn ASCIIMath
-/*
-// Commented out by DRW -- not now used -- see DELIMITERS (twice) near the end
-var displaystyle = false; // puts limits above and below large operators
-var decimalsign = "."; // change to "," if you like, beware of `(1,2)`!
-var AMdelimiter1 = "`", AMescape1 = "\\\\`"; // can use other characters
-var AMdelimiter2 = "$", AMescape2 = "\\\\\\$", AMdelimiter2regexp = "\\$";
-var doubleblankmathdelimiter = false; // if true, x+1 is equal to `x+1`
- // for IE this works only in <!-- -->
-//var separatetokens;// has been removed (email me if this is a problem)
-*/
-var isIE = document.createElementNS==null;
-
-if (document.getElementById==null)
- alert("This webpage requires a recent browser such as\
-\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer")
-
-// all further global variables start with "AM"
-
-function AMcreateElementXHTML(t) {
- if (isIE) return document.createElement(t);
- else return document.createElementNS("http://www.w3.org/1999/xhtml",t);
-}
-
-function AMnoMathMLNote() {
- var nd = AMcreateElementXHTML("h3");
- nd.setAttribute("align","center")
- nd.appendChild(AMcreateElementXHTML("p"));
- nd.appendChild(document.createTextNode("To view the "));
- var an = AMcreateElementXHTML("a");
- an.appendChild(document.createTextNode("LaTeXMathML"));
- an.setAttribute("href","http://www.maths.nott.ac.uk/personal/drw/lm.html");
- nd.appendChild(an);
- nd.appendChild(document.createTextNode(" notation use Internet Explorer 6+"));
- an = AMcreateElementXHTML("a");
- an.appendChild(document.createTextNode("MathPlayer"));
- an.setAttribute("href","http://www.dessci.com/en/products/mathplayer/download.htm");
- nd.appendChild(an);
- nd.appendChild(document.createTextNode(" or Netscape/Mozilla/Firefox"));
- nd.appendChild(AMcreateElementXHTML("p"));
- return nd;
-}
-
-function AMisMathMLavailable() {
- if (navigator.appName.slice(0,8)=="Netscape")
- if (navigator.appVersion.slice(0,1)>="5") return null;
- else return AMnoMathMLNote();
- else if (navigator.appName.slice(0,9)=="Microsoft")
- try {
- var ActiveX = new ActiveXObject("MathPlayer.Factory.1");
- return null;
- } catch (e) {
- return AMnoMathMLNote();
- }
- else return AMnoMathMLNote();
-}
-
-// character lists for Mozilla/Netscape fonts
-var AMcal = [0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46];
-var AMfrk = [0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128];
-var AMbbb = [0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124];
-
-var CONST = 0, UNARY = 1, BINARY = 2, INFIX = 3, LEFTBRACKET = 4,
- RIGHTBRACKET = 5, SPACE = 6, UNDEROVER = 7, DEFINITION = 8,
- TEXT = 9, BIG = 10, LONG = 11, STRETCHY = 12, MATRIX = 13; // token types
-
-var AMsqrt = {input:"\\sqrt", tag:"msqrt", output:"sqrt", ttype:UNARY},
- AMroot = {input:"\\root", tag:"mroot", output:"root", ttype:BINARY},
- AMfrac = {input:"\\frac", tag:"mfrac", output:"/", ttype:BINARY},
- AMover = {input:"\\stackrel", tag:"mover", output:"stackrel", ttype:BINARY},
- AMatop = {input:"\\atop", tag:"mfrac", output:"", ttype:INFIX},
- AMchoose = {input:"\\choose", tag:"mfrac", output:"", ttype:INFIX},
- AMsub = {input:"_", tag:"msub", output:"_", ttype:INFIX},
- AMsup = {input:"^", tag:"msup", output:"^", ttype:INFIX},
- AMtext = {input:"\\mathrm", tag:"mtext", output:"text", ttype:TEXT},
- AMmbox = {input:"\\mbox", tag:"mtext", output:"mbox", ttype:TEXT};
-
-// Commented out by DRW to prevent 1/2 turning into a 2-line fraction
-// AMdiv = {input:"/", tag:"mfrac", output:"/", ttype:INFIX},
-// Commented out by DRW so that " prints literally in equations
-// AMquote = {input:"\"", tag:"mtext", output:"mbox", ttype:TEXT};
-
-var AMsymbols = [
-//Greek letters
-{input:"\\alpha", tag:"mi", output:"\u03B1", ttype:CONST},
-{input:"\\beta", tag:"mi", output:"\u03B2", ttype:CONST},
-{input:"\\gamma", tag:"mi", output:"\u03B3", ttype:CONST},
-{input:"\\delta", tag:"mi", output:"\u03B4", ttype:CONST},
-{input:"\\epsilon", tag:"mi", output:"\u03B5", ttype:CONST},
-{input:"\\varepsilon", tag:"mi", output:"\u025B", ttype:CONST},
-{input:"\\zeta", tag:"mi", output:"\u03B6", ttype:CONST},
-{input:"\\eta", tag:"mi", output:"\u03B7", ttype:CONST},
-{input:"\\theta", tag:"mi", output:"\u03B8", ttype:CONST},
-{input:"\\vartheta", tag:"mi", output:"\u03D1", ttype:CONST},
-{input:"\\iota", tag:"mi", output:"\u03B9", ttype:CONST},
-{input:"\\kappa", tag:"mi", output:"\u03BA", ttype:CONST},
-{input:"\\lambda", tag:"mi", output:"\u03BB", ttype:CONST},
-{input:"\\mu", tag:"mi", output:"\u03BC", ttype:CONST},
-{input:"\\nu", tag:"mi", output:"\u03BD", ttype:CONST},
-{input:"\\xi", tag:"mi", output:"\u03BE", ttype:CONST},
-{input:"\\pi", tag:"mi", output:"\u03C0", ttype:CONST},
-{input:"\\varpi", tag:"mi", output:"\u03D6", ttype:CONST},
-{input:"\\rho", tag:"mi", output:"\u03C1", ttype:CONST},
-{input:"\\varrho", tag:"mi", output:"\u03F1", ttype:CONST},
-{input:"\\varsigma", tag:"mi", output:"\u03C2", ttype:CONST},
-{input:"\\sigma", tag:"mi", output:"\u03C3", ttype:CONST},
-{input:"\\tau", tag:"mi", output:"\u03C4", ttype:CONST},
-{input:"\\upsilon", tag:"mi", output:"\u03C5", ttype:CONST},
-{input:"\\phi", tag:"mi", output:"\u03C6", ttype:CONST},
-{input:"\\varphi", tag:"mi", output:"\u03D5", ttype:CONST},
-{input:"\\chi", tag:"mi", output:"\u03C7", ttype:CONST},
-{input:"\\psi", tag:"mi", output:"\u03C8", ttype:CONST},
-{input:"\\omega", tag:"mi", output:"\u03C9", ttype:CONST},
-{input:"\\Gamma", tag:"mo", output:"\u0393", ttype:CONST},
-{input:"\\Delta", tag:"mo", output:"\u0394", ttype:CONST},
-{input:"\\Theta", tag:"mo", output:"\u0398", ttype:CONST},
-{input:"\\Lambda", tag:"mo", output:"\u039B", ttype:CONST},
-{input:"\\Xi", tag:"mo", output:"\u039E", ttype:CONST},
-{input:"\\Pi", tag:"mo", output:"\u03A0", ttype:CONST},
-{input:"\\Sigma", tag:"mo", output:"\u03A3", ttype:CONST},
-{input:"\\Upsilon", tag:"mo", output:"\u03A5", ttype:CONST},
-{input:"\\Phi", tag:"mo", output:"\u03A6", ttype:CONST},
-{input:"\\Psi", tag:"mo", output:"\u03A8", ttype:CONST},
-{input:"\\Omega", tag:"mo", output:"\u03A9", ttype:CONST},
-
-//fractions
-{input:"\\frac12", tag:"mo", output:"\u00BD", ttype:CONST},
-{input:"\\frac14", tag:"mo", output:"\u00BC", ttype:CONST},
-{input:"\\frac34", tag:"mo", output:"\u00BE", ttype:CONST},
-{input:"\\frac13", tag:"mo", output:"\u2153", ttype:CONST},
-{input:"\\frac23", tag:"mo", output:"\u2154", ttype:CONST},
-{input:"\\frac15", tag:"mo", output:"\u2155", ttype:CONST},
-{input:"\\frac25", tag:"mo", output:"\u2156", ttype:CONST},
-{input:"\\frac35", tag:"mo", output:"\u2157", ttype:CONST},
-{input:"\\frac45", tag:"mo", output:"\u2158", ttype:CONST},
-{input:"\\frac16", tag:"mo", output:"\u2159", ttype:CONST},
-{input:"\\frac56", tag:"mo", output:"\u215A", ttype:CONST},
-{input:"\\frac18", tag:"mo", output:"\u215B", ttype:CONST},
-{input:"\\frac38", tag:"mo", output:"\u215C", ttype:CONST},
-{input:"\\frac58", tag:"mo", output:"\u215D", ttype:CONST},
-{input:"\\frac78", tag:"mo", output:"\u215E", ttype:CONST},
-
-//binary operation symbols
-{input:"\\pm", tag:"mo", output:"\u00B1", ttype:CONST},
-{input:"\\mp", tag:"mo", output:"\u2213", ttype:CONST},
-{input:"\\triangleleft",tag:"mo", output:"\u22B2", ttype:CONST},
-{input:"\\triangleright",tag:"mo",output:"\u22B3", ttype:CONST},
-{input:"\\cdot", tag:"mo", output:"\u22C5", ttype:CONST},
-{input:"\\star", tag:"mo", output:"\u22C6", ttype:CONST},
-{input:"\\ast", tag:"mo", output:"\u002A", ttype:CONST},
-{input:"\\times", tag:"mo", output:"\u00D7", ttype:CONST},
-{input:"\\div", tag:"mo", output:"\u00F7", ttype:CONST},
-{input:"\\circ", tag:"mo", output:"\u2218", ttype:CONST},
-//{input:"\\bullet", tag:"mo", output:"\u2219", ttype:CONST},
-{input:"\\bullet", tag:"mo", output:"\u2022", ttype:CONST},
-{input:"\\oplus", tag:"mo", output:"\u2295", ttype:CONST},
-{input:"\\ominus", tag:"mo", output:"\u2296", ttype:CONST},
-{input:"\\otimes", tag:"mo", output:"\u2297", ttype:CONST},
-{input:"\\bigcirc", tag:"mo", output:"\u25CB", ttype:CONST},
-{input:"\\oslash", tag:"mo", output:"\u2298", ttype:CONST},
-{input:"\\odot", tag:"mo", output:"\u2299", ttype:CONST},
-{input:"\\land", tag:"mo", output:"\u2227", ttype:CONST},
-{input:"\\wedge", tag:"mo", output:"\u2227", ttype:CONST},
-{input:"\\lor", tag:"mo", output:"\u2228", ttype:CONST},
-{input:"\\vee", tag:"mo", output:"\u2228", ttype:CONST},
-{input:"\\cap", tag:"mo", output:"\u2229", ttype:CONST},
-{input:"\\cup", tag:"mo", output:"\u222A", ttype:CONST},
-{input:"\\sqcap", tag:"mo", output:"\u2293", ttype:CONST},
-{input:"\\sqcup", tag:"mo", output:"\u2294", ttype:CONST},
-{input:"\\uplus", tag:"mo", output:"\u228E", ttype:CONST},
-{input:"\\amalg", tag:"mo", output:"\u2210", ttype:CONST},
-{input:"\\bigtriangleup",tag:"mo",output:"\u25B3", ttype:CONST},
-{input:"\\bigtriangledown",tag:"mo",output:"\u25BD", ttype:CONST},
-{input:"\\dag", tag:"mo", output:"\u2020", ttype:CONST},
-{input:"\\dagger", tag:"mo", output:"\u2020", ttype:CONST},
-{input:"\\ddag", tag:"mo", output:"\u2021", ttype:CONST},
-{input:"\\ddagger", tag:"mo", output:"\u2021", ttype:CONST},
-{input:"\\lhd", tag:"mo", output:"\u22B2", ttype:CONST},
-{input:"\\rhd", tag:"mo", output:"\u22B3", ttype:CONST},
-{input:"\\unlhd", tag:"mo", output:"\u22B4", ttype:CONST},
-{input:"\\unrhd", tag:"mo", output:"\u22B5", ttype:CONST},
-
-
-//BIG Operators
-{input:"\\sum", tag:"mo", output:"\u2211", ttype:UNDEROVER},
-{input:"\\prod", tag:"mo", output:"\u220F", ttype:UNDEROVER},
-{input:"\\bigcap", tag:"mo", output:"\u22C2", ttype:UNDEROVER},
-{input:"\\bigcup", tag:"mo", output:"\u22C3", ttype:UNDEROVER},
-{input:"\\bigwedge", tag:"mo", output:"\u22C0", ttype:UNDEROVER},
-{input:"\\bigvee", tag:"mo", output:"\u22C1", ttype:UNDEROVER},
-{input:"\\bigsqcap", tag:"mo", output:"\u2A05", ttype:UNDEROVER},
-{input:"\\bigsqcup", tag:"mo", output:"\u2A06", ttype:UNDEROVER},
-{input:"\\coprod", tag:"mo", output:"\u2210", ttype:UNDEROVER},
-{input:"\\bigoplus", tag:"mo", output:"\u2A01", ttype:UNDEROVER},
-{input:"\\bigotimes", tag:"mo", output:"\u2A02", ttype:UNDEROVER},
-{input:"\\bigodot", tag:"mo", output:"\u2A00", ttype:UNDEROVER},
-{input:"\\biguplus", tag:"mo", output:"\u2A04", ttype:UNDEROVER},
-{input:"\\int", tag:"mo", output:"\u222B", ttype:CONST},
-{input:"\\oint", tag:"mo", output:"\u222E", ttype:CONST},
-
-//binary relation symbols
-{input:":=", tag:"mo", output:":=", ttype:CONST},
-{input:"\\lt", tag:"mo", output:"<", ttype:CONST},
-{input:"\\gt", tag:"mo", output:">", ttype:CONST},
-{input:"\\ne", tag:"mo", output:"\u2260", ttype:CONST},
-{input:"\\neq", tag:"mo", output:"\u2260", ttype:CONST},
-{input:"\\le", tag:"mo", output:"\u2264", ttype:CONST},
-{input:"\\leq", tag:"mo", output:"\u2264", ttype:CONST},
-{input:"\\leqslant", tag:"mo", output:"\u2264", ttype:CONST},
-{input:"\\ge", tag:"mo", output:"\u2265", ttype:CONST},
-{input:"\\geq", tag:"mo", output:"\u2265", ttype:CONST},
-{input:"\\geqslant", tag:"mo", output:"\u2265", ttype:CONST},
-{input:"\\equiv", tag:"mo", output:"\u2261", ttype:CONST},
-{input:"\\ll", tag:"mo", output:"\u226A", ttype:CONST},
-{input:"\\gg", tag:"mo", output:"\u226B", ttype:CONST},
-{input:"\\doteq", tag:"mo", output:"\u2250", ttype:CONST},
-{input:"\\prec", tag:"mo", output:"\u227A", ttype:CONST},
-{input:"\\succ", tag:"mo", output:"\u227B", ttype:CONST},
-{input:"\\preceq", tag:"mo", output:"\u227C", ttype:CONST},
-{input:"\\succeq", tag:"mo", output:"\u227D", ttype:CONST},
-{input:"\\subset", tag:"mo", output:"\u2282", ttype:CONST},
-{input:"\\supset", tag:"mo", output:"\u2283", ttype:CONST},
-{input:"\\subseteq", tag:"mo", output:"\u2286", ttype:CONST},
-{input:"\\supseteq", tag:"mo", output:"\u2287", ttype:CONST},
-{input:"\\sqsubset", tag:"mo", output:"\u228F", ttype:CONST},
-{input:"\\sqsupset", tag:"mo", output:"\u2290", ttype:CONST},
-{input:"\\sqsubseteq", tag:"mo", output:"\u2291", ttype:CONST},
-{input:"\\sqsupseteq", tag:"mo", output:"\u2292", ttype:CONST},
-{input:"\\sim", tag:"mo", output:"\u223C", ttype:CONST},
-{input:"\\simeq", tag:"mo", output:"\u2243", ttype:CONST},
-{input:"\\approx", tag:"mo", output:"\u2248", ttype:CONST},
-{input:"\\cong", tag:"mo", output:"\u2245", ttype:CONST},
-{input:"\\Join", tag:"mo", output:"\u22C8", ttype:CONST},
-{input:"\\bowtie", tag:"mo", output:"\u22C8", ttype:CONST},
-{input:"\\in", tag:"mo", output:"\u2208", ttype:CONST},
-{input:"\\ni", tag:"mo", output:"\u220B", ttype:CONST},
-{input:"\\owns", tag:"mo", output:"\u220B", ttype:CONST},
-{input:"\\propto", tag:"mo", output:"\u221D", ttype:CONST},
-{input:"\\vdash", tag:"mo", output:"\u22A2", ttype:CONST},
-{input:"\\dashv", tag:"mo", output:"\u22A3", ttype:CONST},
-{input:"\\models", tag:"mo", output:"\u22A8", ttype:CONST},
-{input:"\\perp", tag:"mo", output:"\u22A5", ttype:CONST},
-{input:"\\smile", tag:"mo", output:"\u2323", ttype:CONST},
-{input:"\\frown", tag:"mo", output:"\u2322", ttype:CONST},
-{input:"\\asymp", tag:"mo", output:"\u224D", ttype:CONST},
-{input:"\\notin", tag:"mo", output:"\u2209", ttype:CONST},
-
-//matrices
-{input:"\\begin{eqnarray}", output:"X", ttype:MATRIX, invisible:true},
-{input:"\\begin{array}", output:"X", ttype:MATRIX, invisible:true},
-{input:"\\\\", output:"}&{", ttype:DEFINITION},
-{input:"\\end{eqnarray}", output:"}}", ttype:DEFINITION},
-{input:"\\end{array}", output:"}}", ttype:DEFINITION},
-
-//grouping and literal brackets -- ieval is for IE
-{input:"\\big", tag:"mo", output:"X", atval:"1.2", ieval:"2.2", ttype:BIG},
-{input:"\\Big", tag:"mo", output:"X", atval:"1.6", ieval:"2.6", ttype:BIG},
-{input:"\\bigg", tag:"mo", output:"X", atval:"2.2", ieval:"3.2", ttype:BIG},
-{input:"\\Bigg", tag:"mo", output:"X", atval:"2.9", ieval:"3.9", ttype:BIG},
-{input:"\\left", tag:"mo", output:"X", ttype:LEFTBRACKET},
-{input:"\\right", tag:"mo", output:"X", ttype:RIGHTBRACKET},
-{input:"{", output:"{", ttype:LEFTBRACKET, invisible:true},
-{input:"}", output:"}", ttype:RIGHTBRACKET, invisible:true},
-
-{input:"(", tag:"mo", output:"(", atval:"1", ttype:STRETCHY},
-{input:"[", tag:"mo", output:"[", atval:"1", ttype:STRETCHY},
-{input:"\\lbrack", tag:"mo", output:"[", atval:"1", ttype:STRETCHY},
-{input:"\\{", tag:"mo", output:"{", atval:"1", ttype:STRETCHY},
-{input:"\\lbrace", tag:"mo", output:"{", atval:"1", ttype:STRETCHY},
-{input:"\\langle", tag:"mo", output:"\u2329", atval:"1", ttype:STRETCHY},
-{input:"\\lfloor", tag:"mo", output:"\u230A", atval:"1", ttype:STRETCHY},
-{input:"\\lceil", tag:"mo", output:"\u2308", atval:"1", ttype:STRETCHY},
-
-// rtag:"mi" causes space to be inserted before a following sin, cos, etc.
-// (see function AMparseExpr() )
-{input:")", tag:"mo",output:")", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"]", tag:"mo",output:"]", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"\\rbrack",tag:"mo",output:"]", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"\\}", tag:"mo",output:"}", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"\\rbrace",tag:"mo",output:"}", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"\\rangle",tag:"mo",output:"\u232A", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"\\rfloor",tag:"mo",output:"\u230B", rtag:"mi",atval:"1",ttype:STRETCHY},
-{input:"\\rceil", tag:"mo",output:"\u2309", rtag:"mi",atval:"1",ttype:STRETCHY},
-
-// "|", "\\|", "\\vert" and "\\Vert" modified later: lspace = rspace = 0em
-{input:"|", tag:"mo", output:"\u2223", atval:"1", ttype:STRETCHY},
-{input:"\\|", tag:"mo", output:"\u2225", atval:"1", ttype:STRETCHY},
-{input:"\\vert", tag:"mo", output:"\u2223", atval:"1", ttype:STRETCHY},
-{input:"\\Vert", tag:"mo", output:"\u2225", atval:"1", ttype:STRETCHY},
-{input:"\\mid", tag:"mo", output:"\u2223", atval:"1", ttype:STRETCHY},
-{input:"\\parallel", tag:"mo", output:"\u2225", atval:"1", ttype:STRETCHY},
-{input:"/", tag:"mo", output:"/", atval:"1.01", ttype:STRETCHY},
-{input:"\\backslash", tag:"mo", output:"\u2216", atval:"1", ttype:STRETCHY},
-{input:"\\setminus", tag:"mo", output:"\\", ttype:CONST},
-
-//miscellaneous symbols
-{input:"\\!", tag:"mspace", atname:"width", atval:"-0.167em", ttype:SPACE},
-{input:"\\,", tag:"mspace", atname:"width", atval:"0.167em", ttype:SPACE},
-{input:"\\>", tag:"mspace", atname:"width", atval:"0.222em", ttype:SPACE},
-{input:"\\:", tag:"mspace", atname:"width", atval:"0.222em", ttype:SPACE},
-{input:"\\;", tag:"mspace", atname:"width", atval:"0.278em", ttype:SPACE},
-{input:"~", tag:"mspace", atname:"width", atval:"0.333em", ttype:SPACE},
-{input:"\\quad", tag:"mspace", atname:"width", atval:"1em", ttype:SPACE},
-{input:"\\qquad", tag:"mspace", atname:"width", atval:"2em", ttype:SPACE},
-//{input:"{}", tag:"mo", output:"\u200B", ttype:CONST}, // zero-width
-{input:"\\prime", tag:"mo", output:"\u2032", ttype:CONST},
-{input:"'", tag:"mo", output:"\u02B9", ttype:CONST},
-{input:"''", tag:"mo", output:"\u02BA", ttype:CONST},
-{input:"'''", tag:"mo", output:"\u2034", ttype:CONST},
-{input:"''''", tag:"mo", output:"\u2057", ttype:CONST},
-{input:"\\ldots", tag:"mo", output:"\u2026", ttype:CONST},
-{input:"\\cdots", tag:"mo", output:"\u22EF", ttype:CONST},
-{input:"\\vdots", tag:"mo", output:"\u22EE", ttype:CONST},
-{input:"\\ddots", tag:"mo", output:"\u22F1", ttype:CONST},
-{input:"\\forall", tag:"mo", output:"\u2200", ttype:CONST},
-{input:"\\exists", tag:"mo", output:"\u2203", ttype:CONST},
-{input:"\\Re", tag:"mo", output:"\u211C", ttype:CONST},
-{input:"\\Im", tag:"mo", output:"\u2111", ttype:CONST},
-{input:"\\aleph", tag:"mo", output:"\u2135", ttype:CONST},
-{input:"\\hbar", tag:"mo", output:"\u210F", ttype:CONST},
-{input:"\\ell", tag:"mo", output:"\u2113", ttype:CONST},
-{input:"\\wp", tag:"mo", output:"\u2118", ttype:CONST},
-{input:"\\emptyset", tag:"mo", output:"\u2205", ttype:CONST},
-{input:"\\infty", tag:"mo", output:"\u221E", ttype:CONST},
-{input:"\\surd", tag:"mo", output:"\\sqrt{}", ttype:DEFINITION},
-{input:"\\partial", tag:"mo", output:"\u2202", ttype:CONST},
-{input:"\\nabla", tag:"mo", output:"\u2207", ttype:CONST},
-{input:"\\triangle", tag:"mo", output:"\u25B3", ttype:CONST},
-{input:"\\therefore", tag:"mo", output:"\u2234", ttype:CONST},
-{input:"\\angle", tag:"mo", output:"\u2220", ttype:CONST},
-//{input:"\\\\ ", tag:"mo", output:"\u00A0", ttype:CONST},
-{input:"\\diamond", tag:"mo", output:"\u22C4", ttype:CONST},
-//{input:"\\Diamond", tag:"mo", output:"\u25CA", ttype:CONST},
-{input:"\\Diamond", tag:"mo", output:"\u25C7", ttype:CONST},
-{input:"\\neg", tag:"mo", output:"\u00AC", ttype:CONST},
-{input:"\\lnot", tag:"mo", output:"\u00AC", ttype:CONST},
-{input:"\\bot", tag:"mo", output:"\u22A5", ttype:CONST},
-{input:"\\top", tag:"mo", output:"\u22A4", ttype:CONST},
-{input:"\\square", tag:"mo", output:"\u25AB", ttype:CONST},
-{input:"\\Box", tag:"mo", output:"\u25A1", ttype:CONST},
-{input:"\\wr", tag:"mo", output:"\u2240", ttype:CONST},
-
-//standard functions
-//Note UNDEROVER *must* have tag:"mo" to work properly
-{input:"\\arccos", tag:"mi", output:"arccos", ttype:UNARY, func:true},
-{input:"\\arcsin", tag:"mi", output:"arcsin", ttype:UNARY, func:true},
-{input:"\\arctan", tag:"mi", output:"arctan", ttype:UNARY, func:true},
-{input:"\\arg", tag:"mi", output:"arg", ttype:UNARY, func:true},
-{input:"\\cos", tag:"mi", output:"cos", ttype:UNARY, func:true},
-{input:"\\cosh", tag:"mi", output:"cosh", ttype:UNARY, func:true},
-{input:"\\cot", tag:"mi", output:"cot", ttype:UNARY, func:true},
-{input:"\\coth", tag:"mi", output:"coth", ttype:UNARY, func:true},
-{input:"\\csc", tag:"mi", output:"csc", ttype:UNARY, func:true},
-{input:"\\deg", tag:"mi", output:"deg", ttype:UNARY, func:true},
-{input:"\\det", tag:"mi", output:"det", ttype:UNARY, func:true},
-{input:"\\dim", tag:"mi", output:"dim", ttype:UNARY, func:true}, //CONST?
-{input:"\\exp", tag:"mi", output:"exp", ttype:UNARY, func:true},
-{input:"\\gcd", tag:"mi", output:"gcd", ttype:UNARY, func:true}, //CONST?
-{input:"\\hom", tag:"mi", output:"hom", ttype:UNARY, func:true},
-{input:"\\inf", tag:"mo", output:"inf", ttype:UNDEROVER},
-{input:"\\ker", tag:"mi", output:"ker", ttype:UNARY, func:true},
-{input:"\\lg", tag:"mi", output:"lg", ttype:UNARY, func:true},
-{input:"\\lim", tag:"mo", output:"lim", ttype:UNDEROVER},
-{input:"\\liminf", tag:"mo", output:"liminf", ttype:UNDEROVER},
-{input:"\\limsup", tag:"mo", output:"limsup", ttype:UNDEROVER},
-{input:"\\ln", tag:"mi", output:"ln", ttype:UNARY, func:true},
-{input:"\\log", tag:"mi", output:"log", ttype:UNARY, func:true},
-{input:"\\max", tag:"mo", output:"max", ttype:UNDEROVER},
-{input:"\\min", tag:"mo", output:"min", ttype:UNDEROVER},
-{input:"\\Pr", tag:"mi", output:"Pr", ttype:UNARY, func:true},
-{input:"\\sec", tag:"mi", output:"sec", ttype:UNARY, func:true},
-{input:"\\sin", tag:"mi", output:"sin", ttype:UNARY, func:true},
-{input:"\\sinh", tag:"mi", output:"sinh", ttype:UNARY, func:true},
-{input:"\\sup", tag:"mo", output:"sup", ttype:UNDEROVER},
-{input:"\\tan", tag:"mi", output:"tan", ttype:UNARY, func:true},
-{input:"\\tanh", tag:"mi", output:"tanh", ttype:UNARY, func:true},
-
-//arrows
-{input:"\\gets", tag:"mo", output:"\u2190", ttype:CONST},
-{input:"\\leftarrow", tag:"mo", output:"\u2190", ttype:CONST},
-{input:"\\to", tag:"mo", output:"\u2192", ttype:CONST},
-{input:"\\rightarrow", tag:"mo", output:"\u2192", ttype:CONST},
-{input:"\\leftrightarrow", tag:"mo", output:"\u2194", ttype:CONST},
-{input:"\\uparrow", tag:"mo", output:"\u2191", ttype:CONST},
-{input:"\\downarrow", tag:"mo", output:"\u2193", ttype:CONST},
-{input:"\\updownarrow", tag:"mo", output:"\u2195", ttype:CONST},
-{input:"\\Leftarrow", tag:"mo", output:"\u21D0", ttype:CONST},
-{input:"\\Rightarrow", tag:"mo", output:"\u21D2", ttype:CONST},
-{input:"\\Leftrightarrow", tag:"mo", output:"\u21D4", ttype:CONST},
-{input:"\\iff", tag:"mo", output:"~\\Longleftrightarrow~", ttype:DEFINITION},
-{input:"\\Uparrow", tag:"mo", output:"\u21D1", ttype:CONST},
-{input:"\\Downarrow", tag:"mo", output:"\u21D3", ttype:CONST},
-{input:"\\Updownarrow", tag:"mo", output:"\u21D5", ttype:CONST},
-{input:"\\mapsto", tag:"mo", output:"\u21A6", ttype:CONST},
-{input:"\\longleftarrow", tag:"mo", output:"\u2190", ttype:LONG},
-{input:"\\longrightarrow", tag:"mo", output:"\u2192", ttype:LONG},
-{input:"\\longleftrightarrow", tag:"mo", output:"\u2194", ttype:LONG},
-{input:"\\Longleftarrow", tag:"mo", output:"\u21D0", ttype:LONG},
-{input:"\\Longrightarrow", tag:"mo", output:"\u21D2", ttype:LONG},
-{input:"\\Longleftrightarrow", tag:"mo", output:"\u21D4", ttype:LONG},
-{input:"\\longmapsto", tag:"mo", output:"\u21A6", ttype:CONST},
- // disaster if LONG
-
-//commands with argument
-AMsqrt, AMroot, AMfrac, AMover, AMsub, AMsup, AMtext, AMmbox, AMatop, AMchoose,
-//AMdiv, AMquote,
-
-//diacritical marks
-{input:"\\acute", tag:"mover", output:"\u00B4", ttype:UNARY, acc:true},
-//{input:"\\acute", tag:"mover", output:"\u0317", ttype:UNARY, acc:true},
-//{input:"\\acute", tag:"mover", output:"\u0301", ttype:UNARY, acc:true},
-//{input:"\\grave", tag:"mover", output:"\u0300", ttype:UNARY, acc:true},
-//{input:"\\grave", tag:"mover", output:"\u0316", ttype:UNARY, acc:true},
-{input:"\\grave", tag:"mover", output:"\u0060", ttype:UNARY, acc:true},
-{input:"\\breve", tag:"mover", output:"\u02D8", ttype:UNARY, acc:true},
-{input:"\\check", tag:"mover", output:"\u02C7", ttype:UNARY, acc:true},
-{input:"\\dot", tag:"mover", output:".", ttype:UNARY, acc:true},
-{input:"\\ddot", tag:"mover", output:"..", ttype:UNARY, acc:true},
-//{input:"\\ddot", tag:"mover", output:"\u00A8", ttype:UNARY, acc:true},
-{input:"\\mathring", tag:"mover", output:"\u00B0", ttype:UNARY, acc:true},
-{input:"\\vec", tag:"mover", output:"\u20D7", ttype:UNARY, acc:true},
-{input:"\\overrightarrow",tag:"mover",output:"\u20D7", ttype:UNARY, acc:true},
-{input:"\\overleftarrow",tag:"mover", output:"\u20D6", ttype:UNARY, acc:true},
-{input:"\\hat", tag:"mover", output:"\u005E", ttype:UNARY, acc:true},
-{input:"\\widehat", tag:"mover", output:"\u0302", ttype:UNARY, acc:true},
-{input:"\\tilde", tag:"mover", output:"~", ttype:UNARY, acc:true},
-//{input:"\\tilde", tag:"mover", output:"\u0303", ttype:UNARY, acc:true},
-{input:"\\widetilde", tag:"mover", output:"\u02DC", ttype:UNARY, acc:true},
-{input:"\\bar", tag:"mover", output:"\u203E", ttype:UNARY, acc:true},
-{input:"\\overbrace", tag:"mover", output:"\u23B4", ttype:UNARY, acc:true},
-{input:"\\overline", tag:"mover", output:"\u00AF", ttype:UNARY, acc:true},
-{input:"\\underbrace", tag:"munder", output:"\u23B5", ttype:UNARY, acc:true},
-{input:"\\underline", tag:"munder", output:"\u00AF", ttype:UNARY, acc:true},
-//{input:"underline", tag:"munder", output:"\u0332", ttype:UNARY, acc:true},
-
-//typestyles and fonts
-{input:"\\displaystyle",tag:"mstyle",atname:"displaystyle",atval:"true", ttype:UNARY},
-{input:"\\textstyle",tag:"mstyle",atname:"displaystyle",atval:"false", ttype:UNARY},
-{input:"\\scriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"1", ttype:UNARY},
-{input:"\\scriptscriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"2", ttype:UNARY},
-{input:"\\textrm", tag:"mstyle", output:"\\mathrm", ttype: DEFINITION},
-{input:"\\mathbf", tag:"mstyle", atname:"mathvariant", atval:"bold", ttype:UNARY},
-{input:"\\textbf", tag:"mstyle", atname:"mathvariant", atval:"bold", ttype:UNARY},
-{input:"\\mathit", tag:"mstyle", atname:"mathvariant", atval:"italic", ttype:UNARY},
-{input:"\\textit", tag:"mstyle", atname:"mathvariant", atval:"italic", ttype:UNARY},
-{input:"\\mathtt", tag:"mstyle", atname:"mathvariant", atval:"monospace", ttype:UNARY},
-{input:"\\texttt", tag:"mstyle", atname:"mathvariant", atval:"monospace", ttype:UNARY},
-{input:"\\mathsf", tag:"mstyle", atname:"mathvariant", atval:"sans-serif", ttype:UNARY},
-{input:"\\mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", ttype:UNARY, codes:AMbbb},
-{input:"\\mathcal",tag:"mstyle", atname:"mathvariant", atval:"script", ttype:UNARY, codes:AMcal},
-{input:"\\mathfrak",tag:"mstyle",atname:"mathvariant", atval:"fraktur",ttype:UNARY, codes:AMfrk}
-];
-
-function compareNames(s1,s2) {
- if (s1.input > s2.input) return 1
- else return -1;
-}
-
-var AMnames = []; //list of input symbols
-
-function AMinitSymbols() {
- AMsymbols.sort(compareNames);
- for (i=0; i<AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;
-}
-
-var AMmathml = "http://www.w3.org/1998/Math/MathML";
-
-function AMcreateElementMathML(t) {
- if (isIE) return document.createElement("m:"+t);
- else return document.createElementNS(AMmathml,t);
-}
-
-function AMcreateMmlNode(t,frag) {
-// var node = AMcreateElementMathML(name);
- if (isIE) var node = document.createElement("m:"+t);
- else var node = document.createElementNS(AMmathml,t);
- node.appendChild(frag);
- return node;
-}
-
-function newcommand(oldstr,newstr) {
- AMsymbols = AMsymbols.concat([{input:oldstr, tag:"mo", output:newstr,
- ttype:DEFINITION}]);
-}
-
-function AMremoveCharsAndBlanks(str,n) {
-//remove n characters and any following blanks
- var st;
- st = str.slice(n);
- for (var i=0; i<st.length && st.charCodeAt(i)<=32; i=i+1);
- return st.slice(i);
-}
-
-function AMposition(arr, str, n) {
-// return position >=n where str appears or would be inserted
-// assumes arr is sorted
- if (n==0) {
- var h,m;
- n = -1;
- h = arr.length;
- while (n+1<h) {
- m = (n+h) >> 1;
- if (arr[m]<str) n = m; else h = m;
- }
- return h;
- } else
- for (var i=n; i<arr.length && arr[i]<str; i++);
- return i; // i=arr.length || arr[i]>=str
-}
-
-function AMgetSymbol(str) {
-//return maximal initial substring of str that appears in names
-//return null if there is none
- var k = 0; //new pos
- var j = 0; //old pos
- var mk; //match pos
- var st;
- var tagst;
- var match = "";
- var more = true;
- for (var i=1; i<=str.length && more; i++) {
- st = str.slice(0,i); //initial substring of length i
- j = k;
- k = AMposition(AMnames, st, j);
- if (k<AMnames.length && str.slice(0,AMnames[k].length)==AMnames[k]){
- match = AMnames[k];
- mk = k;
- i = match.length;
- }
- more = k<AMnames.length && str.slice(0,AMnames[k].length)>=AMnames[k];
- }
- AMpreviousSymbol=AMcurrentSymbol;
- if (match!=""){
- AMcurrentSymbol=AMsymbols[mk].ttype;
- return AMsymbols[mk];
- }
- AMcurrentSymbol=CONST;
- k = 1;
- st = str.slice(0,1); //take 1 character
- if ("0"<=st && st<="9") tagst = "mn";
- else tagst = (("A">st || st>"Z") && ("a">st || st>"z")?"mo":"mi");
-/*
-// Commented out by DRW (not fully understood, but probably to do with
-// use of "/" as an INFIX version of "\\frac", which we don't want):
-//}
-//if (st=="-" && AMpreviousSymbol==INFIX) {
-// AMcurrentSymbol = INFIX; //trick "/" into recognizing "-" on second parse
-// return {input:st, tag:tagst, output:st, ttype:UNARY, func:true};
-//}
-*/
- return {input:st, tag:tagst, output:st, ttype:CONST};
-}
-
-
-/*Parsing ASCII math expressions with the following grammar
-v ::= [A-Za-z] | greek letters | numbers | other constant symbols
-u ::= sqrt | text | bb | other unary symbols for font commands
-b ::= frac | root | stackrel binary symbols
-l ::= { | \left left brackets
-r ::= } | \right right brackets
-S ::= v | lEr | uS | bSS Simple expression
-I ::= S_S | S^S | S_S^S | S Intermediate expression
-E ::= IE | I/I Expression
-Each terminal symbol is translated into a corresponding mathml node.*/
-
-var AMpreviousSymbol,AMcurrentSymbol;
-
-function AMparseSexpr(str) { //parses str and returns [node,tailstr,(node)tag]
- var symbol, node, result, result2, i, st,// rightvert = false,
- newFrag = document.createDocumentFragment();
- str = AMremoveCharsAndBlanks(str,0);
- symbol = AMgetSymbol(str); //either a token or a bracket or empty
- if (symbol == null || symbol.ttype == RIGHTBRACKET)
- return [null,str,null];
- if (symbol.ttype == DEFINITION) {
- str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length);
- symbol = AMgetSymbol(str);
- if (symbol == null || symbol.ttype == RIGHTBRACKET)
- return [null,str,null];
- }
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- switch (symbol.ttype) {
- case SPACE:
- node = AMcreateElementMathML(symbol.tag);
- node.setAttribute(symbol.atname,symbol.atval);
- return [node,str,symbol.tag];
- case UNDEROVER:
- if (isIE) {
- if (symbol.input.substr(0,4) == "\\big") { // botch for missing symbols
- str = "\\"+symbol.input.substr(4)+str; // make \bigcup = \cup etc.
- symbol = AMgetSymbol(str);
- symbol.ttype = UNDEROVER;
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- }
- }
- return [AMcreateMmlNode(symbol.tag,
- document.createTextNode(symbol.output)),str,symbol.tag];
- case CONST:
- var output = symbol.output;
- if (isIE) {
- if (symbol.input == "'")
- output = "\u2032";
- else if (symbol.input == "''")
- output = "\u2033";
- else if (symbol.input == "'''")
- output = "\u2033\u2032";
- else if (symbol.input == "''''")
- output = "\u2033\u2033";
- else if (symbol.input == "\\square")
- output = "\u25A1"; // same as \Box
- else if (symbol.input.substr(0,5) == "\\frac") {
- // botch for missing fractions
- var denom = symbol.input.substr(6,1);
- if (denom == "5" || denom == "6") {
- str = symbol.input.replace(/\\frac/,"\\frac ")+str;
- return [node,str,symbol.tag];
- }
- }
- }
- node = AMcreateMmlNode(symbol.tag,document.createTextNode(output));
- return [node,str,symbol.tag];
- case LONG: // added by DRW
- node = AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));
- node.setAttribute("minsize","1.5");
- node.setAttribute("maxsize","1.5");
- node = AMcreateMmlNode("mover",node);
- node.appendChild(AMcreateElementMathML("mspace"));
- return [node,str,symbol.tag];
- case STRETCHY: // added by DRW
- if (isIE && symbol.input == "\\backslash")
- symbol.output = "\\"; // doesn't expand, but then nor does "\u2216"
- node = AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));
- if (symbol.input == "|" || symbol.input == "\\vert" ||
- symbol.input == "\\|" || symbol.input == "\\Vert") {
- node.setAttribute("lspace","0em");
- node.setAttribute("rspace","0em");
- }
- node.setAttribute("maxsize",symbol.atval); // don't allow to stretch here
- if (symbol.rtag != null)
- return [node,str,symbol.rtag];
- else
- return [node,str,symbol.tag];
- case BIG: // added by DRW
- var atval = symbol.atval;
- if (isIE)
- atval = symbol.ieval;
- symbol = AMgetSymbol(str);
- if (symbol == null)
- return [null,str,null];
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- node = AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));
- if (isIE) { // to get brackets to expand
- var space = AMcreateElementMathML("mspace");
- space.setAttribute("height",atval+"ex");
- node = AMcreateMmlNode("mrow",node);
- node.appendChild(space);
- } else { // ignored in IE
- node.setAttribute("minsize",atval);
- node.setAttribute("maxsize",atval);
- }
- return [node,str,symbol.tag];
- case LEFTBRACKET: //read (expr+)
- if (symbol.input == "\\left") { // left what?
- symbol = AMgetSymbol(str);
- if (symbol != null) {
- if (symbol.input == ".")
- symbol.invisible = true;
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- }
- }
- result = AMparseExpr(str,true,false);
- if (symbol==null ||
- (typeof symbol.invisible == "boolean" && symbol.invisible))
- node = AMcreateMmlNode("mrow",result[0]);
- else {
- node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
- node = AMcreateMmlNode("mrow",node);
- node.appendChild(result[0]);
- }
- return [node,result[1],result[2]];
- case MATRIX: //read (expr+)
- if (symbol.input == "\\begin{array}") {
- var mask = "";
- symbol = AMgetSymbol(str);
- str = AMremoveCharsAndBlanks(str,0);
- if (symbol == null)
- mask = "l";
- else {
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- if (symbol.input != "{")
- mask = "l";
- else do {
- symbol = AMgetSymbol(str);
- if (symbol != null) {
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- if (symbol.input != "}")
- mask = mask+symbol.input;
- }
- } while (symbol != null && symbol.input != "" && symbol.input != "}");
- }
- result = AMparseExpr("{"+str,true,true);
-// if (result[0]==null) return [AMcreateMmlNode("mo",
-// document.createTextNode(symbol.input)),str];
- node = AMcreateMmlNode("mtable",result[0]);
- mask = mask.replace(/l/g,"left ");
- mask = mask.replace(/r/g,"right ");
- mask = mask.replace(/c/g,"center ");
- node.setAttribute("columnalign",mask);
- node.setAttribute("displaystyle","false");
- if (isIE)
- return [node,result[1],null];
-// trying to get a *little* bit of space around the array
-// (IE already includes it)
- var lspace = AMcreateElementMathML("mspace");
- lspace.setAttribute("width","0.167em");
- var rspace = AMcreateElementMathML("mspace");
- rspace.setAttribute("width","0.167em");
- var node1 = AMcreateMmlNode("mrow",lspace);
- node1.appendChild(node);
- node1.appendChild(rspace);
- return [node1,result[1],null];
- } else { // eqnarray
- result = AMparseExpr("{"+str,true,true);
- node = AMcreateMmlNode("mtable",result[0]);
- if (isIE)
- node.setAttribute("columnspacing","0.25em"); // best in practice?
- else
- node.setAttribute("columnspacing","0.167em"); // correct (but ignored?)
- node.setAttribute("columnalign","right center left");
- node.setAttribute("displaystyle","true");
- node = AMcreateMmlNode("mrow",node);
- return [node,result[1],null];
- }
- case TEXT:
- if (str.charAt(0)=="{") i=str.indexOf("}");
- else i = 0;
- if (i==-1)
- i = str.length;
- st = str.slice(1,i);
- if (st.charAt(0) == " ") {
- node = AMcreateElementMathML("mspace");
- node.setAttribute("width","0.33em"); // was 1ex
- newFrag.appendChild(node);
- }
- newFrag.appendChild(
- AMcreateMmlNode(symbol.tag,document.createTextNode(st)));
- if (st.charAt(st.length-1) == " ") {
- node = AMcreateElementMathML("mspace");
- node.setAttribute("width","0.33em"); // was 1ex
- newFrag.appendChild(node);
- }
- str = AMremoveCharsAndBlanks(str,i+1);
- return [AMcreateMmlNode("mrow",newFrag),str,null];
- case UNARY:
- result = AMparseSexpr(str);
- if (result[0]==null) return [AMcreateMmlNode(symbol.tag,
- document.createTextNode(symbol.output)),str];
- if (typeof symbol.func == "boolean" && symbol.func) { // functions hack
- st = str.charAt(0);
-// if (st=="^" || st=="_" || st=="/" || st=="|" || st==",") {
- if (st=="^" || st=="_" || st==",") {
- return [AMcreateMmlNode(symbol.tag,
- document.createTextNode(symbol.output)),str,symbol.tag];
- } else {
- node = AMcreateMmlNode("mrow",
- AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));
- if (isIE) {
- var space = AMcreateElementMathML("mspace");
- space.setAttribute("width","0.167em");
- node.appendChild(space);
- }
- node.appendChild(result[0]);
- return [node,result[1],symbol.tag];
- }
- }
- if (symbol.input == "\\sqrt") { // sqrt
- if (isIE) { // set minsize, for \surd
- var space = AMcreateElementMathML("mspace");
- space.setAttribute("height","1.2ex");
- space.setAttribute("width","0em"); // probably no effect
- node = AMcreateMmlNode(symbol.tag,result[0])
-// node.setAttribute("minsize","1"); // ignored
-// node = AMcreateMmlNode("mrow",node); // hopefully unnecessary
- node.appendChild(space);
- return [node,result[1],symbol.tag];
- } else
- return [AMcreateMmlNode(symbol.tag,result[0]),result[1],symbol.tag];
- } else if (typeof symbol.acc == "boolean" && symbol.acc) { // accent
- node = AMcreateMmlNode(symbol.tag,result[0]);
- var output = symbol.output;
- if (isIE) {
- if (symbol.input == "\\hat")
- output = "\u0302";
- else if (symbol.input == "\\widehat")
- output = "\u005E";
- else if (symbol.input == "\\bar")
- output = "\u00AF";
- else if (symbol.input == "\\grave")
- output = "\u0300";
- else if (symbol.input == "\\tilde")
- output = "\u0303";
- }
- var node1 = AMcreateMmlNode("mo",document.createTextNode(output));
- if (symbol.input == "\\vec" || symbol.input == "\\check")
- // don't allow to stretch
- node1.setAttribute("maxsize","1.2");
- // why doesn't "1" work? \vec nearly disappears in firefox
- if (isIE && symbol.input == "\\bar")
- node1.setAttribute("maxsize","0.5");
- if (symbol.input == "\\underbrace" || symbol.input == "\\underline")
- node1.setAttribute("accentunder","true");
- else
- node1.setAttribute("accent","true");
- node.appendChild(node1);
- if (symbol.input == "\\overbrace" || symbol.input == "\\underbrace")
- node.ttype = UNDEROVER;
- return [node,result[1],symbol.tag];
- } else { // font change or displaystyle command
- if (!isIE && typeof symbol.codes != "undefined") {
- for (i=0; i<result[0].childNodes.length; i++)
- if (result[0].childNodes[i].nodeName=="mi" || result[0].nodeName=="mi") {
- st = (result[0].nodeName=="mi"?result[0].firstChild.nodeValue:
- result[0].childNodes[i].firstChild.nodeValue);
- var newst = [];
- for (var j=0; j<st.length; j++)
- if (st.charCodeAt(j)>64 && st.charCodeAt(j)<91) newst = newst +
- String.fromCharCode(symbol.codes[st.charCodeAt(j)-65]);
- else newst = newst + st.charAt(j);
- if (result[0].nodeName=="mi")
- result[0]=AMcreateElementMathML("mo").
- appendChild(document.createTextNode(newst));
- else result[0].replaceChild(AMcreateElementMathML("mo").
- appendChild(document.createTextNode(newst)),result[0].childNodes[i]);
- }
- }
- node = AMcreateMmlNode(symbol.tag,result[0]);
- node.setAttribute(symbol.atname,symbol.atval);
- if (symbol.input == "\\scriptstyle" ||
- symbol.input == "\\scriptscriptstyle")
- node.setAttribute("displaystyle","false");
- return [node,result[1],symbol.tag];
- }
- case BINARY:
- result = AMparseSexpr(str);
- if (result[0]==null) return [AMcreateMmlNode("mo",
- document.createTextNode(symbol.input)),str,null];
- result2 = AMparseSexpr(result[1]);
- if (result2[0]==null) return [AMcreateMmlNode("mo",
- document.createTextNode(symbol.input)),str,null];
- if (symbol.input=="\\root" || symbol.input=="\\stackrel")
- newFrag.appendChild(result2[0]);
- newFrag.appendChild(result[0]);
- if (symbol.input=="\\frac") newFrag.appendChild(result2[0]);
- return [AMcreateMmlNode(symbol.tag,newFrag),result2[1],symbol.tag];
- case INFIX:
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- return [AMcreateMmlNode("mo",document.createTextNode(symbol.output)),
- str,symbol.tag];
- default:
- return [AMcreateMmlNode(symbol.tag, //its a constant
- document.createTextNode(symbol.output)),str,symbol.tag];
- }
-}
-
-function AMparseIexpr(str) {
- var symbol, sym1, sym2, node, result, tag, underover;
- str = AMremoveCharsAndBlanks(str,0);
- sym1 = AMgetSymbol(str);
- result = AMparseSexpr(str);
- node = result[0];
- str = result[1];
- tag = result[2];
- symbol = AMgetSymbol(str);
- if (symbol.ttype == INFIX) {
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- result = AMparseSexpr(str);
- if (result[0] == null) // show box in place of missing argument
- result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1"));
- str = result[1];
- tag = result[2];
- if (symbol.input == "_" || symbol.input == "^") {
- sym2 = AMgetSymbol(str);
- tag = null; // no space between x^2 and a following sin, cos, etc.
-// This is for \underbrace and \overbrace
- underover = ((sym1.ttype == UNDEROVER) || (node.ttype == UNDEROVER));
-// underover = (sym1.ttype == UNDEROVER);
- if (symbol.input == "_" && sym2.input == "^") {
- str = AMremoveCharsAndBlanks(str,sym2.input.length);
- var res2 = AMparseSexpr(str);
- str = res2[1];
- tag = res2[2]; // leave space between x_1^2 and a following sin etc.
- node = AMcreateMmlNode((underover?"munderover":"msubsup"),node);
- node.appendChild(result[0]);
- node.appendChild(res2[0]);
- } else if (symbol.input == "_") {
- node = AMcreateMmlNode((underover?"munder":"msub"),node);
- node.appendChild(result[0]);
- } else {
- node = AMcreateMmlNode((underover?"mover":"msup"),node);
- node.appendChild(result[0]);
- }
- node = AMcreateMmlNode("mrow",node); // so sum does not stretch
- } else {
- node = AMcreateMmlNode(symbol.tag,node);
- if (symbol.input == "\\atop" || symbol.input == "\\choose")
- node.setAttribute("linethickness","0ex");
- node.appendChild(result[0]);
- if (symbol.input == "\\choose")
- node = AMcreateMmlNode("mfenced",node);
- }
- }
- return [node,str,tag];
-}
-
-function AMparseExpr(str,rightbracket,matrix) {
- var symbol, node, result, i, tag,
- newFrag = document.createDocumentFragment();
- do {
- str = AMremoveCharsAndBlanks(str,0);
- result = AMparseIexpr(str);
- node = result[0];
- str = result[1];
- tag = result[2];
- symbol = AMgetSymbol(str);
- if (node!=undefined) {
- if ((tag == "mn" || tag == "mi") && symbol!=null &&
- typeof symbol.func == "boolean" && symbol.func) {
- // Add space before \sin in 2\sin x or x\sin x
- var space = AMcreateElementMathML("mspace");
- space.setAttribute("width","0.167em");
- node = AMcreateMmlNode("mrow",node);
- node.appendChild(space);
- }
- newFrag.appendChild(node);
- }
- } while ((symbol.ttype != RIGHTBRACKET)
- && symbol!=null && symbol.output!="");
- tag = null;
- if (symbol.ttype == RIGHTBRACKET) {
- if (symbol.input == "\\right") { // right what?
- str = AMremoveCharsAndBlanks(str,symbol.input.length);
- symbol = AMgetSymbol(str);
- if (symbol != null && symbol.input == ".")
- symbol.invisible = true;
- if (symbol != null)
- tag = symbol.rtag;
- }
- if (symbol!=null)
- str = AMremoveCharsAndBlanks(str,symbol.input.length); // ready to return
- var len = newFrag.childNodes.length;
- if (matrix &&
- len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && len>1 &&
- newFrag.childNodes[len-2].nodeName == "mo" &&
- newFrag.childNodes[len-2].firstChild.nodeValue == "&") { //matrix
- var pos = []; // positions of ampersands
- var m = newFrag.childNodes.length;
- for (i=0; matrix && i<m; i=i+2) {
- pos[i] = [];
- node = newFrag.childNodes[i];
- for (var j=0; j<node.childNodes.length; j++)
- if (node.childNodes[j].firstChild.nodeValue=="&")
- pos[i][pos[i].length]=j;
- }
- var row, frag, n, k, table = document.createDocumentFragment();
- for (i=0; i<m; i=i+2) {
- row = document.createDocumentFragment();
- frag = document.createDocumentFragment();
- node = newFrag.firstChild; // <mrow> -&-&...&-&- </mrow>
- n = node.childNodes.length;
- k = 0;
- for (j=0; j<n; j++) {
- if (typeof pos[i][k] != "undefined" && j==pos[i][k]){
- node.removeChild(node.firstChild); //remove &
- row.appendChild(AMcreateMmlNode("mtd",frag));
- k++;
- } else frag.appendChild(node.firstChild);
- }
- row.appendChild(AMcreateMmlNode("mtd",frag));
- if (newFrag.childNodes.length>2) {
- newFrag.removeChild(newFrag.firstChild); //remove <mrow> </mrow>
- newFrag.removeChild(newFrag.firstChild); //remove <mo>&</mo>
- }
- table.appendChild(AMcreateMmlNode("mtr",row));
- }
- return [table,str];
- }
- if (typeof symbol.invisible != "boolean" || !symbol.invisible) {
- node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
- newFrag.appendChild(node);
- }
- }
- return [newFrag,str,tag];
-}
-
-function AMparseMath(str) {
- var result, node = AMcreateElementMathML("mstyle");
- if (mathcolor != "") node.setAttribute("mathcolor",mathcolor);
- if (mathfontfamily != "") node.setAttribute("fontfamily",mathfontfamily);
- node.appendChild(AMparseExpr(str.replace(/^\s+/g,""),false,false)[0]);
- node = AMcreateMmlNode("math",node);
- if (showasciiformulaonhover) //fixed by djhsu so newline
- node.setAttribute("title",str.replace(/\s+/g," "));//does not show in Gecko
- if (mathfontfamily != "" && (isIE || mathfontfamily != "serif")) {
- var fnode = AMcreateElementXHTML("font");
- fnode.setAttribute("face",mathfontfamily);
- fnode.appendChild(node);
- return fnode;
- }
- return node;
-}
-
-function AMstrarr2docFrag(arr, linebreaks) {
- var newFrag=document.createDocumentFragment();
- var expr = false;
- for (var i=0; i<arr.length; i++) {
- if (expr) newFrag.appendChild(AMparseMath(arr[i]));
- else {
- var arri = (linebreaks ? arr[i].split("\n\n") : [arr[i]]);
- newFrag.appendChild(AMcreateElementXHTML("span").
- appendChild(document.createTextNode(arri[0])));
- for (var j=1; j<arri.length; j++) {
- newFrag.appendChild(AMcreateElementXHTML("p"));
- newFrag.appendChild(AMcreateElementXHTML("span").
- appendChild(document.createTextNode(arri[j])));
- }
- }
- expr = !expr;
- }
- return newFrag;
-}
-
-function AMprocessNodeR(n, linebreaks) {
- var mtch, str, arr, frg, i;
- if (n.childNodes.length == 0) {
- if ((n.nodeType!=8 || linebreaks) &&
- n.parentNode.nodeName!="form" && n.parentNode.nodeName!="FORM" &&
- n.parentNode.nodeName!="textarea" && n.parentNode.nodeName!="TEXTAREA" &&
- n.parentNode.nodeName!="pre" && n.parentNode.nodeName!="PRE") {
- str = n.nodeValue;
- if (!(str == null)) {
- str = str.replace(/\r\n\r\n/g,"\n\n");
- str = str.replace(/\x20+/g," ");
- str = str.replace(/\s*\r\n/g," ");
-// DELIMITERS:
- mtch = (str.indexOf("\$")==-1 ? false : true);
- str = str.replace(/([^\\])\$/g,"$1 \$");
- str = str.replace(/^\$/," \$"); // in case \$ at start of string
- arr = str.split(" \$");
- for (i=0; i<arr.length; i++)
- arr[i]=arr[i].replace(/\\\$/g,"\$");
- if (arr.length>1 || mtch) {
- if (checkForMathML) {
- checkForMathML = false;
- var nd = AMisMathMLavailable();
- AMnoMathML = nd != null;
- if (AMnoMathML && notifyIfNoMathML)
- if (alertIfNoMathML)
- alert("To view the ASCIIMathML notation use Internet Explorer 6 +\nMathPlayer (free from www.dessci.com)\n\
- or Firefox/Mozilla/Netscape");
- else AMbody.insertBefore(nd,AMbody.childNodes[0]);
- }
- if (!AMnoMathML) {
- frg = AMstrarr2docFrag(arr,n.nodeType==8);
- var len = frg.childNodes.length;
- n.parentNode.replaceChild(frg,n);
- return len-1;
- } else return 0;
- }
- }
- } else return 0;
- } else if (n.nodeName!="math") {
- for (i=0; i<n.childNodes.length; i++)
- i += AMprocessNodeR(n.childNodes[i], linebreaks);
- }
- return 0;
-}
-
-function AMprocessNode(n, linebreaks, spanclassAM) {
- var frag,st;
- if (spanclassAM!=null) {
- frag = document.getElementsByTagName("span")
- for (var i=0;i<frag.length;i++)
- if (frag[i].className == "AM")
- AMprocessNodeR(frag[i],linebreaks);
- } else {
- try {
- st = n.innerHTML;
- } catch(err) {}
-// DELIMITERS:
- if (st==null || st.indexOf("\$")!=-1)
- AMprocessNodeR(n,linebreaks);
- }
- if (isIE) { //needed to match size and font of formula to surrounding text
- frag = document.getElementsByTagName('math');
- for (var i=0;i<frag.length;i++) frag[i].update()
- }
-}
-
-var AMbody;
-var AMnoMathML = false, AMtranslated = false;
-
-function translate(spanclassAM) {
- if (!AMtranslated) { // run this only once
- AMtranslated = true;
- AMinitSymbols();
- AMbody = document.getElementsByTagName("body")[0];
- AMprocessNode(AMbody, false, spanclassAM);
- }
-}
-
-if (isIE) { // avoid adding MathPlayer info explicitly to each webpage
- document.write("<object id=\"mathplayer\"\
- classid=\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\"></object>");
- document.write("<?import namespace=\"m\" implementation=\"#mathplayer\"?>");
-}
-
-// GO1.1 Generic onload by Brothercake
-// http://www.brothercake.com/
-//onload function (replaces the onload="translate()" in the <body> tag)
-function generic()
-{
- translate();
-};
-//setup onload function
-if(typeof window.addEventListener != 'undefined')
-{
- //.. gecko, safari, konqueror and standard
- window.addEventListener('load', generic, false);
-}
-else if(typeof document.addEventListener != 'undefined')
-{
- //.. opera 7
- document.addEventListener('load', generic, false);
-}
-else if(typeof window.attachEvent != 'undefined')
-{
- //.. win/ie
- window.attachEvent('onload', generic);
-}
-//** remove this condition to degrade older browsers
-else
-{
- //.. mac/ie5 and anything else that gets this far
- //if there's an existing onload function
- if(typeof window.onload == 'function')
- {
- //store it
- var existing = onload;
- //add new onload handler
- window.onload = function()
- {
- //call existing onload function
- existing();
- //call generic onload function
- generic();
- };
- }
- else
- {
- //setup onload function
- window.onload = generic;
- }
-}
diff --git a/source-builder/sb/asciidoc/javascripts/asciidoc.js b/source-builder/sb/asciidoc/javascripts/asciidoc.js deleted file mode 100644 index ac36563..0000000 --- a/source-builder/sb/asciidoc/javascripts/asciidoc.js +++ /dev/null @@ -1,189 +0,0 @@ -var asciidoc = { // Namespace. - -///////////////////////////////////////////////////////////////////// -// Table Of Contents generator -///////////////////////////////////////////////////////////////////// - -/* Author: Mihai Bazon, September 2002 - * http://students.infoiasi.ro/~mishoo - * - * Table Of Content generator - * Version: 0.4 - * - * Feel free to use this script under the terms of the GNU General Public - * License, as long as you do not remove or alter this notice. - */ - - /* modified by Troy D. Hanson, September 2006. License: GPL */ - /* modified by Stuart Rackham, 2006, 2009. License: GPL */ - -// toclevels = 1..4. -toc: function (toclevels) { - - function getText(el) { - var text = ""; - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants. - text += i.data; - else if (i.firstChild != null) - text += getText(i); - } - return text; - } - - function TocEntry(el, text, toclevel) { - this.element = el; - this.text = text; - this.toclevel = toclevel; - } - - function tocEntries(el, toclevels) { - var result = new Array; - var re = new RegExp('[hH]([1-'+(toclevels+1)+'])'); - // Function that scans the DOM tree for header elements (the DOM2 - // nodeIterator API would be a better technique but not supported by all - // browsers). - var iterate = function (el) { - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { - var mo = re.exec(i.tagName); - if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") { - result[result.length] = new TocEntry(i, getText(i), mo[1]-1); - } - iterate(i); - } - } - } - iterate(el); - return result; - } - - var toc = document.getElementById("toc"); - if (!toc) { - return; - } - - // Delete existing TOC entries in case we're reloading the TOC. - var tocEntriesToRemove = []; - var i; - for (i = 0; i < toc.childNodes.length; i++) { - var entry = toc.childNodes[i]; - if (entry.nodeName.toLowerCase() == 'div' - && entry.getAttribute("class") - && entry.getAttribute("class").match(/^toclevel/)) - tocEntriesToRemove.push(entry); - } - for (i = 0; i < tocEntriesToRemove.length; i++) { - toc.removeChild(tocEntriesToRemove[i]); - } - - // Rebuild TOC entries. - var entries = tocEntries(document.getElementById("content"), toclevels); - for (var i = 0; i < entries.length; ++i) { - var entry = entries[i]; - if (entry.element.id == "") - entry.element.id = "_toc_" + i; - var a = document.createElement("a"); - a.href = "#" + entry.element.id; - a.appendChild(document.createTextNode(entry.text)); - var div = document.createElement("div"); - div.appendChild(a); - div.className = "toclevel" + entry.toclevel; - toc.appendChild(div); - } - if (entries.length == 0) - toc.parentNode.removeChild(toc); -}, - - -///////////////////////////////////////////////////////////////////// -// Footnotes generator -///////////////////////////////////////////////////////////////////// - -/* Based on footnote generation code from: - * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html - */ - -footnotes: function () { - // Delete existing footnote entries in case we're reloading the footnodes. - var i; - var noteholder = document.getElementById("footnotes"); - if (!noteholder) { - return; - } - var entriesToRemove = []; - for (i = 0; i < noteholder.childNodes.length; i++) { - var entry = noteholder.childNodes[i]; - if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote") - entriesToRemove.push(entry); - } - for (i = 0; i < entriesToRemove.length; i++) { - noteholder.removeChild(entriesToRemove[i]); - } - - // Rebuild footnote entries. - var cont = document.getElementById("content"); - var spans = cont.getElementsByTagName("span"); - var refs = {}; - var n = 0; - for (i=0; i<spans.length; i++) { - if (spans[i].className == "footnote") { - n++; - var note = spans[i].getAttribute("data-note"); - if (!note) { - // Use [\s\S] in place of . so multi-line matches work. - // Because JavaScript has no s (dotall) regex flag. - note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1]; - spans[i].innerHTML = - "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n + - "' title='View footnote' class='footnote'>" + n + "</a>]"; - spans[i].setAttribute("data-note", note); - } - noteholder.innerHTML += - "<div class='footnote' id='_footnote_" + n + "'>" + - "<a href='#_footnoteref_" + n + "' title='Return to text'>" + - n + "</a>. " + note + "</div>"; - var id =spans[i].getAttribute("id"); - if (id != null) refs["#"+id] = n; - } - } - if (n == 0) - noteholder.parentNode.removeChild(noteholder); - else { - // Process footnoterefs. - for (i=0; i<spans.length; i++) { - if (spans[i].className == "footnoteref") { - var href = spans[i].getElementsByTagName("a")[0].getAttribute("href"); - href = href.match(/#.*/)[0]; // Because IE return full URL. - n = refs[href]; - spans[i].innerHTML = - "[<a href='#_footnote_" + n + - "' title='View footnote' class='footnote'>" + n + "</a>]"; - } - } - } -}, - -install: function(toclevels) { - var timerId; - - function reinstall() { - asciidoc.footnotes(); - if (toclevels) { - asciidoc.toc(toclevels); - } - } - - function reinstallAndRemoveTimer() { - clearInterval(timerId); - reinstall(); - } - - timerId = setInterval(reinstall, 500); - if (document.addEventListener) - document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false); - else - window.onload = reinstallAndRemoveTimer; -} - -} diff --git a/source-builder/sb/asciidoc/javascripts/slidy.js b/source-builder/sb/asciidoc/javascripts/slidy.js deleted file mode 100644 index 04e51a2..0000000 --- a/source-builder/sb/asciidoc/javascripts/slidy.js +++ /dev/null @@ -1,2845 +0,0 @@ -/* slidy.js - - Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. - W3C liability, trademark, document use and software licensing - rules apply, see: - - http://www.w3.org/Consortium/Legal/copyright-documents - http://www.w3.org/Consortium/Legal/copyright-software -*/ - -// the slidy object implementation -var w3c_slidy = { - // classify which kind of browser we're running under - ns_pos: (typeof window.pageYOffset!='undefined'), - khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false), - opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false), - ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false), - iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false), - ie: (typeof document.all != "undefined" && !this.opera), - ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1), - ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1), - ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1), - ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1), - keyboardless: (this.ipad || this.iphone), - - // are we running as XHTML? (doesn't work on Opera) - is_xhtml: /xml/.test(document.contentType), - - slide_number: 0, // integer slide count: 0, 1, 2, ... - slide_number_element: null, // element containing slide number - slides: [], // set to array of slide div's - notes: [], // set to array of handout div's - backgrounds: [], // set to array of background div's - toolbar: null, // element containing toolbar - title: null, // document title - last_shown: null, // last incrementally shown item - eos: null, // span element for end of slide indicator - toc: null, // table of contents - outline: null, // outline element with the focus - selected_text_len: 0, // length of drag selection on document - view_all: 0, // 1 to view all slides + handouts - want_toolbar: true, // user preference to show/hide toolbar - mouse_click_enabled: true, // enables left click for next slide - scroll_hack: 0, // IE work around for position: fixed - disable_slide_click: false, // used by clicked anchors - - lang: "en", // updated to language specified by html file - - help_anchor: null, // used for keyboard focus hack in showToolbar() - help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html", - help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " + - "or Pg Up and Pg Dn. Use S and B to change font size.", - - size_index: 0, - size_adjustment: 0, - sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt", - "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"), - - // needed for efficient resizing - last_width: 0, - last_height: 0, - - - // Needed for cross browser support for relative width/height on - // object elements. The work around is to save width/height attributes - // and then to recompute absolute width/height dimensions on resizing - objects: [], - - // attach initialiation event handlers - set_up: function () { - var init = function() { w3c_slidy.init(); }; - if (typeof window.addEventListener != "undefined") - window.addEventListener("load", init, false); - else - window.attachEvent("onload", init); - }, - - hide_slides: function () { - if (document.body && !w3c_slidy.initialized) - document.body.style.visibility = "hidden"; - else - setTimeout(w3c_slidy.hide_slides, 50); - }, - - // hack to persuade IE to compute correct document height - // as needed for simulating fixed positioning of toolbar - ie_hack: function () { - window.resizeBy(0,-1); - window.resizeBy(0, 1); - }, - - init: function () { - //alert("slidy starting test 10"); - document.body.style.visibility = "visible"; - w3c_slidy_i18n.init(); - this.add_toolbar(); - this.wrap_implicit_slides(); - this.collect_slides(); - this.collect_notes(); - this.collect_backgrounds(); - this.objects = document.body.getElementsByTagName("object"); - this.patch_anchors(); - this.slide_number = this.find_slide_number(location.href); - window.offscreenbuffering = true; - this.size_adjustment = this.find_size_adjust(); - this.time_left = this.find_duration(); - this.hide_image_toolbar(); // suppress IE image toolbar popup - this.init_outliner(); // activate fold/unfold support - this.title = document.title; - - // work around for opera bug - this.is_xhtml = (document.body.tagName == "BODY" ? false : true); - - if (this.slides.length > 0) - { - var slide = this.slides[this.slide_number]; - - if (this.slide_number > 0) - { - this.set_visibility_all_incremental("visible"); - this.last_shown = this.previous_incremental_item(null); - this.set_eos_status(true); - } - else - { - this.last_shown = null; - this.set_visibility_all_incremental("hidden"); - this.set_eos_status(!this.next_incremental_item(this.last_shown)); - } - - this.set_location(); - this.add_class(this.slides[0], "first-slide"); - w3c_slidy.show_slide(slide); - } - - this.toc = this.table_of_contents(); - - this.add_initial_prompt(); - - // bind event handlers without interfering with custom page scripts - // Tap events behave too weirdly to support clicks reliably on - // iPhone and iPad, so exclude these from click handler - - if (!this.keyboardless) - this.add_listener(document.body, "click", this.mouse_button_click); - - this.add_listener(document, "keydown", this.key_down); - this.add_listener(document, "keypress", this.key_press); - this.add_listener(window, "resize", this.resized); - this.add_listener(window, "scroll", this.scrolled); - this.add_listener(window, "unload", this.unloaded); - - if (!document.body.onclick) - document.body.onclick = function () { }; - - this.single_slide_view(); - - //this.set_location(); - - this.resized(); - - if (this.ie7) - setTimeout(w3c_slidy.ie_hack, 100); - - this.show_toolbar(); - - // for back button detection - setInterval(function () { w3c_slidy.check_location(); }, 200); - w3c_slidy.initialized = true; - }, - - // create div element with links to each slide - table_of_contents: function () { - var toc = this.create_element("div"); - this.add_class(toc, "slidy_toc hidden"); - //toc.setAttribute("tabindex", "0"); - - var heading = this.create_element("div"); - this.add_class(heading, "toc-heading"); - heading.innerHTML = "Table of Contents".localize(); - - toc.appendChild(heading); - var previous = null; - - for (var i = 0; i < this.slides.length; ++i) - { - var title = this.has_class(this.slides[i], "title"); - var num = document.createTextNode((i + 1) + ". "); - - toc.appendChild(num); - - var a = this.create_element("a"); - a.setAttribute("href", "#(" + (i+1) + ")"); - - if (title) - this.add_class(a, "titleslide"); - - var name = document.createTextNode(this.slide_name(i)); - a.appendChild(name); - a.onclick = w3c_slidy.toc_click; - a.onkeydown = w3c_slidy.toc_keydown; - a.previous = previous; - - if (previous) - previous.next = a; - - toc.appendChild(a); - - if (i == 0) - toc.first = a; - - if (i < this.slides.length - 1) - { - var br = this.create_element("br"); - toc.appendChild(br); - } - - previous = a; - } - - toc.focus = function () { - if (this.first) - this.first.focus(); - } - - toc.onmouseup = w3c_slidy.mouse_button_up; - - toc.onclick = function (e) { - e||(e=window.event); - - if (w3c_slidy.selected_text_len <= 0) - w3c_slidy.hide_table_of_contents(); - - w3c_slidy.stop_propagation(e); - - if (e.cancel != undefined) - e.cancel = true; - - if (e.returnValue != undefined) - e.returnValue = false; - - return false; - }; - - document.body.insertBefore(toc, document.body.firstChild); - return toc; - }, - - is_shown_toc: function () { - return !w3c_slidy.has_class(w3c_slidy.toc, "hidden"); - }, - - show_table_of_contents: function () { - w3c_slidy.remove_class(w3c_slidy.toc, "hidden"); - var toc = w3c_slidy.toc; - toc.focus(); - - if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0) - setTimeout(w3c_slidy.ie_hack, 100); - }, - - hide_table_of_contents: function () { - w3c_slidy.add_class(w3c_slidy.toc, "hidden"); - - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - }, - - toggle_table_of_contents: function () { - if (w3c_slidy.is_shown_toc()) - w3c_slidy.hide_table_of_contents(); - else - w3c_slidy.show_table_of_contents(); - }, - - // called on clicking toc entry - toc_click: function (e) { - if (!e) - e = window.event; - - var target = w3c_slidy.get_target(e); - - if (target && target.nodeType == 1) - { - var uri = target.getAttribute("href"); - - if (uri) - { - //alert("going to " + uri); - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_location(); - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - w3c_slidy.show_slide(slide); - //target.focus(); - - try - { - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - } - catch (e) - { - } - } - } - - w3c_slidy.hide_table_of_contents(e); - if (w3c_slidy.ie7) w3c_slidy.ie_hack(); - w3c_slidy.stop_propagation(e); - return w3c_slidy.cancel(e); - }, - - // called onkeydown for toc entry - toc_keydown: function (event) { - var key; - - if (!event) - var event = window.event; - - // kludge around NS/IE differences - if (window.event) - key = window.event.keyCode; - else if (event.which) - key = event.which; - else - return true; // Yikes! unknown browser - - // ignore event if key value is zero - // as for alt on Opera and Konqueror - if (!key) - return true; - - // check for concurrent control/command/alt key - // but are these only present on mouse events? - - if (event.ctrlKey || event.altKey) - return true; - - if (key == 13) - { - var uri = this.getAttribute("href"); - - if (uri) - { - //alert("going to " + uri); - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_location(); - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - w3c_slidy.show_slide(slide); - //target.focus(); - - try - { - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - } - catch (e) - { - } - } - - w3c_slidy.hide_table_of_contents(); - - if (self.ie7) - w3c_slidy.ie_hack(); - - return w3c_slidy.cancel(event); - } - - if (key == 40 && this.next) - { - this.next.focus(); - return w3c_slidy.cancel(event); - } - - if (key == 38 && this.previous) - { - this.previous.focus(); - return w3c_slidy.cancel(event); - } - - return true; - }, - - - // ### OBSOLETE ### - before_print: function () { - this.show_all_slides(); - this.hide_toolbar(); - alert("before print"); - }, - - // ### OBSOLETE ### - after_print: function () { - if (!this.view_all) - { - this.single_slide_view(); - this.show_toolbar(); - } - alert("after print"); - }, - - // ### OBSOLETE ### - print_slides: function () { - this.before_print(); - window.print(); - this.after_print(); - }, - - // ### OBSOLETE ?? ### - toggle_view: function () { - if (this.view_all) - { - this.single_slide_view(); - this.show_toolbar(); - this.view_all = 0; - } - else - { - this.show_all_slides(); - this.hide_toolbar(); - this.view_all = 1; - } - }, - - // prepare for printing ### OBSOLETE ### - show_all_slides: function () { - this.remove_class(document.body, "single_slide"); - this.set_visibility_all_incremental("visible"); - }, - - // restore after printing ### OBSOLETE ### - single_slide_view: function () { - this.add_class(document.body, "single_slide"); - this.set_visibility_all_incremental("visible"); - this.last_shown = this.previous_incremental_item(null); - }, - - // suppress IE's image toolbar pop up - hide_image_toolbar: function () { - if (!this.ns_pos) - { - var images = document.getElementsByTagName("IMG"); - - for (var i = 0; i < images.length; ++i) - images[i].setAttribute("galleryimg", "no"); - } - }, - - unloaded: function (e) { - //alert("unloaded"); - }, - - // Safari and Konqueror don't yet support getComputedStyle() - // and they always reload page when location.href is updated - is_KHTML: function () { - var agent = navigator.userAgent; - return (agent.indexOf("KHTML") >= 0 ? true : false); - }, - - // find slide name from first h1 element - // default to document title + slide number - slide_name: function (index) { - var name = null; - var slide = this.slides[index]; - - var heading = this.find_heading(slide); - - if (heading) - name = this.extract_text(heading); - - if (!name) - name = this.title + "(" + (index + 1) + ")"; - - name.replace(/\&/g, "&"); - name.replace(/\</g, "<"); - name.replace(/\>/g, ">"); - - return name; - }, - - // find first h1 element in DOM tree - find_heading: function (node) { - if (!node || node.nodeType != 1) - return null; - - if (node.nodeName == "H1" || node.nodeName == "h1") - return node; - - var child = node.firstChild; - - while (child) - { - node = this.find_heading(child); - - if (node) - return node; - - child = child.nextSibling; - } - - return null; - }, - - // recursively extract text from DOM tree - extract_text: function (node) { - if (!node) - return ""; - - // text nodes - if (node.nodeType == 3) - return node.nodeValue; - - // elements - if (node.nodeType == 1) - { - node = node.firstChild; - var text = ""; - - while (node) - { - text = text + this.extract_text(node); - node = node.nextSibling; - } - - return text; - } - - return ""; - }, - - // find copyright text from meta element - find_copyright: function () { - var name, content; - var meta = document.getElementsByTagName("meta"); - - for (var i = 0; i < meta.length; ++i) - { - name = meta[i].getAttribute("name"); - content = meta[i].getAttribute("content"); - - if (name == "copyright") - return content; - } - - return null; - }, - - find_size_adjust: function () { - var name, content, offset; - var meta = document.getElementsByTagName("meta"); - - for (var i = 0; i < meta.length; ++i) - { - name = meta[i].getAttribute("name"); - content = meta[i].getAttribute("content"); - - if (name == "font-size-adjustment") - return 1 * content; - } - - return 1; - }, - - // <meta name="duration" content="20" /> for 20 minutes - find_duration: function () { - var name, content, offset; - var meta = document.getElementsByTagName("meta"); - - for (var i = 0; i < meta.length; ++i) - { - name = meta[i].getAttribute("name"); - content = meta[i].getAttribute("content"); - - if (name == "duration") - return 60000 * content; - } - - return null; - }, - - replace_by_non_breaking_space: function (str) { - for (var i = 0; i < str.length; ++i) - str[i] = 160; - }, - - // ### CHECK ME ### is use of "li" okay for text/html? - // for XHTML do we also need to specify namespace? - init_outliner: function () { - var items = document.getElementsByTagName("li"); - - for (var i = 0; i < items.length; ++i) - { - var target = items[i]; - - if (!this.has_class(target.parentNode, "outline")) - continue; - - target.onclick = this.outline_click; -/* ### more work needed for IE6 - if (!this.ns_pos) - { - target.onmouseover = this.hover_outline; - target.onmouseout = this.unhover_outline; - } -*/ - if (this.foldable(target)) - { - target.foldable = true; - target.onfocus = function () {w3c_slidy.outline = this;}; - target.onblur = function () {w3c_slidy.outline = null;}; - - if (!target.getAttribute("tabindex")) - target.setAttribute("tabindex", "0"); - - if (this.has_class(target, "expand")) - this.unfold(target); - else - this.fold(target); - } - else - { - this.add_class(target, "nofold"); - target.visible = true; - target.foldable = false; - } - } - }, - - foldable: function (item) { - if (!item || item.nodeType != 1) - return false; - - var node = item.firstChild; - - while (node) - { - if (node.nodeType == 1 && this.is_block(node)) - return true; - - node = node.nextSibling; - } - - return false; - }, - - // ### CHECK ME ### switch to add/remove "hidden" class - fold: function (item) { - if (item) - { - this.remove_class(item, "unfolded"); - this.add_class(item, "folded"); - } - - var node = item ? item.firstChild : null; - - while (node) - { - if (node.nodeType == 1 && this.is_block(node)) // element - { - w3c_slidy.add_class(node, "hidden"); - } - - node = node.nextSibling; - } - - item.visible = false; - }, - - // ### CHECK ME ### switch to add/remove "hidden" class - unfold: function (item) { - if (item) - { - this.add_class(item, "unfolded"); - this.remove_class(item, "folded"); - } - - var node = item ? item.firstChild : null; - - while (node) - { - if (node.nodeType == 1 && this.is_block(node)) // element - { - w3c_slidy.remove_class(node, "hidden"); - } - - node = node.nextSibling; - } - - item.visible = true; - }, - - outline_click: function (e) { - if (!e) - e = window.event; - - var rightclick = false; - var target = w3c_slidy.get_target(e); - - while (target && target.visible == undefined) - target = target.parentNode; - - if (!target) - return true; - - if (e.which) - rightclick = (e.which == 3); - else if (e.button) - rightclick = (e.button == 2); - - if (!rightclick && target.visible != undefined) - { - if (target.foldable) - { - if (target.visible) - w3c_slidy.fold(target); - else - w3c_slidy.unfold(target); - } - - w3c_slidy.stop_propagation(e); - e.cancel = true; - e.returnValue = false; - } - - return false; - }, - - add_initial_prompt: function () { - var prompt = this.create_element("div"); - prompt.setAttribute("class", "initial_prompt"); - - var p1 = this.create_element("p"); - prompt.appendChild(p1); - p1.setAttribute("class", "help"); - - if (this.keyboardless) - p1.innerHTML = "Tap footer to move to next slide"; - else - p1.innerHTML = "Space or Right Arrow to move to next " + - "slide, click help below for more details"; - - this.add_listener(prompt, "click", function (e) { - document.body.removeChild(prompt); - w3c_slidy.stop_propagation(e); - - if (e.cancel != undefined) - e.cancel = true; - - if (e.returnValue != undefined) - e.returnValue = false; - - return false; - }); - - document.body.appendChild(prompt); - this.initial_prompt = prompt; - setTimeout(function() {document.body.removeChild(prompt);}, 5000); - }, - - add_toolbar: function () { - var counter, page; - - this.toolbar = this.create_element("div"); - this.toolbar.setAttribute("class", "toolbar"); - - // a reasonably behaved browser - if (this.ns_pos || !this.ie6) - { - var right = this.create_element("div"); - right.setAttribute("style", "float: right; text-align: right"); - - counter = this.create_element("span") - counter.innerHTML = "slide".localize() + " n/m"; - right.appendChild(counter); - this.toolbar.appendChild(right); - - var left = this.create_element("div"); - left.setAttribute("style", "text-align: left"); - - // global end of slide indicator - this.eos = this.create_element("span"); - this.eos.innerHTML = "* "; - left.appendChild(this.eos); - - var help = this.create_element("a"); - help.setAttribute("href", this.help_page); - help.setAttribute("title", this.help_text.localize()); - help.innerHTML = "help?".localize(); - left.appendChild(help); - this.help_anchor = help; // save for focus hack - - var gap1 = document.createTextNode(" "); - left.appendChild(gap1); - - var contents = this.create_element("a"); - contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()"); - contents.setAttribute("title", "table of contents".localize()); - contents.innerHTML = "contents?".localize(); - left.appendChild(contents); - - var gap2 = document.createTextNode(" "); - left.appendChild(gap2); - - var copyright = this.find_copyright(); - - if (copyright) - { - var span = this.create_element("span"); - span.className = "copyright"; - span.innerHTML = copyright; - left.appendChild(span); - } - - this.toolbar.setAttribute("tabindex", "0"); - this.toolbar.appendChild(left); - } - else // IE6 so need to work around its poor CSS support - { - this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute"); - this.toolbar.style.zIndex = "200"; - this.toolbar.style.width = "99.9%"; - this.toolbar.style.height = "1.2em"; - this.toolbar.style.top = "auto"; - this.toolbar.style.bottom = "0"; - this.toolbar.style.left = "0"; - this.toolbar.style.right = "0"; - this.toolbar.style.textAlign = "left"; - this.toolbar.style.fontSize = "60%"; - this.toolbar.style.color = "red"; - this.toolbar.borderWidth = 0; - this.toolbar.className = "toolbar"; - this.toolbar.style.background = "rgb(240,240,240)"; - - // would like to have help text left aligned - // and page counter right aligned, floating - // div's don't work, so instead use nested - // absolutely positioned div's. - - var sp = this.create_element("span"); - sp.innerHTML = " * "; - this.toolbar.appendChild(sp); - this.eos = sp; // end of slide indicator - - var help = this.create_element("a"); - help.setAttribute("href", this.help_page); - help.setAttribute("title", this.help_text.localize()); - help.innerHTML = "help?".localize(); - this.toolbar.appendChild(help); - this.help_anchor = help; // save for focus hack - - var gap1 = document.createTextNode(" "); - this.toolbar.appendChild(gap1); - - var contents = this.create_element("a"); - contents.setAttribute("href", "javascript:toggleTableOfContents()"); - contents.setAttribute("title", "table of contents".localize()); - contents.innerHTML = "contents?".localize(); - this.toolbar.appendChild(contents); - - var gap2 = document.createTextNode(" "); - this.toolbar.appendChild(gap2); - - var copyright = this.find_copyright(); - - if (copyright) - { - var span = this.create_element("span"); - span.innerHTML = copyright; - span.style.color = "black"; - span.style.marginLeft = "0.5em"; - this.toolbar.appendChild(span); - } - - counter = this.create_element("div") - counter.style.position = "absolute"; - counter.style.width = "auto"; //"20%"; - counter.style.height = "1.2em"; - counter.style.top = "auto"; - counter.style.bottom = 0; - counter.style.right = "0"; - counter.style.textAlign = "right"; - counter.style.color = "red"; - counter.style.background = "rgb(240,240,240)"; - - counter.innerHTML = "slide".localize() + " n/m"; - this.toolbar.appendChild(counter); - } - - // ensure that click isn't passed through to the page - this.toolbar.onclick = - function (e) { - if (!e) - e = window.event; - - var target = e.target; - - if (!target && e.srcElement) - target = e.srcElement; - - // work around Safari bug - if (target && target.nodeType == 3) - target = target.parentNode; - - w3c_slidy.stop_propagation(e); - - if (target && target.nodeName.toLowerCase() != "a") - w3c_slidy.mouse_button_click(e); - }; - - this.slide_number_element = counter; - this.set_eos_status(false); - document.body.appendChild(this.toolbar); - }, - - // wysiwyg editors make it hard to use div elements - // e.g. amaya loses the div when you copy and paste - // this function wraps div elements around implicit - // slides which start with an h1 element and continue - // up to the next heading or div element - wrap_implicit_slides: function () { - var i, heading, node, next, div; - var headings = document.getElementsByTagName("h1"); - - if (!headings) - return; - - for (i = 0; i < headings.length; ++i) - { - heading = headings[i]; - - if (heading.parentNode != document.body) - continue; - - node = heading.nextSibling; - - div = document.createElement("div"); - this.add_class(div, "slide"); - document.body.replaceChild(div, heading); - div.appendChild(heading); - - while (node) - { - if (node.nodeType == 1 && // an element - (node.nodeName == "H1" || - node.nodeName == "h1" || - node.nodeName == "DIV" || - node.nodeName == "div")) - break; - - next = node.nextSibling; - node = document.body.removeChild(node); - div.appendChild(node); - node = next; - } - } - }, - -// return new array of all slides - collect_slides: function () { - var slides = new Array(); - var divs = document.body.getElementsByTagName("div"); - - for (var i = 0; i < divs.length; ++i) - { - div = divs.item(i); - - if (this.has_class(div, "slide")) - { - // add slide to collection - slides[slides.length] = div; - - // hide each slide as it is found - this.add_class(div, "hidden"); - - // add dummy <br/> at end for scrolling hack - var node1 = document.createElement("br"); - div.appendChild(node1); - var node2 = document.createElement("br"); - div.appendChild(node2); - } - else if (this.has_class(div, "background")) - { // work around for Firefox SVG reload bug - // which otherwise replaces 1st SVG graphic with 2nd - div.style.display = "block"; - } - } - - this.slides = slides; - }, - - // return new array of all <div class="handout"> - collect_notes: function () { - var notes = new Array(); - var divs = document.body.getElementsByTagName("div"); - - for (var i = 0; i < divs.length; ++i) - { - div = divs.item(i); - - if (this.has_class(div, "handout")) - { - // add note to collection - notes[notes.length] = div; - - // and hide it - this.add_class(div, "hidden"); - } - } - - this.notes = notes; - }, - - // return new array of all <div class="background"> - // including named backgrounds e.g. class="background titlepage" - collect_backgrounds: function () { - var backgrounds = new Array(); - var divs = document.body.getElementsByTagName("div"); - - for (var i = 0; i < divs.length; ++i) - { - div = divs.item(i); - - if (this.has_class(div, "background")) - { - // add background to collection - backgrounds[backgrounds.length] = div; - - // and hide it - this.add_class(div, "hidden"); - } - } - - this.backgrounds = backgrounds; - }, - - // set click handlers on all anchors - patch_anchors: function () { - var self = w3c_slidy; - var handler = function (event) { - // compare this.href with location.href - // for link to another slide in this doc - - if (self.page_address(this.href) == self.page_address(location.href)) - { - // yes, so find new slide number - var newslidenum = self.find_slide_number(this.href); - - if (newslidenum != self.slide_number) - { - var slide = self.slides[self.slide_number]; - self.hide_slide(slide); - self.slide_number = newslidenum; - slide = self.slides[self.slide_number]; - self.show_slide(slide); - self.set_location(); - } - } - else if (this.target == null) - location.href = this.href; - - this.blur(); - self.disable_slide_click = true; - }; - - var anchors = document.body.getElementsByTagName("a"); - - for (var i = 0; i < anchors.length; ++i) - { - if (window.addEventListener) - anchors[i].addEventListener("click", handler, false); - else - anchors[i].attachEvent("onclick", handler); - } - }, - - // ### CHECK ME ### see which functions are invoked via setTimeout - // either directly or indirectly for use of w3c_slidy vs this - show_slide_number: function () { - var timer = w3c_slidy.get_timer(); - w3c_slidy.slide_number_element.innerHTML = timer + "slide".localize() + " " + - (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length; - }, - - // every 200mS check if the location has been changed as a - // result of the user activating the Back button/menu item - // doesn't work for Opera < 9.5 - check_location: function () { - var hash = location.hash; - - if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#")) - w3c_slidy.goto_slide(0); - else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")") - { - var num = parseInt(location.hash.substr(2)); - - if (!isNaN(num)) - w3c_slidy.goto_slide(num-1); - } - - if (w3c_slidy.time_left && w3c_slidy.slide_number > 0) - { - w3c_slidy.show_slide_number(); - - if (w3c_slidy.time_left > 0) - w3c_slidy.time_left -= 200; - } - }, - - get_timer: function () { - var timer = ""; - if (w3c_slidy.time_left) - { - var mins, secs; - secs = Math.floor(w3c_slidy.time_left/1000); - mins = Math.floor(secs / 60); - secs = secs % 60; - timer = (mins ? mins+"m" : "") + secs + "s "; - } - - return timer; - }, - - // this doesn't push location onto history stack for IE - // for which a hidden iframe hack is needed: load page into - // the iframe with script that set's parent's location.hash - // but that won't work for standalone use unless we can - // create the page dynamically via a javascript: URL - set_location: function () { - var uri = w3c_slidy.page_address(location.href); - var hash = "#(" + (w3c_slidy.slide_number+1) + ")"; - - if (w3c_slidy.slide_number >= 0) - uri = uri + hash; - - if (w3c_slidy.ie && !w3c_slidy.ie8) - w3c_slidy.push_hash(hash); - - if (uri != location.href) // && !khtml - location.href = uri; - - if (this.khtml) - hash = "(" + (w3c_slidy.slide_number+1) + ")"; - - if (!this.ie && location.hash != hash && location.hash != "") - location.hash = hash; - - document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; - w3c_slidy.show_slide_number(); - }, - - page_address: function (uri) { - var i = uri.indexOf("#"); - - if (i < 0) - i = uri.indexOf("%23"); - - // check if anchor is entire page - - if (i < 0) - return uri; // yes - - return uri.substr(0, i); - }, - - // only used for IE6 and IE7 - on_frame_loaded: function (hash) { - location.hash = hash; - var uri = w3c_slidy.page_address(location.href); - location.href = uri + hash; - }, - - // history hack with thanks to Bertrand Le Roy - push_hash: function (hash) { - if (hash == "") hash = "#(1)"; - window.location.hash = hash; - - var doc = document.getElementById("historyFrame").contentWindow.document; - doc.open("javascript:'<html></html>'"); - // PWL modified this string literal to break the close script tag - // which otherwise gets parsed when incorporated - doc.write("<html><head><script type=\"text/javascript\">window.parent.w3c_slidy.on_frame_loaded('"+ - (hash) + "');</" + "script></head><body>hello mum</body></html>"); - doc.close(); - }, - - // find current slide based upon location - // first find target anchor and then look - // for associated div element enclosing it - // finally map that to slide number - find_slide_number: function (uri) { - // first get anchor from page location - - var i = uri.indexOf("#"); - - // check if anchor is entire page - if (i < 0) - return 0; // yes - - var anchor = unescape(uri.substr(i+1)); - - // now use anchor as XML ID to find target - var target = document.getElementById(anchor); - - if (!target) - { - // does anchor look like "(2)" for slide 2 ?? - // where first slide is (1) - var re = /\((\d)+\)/; - - if (anchor.match(re)) - { - var num = parseInt(anchor.substring(1, anchor.length-1)); - - if (num > this.slides.length) - num = 1; - - if (--num < 0) - num = 0; - - return num; - } - - // accept [2] for backwards compatibility - re = /\[(\d)+\]/; - - if (anchor.match(re)) - { - var num = parseInt(anchor.substring(1, anchor.length-1)); - - if (num > this.slides.length) - num = 1; - - if (--num < 0) - num = 0; - - return num; - } - - // oh dear unknown anchor - return 0; - } - - // search for enclosing slide - - while (true) - { - // browser coerces html elements to uppercase! - if (target.nodeName.toLowerCase() == "div" && - this.has_class(target, "slide")) - { - // found the slide element - break; - } - - // otherwise try parent element if any - - target = target.parentNode; - - if (!target) - { - return 0; // no luck! - } - }; - - for (i = 0; i < slides.length; ++i) - { - if (slides[i] == target) - return i; // success - } - - // oh dear still no luck - return 0; - }, - - previous_slide: function (incremental) { - if (!w3c_slidy.view_all) - { - var slide; - - if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null) - { - w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown); - w3c_slidy.set_eos_status(false); - } - else if (w3c_slidy.slide_number > 0) - { - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - - w3c_slidy.slide_number = w3c_slidy.slide_number - 1; - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.set_visibility_all_incremental("visible"); - w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); - w3c_slidy.set_eos_status(true); - w3c_slidy.show_slide(slide); - } - - w3c_slidy.set_location(); - - if (!w3c_slidy.ns_pos) - w3c_slidy.refresh_toolbar(200); - } - }, - - next_slide: function (incremental) { - if (!w3c_slidy.view_all) - { - var slide, last = w3c_slidy.last_shown; - - if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1) - w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown); - - if ((!incremental || w3c_slidy.last_shown == null) && - w3c_slidy.slide_number < w3c_slidy.slides.length - 1) - { - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - - w3c_slidy.slide_number = w3c_slidy.slide_number + 1; - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.show_slide(slide); - } - else if (!w3c_slidy.last_shown) - { - if (last && incremental) - w3c_slidy.last_shown = last; - } - - w3c_slidy.set_location(); - - w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - - if (!w3c_slidy.ns_pos) - w3c_slidy.refresh_toolbar(200); - } - }, - - // to first slide with nothing revealed - // i.e. state at start of presentation - first_slide: function () { - if (!w3c_slidy.view_all) - { - var slide; - - if (w3c_slidy.slide_number != 0) - { - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - - w3c_slidy.slide_number = 0; - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.show_slide(slide); - } - - w3c_slidy.set_eos_status( - !w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - w3c_slidy.set_location(); - } - }, - - // goto last slide with everything revealed - // i.e. state at end of presentation - last_slide: function () { - if (!w3c_slidy.view_all) - { - var slide; - - w3c_slidy.last_shown = null; //revealNextItem(lastShown); - - if (w3c_slidy.last_shown == null && - w3c_slidy.slide_number < w3c_slidy.slides.length - 1) - { - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.slide_number = w3c_slidy.slides.length - 1; - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.set_visibility_all_incremental("visible"); - w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); - - w3c_slidy.show_slide(slide); - } - else - { - w3c_slidy.set_visibility_all_incremental("visible"); - w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); - } - - w3c_slidy.set_eos_status(true); - w3c_slidy.set_location(); - } - }, - - - // ### check this and consider add/remove class - set_eos_status: function (state) { - if (this.eos) - this.eos.style.color = (state ? "rgb(240,240,240)" : "red"); - }, - - // first slide is 0 - goto_slide: function (num) { - //alert("going to slide " + (num+1)); - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.slide_number = num; - slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.last_shown = null; - w3c_slidy.set_visibility_all_incremental("hidden"); - w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); - document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; - w3c_slidy.show_slide(slide); - w3c_slidy.show_slide_number(); - }, - - - show_slide: function (slide) { - this.sync_background(slide); - window.scrollTo(0,0); - this.remove_class(slide, "hidden"); - }, - - hide_slide: function (slide) { - this.add_class(slide, "hidden"); - }, - - // show just the backgrounds pertinent to this slide - // when slide background-color is transparent - // this should now work with rgba color values - sync_background: function (slide) { - var background; - var bgColor; - - if (slide.currentStyle) - bgColor = slide.currentStyle["backgroundColor"]; - else if (document.defaultView) - { - var styles = document.defaultView.getComputedStyle(slide,null); - - if (styles) - bgColor = styles.getPropertyValue("background-color"); - else // broken implementation probably due Safari or Konqueror - { - //alert("defective implementation of getComputedStyle()"); - bgColor = "transparent"; - } - } - else - bgColor == "transparent"; - - if (bgColor == "transparent" || - bgColor.indexOf("rgba") >= 0 || - bgColor.indexOf("opacity") >= 0) - { - var slideClass = this.get_class_list(slide); - - for (var i = 0; i < this.backgrounds.length; i++) - { - background = this.backgrounds[i]; - - var bgClass = this.get_class_list(background); - - if (this.matching_background(slideClass, bgClass)) - this.remove_class(background, "hidden"); - else - this.add_class(background, "hidden"); - } - } - else // forcibly hide all backgrounds - this.hide_backgrounds(); - }, - - hide_backgrounds: function () { - for (var i = 0; i < this.backgrounds.length; i++) - { - background = this.backgrounds[i]; - this.add_class(background, "hidden"); - } - }, - - // compare classes for slide and background - matching_background: function (slideClass, bgClass) { - var i, count, pattern, result; - - // define pattern as regular expression - pattern = /\w+/g; - - // check background class names - result = bgClass.match(pattern); - - for (i = count = 0; i < result.length; i++) - { - if (result[i] == "hidden") - continue; - - if (result[i] == "background") - continue; - - ++count; - } - - if (count == 0) // default match - return true; - - // check for matches and place result in array - result = slideClass.match(pattern); - - // now check if desired name is present for background - for (i = count = 0; i < result.length; i++) - { - if (result[i] == "hidden") - continue; - - if (this.has_token(bgClass, result[i])) - return true; - } - - return false; - }, - - resized: function () { - var width = 0; - - if ( typeof( window.innerWidth ) == 'number' ) - width = window.innerWidth; // Non IE browser - else if (document.documentElement && document.documentElement.clientWidth) - width = document.documentElement.clientWidth; // IE6 - else if (document.body && document.body.clientWidth) - width = document.body.clientWidth; // IE4 - - var height = 0; - - if ( typeof( window.innerHeight ) == 'number' ) - height = window.innerHeight; // Non IE browser - else if (document.documentElement && document.documentElement.clientHeight) - height = document.documentElement.clientHeight; // IE6 - else if (document.body && document.body.clientHeight) - height = document.body.clientHeight; // IE4 - - if (height && (width/height > 1.05*1024/768)) - { - width = height * 1024.0/768; - } - - // IE fires onresize even when only font size is changed! - // so we do a check to avoid blocking < and > actions - if (width != w3c_slidy.last_width || height != w3c_slidy.last_height) - { - if (width >= 1100) - w3c_slidy.size_index = 5; // 4 - else if (width >= 1000) - w3c_slidy.size_index = 4; // 3 - else if (width >= 800) - w3c_slidy.size_index = 3; // 2 - else if (width >= 600) - w3c_slidy.size_index = 2; // 1 - else if (width) - w3c_slidy.size_index = 0; - - // add in font size adjustment from meta element e.g. - // <meta name="font-size-adjustment" content="-2" /> - // useful when slides have too much content ;-) - - if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment && - w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length) - w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment; - - // enables cross browser use of relative width/height - // on object elements for use with SVG and Flash media - w3c_slidy.adjust_object_dimensions(width, height); - - if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index]) - { - document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; - } - - w3c_slidy.last_width = width; - w3c_slidy.last_height = height; - - // force reflow to work around Mozilla bug - if (w3c_slidy.ns_pos) - { - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.show_slide(slide); - } - - // force correct positioning of toolbar - w3c_slidy.refresh_toolbar(200); - } - }, - - scrolled: function () { - if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7) - { - w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset(); - // hide toolbar - w3c_slidy.toolbar.style.display = "none"; - - // make it reappear later - if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all) - { - setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000); - w3c_slidy.scrollhack = 1; - } - } - }, - - hide_toolbar: function () { - w3c_slidy.add_class(w3c_slidy.toolbar, "hidden"); - window.focus(); - }, - - // used to ensure IE refreshes toolbar in correct position - refresh_toolbar: function (interval) { - if (!w3c_slidy.ns_pos && !w3c_slidy.ie7) - { - w3c_slidy.hide_toolbar(); - setTimeout(function () {w3c_slidy.show_toolbar(); }, interval); - } - }, - - // restores toolbar after short delay - show_toolbar: function () { - if (w3c_slidy.want_toolbar) - { - w3c_slidy.toolbar.style.display = "block"; - - if (!w3c_slidy.ns_pos) - { - // adjust position to allow for scrolling - var xoffset = w3c_slidy.scroll_x_offset(); - w3c_slidy.toolbar.style.left = xoffset; - w3c_slidy.toolbar.style.right = xoffset; - - // determine vertical scroll offset - //var yoffset = scrollYOffset(); - - // bottom is doc height - window height - scroll offset - //var bottom = documentHeight() - lastHeight - yoffset - - //if (yoffset > 0 || documentHeight() > lastHeight) - // bottom += 16; // allow for height of scrollbar - - w3c_slidy.toolbar.style.bottom = 0; //bottom; - } - - w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden"); - } - - w3c_slidy.scrollhack = 0; - - - // set the keyboard focus to the help link on the - // toolbar to ensure that document has the focus - // IE doesn't always work with window.focus() - // and this hack has benefit of Enter for help - - try - { - if (!w3c_slidy.opera) - w3c_slidy.help_anchor.focus(); - } - catch (e) - { - } - }, - -// invoked via F key - toggle_toolbar: function () { - if (!w3c_slidy.view_all) - { - if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden")) - { - w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden") - w3c_slidy.want_toolbar = 1; - } - else - { - w3c_slidy.add_class(w3c_slidy.toolbar, "hidden") - w3c_slidy.want_toolbar = 0; - } - } - }, - - scroll_x_offset: function () { - if (window.pageXOffset) - return self.pageXOffset; - - if (document.documentElement && - document.documentElement.scrollLeft) - return document.documentElement.scrollLeft; - - if (document.body) - return document.body.scrollLeft; - - return 0; - }, - - scroll_y_offset: function () { - if (window.pageYOffset) - return self.pageYOffset; - - if (document.documentElement && - document.documentElement.scrollTop) - return document.documentElement.scrollTop; - - if (document.body) - return document.body.scrollTop; - - return 0; - }, - - // looking for a way to determine height of slide content - // the slide itself is set to the height of the window - optimize_font_size: function () { - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - - //var dh = documentHeight(); //getDocHeight(document); - var dh = slide.scrollHeight; - var wh = getWindowHeight(); - var u = 100 * dh / wh; - - alert("window utilization = " + u + "% (doc " - + dh + " win " + wh + ")"); - }, - - // from document object - get_doc_height: function (doc) { - if (!doc) - doc = document; - - if (doc && doc.body && doc.body.offsetHeight) - return doc.body.offsetHeight; // ns/gecko syntax - - if (doc && doc.body && doc.body.scrollHeight) - return doc.body.scrollHeight; - - alert("couldn't determine document height"); - }, - - get_window_height: function () { - if ( typeof( window.innerHeight ) == 'number' ) - return window.innerHeight; // Non IE browser - - if (document.documentElement && document.documentElement.clientHeight) - return document.documentElement.clientHeight; // IE6 - - if (document.body && document.body.clientHeight) - return document.body.clientHeight; // IE4 - }, - - document_height: function () { - var sh, oh; - - sh = document.body.scrollHeight; - oh = document.body.offsetHeight; - - if (sh && oh) - { - return (sh > oh ? sh : oh); - } - - // no idea! - return 0; - }, - - smaller: function () { - if (w3c_slidy.size_index > 0) - { - --w3c_slidy.size_index; - } - - w3c_slidy.toolbar.style.display = "none"; - document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.show_slide(slide); - setTimeout(function () {w3c_slidy.show_toolbar(); }, 50); - }, - - bigger: function () { - if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1) - { - ++w3c_slidy.size_index; - } - - w3c_slidy.toolbar.style.display = "none"; - document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - w3c_slidy.hide_slide(slide); - w3c_slidy.show_slide(slide); - setTimeout(function () {w3c_slidy.show_toolbar(); }, 50); - }, - - // enables cross browser use of relative width/height - // on object elements for use with SVG and Flash media - // with thanks to Ivan Herman for the suggestion - adjust_object_dimensions: function (width, height) { - for( var i = 0; i < w3c_slidy.objects.length; i++ ) - { - var obj = this.objects[i]; - var mimeType = obj.getAttribute("type"); - - if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash") - { - if ( !obj.initialWidth ) - obj.initialWidth = obj.getAttribute("width"); - - if ( !obj.initialHeight ) - obj.initialHeight = obj.getAttribute("height"); - - if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" ) - { - var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1)); - var newW = width * (w/100.0); - obj.setAttribute("width",newW); - } - - if ( obj.initialHeight && - obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" ) - { - var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1)); - var newH = height * (h/100.0); - obj.setAttribute("height", newH); - } - } - } - }, - - // needed for Opera to inhibit default behavior - // since Opera delivers keyPress even if keyDown - // was cancelled - key_press: function (event) { - if (!event) - event = window.event; - - if (!w3c_slidy.key_wanted) - return w3c_slidy.cancel(event); - - return true; - }, - - // See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes - key_down: function (event) { - var key; - - w3c_slidy.key_wanted = true; - - if (!event) - event = window.event; - - // kludge around NS/IE differences - if (window.event) - key = window.event.keyCode; - else if (event.which) - key = event.which; - else - return true; // Yikes! unknown browser - - // ignore event if key value is zero - // as for alt on Opera and Konqueror - if (!key) - return true; - - // check for concurrent control/command/alt key - // but are these only present on mouse events? - - if (event.ctrlKey || event.altKey || event.metaKey) - return true; - - // dismiss table of contents if visible - if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40) - { - w3c_slidy.hide_table_of_contents(); - - if (key == 27 || key == 84 || key == 67) - return w3c_slidy.cancel(event); - } - - if (key == 34) // Page Down - { - if (w3c_slidy.view_all) - return true; - - w3c_slidy.next_slide(false); - return w3c_slidy.cancel(event); - } - else if (key == 33) // Page Up - { - if (w3c_slidy.view_all) - return true; - - w3c_slidy.previous_slide(false); - return w3c_slidy.cancel(event); - } - else if (key == 32) // space bar - { - w3c_slidy.next_slide(true); - return w3c_slidy.cancel(event); - } - else if (key == 37) // Left arrow - { - w3c_slidy.previous_slide(!event.shiftKey); - return w3c_slidy.cancel(event); - } - else if (key == 36) // Home - { - w3c_slidy.first_slide(); - return w3c_slidy.cancel(event); - } - else if (key == 35) // End - { - w3c_slidy.last_slide(); - return w3c_slidy.cancel(event); - } - else if (key == 39) // Right arrow - { - w3c_slidy.next_slide(!event.shiftKey); - return w3c_slidy.cancel(event); - } - else if (key == 13) // Enter - { - if (w3c_slidy.outline) - { - if (w3c_slidy.outline.visible) - w3c_slidy.fold(w3c_slidy.outline); - else - w3c_slidy.unfold(w3c_slidy.outline); - - return w3c_slidy.cancel(event); - } - } - else if (key == 188) // < for smaller fonts - { - w3c_slidy.smaller(); - return w3c_slidy.cancel(event); - } - else if (key == 190) // > for larger fonts - { - w3c_slidy.bigger(); - return w3c_slidy.cancel(event); - } - else if (key == 189 || key == 109) // - for smaller fonts - { - w3c_slidy.smaller(); - return w3c_slidy.cancel(event); - } - else if (key == 187 || key == 191 || key == 107) // = + for larger fonts - { - w3c_slidy.bigger(); - return w3c_slidy.cancel(event); - } - else if (key == 83) // S for smaller fonts - { - w3c_slidy.smaller(); - return w3c_slidy.cancel(event); - } - else if (key == 66) // B for larger fonts - { - w3c_slidy.bigger(); - return w3c_slidy.cancel(event); - } - else if (key == 90) // Z for last slide - { - w3c_slidy.last_slide(); - return w3c_slidy.cancel(event); - } - else if (key == 70) // F for toggle toolbar - { - w3c_slidy.toggle_toolbar(); - return w3c_slidy.cancel(event); - } - else if (key == 65) // A for toggle view single/all slides - { - w3c_slidy.toggle_view(); - return w3c_slidy.cancel(event); - } - else if (key == 75) // toggle action of left click for next page - { - w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled; - var alert_msg = (w3c_slidy.mouse_click_enabled ? - "enabled" : "disabled") + " mouse click advance"; - - alert(alert_msg.localize()); - return w3c_slidy.cancel(event); - } - else if (key == 84 || key == 67) // T or C for table of contents - { - if (w3c_slidy.toc) - w3c_slidy.toggle_table_of_contents(); - - return w3c_slidy.cancel(event); - } - else if (key == 72) // H for help - { - window.location = w3c_slidy.help_page; - return w3c_slidy.cancel(event); - } - //else alert("key code is "+ key); - - return true; - }, - - // safe for both text/html and application/xhtml+xml - create_element: function (name) { - if (this.xhtml && (typeof document.createElementNS != 'undefined')) - return document.createElementNS("http://www.w3.org/1999/xhtml", name) - - return document.createElement(name); - }, - - get_element_style: function (elem, IEStyleProp, CSSStyleProp) { - if (elem.currentStyle) - { - return elem.currentStyle[IEStyleProp]; - } - else if (window.getComputedStyle) - { - var compStyle = window.getComputedStyle(elem, ""); - return compStyle.getPropertyValue(CSSStyleProp); - } - return ""; - }, - - // the string str is a whitespace separated list of tokens - // test if str contains a particular token, e.g. "slide" - has_token: function (str, token) { - if (str) - { - // define pattern as regular expression - var pattern = /\w+/g; - - // check for matches - // place result in array - var result = str.match(pattern); - - // now check if desired token is present - for (var i = 0; i < result.length; i++) - { - if (result[i] == token) - return true; - } - } - - return false; - }, - - get_class_list: function (element) { - if (typeof element.className != 'undefined') - return element.className; - - return element.getAttribute("class"); - }, - - has_class: function (element, name) { - if (element.nodeType != 1) - return false; - - var regexp = new RegExp("(^| )" + name + "\W*"); - - if (typeof element.className != 'undefined') - return regexp.test(element.className); - - return regexp.test(element.getAttribute("class")); - }, - - remove_class: function (element, name) { - var regexp = new RegExp("(^| )" + name + "\W*"); - var clsval = ""; - - if (typeof element.className != 'undefined') - { - clsval = element.className; - - if (clsval) - { - clsval = clsval.replace(regexp, ""); - element.className = clsval; - } - } - else - { - clsval = element.getAttribute("class"); - - if (clsval) - { - clsval = clsval.replace(regexp, ""); - element.setAttribute("class", clsval); - } - } - }, - - add_class: function (element, name) { - if (!this.has_class(element, name)) - { - if (typeof element.className != 'undefined') - element.className += " " + name; - else - { - var clsval = element.getAttribute("class"); - clsval = clsval ? clsval + " " + name : name; - element.setAttribute("class", clsval); - } - } - }, - - // HTML elements that can be used with class="incremental" - // note that you can also put the class on containers like - // up, ol, dl, and div to make their contents appear - // incrementally. Upper case is used since this is what - // browsers report for HTML node names (text/html). - incremental_elements: null, - okay_for_incremental: function (name) { - if (!this.incremental_elements) - { - var inclist = new Array(); - inclist["p"] = true; - inclist["pre"] = true; - inclist["li"] = true; - inclist["blockquote"] = true; - inclist["dt"] = true; - inclist["dd"] = true; - inclist["h2"] = true; - inclist["h3"] = true; - inclist["h4"] = true; - inclist["h5"] = true; - inclist["h6"] = true; - inclist["span"] = true; - inclist["address"] = true; - inclist["table"] = true; - inclist["tr"] = true; - inclist["th"] = true; - inclist["td"] = true; - inclist["img"] = true; - inclist["object"] = true; - this.incremental_elements = inclist; - } - return this.incremental_elements[name.toLowerCase()]; - }, - - next_incremental_item: function (node) { - var br = this.is_xhtml ? "br" : "BR"; - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - - for (;;) - { - node = w3c_slidy.next_node(slide, node); - - if (node == null || node.parentNode == null) - break; - - if (node.nodeType == 1) // ELEMENT - { - if (node.nodeName == br) - continue; - - if (w3c_slidy.has_class(node, "incremental") - && w3c_slidy.okay_for_incremental(node.nodeName)) - return node; - - if (w3c_slidy.has_class(node.parentNode, "incremental") - && !w3c_slidy.has_class(node, "non-incremental")) - return node; - } - } - - return node; - }, - - previous_incremental_item: function (node) { - var br = this.is_xhtml ? "br" : "BR"; - var slide = w3c_slidy.slides[w3c_slidy.slide_number]; - - for (;;) - { - node = w3c_slidy.previous_node(slide, node); - - if (node == null || node.parentNode == null) - break; - - if (node.nodeType == 1) - { - if (node.nodeName == br) - continue; - - if (w3c_slidy.has_class(node, "incremental") - && w3c_slidy.okay_for_incremental(node.nodeName)) - return node; - - if (w3c_slidy.has_class(node.parentNode, "incremental") - && !w3c_slidy.has_class(node, "non-incremental")) - return node; - } - } - - return node; - }, - - // set visibility for all elements on current slide with - // a parent element with attribute class="incremental" - set_visibility_all_incremental: function (value) { - var node = this.next_incremental_item(null); - - if (value == "hidden") - { - while (node) - { - w3c_slidy.add_class(node, "invisible"); - node = w3c_slidy.next_incremental_item(node); - } - } - else // value == "visible" - { - while (node) - { - w3c_slidy.remove_class(node, "invisible"); - node = w3c_slidy.next_incremental_item(node); - } - } - }, - - // reveal the next hidden item on the slide - // node is null or the node that was last revealed - reveal_next_item: function (node) { - node = w3c_slidy.next_incremental_item(node); - - if (node && node.nodeType == 1) // an element - w3c_slidy.remove_class(node, "invisible"); - - return node; - }, - - // exact inverse of revealNextItem(node) - hide_previous_item: function (node) { - if (node && node.nodeType == 1) // an element - w3c_slidy.add_class(node, "invisible"); - - return this.previous_incremental_item(node); - }, - - // left to right traversal of root's content - next_node: function (root, node) { - if (node == null) - return root.firstChild; - - if (node.firstChild) - return node.firstChild; - - if (node.nextSibling) - return node.nextSibling; - - for (;;) - { - node = node.parentNode; - - if (!node || node == root) - break; - - if (node && node.nextSibling) - return node.nextSibling; - } - - return null; - }, - - // right to left traversal of root's content - previous_node: function (root, node) { - if (node == null) - { - node = root.lastChild; - - if (node) - { - while (node.lastChild) - node = node.lastChild; - } - - return node; - } - - if (node.previousSibling) - { - node = node.previousSibling; - - while (node.lastChild) - node = node.lastChild; - - return node; - } - - if (node.parentNode != root) - return node.parentNode; - - return null; - }, - - previous_sibling_element: function (el) { - el = el.previousSibling; - - while (el && el.nodeType != 1) - el = el.previousSibling; - - return el; - }, - - next_sibling_element: function (el) { - el = el.nextSibling; - - while (el && el.nodeType != 1) - el = el.nextSibling; - - return el; - }, - - first_child_element: function (el) { - var node; - - for (node = el.firstChild; node; node = node.nextSibling) - { - if (node.nodeType == 1) - break; - } - - return node; - }, - - first_tag: function (element, tag) { - var node; - - if (!this.is_xhtml) - tag = tag.toUpperCase(); - - for (node = element.firstChild; node; node = node.nextSibling) - { - if (node.nodeType == 1 && node.nodeName == tag) - break; - } - - return node; - }, - - hide_selection: function () { - if (window.getSelection) // Firefox, Chromium, Safari, Opera - { - var selection = window.getSelection(); - - if (selection.rangeCount > 0) - { - var range = selection.getRangeAt(0); - range.collapse (false); - } - } - else // Internet Explorer - { - var textRange = document.selection.createRange (); - textRange.collapse (false); - } - }, - - get_selected_text: function () { - try - { - if (window.getSelection) - return window.getSelection().toString(); - - if (document.getSelection) - return document.getSelection().toString(); - - if (document.selection) - return document.selection.createRange().text; - } - catch (e) - { - } - - return ""; - }, - - // make note of length of selected text - // as this evaluates to zero in click event - mouse_button_up: function (e) { - w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length; - }, - - // right mouse button click is reserved for context menus - // it is more reliable to detect rightclick than leftclick - mouse_button_click: function (e) { - var rightclick = false; - var leftclick = false; - var middleclick = false; - var target; - - if (!e) - var e = window.event; - - if (e.target) - target = e.target; - else if (e.srcElement) - target = e.srcElement; - - // work around Safari bug - if (target.nodeType == 3) - target = target.parentNode; - - if (e.which) // all browsers except IE - { - leftclick = (e.which == 1); - middleclick = (e.which == 2); - rightclick = (e.which == 3); - } - else if (e.button) - { - // Konqueror gives 1 for left, 4 for middle - // IE6 gives 0 for left and not 1 as I expected - - if (e.button == 4) - middleclick = true; - - // all browsers agree on 2 for right button - rightclick = (e.button == 2); - } - else leftclick = true; -/* - alert("you clicked over a " + target.nodeName + " element\n" + - "w3c_slidy.mouse_click_enabled = " + w3c_slidy.mouse_click_enabled + "\n" + - "leftclick = " + leftclick + "\n" + - "selected text length = " + w3c_slidy.selected_text_len); - //alert("selected text length = " + w3c_slidy.selected_text_len); -*/ - if (w3c_slidy.selected_text_len > 0) - { - w3c_slidy.stop_propagation(e); - e.cancel = true; - e.returnValue = false; - return false; - } - - // dismiss table of contents - w3c_slidy.hide_table_of_contents(); - - // check if target is something that probably want's clicks - // e.g. a, embed, object, input, textarea, select, option - var tag = target.nodeName.toLowerCase(); - - if (w3c_slidy.mouse_click_enabled && leftclick && - tag != "a" && - tag != "embed" && - tag != "object" && - tag != "video" && - tag != "input" && - tag != "textarea" && - tag != "select" && - tag != "option" && - !target.onclick) - { - w3c_slidy.next_slide(true); - w3c_slidy.stop_propagation(e); - e.cancel = true; - e.returnValue = false; - return false; - } - }, - - get_key: function (e) - { - var key; - - // kludge around NS/IE differences - if (typeof window.event != "undefined") - key = window.event.keyCode; - else if (e.which) - key = e.which; - - return key; - }, - - get_target: function (e) { - var target; - - if (!e) - e = window.event; - - if (e.target) - target = e.target; - else if (e.srcElement) - target = e.srcElement; - - if (target.nodeType != 1) - target = target.parentNode; - - return target; - }, - - // does display property provide correct defaults? - is_block: function (elem) { - var tag = elem.nodeName.toLowerCase(); - - return tag == "ol" || tag == "ul" || tag == "p" || - tag == "li" || tag == "table" || tag == "pre" || - tag == "h1" || tag == "h2" || tag == "h3" || - tag == "h4" || tag == "h5" || tag == "h6" || - tag == "blockquote" || tag == "address"; - }, - - add_listener: function (element, event, handler) { - if (window.addEventListener) - element.addEventListener(event, handler, false); - else - element.attachEvent("on"+event, handler); - }, - - // used to prevent event propagation from field controls - stop_propagation: function (event) { - event = event ? event : window.event; - event.cancelBubble = true; // for IE - - if (event.stopPropagation) - event.stopPropagation(); - - return true; - }, - - cancel: function (event) { - if (event) - { - event.cancel = true; - event.returnValue = false; - - if (event.preventDefault) - event.preventDefault(); - } - - w3c_slidy.key_wanted = false; - return false; - } -}; - -// for each language define an associative array -// and also the help text which is longer - -var w3c_slidy_i18n = { - strings_es: { - "slide":"pág.", - "help?":"Ayuda", - "contents?":"Índice", - "table of contents":"tabla de contenidos", - "Table of Contents":"Tabla de Contenidos", - "restart presentation":"Reiniciar presentación", - "restart?":"Inicio" - }, - help_es: - "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " + - "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.", - - strings_ca: { - "slide":"pàg..", - "help?":"Ajuda", - "contents?":"Índex", - "table of contents":"taula de continguts", - "Table of Contents":"Taula de Continguts", - "restart presentation":"Reiniciar presentació", - "restart?":"Inici" - }, - help_ca: - "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " + - "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.", - - strings_cs: { - "slide":"snímek", - "help?":"nápověda", - "contents?":"obsah", - "table of contents":"obsah prezentace", - "Table of Contents":"Obsah prezentace", - "restart presentation":"znovu spustit prezentaci", - "restart?":"restart" - }, - help_cs: - "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " + - "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " + - "dá zvětšit a zmenšit pomocí kláves B a S.", - - strings_nl: { - "slide":"pagina", - "help?":"Help?", - "contents?":"Inhoud?", - "table of contents":"inhoudsopgave", - "Table of Contents":"Inhoudsopgave", - "restart presentation":"herstart presentatie", - "restart?":"Herstart?" - }, - help_nl: - "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " + - "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.", - - strings_de: { - "slide":"Seite", - "help?":"Hilfe", - "contents?":"Übersicht", - "table of contents":"Inhaltsverzeichnis", - "Table of Contents":"Inhaltsverzeichnis", - "restart presentation":"Präsentation neu starten", - "restart?":"Neustart" - }, - help_de: - "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " + - "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.", - - strings_pl: { - "slide":"slajd", - "help?":"pomoc?", - "contents?":"spis treści?", - "table of contents":"spis treści", - "Table of Contents":"Spis Treści", - "restart presentation":"Restartuj prezentację", - "restart?":"restart?" - }, - help_pl: - "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" + - "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.", - - strings_fr: { - "slide":"page", - "help?":"Aide", - "contents?":"Index", - "table of contents":"table des matières", - "Table of Contents":"Table des matières", - "restart presentation":"Recommencer l'exposé", - "restart?":"Début" - }, - help_fr: - "Naviguez avec la souris, la barre d'espace, les flèches " + - "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " + - "les touches S et B pour modifier la taille de la police.", - - strings_hu: { - "slide":"oldal", - "help?":"segítség", - "contents?":"tartalom", - "table of contents":"tartalomjegyzék", - "Table of Contents":"Tartalomjegyzék", - "restart presentation":"bemutató újraindítása", - "restart?":"újraindítás" - }, - help_hu: - "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " + - "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " + - "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " + - "a szöveg méretét.", - - strings_it: { - "slide":"pag.", - "help?":"Aiuto", - "contents?":"Indice", - "table of contents":"indice", - "Table of Contents":"Indice", - "restart presentation":"Ricominciare la presentazione", - "restart?":"Inizio" - }, - help_it: - "Navigare con mouse, barra spazio, frecce sinistra/destra o " + - "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.", - - strings_el: { - "slide":"σελίδα", - "help?":"βοήθεια;", - "contents?":"περιεχόμενα;", - "table of contents":"πίνακας περιεχομένων", - "Table of Contents":"Πίνακας Περιεχομένων", - "restart presentation":"επανεκκίνηση παρουσίασης", - "restart?":"επανεκκίνηση;" - }, - help_el: - "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " + - "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " + - "το μέγεθος της γραμματοσειράς.", - - strings_ja: { - "slide":"スライド", - "help?":"ヘルプ", - "contents?":"目次", - "table of contents":"目次を表示", - "Table of Contents":"目次", - "restart presentation":"最初から再生", - "restart?":"最初から" - }, - help_ja: - "マウス左クリック ・ スペース ・ 左右キー " + - "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更", - - strings_zh: { - "slide":"幻灯片", - "help?":"帮助?", - "contents?":"内容?", - "table of contents":"目录", - "Table of Contents":"目录", - "restart presentation":"重新启动展示", - "restart?":"重新启动?" - }, - help_zh: - "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " + - "用 S, B 改变字体大小.", - - strings_ru: { - "slide":"слайд", - "help?":"помощь?", - "contents?":"содержание?", - "table of contents":"оглавление", - "Table of Contents":"Оглавление", - "restart presentation":"перезапустить презентацию", - "restart?":"перезапуск?" - }, - help_ru: - "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" + - "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.", - - strings_sv: { - "slide":"sida", - "help?":"hjälp", - "contents?":"innehåll", - "table of contents":"innehållsförteckning", - "Table of Contents":"Innehållsförteckning", - "restart presentation":"visa presentationen från början", - "restart?":"börja om" - }, - help_sv: - "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " + - "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " + - "Använd tangenterna S och B för att ändra textens storlek.", - -// each such language array is declared in the localize array -// which is set on string prototype and used as in "foo".localize(); - localize: { - "es":this.strings_es, - "ca":this.strings_ca, - "cs":this.strings_cs, - "nl":this.strings_nl, - "de":this.strings_de, - "pl":this.strings_pl, - "fr":this.strings_fr, - "hu":this.strings_hu, - "it":this.strings_it, - "el":this.strings_el, - "jp":this.strings_ja, - "zh":this.strings_zh, - "ru":this.strings_ru, - "sv":this.strings_sv - }, - - init: function () { - var i18n = w3c_slidy_i18n; - var help_text = w3c_slidy.help_text; - i18n.strings_es[help_text] = i18n.help_es; - i18n.strings_ca[help_text] = i18n.help_ca; - i18n.strings_cs[help_text] = i18n.help_cs; - i18n.strings_nl[help_text] = i18n.help_nl; - i18n.strings_de[help_text] = i18n.help_de; - i18n.strings_pl[help_text] = i18n.help_pl; - i18n.strings_fr[help_text] = i18n.help_fr; - i18n.strings_hu[help_text] = i18n.help_hu; - i18n.strings_it[help_text] = i18n.help_it; - i18n.strings_el[help_text] = i18n.help_el; - i18n.strings_ja[help_text] = i18n.help_ja; - i18n.strings_zh[help_text] = i18n.help_zh; - i18n.strings_ru[help_text] = i18n.help_ru; - i18n.strings_sv[help_text] = i18n.help_sv; - - w3c_slidy.lang = document.body.parentNode.getAttribute("lang"); - - if (!w3c_slidy.lang) - w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang"); - - if (!w3c_slidy.lang) - w3c_slidy.lang = "en"; - - // add localize method to all strings - // for use as in "contents".localize() - String.prototype.localize = function() { - if (this == "") - return this; - - // try full language code, e.g. en-US - var s, lookup = w3c_slidy_i18n.localize[w3c_slidy.lang]; - - if (lookup) - { - s = lookup[this]; - - if (s) - return s; - } - - // strip country code suffix, e.g. - // try en if undefined for en-US - var lg = w3c_slidy.lang.split("-"); - - if (lg.length > 1) - { - lookup = w3c_slidy_i18n.localize[lg[0]]; - - if (lookup) - { - s = lookup[this]; - - if (s) - return s; - } - } - - // otherwise string as is - return this; - }; - } -}; - -// hack for back button behavior -if (w3c_slidy.ie6 || w3c_slidy.ie7) -{ - document.write("<iframe id='historyFrame' " + - "src='javascript:\"<html"+"></"+"html>\"' " + - "height='1' width='1' " + - "style='position:absolute;left:-800px'></iframe>"); -} - -// attach event listeners for initialization -w3c_slidy.set_up(); - -// hide the slides as soon as body element is available -// to reduce annoying screen mess before the onload event -setTimeout(w3c_slidy.hide_slides, 50); - diff --git a/source-builder/sb/asciidoc/javascripts/toc.js b/source-builder/sb/asciidoc/javascripts/toc.js deleted file mode 100644 index 06127bf..0000000 --- a/source-builder/sb/asciidoc/javascripts/toc.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * IMPORTANT: - * This file (toc.js is) deprecated (superceded by asciidoc-xhtml11.js in - * AsciiDoc 8.5.1. toc.js is retained for compatibility with user customised - * (pre 8.5.1) xhtml11 [header] and [footer] sections. - * - */ - -/* Author: Mihai Bazon, September 2002 - * http://students.infoiasi.ro/~mishoo - * - * Table Of Content generator - * Version: 0.4 - * - * Feel free to use this script under the terms of the GNU General Public - * License, as long as you do not remove or alter this notice. - */ - - /* modified by Troy D. Hanson, September 2006. License: GPL */ - /* modified by Stuart Rackham, October 2006. License: GPL */ - -function getText(el) { - var text = ""; - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants. - text += i.data; - else if (i.firstChild != null) - text += getText(i); - } - return text; -} - -function TocEntry(el, text, toclevel) { - this.element = el; - this.text = text; - this.toclevel = toclevel; -} - -function tocEntries(el, toclevels) { - var result = new Array; - var re = new RegExp('[hH]([2-'+(toclevels+1)+'])'); - // Function that scans the DOM tree for header elements (the DOM2 - // nodeIterator API would be a better technique but not supported by all - // browsers). - var iterate = function (el) { - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { - var mo = re.exec(i.tagName) - if (mo) - result[result.length] = new TocEntry(i, getText(i), mo[1]-1); - iterate(i); - } - } - } - iterate(el); - return result; -} - -// This function does the work. toclevels = 1..4. -function generateToc(toclevels) { - var toc = document.getElementById("toc"); - var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels); - for (var i = 0; i < entries.length; ++i) { - var entry = entries[i]; - if (entry.element.id == "") - entry.element.id = "toc" + i; - var a = document.createElement("a"); - a.href = "#" + entry.element.id; - a.appendChild(document.createTextNode(entry.text)); - var div = document.createElement("div"); - div.appendChild(a); - div.className = "toclevel" + entry.toclevel; - toc.appendChild(div); - } - if (entries.length == 0) - document.getElementById("header").removeChild(toc); -} |