/***************************************************************************** * * * HotEqn Equation Viewer Basic Applet * * * ****************************************************************************** * Java Applet to view mathematical Equations provided in the LaTeX language * ****************************************************************************** Copyright 2006 Stefan Müller and Christian Schmid, modified by Rene Grothmann This file is part of the HotEqn package. HotEqn 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; HotEqn is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package atp; import java.util.Vector; // Referenced classes of package atp: // e class b { private String _fldelse; private int _fldcase; private int _flddo; private boolean _fldbyte; private final Vector _fldfor; private boolean _fldchar; private boolean a; private int _fldnew; private int _fldint; private StringBuffer _fldif; public static char TranslationC[] = { '\u03B1', '\u0391', '\u03B2', '\u0392', '\u03B3', '\u0393', '\u03B4', '\u0394', '\u03B5', '\u0395', '\u03D5', '\u03A6', '\u03C6', '\u03B3', '\u0393', '\u03B7', '\u0397', '\u03B9', '\u0399', '\u03BA', '\u039A', '\u03BB', '\u039B', '\u03BC', '\u039C', '\u03BD', '\u039D', '\u03BF', '\u03A9', '\u03C0', '\u03A0', '\u03C7', '\u03A7', '\u03C1', '\u03A1', '\u03C3', '\u03A3', '\u03C4', '\u03A4', '\u03C5', '\u03A5', '\u03C8', '\u03A8', '\u03C9', '\u03A9', '\u03BE', '\u039E', '\u03C7', '\u03A7', '\u03B6', '\u0396', '\u03B8', '\u0398', '$', '%', '&', 'ß', '\u00A9', '\u00AE', '\u2030', '\u00BD', '\u2153', '\u00BC', '\u00BE', '\u2154', '\u00B1', '\u2202', '\u2206', '\u221E', }; public String TranslationS[] = { "alpha", "Alpha", "beta", "Beta", "gamma", "Gamma", "delta", "Delta", "epsilon", "Epsilon", "phi", "Phi", "varphi", "gamma", "Gamma", "eta", "Eta", "iota", "I", "kappa", "Kappa", "lambda", "Lambda", "mu", "Mu", "nu", "Nu", "omikron", "Omikron", "pi", "Pi", "chi", "Chi", "rho", "Rho", "sigma", "Sigma", "tau", "Tau", "uu", "Uu", "psi", "Psi", "omega", "Omega", "chi", "Chi", "ypsilon", "Ypsilon", "zeta", "Zeta", "theta", "Theta", "dollar", "percent", "ampersand", "paragraph", "copyright", "trademark", "promille", "half", "third", "quarter", "threequarters", "twothirds", "pm", "partial", "deltaop", "infty", }; public b(final String s) { _fldbyte = false; _fldfor = new Vector(50, 50); _fldchar = false; a = false; _fldnew = 0; _fldint = 0; _fldif = new StringBuffer(""); new e(99); a(s); } public String a(final int i, final int j) { _fldnew = Math.min(i, j); _fldint = Math.max(i, j); _fldchar = true; _fldif = new StringBuffer(""); a(_fldelse); _fldchar = false; return _fldif.toString(); } public void a(final String s) { _fldelse = s; int i = 0; _fldbyte = false; _flddo = -1; _fldcase = -1; _fldfor.removeAllElements(); a(); while (!_fldbyte) { _flddo++; if (_fldchar && _flddo == _fldnew) { a = true; } _fldfor.addElement(_mthtry()); if (_fldchar && _flddo == _fldint) { a = false; } } _flddo = -1; for (; i < _fldfor.size(); i++) { if (((e) _fldfor.elementAt(i)).y == 114) { int k = i - 1; int j1 = 0; for (; k > 0; k--) { if (((e) _fldfor.elementAt(k)).y == 4) { j1--; } else if (((e) _fldfor.elementAt(k)).y == 3) { j1++; } if (j1 == 1) { break; } } int i2 = i + 1; j1 = 0; for (; i2 < _fldfor.size(); i2++) { if (((e) _fldfor.elementAt(i2)).y == 4) { j1++; } else if (((e) _fldfor.elementAt(i2)).y == 3) { j1--; } if (j1 == 1) { break; } } if (j1 == 1 && k >= 0) { _fldfor.insertElementAt(new e(109, ")"), i2 + 1); _fldfor.insertElementAt(new e(17), i2 + 1); _fldfor.setElementAt(new e(4), i); _fldfor.insertElementAt(new e(3), i + 1); _fldfor.insertElementAt(new e(115), k); _fldfor.insertElementAt(new e(109, "("), k); _fldfor.insertElementAt(new e(16), k); i += 4; } } else if (((e) _fldfor.elementAt(i)).y == 115) { int l = i - 1; int k1 = 0; for (; l > 0; l--) { if (((e) _fldfor.elementAt(l)).y == 4) { k1--; } else if (((e) _fldfor.elementAt(l)).y == 3) { k1++; } if (k1 == 1) { break; } } if (l >= 0) { _fldfor.setElementAt(new e(4), i); _fldfor.insertElementAt(new e(3), i + 1); _fldfor.insertElementAt(new e(115), l); i += 2; } } } for (int j = 0; j < _fldfor.size() - 2; j++) { if (((e) _fldfor.elementAt(j)).y == 13 && ((e) _fldfor.elementAt(j + 1)).y == 109) { int i1 = j + 2; int l1 = 0; int j2 = 1; for (; i1 < _fldfor.size(); i1++) { if (((e) _fldfor.elementAt(i1)).y == 4) { l1--; } else if (((e) _fldfor.elementAt(i1)).y == 3) { l1++; } if (l1 != 0) { continue; } if (((e) _fldfor.elementAt(i1)).w.equals("[")) { j2++; } else if (((e) _fldfor.elementAt(i1)).w.equals("]")) { j2--; } if (j2 != 0) { continue; } _fldfor.setElementAt(new e(4), i1); break; } j++; } } } public void _mthdo() { _flddo = -1; } public int _mthif() { return _flddo; } public void a(final int i) { _flddo = i; } public e _mthint() { _flddo++; if (_flddo >= _fldfor.size()) { _flddo = _fldfor.size() - 1; return new e(99); } else { return (e) _fldfor.elementAt(_flddo); } } public boolean _mthnew() { return _flddo == _fldfor.size() - 1; } private char _mthfor() { return _fldelse.charAt(_fldcase); } private void a() { if (a) { _fldif.append(_fldelse.charAt(_fldcase)); } if (_fldcase < _fldelse.length() - 1) { _fldcase++; _fldbyte = false; } else { _fldcase = _fldelse.length(); _fldbyte = true; } } private e _mthtry() { final StringBuffer stringbuffer = new StringBuffer(""); new String(""); new e(); while (!_fldbyte) { char c = _mthfor(); switch (c) { case 9: // '\t' case 10: // '\n' case 13: // '\r' a(); break; case 32: // ' ' a(); return new e(25, new String(" ")); case 33: // '!' case 35: // '#' case 42: // '*' case 43: // '+' case 44: // ',' case 45: // '-' case 47: // '/' case 58: // ':' case 59: // ';' case 60: // '<' case 61: // '=' case 62: // '>' case 126: // '~' a(); return new e(108, String.valueOf(c)); case 123: // '{' a(); return new e(3); case 125: // '}' a(); return new e(4); case 40: // '(' case 41: // ')' case 91: // '[' case 93: // ']' case 124: // '|' a(); return new e(109, String.valueOf(c)); case 38: // '&' a(); return new e(7); case 39: // '\'' case 64: // '@' case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' case 37: // '%' stringbuffer.append(c); a(); for (boolean flag1 = false; !_fldbyte && !flag1;) { c = _mthfor(); switch (c) { case 39: // '\'' case 64: // '@' case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' stringbuffer.append(c); a(); break; case 40: // '(' case 41: // ')' case 42: // '*' case 43: // '+' case 44: // ',' case 45: // '-' case 46: // '.' case 47: // '/' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' case 58: // ':' case 59: // ';' case 60: // '<' case 61: // '=' case 62: // '>' case 63: // '?' case 91: // '[' case 92: // '\\' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' default: flag1 = true; break; } } return new e(1, stringbuffer.toString()); case 46: // '.' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' stringbuffer.append(c); a(); for (boolean flag2 = false; !_fldbyte && !flag2;) { c = _mthfor(); switch (c) { case 46: // '.' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' stringbuffer.append(c); a(); break; case 47: // '/' default: flag2 = true; break; } } return new e(2, stringbuffer.toString()); case 92: // '\\' a(); if (_fldbyte) { break; } c = _mthfor(); switch (c) { case 92: // '\\' a(); return new e(8); case 123: // '{' a(); return new e(109, String.valueOf(c)); case 124: // '|' a(); return new e(109, "||"); case 125: // '}' a(); return new e(109, String.valueOf(c)); case 44: // ',' a(); return new e(113, "3"); case 58: // ':' a(); return new e(113, "4"); case 59: // ';' a(); return new e(113, "5"); case 33: // '!' a(); return new e(113, "-3"); case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' stringbuffer.append(c); a(); for (boolean flag4 = false; !_fldbyte && !flag4;) { c = _mthfor(); switch (c) { case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' stringbuffer.append(c); a(); break; case 91: // '[' case 92: // '\\' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' default: flag4 = true; break; } } final String s1 = stringbuffer.toString(); if (s1.equals("acute")) { return new e(22, "\264"); } if (s1.equals("array")) { return new e(15); } if (s1.equals("bar")) { return new e(14, "bar"); } if (s1.equals("ddot")) { return new e(22, ".."); } if (s1.equals("dot")) { return new e(22, "."); } if (s1.equals("frac")) { return new e(12); } if (s1.equals("dfrac")) { return new e(1001); } if (s1.equals("grave")) { return new e(22, "`"); } if (s1.equals("hat")) { return new e(22, "^"); } if (s1.equals("int")) { return new e(20, "int"); } if (s1.equals("oint")) { return new e(20, "oint"); } if (s1.equals("left")) { return new e(16); } if (s1.equals("limsup")) { return new e(24, "lim sup"); } if (s1.equals("liminf")) { return new e(24, "lim inf"); } if (s1.equals("prod")) { return new e(20, "prod"); } if (s1.equals("right")) { return new e(17); } if (s1.equals("sqrt")) { return new e(13); } if (s1.equals("sum")) { return new e(20, "sum"); } if (s1.equals("tilde")) { return new e(22, "~"); } if (s1.equals("vec")) { return new e(14); } if (s1.equals("widehat")) { return new e(14, "widehat"); } if (s1.equals("widetilde")) { return new e(14, "widetilde"); } if (s1.equals("quad")) { return new e(113, "18"); } if (s1.equals("qquad")) { return new e(113, "36"); } if (s1.equals("backslash")) { return new e(2, "\\"); } if (s1.equals("langle")) { return new e(5, "<"); } if (s1.equals("rangle")) { return new e(5, ">"); } if (s1.equals("not")) { return new e(110); } if (s1.equals("atop")) { return new e(115); } if (s1.equals("choose")) { return new e(114); } if (s1.equals("overline")) { return new e(116); } if (s1.equals("underline")) { return new e(117); } if (s1.equals("overbrace")) { return new e(118); } if (s1.equals("underbrace")) { return new e(119); } if (s1.equals("stackrel")) { return new e(120); } if (s1.equals("begin")) { return new e(50); } if (s1.equals("end")) { return new e(51); } if (s1.equals("fgcolor")) { return new e(121); } if (s1.equals("bgcolor")) { return new e(122); } if (s1.equals("fbox")) { return new e(123); } if (s1.equals("mbox")) { return new e(124); } if ((" arccos arcsin arctan arg cos cosh cot coth csc def deg dim exp hom ker lg ln lo" + "g sec sin sinh tan tanh ").indexOf(" " + s1 + " ") >= 0) { return new e(9, s1); } if (" det gcd inf lim max min Pr sup ".indexOf(" " + s1 + " ") >= 0) { return new e(24, s1); } { boolean found = false; for (int i = 0; i < TranslationS.length; i++) { if (s1.equals(TranslationS[i])) { found = true; c = TranslationC[i]; break; } } if (found) { stringbuffer.append(c); return new e(2, "" + c); } } if ((" alpha delta epsilon iota kappa lambda nu omega pi sigma theta tau upsilon varep" + "silon varpi vartheta pm mp times div cdot cdots ldots ast star amalg cap cup upl" + "us sqcap sqcup vee wedge wr circ bullet diamond lhd rhd oslash odot Box bigtrian" + "gleup triangleleft triangleright oplus ominus otimes ll subset sqsubset in vdash" + " models gg supset sqsupset ni dashv perp neq doteq approx cong equiv propto prec" + " sim simeq asymp smile frown bowtie succ aleph forall hbar exists imath neg flat" + " ell Re angle Im backslash mho Box prime emptyset triangle nabla partial top bot" + " Join infty vdash dashv Fourier Laplace leftarrow gets hookrightarrow leftharpoo" + "ndown rightarrow to rightharpoondown leadsto leftrightarrow mapsto hookleftarrow" + " leftharpoonup rightharpoonup rightleftharpoons longleftarrow longrightarrow lon" + "gleftrightarrow longmapsto ").indexOf(" " + s1 + " ") >= 0) { return new e(18, s1); } if ((" beta chi eta gamma mu psi phi rho varrho varsigma varphi xi zeta le leq ge geq " + "vdots ddots natural jmath bigtriangledown sharp uparrow downarrow updownarrow ne" + "arrow searrow swarrow nwarrow succeq mid preceq parallel subseteq sqsubseteq sup" + "seteq sqsupseteq clubsuit diamondsuit heartsuit spadesuit wp dagger ddagger setm" + "inus unlhd unrhd bigcirc ").indexOf(" " + s1 + " ") >= 0) { return new e(19, s1); } if ((" Delta Gamma Lambda Omega Pi Phi Psi Sigma Theta Upsilon Xi Leftarrow Rightarrow" + " Leftrightarrow Longleftarrow Longrightarrow Longleftrightarrow Diamond ") .indexOf(" " + s1 + " ") >= 0) { return new e(18, s1 + "Big"); } if (" Uparrow Downarrow Updownarrow ".indexOf(" " + s1 + " ") >= 0) { return new e(19, s1 + "Big"); } // fall through case 34: // '"' case 35: // '#' case 36: // '$' // case 37: // '%' case 38: // '&' case 39: // '\'' case 40: // '(' case 41: // ')' case 42: // '*' case 43: // '+' case 45: // '-' case 46: // '.' case 47: // '/' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' case 60: // '<' case 61: // '=' case 62: // '>' case 63: // '?' case 64: // '@' case 91: // '[' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' default: a(); // System.out.println("Scanner invalid tag: \\" + // stringbuffer.toString()); return new e(100); } case 94: // '^' a(); return new e(10); case 95: // '_' a(); return new e(11); case 11: // '\013' case 12: // '\f' case 14: // '\016' case 15: // '\017' case 16: // '\020' case 17: // '\021' case 18: // '\022' case 19: // '\023' case 20: // '\024' case 21: // '\025' case 22: // '\026' case 23: // '\027' case 24: // '\030' case 25: // '\031' case 26: // '\032' case 27: // '\033' case 28: // '\034' case 29: // '\035' case 30: // '\036' case 31: // '\037' case 34: // '"' case 36: // '$' // case 37: // '%' case 63: // '?' case 96: // '`' default: a(); // System.out.println("Scanner invalid character: " + c); return new e(100); } } return new e(99); } }