/* Generated By:JavaCC: Do not edit this line. TeXMathParser.java */
package org.jplot2d.javacc;
import java.util.ArrayList;
import java.util.List;
import org.jplot2d.tex.MathElement;
/*
* The purpose of this tex parser is maximum compatible with plain text and LaTex math mode.
* Differient with LaTex:
* common: A command must be followed with a pair of {}, spaces between them are allowed.
* plain text mode: only escape \ group {} math $ are reserved character
* \n is new line, \\ is backslash, \$ is $, \{ is {, \} is }.
* math mode : A command for special character is LEFT-MATCH-1ST. It is VALID if no space behind the command
*/
public class TeXMathParser implements TeXMathParserConstants {
/* Wrap the given pe into a mrow. If the pe is mrow, donot wrap again */
private MathElement.PElement mrowWrap(MathElement.PElement pe) {
if (pe == null) return new MathElement.Mrow();
if (pe instanceof MathElement.Mrow) return (MathElement.Mrow) pe;
return pe;
}
/** escape the special charactors in the given string */
public static String escape(String s)
{
return s.replace("\u005c\u005c", "\u005c\u005c\u005c\u005c").replace("$", "\u005c\u005c$").replace("{", "\u005c\u005c{").replace("}", "\u005c\u005c}");
}
final public MathElement parse() throws ParseException {
List lines = new ArrayList();
MathElement me;
me = composite();
if (me != null) lines.add(me);
label_1:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_NEWLINE:
case NEWLINE:
;
break;
default:
jj_la1[0] = jj_gen;
break label_1;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_NEWLINE:
jj_consume_token(C_NEWLINE);
break;
case NEWLINE:
jj_consume_token(NEWLINE);
break;
default:
jj_la1[1] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
me = composite();
if (me != null) lines.add(me);
}
jj_consume_token(0);
if (lines.size() == 0) {if (true) return MathElement.EMPTY;}
if (lines.size() == 1) {if (true) return lines.get(0);}
{if (true) return new MathElement.XLines(lines);}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement composite() throws ParseException {
List pc = new ArrayList();
MathElement.PElement me;
MathElement.PElement math;
label_2:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LCB:
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case TEXTRM:
case TEXTIT:
case TEXTBF:
case MATHB:
case SPACE:
case TEXTCHAR:
;
break;
default:
jj_la1[2] = jj_gen;
break label_2;
}
me = block();
if (me instanceof MathElement.Mrow) {
pc.addAll(((MathElement.Mrow) me).getElementList());
} else if (me != null) {
pc.add(me);
}
}
if (pc.size() == 0) {if (true) return null;}
if (pc.size() == 1) {if (true) return pc.get(0);}
{if (true) return new MathElement.Mrow(pc);}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement block() throws ParseException {
MathElement.PElement me;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case SPACE:
case TEXTCHAR:
me = text();
break;
case TEXTRM:
case TEXTIT:
case TEXTBF:
me = textStyleGroup();
break;
case LCB:
jj_consume_token(LCB);
me = composite();
jj_consume_token(RCB);
break;
case MATHB:
jj_consume_token(MATHB);
me = math();
jj_consume_token(MATHE);
break;
default:
jj_la1[3] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return me;}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement text() throws ParseException {
char c;
Token t;
StringBuilder sb = new StringBuilder();
label_3:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SPACE:
jj_consume_token(SPACE);
sb.append(" ");
break;
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
c = escapeChar();
sb.append(c);
break;
case TEXTCHAR:
t = jj_consume_token(TEXTCHAR);
sb.append(t.image);
break;
default:
jj_la1[4] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case SPACE:
case TEXTCHAR:
;
break;
default:
jj_la1[5] = jj_gen;
break label_3;
}
}
{if (true) return new MathElement.Mtext(sb.toString());}
throw new Error("Missing return statement in function");
}
final private char escapeChar() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
jj_consume_token(C_DOLLAR);
{if (true) return '$';}
break;
case C_LCB:
jj_consume_token(C_LCB);
{if (true) return '{';}
break;
case C_RCB:
jj_consume_token(C_RCB);
{if (true) return '}';}
break;
case C_BACKSLASH:
jj_consume_token(C_BACKSLASH);
{if (true) return '\u005c\u005c';}
break;
default:
jj_la1[6] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement textStyleGroup() throws ParseException {
MathElement.PElement pe;
MathElement.MathVariant mv;
mv = textVariant();
label_4:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SPACE:
;
break;
default:
jj_la1[7] = jj_gen;
break label_4;
}
jj_consume_token(SPACE);
}
jj_consume_token(LCB);
pe = composite();
jj_consume_token(RCB);
pe = new MathElement.Mstyle(mv, pe);
{if (true) return pe;}
throw new Error("Missing return statement in function");
}
final private MathElement.MathVariant textVariant() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TEXTRM:
jj_consume_token(TEXTRM);
{if (true) return MathElement.MathVariant.NORMAL;}
break;
case TEXTIT:
jj_consume_token(TEXTIT);
{if (true) return MathElement.MathVariant.ITALIC;}
break;
case TEXTBF:
jj_consume_token(TEXTBF);
{if (true) return MathElement.MathVariant.BOLD;}
break;
default:
jj_la1[8] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement math() throws ParseException {
List pc = new ArrayList();
Token t;
MathElement.PElement me;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case MINUS:
case SUB:
case SUP:
if (jj_2_1(2)) {
jj_consume_token(MINUS);
t = jj_consume_token(MN);
me = new MathElement.Mn("-" + t.image);
pc.add(me);
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SUB:
case SUP:
me = goScript(null);
pc.add(me);
break;
default:
jj_la1[9] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
break;
default:
jj_la1[10] = jj_gen;
;
}
label_5:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LCB:
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case TEXTRM:
case TEXTIT:
case TEXTBF:
case MN:
case MINUS:
case MO:
case LP:
case MATHRM:
case MATHIT:
case MATHBF:
case ALPHA:
case BETA:
case GAMMA:
case DELTA:
case EPSILON:
case ZETA:
case ETA:
case THETA:
case IOTA:
case KAPPA:
case LAMDA:
case MU:
case NU:
case XI:
case PI:
case RHO:
case SIGMA:
case TAU:
case UPSILON:
case PHI:
case CHI:
case PSI:
case OMEGA:
case _GAMMA:
case _DELTA:
case _THETA:
case _LAMDA:
case _XI:
case _PI:
case _SIGMA:
case _UPSILON:
case _PHI:
case _PSI:
case _OMEGA:
case ANGSTROM:
case MICRO:
case UNICHAR:
;
break;
default:
jj_la1[11] = jj_gen;
break label_5;
}
me = pelement();
pc.add(me);
}
if (pc.size() == 0) {if (true) return null;}
if (pc.size() == 1) {if (true) return pc.get(0);}
{if (true) return new MathElement.Mrow(pc);}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement pelement() throws ParseException {
MathElement.PElement me;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case MN:
case MINUS:
case MO:
case ALPHA:
case BETA:
case GAMMA:
case DELTA:
case EPSILON:
case ZETA:
case ETA:
case THETA:
case IOTA:
case KAPPA:
case LAMDA:
case MU:
case NU:
case XI:
case PI:
case RHO:
case SIGMA:
case TAU:
case UPSILON:
case PHI:
case CHI:
case PSI:
case OMEGA:
case _GAMMA:
case _DELTA:
case _THETA:
case _LAMDA:
case _XI:
case _PI:
case _SIGMA:
case _UPSILON:
case _PHI:
case _PSI:
case _OMEGA:
case ANGSTROM:
case MICRO:
case UNICHAR:
me = ptoken();
break;
case LCB:
case LP:
me = mrow();
break;
case MATHRM:
case MATHIT:
case MATHBF:
me = mstyle();
break;
case TEXTRM:
case TEXTIT:
case TEXTBF:
me = mtextstyle();
break;
default:
jj_la1[12] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SUB:
case SUP:
me = goScript(me);
break;
default:
jj_la1[13] = jj_gen;
;
}
{if (true) return me;}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement ptoken() throws ParseException {
MathElement.PElement me;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case ALPHA:
case BETA:
case GAMMA:
case DELTA:
case EPSILON:
case ZETA:
case ETA:
case THETA:
case IOTA:
case KAPPA:
case LAMDA:
case MU:
case NU:
case XI:
case PI:
case RHO:
case SIGMA:
case TAU:
case UPSILON:
case PHI:
case CHI:
case PSI:
case OMEGA:
case _GAMMA:
case _DELTA:
case _THETA:
case _LAMDA:
case _XI:
case _PI:
case _SIGMA:
case _UPSILON:
case _PHI:
case _PSI:
case _OMEGA:
case ANGSTROM:
case MICRO:
case UNICHAR:
me = mi();
break;
case MINUS:
case MO:
me = mo();
break;
case MN:
me = mn();
break;
default:
jj_la1[14] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return me;}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement mstyle() throws ParseException {
MathElement.MathVariant mv;
MathElement.PElement pe;
mv = mathVariant();
jj_consume_token(LCB);
pe = math();
jj_consume_token(RCB);
{if (true) return new MathElement.Mstyle(mv, pe);}
throw new Error("Missing return statement in function");
}
final private MathElement.MathVariant mathVariant() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case MATHRM:
jj_consume_token(MATHRM);
{if (true) return MathElement.MathVariant.NORMAL;}
break;
case MATHIT:
jj_consume_token(MATHIT);
{if (true) return MathElement.MathVariant.ITALIC;}
break;
case MATHBF:
jj_consume_token(MATHBF);
{if (true) return MathElement.MathVariant.BOLD;}
break;
default:
jj_la1[15] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement mrow() throws ParseException {
MathElement.PElement math;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LCB:
jj_consume_token(LCB);
math = math();
jj_consume_token(RCB);
{if (true) return mrowWrap(math);}
break;
case LP:
jj_consume_token(LP);
math = math();
jj_consume_token(RP);
List pc = new ArrayList();
pc.add(new MathElement.Mo("("));
if (math != null) pc.add(math);
pc.add(new MathElement.Mo(")"));
{if (true) return new MathElement.Mrow(pc);}
break;
default:
jj_la1[16] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement mtextstyle() throws ParseException {
MathElement.MathVariant mv;
MathElement.PElement pe;
mv = textVariant();
jj_consume_token(LCB);
token_source.SwitchTo( DEFAULT );
pe = composite();
jj_consume_token(RCB);
token_source.SwitchTo( MATH );
{if (true) return new MathElement.Mstyle(mv, pe);}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement mi() throws ParseException {
char s;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ALPHA:
s = alpha();
break;
case BETA:
s = beta();
break;
case GAMMA:
s = gamma();
break;
case DELTA:
s = delta();
break;
case EPSILON:
s = epsilon();
break;
case ZETA:
s = zeta();
break;
case ETA:
s = eta();
break;
case THETA:
s = theta();
break;
case IOTA:
s = iota();
break;
case KAPPA:
s = kappa();
break;
case LAMDA:
s = lambda();
break;
case MU:
s = mu();
break;
case NU:
s = nu();
break;
case XI:
s = xi();
break;
case PI:
s = pi();
break;
case RHO:
s = rho();
break;
case SIGMA:
s = sigma();
break;
case TAU:
s = tau();
break;
case UPSILON:
s = upsilon();
break;
case PHI:
s = phi();
break;
case CHI:
s = chi();
break;
case PSI:
s = psi();
break;
case OMEGA:
s = omega();
break;
case _GAMMA:
s = _gamma();
break;
case _DELTA:
s = _delta();
break;
case _THETA:
s = _theta();
break;
case _LAMDA:
s = _lambda();
break;
case _XI:
s = _xi();
break;
case _PI:
s = _pi();
break;
case _SIGMA:
s = _sigma();
break;
case _UPSILON:
s = _upsilon();
break;
case _PHI:
s = _phi();
break;
case _PSI:
s = _psi();
break;
case _OMEGA:
s = _omega();
break;
case MICRO:
s = micro();
break;
case ANGSTROM:
s = angstrom();
break;
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case UNICHAR:
s = unichar();
break;
default:
jj_la1[17] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return new MathElement.Mi(s);}
throw new Error("Missing return statement in function");
}
final private char _gamma() throws ParseException {
jj_consume_token(_GAMMA);
{if (true) return '\u0393';}
throw new Error("Missing return statement in function");
}
final private char _delta() throws ParseException {
jj_consume_token(_DELTA);
{if (true) return '\u0394';}
throw new Error("Missing return statement in function");
}
final private char _theta() throws ParseException {
jj_consume_token(_THETA);
{if (true) return '\u0398';}
throw new Error("Missing return statement in function");
}
final private char _lambda() throws ParseException {
jj_consume_token(_LAMDA);
{if (true) return '\u039b';}
throw new Error("Missing return statement in function");
}
final private char _xi() throws ParseException {
jj_consume_token(_XI);
{if (true) return '\u039e';}
throw new Error("Missing return statement in function");
}
final private char _pi() throws ParseException {
jj_consume_token(_PI);
{if (true) return '\u03a0';}
throw new Error("Missing return statement in function");
}
final private char _sigma() throws ParseException {
jj_consume_token(_SIGMA);
{if (true) return '\u03a3';}
throw new Error("Missing return statement in function");
}
final private char _upsilon() throws ParseException {
jj_consume_token(_UPSILON);
{if (true) return '\u03d2';}
throw new Error("Missing return statement in function");
}
final private char _phi() throws ParseException {
jj_consume_token(_PHI);
{if (true) return '\u03a6';}
throw new Error("Missing return statement in function");
}
final private char _psi() throws ParseException {
jj_consume_token(_PSI);
{if (true) return '\u03a8';}
throw new Error("Missing return statement in function");
}
final private char _omega() throws ParseException {
jj_consume_token(_OMEGA);
{if (true) return '\u03a9';}
throw new Error("Missing return statement in function");
}
final private char alpha() throws ParseException {
jj_consume_token(ALPHA);
{if (true) return '\u03b1';}
throw new Error("Missing return statement in function");
}
final private char beta() throws ParseException {
jj_consume_token(BETA);
{if (true) return '\u03b2';}
throw new Error("Missing return statement in function");
}
final private char gamma() throws ParseException {
jj_consume_token(GAMMA);
{if (true) return '\u03b3';}
throw new Error("Missing return statement in function");
}
final private char delta() throws ParseException {
jj_consume_token(DELTA);
{if (true) return '\u03b4';}
throw new Error("Missing return statement in function");
}
final private char epsilon() throws ParseException {
jj_consume_token(EPSILON);
{if (true) return '\u03b5';}
throw new Error("Missing return statement in function");
}
final private char zeta() throws ParseException {
jj_consume_token(ZETA);
{if (true) return '\u03b6';}
throw new Error("Missing return statement in function");
}
final private char eta() throws ParseException {
jj_consume_token(ETA);
{if (true) return '\u03b7';}
throw new Error("Missing return statement in function");
}
final private char theta() throws ParseException {
jj_consume_token(THETA);
{if (true) return '\u03b8';}
throw new Error("Missing return statement in function");
}
final private char iota() throws ParseException {
jj_consume_token(IOTA);
{if (true) return '\u03b9';}
throw new Error("Missing return statement in function");
}
final private char kappa() throws ParseException {
jj_consume_token(KAPPA);
{if (true) return '\u03ba';}
throw new Error("Missing return statement in function");
}
final private char lambda() throws ParseException {
jj_consume_token(LAMDA);
{if (true) return '\u03bb';}
throw new Error("Missing return statement in function");
}
final private char mu() throws ParseException {
jj_consume_token(MU);
{if (true) return '\u03bc';}
throw new Error("Missing return statement in function");
}
final private char nu() throws ParseException {
jj_consume_token(NU);
{if (true) return '\u03bd';}
throw new Error("Missing return statement in function");
}
final private char xi() throws ParseException {
jj_consume_token(XI);
{if (true) return '\u03be';}
throw new Error("Missing return statement in function");
}
final private char pi() throws ParseException {
jj_consume_token(PI);
{if (true) return '\u03c0';}
throw new Error("Missing return statement in function");
}
final private char rho() throws ParseException {
jj_consume_token(RHO);
{if (true) return '\u03c1';}
throw new Error("Missing return statement in function");
}
final private char sigma() throws ParseException {
jj_consume_token(SIGMA);
{if (true) return '\u03c3';}
throw new Error("Missing return statement in function");
}
final private char tau() throws ParseException {
jj_consume_token(TAU);
{if (true) return '\u03c4';}
throw new Error("Missing return statement in function");
}
final private char upsilon() throws ParseException {
jj_consume_token(UPSILON);
{if (true) return '\u03c5';}
throw new Error("Missing return statement in function");
}
final private char phi() throws ParseException {
jj_consume_token(PHI);
{if (true) return '\u03c6';}
throw new Error("Missing return statement in function");
}
final private char chi() throws ParseException {
jj_consume_token(CHI);
{if (true) return '\u03c7';}
throw new Error("Missing return statement in function");
}
final private char psi() throws ParseException {
jj_consume_token(PSI);
{if (true) return '\u03c8';}
throw new Error("Missing return statement in function");
}
final private char omega() throws ParseException {
jj_consume_token(OMEGA);
{if (true) return '\u03c9';}
throw new Error("Missing return statement in function");
}
final private char micro() throws ParseException {
jj_consume_token(MICRO);
{if (true) return '\u00b5';}
throw new Error("Missing return statement in function");
}
final private char angstrom() throws ParseException {
jj_consume_token(ANGSTROM);
{if (true) return '\u00c5';}
throw new Error("Missing return statement in function");
}
final private char unichar() throws ParseException {
char c;
Token t;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
c = escapeChar();
{if (true) return c;}
break;
case UNICHAR:
t = jj_consume_token(UNICHAR);
{if (true) return t.image.charAt(0);}
break;
default:
jj_la1[18] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement mn() throws ParseException {
Token t;
t = jj_consume_token(MN);
{if (true) return new MathElement.Mn(t.image);}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement mo() throws ParseException {
Token t;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case MO:
t = jj_consume_token(MO);
String mo = t.image;
if (mo.equals("*")) mo = "\u2217";
{if (true) return new MathElement.Mo(mo);}
break;
case MINUS:
t = jj_consume_token(MINUS);
{if (true) return new MathElement.Mo("\u2212");}
break;
default:
jj_la1[19] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement goScript(MathElement.PElement base) throws ParseException {
MathElement.PElement sub = null, sup = null;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SUB:
sub = subPart();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SUP:
sup = supPart();
break;
default:
jj_la1[20] = jj_gen;
;
}
break;
case SUP:
sup = supPart();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case SUB:
sub = subPart();
break;
default:
jj_la1[21] = jj_gen;
;
}
break;
default:
jj_la1[22] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
if (sub != null && sup != null) {
{if (true) return new MathElement.Msubsup(base, sub, sup);}
}
if (sub != null)
{
{if (true) return new MathElement.Msub(base, sub);}
}
if (sup != null)
{
{if (true) return new MathElement.Msup(base, sup);}
}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement subPart() throws ParseException {
MathElement.PElement me;
jj_consume_token(SUB);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case MN:
case MINUS:
case MO:
case ALPHA:
case BETA:
case GAMMA:
case DELTA:
case EPSILON:
case ZETA:
case ETA:
case THETA:
case IOTA:
case KAPPA:
case LAMDA:
case MU:
case NU:
case XI:
case PI:
case RHO:
case SIGMA:
case TAU:
case UPSILON:
case PHI:
case CHI:
case PSI:
case OMEGA:
case _GAMMA:
case _DELTA:
case _THETA:
case _LAMDA:
case _XI:
case _PI:
case _SIGMA:
case _UPSILON:
case _PHI:
case _PSI:
case _OMEGA:
case ANGSTROM:
case MICRO:
case UNICHAR:
me = ptoken();
break;
case LCB:
case LP:
me = mrow();
break;
case MATHRM:
case MATHIT:
case MATHBF:
me = mstyle();
break;
case TEXTRM:
case TEXTIT:
case TEXTBF:
me = mtextstyle();
break;
default:
jj_la1[23] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return me;}
throw new Error("Missing return statement in function");
}
final private MathElement.PElement supPart() throws ParseException {
MathElement.PElement me;
jj_consume_token(SUP);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case C_DOLLAR:
case C_LCB:
case C_RCB:
case C_BACKSLASH:
case MN:
case MINUS:
case MO:
case ALPHA:
case BETA:
case GAMMA:
case DELTA:
case EPSILON:
case ZETA:
case ETA:
case THETA:
case IOTA:
case KAPPA:
case LAMDA:
case MU:
case NU:
case XI:
case PI:
case RHO:
case SIGMA:
case TAU:
case UPSILON:
case PHI:
case CHI:
case PSI:
case OMEGA:
case _GAMMA:
case _DELTA:
case _THETA:
case _LAMDA:
case _XI:
case _PI:
case _SIGMA:
case _UPSILON:
case _PHI:
case _PSI:
case _OMEGA:
case ANGSTROM:
case MICRO:
case UNICHAR:
me = ptoken();
break;
case LCB:
case LP:
me = mrow();
break;
case MATHRM:
case MATHIT:
case MATHBF:
me = mstyle();
break;
case TEXTRM:
case TEXTIT:
case TEXTBF:
me = mtextstyle();
break;
default:
jj_la1[24] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
{if (true) return me;}
throw new Error("Missing return statement in function");
}
private boolean jj_2_1(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_1(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(0, xla); }
}
private boolean jj_3_1() {
if (jj_scan_token(MINUS)) return true;
if (jj_scan_token(MN)) return true;
return false;
}
/** Generated Token Manager. */
public TeXMathParserTokenManager token_source;
SimpleCharStream jj_input_stream;
/** Current token. */
public Token token;
/** Next token. */
public Token jj_nt;
private int jj_ntk;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
final private int[] jj_la1 = new int[25];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
static {
jj_la1_init_0();
jj_la1_init_1();
jj_la1_init_2();
}
private static void jj_la1_init_0() {
jj_la1_0 = new int[] {0x6000,0x6000,0x9ff2,0x9ff2,0x90f0,0x90f0,0xf0,0x1000,0x700,0xc000000,0xc400000,0xf1e007f2,0xf1e007f2,0xc000000,0x80e000f0,0x70000000,0x1000002,0x800000f0,0xf0,0xc00000,0x8000000,0x4000000,0xc000000,0xf1e007f2,0xf1e007f2,};
}
private static void jj_la1_init_1() {
jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0xffffffff,0x0,0xffffffff,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0xffffffff,0xffffffff,};
}
private static void jj_la1_init_2() {
jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0xf,0x0,0xf,0x0,0x0,0xf,0x8,0x0,0x0,0x0,0x0,0xf,0xf,};
}
final private JJCalls[] jj_2_rtns = new JJCalls[1];
private boolean jj_rescan = false;
private int jj_gc = 0;
/** Constructor with InputStream. */
public TeXMathParser(java.io.InputStream stream) {
this(stream, null);
}
/** Constructor with InputStream and supplied encoding */
public TeXMathParser(java.io.InputStream stream, String encoding) {
try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
token_source = new TeXMathParserTokenManager(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 25; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
/** Reinitialise. */
public void ReInit(java.io.InputStream stream) {
ReInit(stream, null);
}
/** Reinitialise. */
public void ReInit(java.io.InputStream stream, String encoding) {
try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
token_source.ReInit(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 25; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
/** Constructor. */
public TeXMathParser(java.io.Reader stream) {
jj_input_stream = new SimpleCharStream(stream, 1, 1);
token_source = new TeXMathParserTokenManager(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 25; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
/** Reinitialise. */
public void ReInit(java.io.Reader stream) {
jj_input_stream.ReInit(stream, 1, 1);
token_source.ReInit(jj_input_stream);
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 25; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
/** Constructor with generated Token Manager. */
public TeXMathParser(TeXMathParserTokenManager tm) {
token_source = tm;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 25; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
/** Reinitialise. */
public void ReInit(TeXMathParserTokenManager tm) {
token_source = tm;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 25; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
private Token jj_consume_token(int kind) throws ParseException {
Token oldToken;
if ((oldToken = token).next != null) token = token.next;
else token = token.next = token_source.getNextToken();
jj_ntk = -1;
if (token.kind == kind) {
jj_gen++;
if (++jj_gc > 100) {
jj_gc = 0;
for (int i = 0; i < jj_2_rtns.length; i++) {
JJCalls c = jj_2_rtns[i];
while (c != null) {
if (c.gen < jj_gen) c.first = null;
c = c.next;
}
}
}
return token;
}
token = oldToken;
jj_kind = kind;
throw generateParseException();
}
static private final class LookaheadSuccess extends java.lang.Error { }
final private LookaheadSuccess jj_ls = new LookaheadSuccess();
private boolean jj_scan_token(int kind) {
if (jj_scanpos == jj_lastpos) {
jj_la--;
if (jj_scanpos.next == null) {
jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
} else {
jj_lastpos = jj_scanpos = jj_scanpos.next;
}
} else {
jj_scanpos = jj_scanpos.next;
}
if (jj_rescan) {
int i = 0; Token tok = token;
while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
if (tok != null) jj_add_error_token(kind, i);
}
if (jj_scanpos.kind != kind) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
return false;
}
/** Get the next Token. */
final public Token getNextToken() {
if (token.next != null) token = token.next;
else token = token.next = token_source.getNextToken();
jj_ntk = -1;
jj_gen++;
return token;
}
/** Get the specific Token. */
final public Token getToken(int index) {
Token t = token;
for (int i = 0; i < index; i++) {
if (t.next != null) t = t.next;
else t = t.next = token_source.getNextToken();
}
return t;
}
private int jj_ntk() {
if ((jj_nt=token.next) == null)
return (jj_ntk = (token.next=token_source.getNextToken()).kind);
else
return (jj_ntk = jj_nt.kind);
}
private java.util.List jj_expentries = new java.util.ArrayList();
private int[] jj_expentry;
private int jj_kind = -1;
private int[] jj_lasttokens = new int[100];
private int jj_endpos;
private void jj_add_error_token(int kind, int pos) {
if (pos >= 100) return;
if (pos == jj_endpos + 1) {
jj_lasttokens[jj_endpos++] = kind;
} else if (jj_endpos != 0) {
jj_expentry = new int[jj_endpos];
for (int i = 0; i < jj_endpos; i++) {
jj_expentry[i] = jj_lasttokens[i];
}
jj_entries_loop: for (java.util.Iterator> it = jj_expentries.iterator(); it.hasNext();) {
int[] oldentry = (int[])(it.next());
if (oldentry.length == jj_expentry.length) {
for (int i = 0; i < jj_expentry.length; i++) {
if (oldentry[i] != jj_expentry[i]) {
continue jj_entries_loop;
}
}
jj_expentries.add(jj_expentry);
break jj_entries_loop;
}
}
if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
}
}
/** Generate ParseException. */
public ParseException generateParseException() {
jj_expentries.clear();
boolean[] la1tokens = new boolean[68];
if (jj_kind >= 0) {
la1tokens[jj_kind] = true;
jj_kind = -1;
}
for (int i = 0; i < 25; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1< jj_gen) {
jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
switch (i) {
case 0: jj_3_1(); break;
}
}
p = p.next;
} while (p != null);
} catch(LookaheadSuccess ls) { }
}
jj_rescan = false;
}
private void jj_save(int index, int xla) {
JJCalls p = jj_2_rtns[index];
while (p.gen > jj_gen) {
if (p.next == null) { p = p.next = new JJCalls(); break; }
p = p.next;
}
p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
}
static final class JJCalls {
int gen;
Token first;
int arg;
JJCalls next;
}
}
Ads help maintain this website.