home *** CD-ROM | disk | FTP | other *** search
- package webeq3.parser.mathml;
-
- import java.io.StringReader;
- import java.util.Stack;
- import webeq3.constants.AttributeConstants;
- import webeq3.constants.EntityNames;
- import webeq3.parser.Parser;
- import webeq3.schema.Box;
- import webeq3.schema.ContentBox;
- import webeq3.schema.MAction;
- import webeq3.schema.MError;
- import webeq3.schema.MFenced;
- import webeq3.schema.MFrac;
- import webeq3.schema.MI;
- import webeq3.schema.MMultiscripts;
- import webeq3.schema.MN;
- import webeq3.schema.MO;
- import webeq3.schema.MOver;
- import webeq3.schema.MPadded;
- import webeq3.schema.MPhantom;
- import webeq3.schema.MRoot;
- import webeq3.schema.MRow;
- import webeq3.schema.MS;
- import webeq3.schema.MSpace;
- import webeq3.schema.MSqrt;
- import webeq3.schema.MStyle;
- import webeq3.schema.MSub;
- import webeq3.schema.MSubsup;
- import webeq3.schema.MSup;
- import webeq3.schema.MTable;
- import webeq3.schema.MTd;
- import webeq3.schema.MText;
- import webeq3.schema.MTr;
- import webeq3.schema.MUnder;
- import webeq3.schema.MUnderover;
- import webeq3.util.ErrorHandler;
- import webeq3.util.OutputHandler;
-
- public class mathml extends Parser implements MathMLConstants, AttributeConstants {
- // $FF: renamed from: st webeq3.parser.mathml.Tokenizer
- Tokenizer field_0 = null;
- static final String copyright = "MathML parser: Copyright (c) 1997 The Regents of the University of Minnesota";
- private Stack start_tag_stack = new Stack();
-
- public void parse(String var1, String var2, Box var3, ErrorHandler var4) {
- this.field_0 = new Tokenizer(new StringReader(var1));
-
- try {
- this.parseSequence(var3);
- String var5 = var3.getRawAttribute(84);
- if (var5 == null) {
- var5 = var3.getRawAttribute(85);
- }
-
- if (var5 != null && var5.equals("block")) {
- var3.ppeer.attribute_stack[21].push("true");
- }
-
- } catch (ParseException var7) {
- var7.printError(var4);
- this.start_tag_stack.removeAllElements();
- } catch (Exception var8) {
- ((OutputHandler)var4).println("Unknown parsing problem...");
- ((Throwable)var8).printStackTrace();
- this.start_tag_stack.removeAllElements();
- }
- }
-
- public boolean parseParam(Box var1, String var2, boolean var3) throws ParseException {
- boolean var5 = false;
-
- while(true) {
- boolean var4 = true;
- Object var6 = null;
- boolean var7 = false;
- String var8 = "";
-
- while(true) {
- Token var11 = this.field_0.nextToken();
- if (var11.ttype == 61) {
- if (var8.length() <= 0) {
- throw new ParseException("missing parameter name in " + var2, this.field_0);
- }
- break;
- }
-
- if (var11.ttype == -1) {
- throw new ParseException("unexpected EOF: malformed tag?", this.field_0);
- }
-
- if (var11.ttype == 62) {
- if (var3) {
- throw new ParseException("malformed empty element", this.field_0);
- }
-
- if (var8.length() > 0) {
- throw new ParseException("missing '=' in parameter in " + var2, this.field_0);
- }
-
- var7 = true;
- break;
- }
-
- if (var11.ttype == 47) {
- var11 = this.field_0.nextToken();
- if (var11.ttype != 62) {
- throw new ParseException("malformed empty element", this.field_0);
- }
-
- this.start_tag_stack.pop();
- var7 = true;
- var5 = true;
- break;
- }
-
- if (var8.length() == 0 && var11.ttype != -3) {
- throw new ParseException("parameters to tags must start with words", this.field_0);
- }
-
- var8 = var8 + var11.sval;
- }
-
- if (var7) {
- return var5;
- }
-
- var8 = var8.toLowerCase();
- String var9 = "";
- Token var13 = this.field_0.nextToken();
- if (var13.ttype != 39 && var13.ttype != 34) {
- while(var13.ttype != -1 && var13.ttype != -2) {
- if (var13.ttype == 62 || var13.ttype == 47) {
- if ("".equals(var9)) {
- throw new ParseException("missing parameter value", this.field_0);
- }
-
- this.field_0.pushBack();
- break;
- }
-
- var9 = var9 + var13.sval;
- var13 = this.field_0.nextTokenOrSep();
- }
- } else {
- int var10 = var13.ttype;
-
- for(var13 = this.field_0.nextTokenOrSep(); var13.ttype != -1 && var13.ttype != var10; var13 = this.field_0.nextTokenOrSep()) {
- var9 = var9 + var13.sval;
- }
- }
-
- if (var13.ttype == -1) {
- throw new ParseException("run away parameter value?", this.field_0);
- }
-
- if (var8.startsWith("xml") || var8.startsWith("xlink")) {
- var4 = false;
- }
-
- if (var8.indexOf(":") != -1) {
- String var15 = var8.substring(0, var8.indexOf(":"));
- if (!var15.equals("dsi")) {
- var4 = false;
- }
- }
-
- if (var4) {
- if (!MathMLDictionary.AttributeTypes.containsKey(var8)) {
- throw new ParseException(var8 + " is an invalid parameter name", this.field_0);
- }
-
- int var16 = MathMLDictionary.getAttribute(var8);
- var1.setAttribute(var16, this.toUnicode(var9));
- }
- }
- }
-
- public void parseSequence(Box var1) throws ParseException {
- boolean var2 = false;
- String var3 = "";
- Object var4 = null;
-
- while(!var2) {
- Token var5 = this.field_0.nextTokenOrSep();
- switch (var5.ttype) {
- case -3:
- case -2:
- var3 = var3 + var5.sval;
- break;
- case -1:
- if (!this.start_tag_stack.empty()) {
- throw new ParseException("unexpected EOF: missing end tag ?", this.field_0);
- }
-
- var2 = true;
- break;
- case 60:
- var5 = this.field_0.nextToken();
- if (var5.ttype == 33) {
- var5 = this.field_0.nextToken();
- String var13 = var5.sval;
- if (var13.length() < 2 || !var13.substring(0, 2).equals("--")) {
- throw new ParseException("malformed comment", this.field_0);
- }
-
- Object var15 = null;
- boolean var8 = true;
-
- while(var5.ttype != -1) {
- Token var16 = var5;
- var5 = this.field_0.nextToken();
- if (var5.ttype == 62) {
- var13 = var16.sval;
- if (var13.length() > 2) {
- var13 = var13.substring(var13.length() - 2);
- }
-
- if (var13.equals("--")) {
- var8 = false;
- break;
- }
- }
- }
-
- if (var8) {
- throw new ParseException("unexpected EOF: runaway comment?", this.field_0);
- }
- } else if (var5.ttype == 47) {
- var5 = this.field_0.nextToken();
- Token var6 = this.field_0.nextToken();
- if (var6.ttype == 58) {
- var5 = this.field_0.nextToken();
- } else {
- this.field_0.pushBack();
- }
-
- if (var5.ttype != -3) {
- throw new ParseException("malformed end tag", this.field_0);
- }
-
- String var7 = (String)this.start_tag_stack.pop();
- if (!var7.equals(var5.sval.toLowerCase())) {
- throw new ParseException("unexpected EOF: missing end tag for <" + var7 + ">", this.field_0);
- }
-
- var5 = this.field_0.nextToken();
- if (var5.ttype != 62) {
- throw new ParseException("missing '>'", this.field_0);
- }
-
- if (var3.length() != 0) {
- if (var3.length() > 1 && var3.charAt(0) == ' ') {
- var3 = var3.substring(1);
- }
-
- if (var3.length() > 1 && var3.charAt(var3.length() - 1) == ' ') {
- var3 = var3.substring(0, var3.length() - 1);
- }
-
- var1.addData(var3);
- }
-
- var2 = true;
- } else {
- if (var3.length() != 0) {
- if (var3.length() > 1 && var3.charAt(0) == ' ') {
- var3 = var3.substring(1);
- }
-
- if (var3.length() > 1 && var3.charAt(var3.length() - 1) == ' ') {
- var3 = var3.substring(0, var3.length() - 1);
- }
-
- var1.addData(var3);
- var3 = "";
- }
-
- this.field_0.pushBack();
- this.parseTag(var1);
- }
- break;
- default:
- var3 = var3 + var5.sval;
- }
- }
-
- }
-
- public void parseTag(Box var1) throws ParseException {
- Object var2 = null;
- Token var3 = this.field_0.nextToken();
- Token var4 = this.field_0.nextToken();
- if (var4.ttype == 58) {
- var3 = this.field_0.nextToken();
- } else {
- this.field_0.pushBack();
- }
-
- if (var3.ttype != -3) {
- throw new ParseException("missing tag name", this.field_0);
- } else {
- String var5 = var3.sval.toLowerCase();
- this.start_tag_stack.push(var5);
- int var6 = MathMLDictionary.getKeyword(var5);
- switch (var6) {
- case 1:
- this.parseParam(var1, var5, false);
- break;
- case 2:
- case 3:
- case 4:
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- case 16:
- case 17:
- case 18:
- case 19:
- case 20:
- case 21:
- case 22:
- case 25:
- case 26:
- case 27:
- case 28:
- case 72:
- case 73:
- this.process_pr(var1, new ContentBox(var1, var6, -1), var5);
- break;
- case 5:
- case 29:
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 37:
- case 38:
- case 39:
- case 40:
- case 41:
- case 42:
- case 43:
- case 44:
- case 45:
- case 46:
- case 47:
- case 48:
- case 49:
- case 50:
- case 51:
- case 52:
- case 53:
- case 54:
- case 55:
- case 56:
- case 57:
- case 58:
- case 59:
- case 60:
- case 61:
- case 62:
- case 63:
- case 64:
- case 65:
- case 66:
- case 67:
- case 68:
- case 69:
- case 74:
- case 75:
- case 76:
- case 77:
- case 78:
- case 79:
- case 80:
- case 81:
- case 82:
- case 83:
- case 84:
- case 85:
- case 86:
- case 87:
- case 88:
- case 89:
- case 90:
- case 91:
- case 92:
- case 93:
- case 94:
- case 95:
- case 96:
- case 97:
- case 98:
- case 99:
- case 100:
- case 199:
- case 200:
- case 201:
- case 202:
- case 203:
- case 204:
- case 205:
- case 206:
- case 207:
- case 208:
- case 209:
- case 210:
- case 211:
- case 212:
- case 213:
- case 214:
- case 215:
- case 216:
- case 217:
- case 218:
- case 219:
- case 220:
- case 221:
- case 222:
- case 223:
- case 224:
- case 225:
- case 226:
- case 227:
- case 228:
- case 229:
- case 230:
- case 231:
- case 232:
- case 233:
- case 234:
- case 235:
- case 236:
- case 237:
- case 238:
- case 239:
- case 240:
- case 241:
- case 242:
- case 243:
- case 244:
- case 245:
- case 246:
- case 247:
- case 248:
- case 249:
- case 280:
- case 281:
- case 282:
- case 283:
- case 284:
- case 285:
- case 286:
- case 287:
- case 288:
- case 289:
- default:
- throw new ParseException(var5 + " is not a valid MathML element", this.field_0);
- case 23:
- ContentBox var8 = new ContentBox(var1, var6, -1);
- this.process_pr(var1, var8, var5);
- this.wrapMatrixRows(var8.ppeer);
- break;
- case 24:
- ContentBox var7 = new ContentBox(var1, var6, -1);
- this.process_pr(var1, var7, var5);
- this.wrapMatrixCells(var7.ppeer);
- break;
- case 70:
- if (!((ContentBox)var1).name.equals("mmultiscripts")) {
- throw new ParseException("<none/> encountered outside of mmultiscripts environment", this.field_0);
- }
-
- this.process_pr(var1, new ContentBox(var1, var6, -1), var5);
- break;
- case 71:
- if (!((ContentBox)var1).name.equals("mmultiscripts")) {
- throw new ParseException("<mprescripts/> encountered outside of mmultiscripts environment", this.field_0);
- }
-
- this.process_pr(var1, new ContentBox(var1, var6, -1), var5);
- break;
- case 101:
- case 102:
- case 103:
- case 104:
- case 105:
- case 109:
- case 110:
- case 111:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 201), var5);
- break;
- case 106:
- case 107:
- case 108:
- case 112:
- case 162:
- case 198:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 200), var5);
- break;
- case 113:
- case 115:
- case 116:
- case 128:
- case 137:
- case 138:
- case 139:
- case 140:
- case 141:
- case 142:
- case 143:
- case 144:
- case 145:
- case 146:
- case 147:
- case 148:
- case 149:
- case 150:
- case 151:
- case 159:
- case 160:
- case 161:
- case 192:
- case 193:
- case 195:
- case 196:
- case 197:
- case 268:
- case 269:
- case 270:
- case 271:
- case 272:
- case 275:
- case 276:
- case 290:
- case 291:
- case 292:
- case 293:
- case 294:
- case 295:
- case 296:
- case 297:
- case 298:
- case 299:
- case 300:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 203), var5);
- break;
- case 114:
- this.process_sep(var1, new ContentBox(var1, var6, 202), var5);
- break;
- case 117:
- case 118:
- case 119:
- case 120:
- case 121:
- case 166:
- case 190:
- case 267:
- case 277:
- case 278:
- case 279:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 204), var5);
- break;
- case 122:
- case 123:
- case 124:
- case 125:
- case 126:
- case 153:
- case 154:
- case 155:
- case 156:
- case 157:
- case 158:
- case 163:
- case 164:
- case 165:
- case 167:
- case 168:
- case 191:
- case 266:
- case 273:
- case 274:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 205), var5);
- break;
- case 127:
- case 129:
- case 136:
- case 152:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 208), var5);
- break;
- case 130:
- case 134:
- case 135:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 207), var5);
- break;
- case 131:
- case 132:
- case 133:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 206), var5);
- break;
- case 169:
- case 170:
- case 171:
- case 172:
- case 173:
- case 174:
- case 175:
- case 176:
- case 177:
- case 178:
- case 179:
- case 180:
- case 181:
- case 182:
- case 183:
- case 184:
- case 185:
- case 186:
- case 187:
- case 188:
- case 189:
- case 194:
- case 250:
- this.process_ct(var1, new ContentBox(var1, var6, 0), var5);
- break;
- case 251:
- case 252:
- case 253:
- case 254:
- case 255:
- case 256:
- case 257:
- case 258:
- case 259:
- case 260:
- case 261:
- case 262:
- case 263:
- case 264:
- case 265:
- this.process_empty_ct(var1, new ContentBox(var1, var6, 0), var5);
- }
-
- }
- }
-
- private void process_ct(Box var1, ContentBox var2, String var3, boolean var4) throws ParseException {
- var2.name = var3;
- var1.addChild(var2);
- var4 = this.parseParam(var2, var3, false);
- var2.empty = var4;
- Box var5 = var1.ppeer;
- ContentBox var6 = (ContentBox)var2.getCopy();
- var5.addChild(var6);
- var2.ppeer = var6;
- var6.cpeer = var2;
- var6.attribute_stack = var5.attribute_stack;
- if (!var4) {
- this.parseSequence(var2);
- ((Box)var6).addData(var2.adata);
- }
-
- try {
- PeerConverter.makeEquiv(var6);
- } catch (PeerException var8) {
- throw new ParseException(((Throwable)var8).getMessage(), this.field_0);
- }
- }
-
- private void process_ct(Box var1, ContentBox var2, String var3) throws ParseException {
- this.process_ct(var1, var2, var3, false);
- }
-
- private void process_empty_ct(Box var1, ContentBox var2, String var3) throws ParseException {
- this.process_ct(var1, var2, var3, true);
- }
-
- private void process_pr(Box var1, ContentBox var2, String var3) throws ParseException {
- var1.addChild(var2);
- boolean var4 = this.parseParam(var2, var3, false);
- var2.name = var3;
- Box var5 = var1.ppeer;
- Object var6 = null;
- var2.empty = false;
- switch (var2.type) {
- case 2:
- var6 = new MI(var5);
- break;
- case 3:
- var6 = new MN(var5);
- break;
- case 4:
- var6 = new MO(var5);
- case 5:
- case 29:
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 37:
- case 38:
- case 39:
- case 40:
- case 41:
- case 42:
- case 43:
- case 44:
- case 45:
- case 46:
- case 47:
- case 48:
- case 49:
- case 50:
- case 51:
- case 52:
- case 53:
- case 54:
- case 55:
- case 56:
- case 57:
- case 58:
- case 59:
- case 60:
- case 61:
- case 62:
- case 63:
- case 64:
- case 65:
- case 66:
- case 67:
- case 68:
- case 69:
- default:
- break;
- case 6:
- var6 = new MText(var5);
- break;
- case 7:
- var4 = true;
- var2.empty = true;
- var6 = new MSpace(var5);
- break;
- case 8:
- var6 = new MS(var5);
- break;
- case 9:
- var6 = new MStyle(var5);
- break;
- case 10:
- var6 = new MError(var5);
- break;
- case 11:
- var6 = new MPhantom(var5);
- break;
- case 12:
- var6 = new MRow(var5);
- break;
- case 13:
- var6 = new MFrac(var5);
- break;
- case 14:
- var6 = new MSqrt(var5);
- break;
- case 15:
- var6 = new MRoot(var5);
- break;
- case 16:
- var6 = new MSub(var5);
- break;
- case 17:
- var6 = new MSup(var5);
- break;
- case 18:
- var6 = new MSubsup(var5);
- break;
- case 19:
- var6 = new MUnder(var5);
- break;
- case 20:
- var6 = new MOver(var5);
- break;
- case 21:
- var6 = new MUnderover(var5);
- break;
- case 22:
- var6 = new MMultiscripts(var5);
- break;
- case 23:
- var6 = new MTable(var5);
- break;
- case 24:
- var6 = new MTr(var5);
- break;
- case 25:
- var6 = new MTd(var5);
- break;
- case 26:
- var6 = new MAction(var5);
- break;
- case 27:
- var6 = new MFenced(var5);
- break;
- case 28:
- var6 = new MPadded(var5);
- break;
- case 70:
- var4 = true;
- var2.empty = true;
- var6 = new MRow(var5);
- break;
- case 71:
- System.out.println("doing prescripts!");
- var4 = true;
- var2.empty = true;
- var6 = new Box(var5);
- break;
- case 72:
- case 73:
- var4 = true;
- var2.empty = true;
- var6 = new MRow(var5);
- }
-
- if (var2.type != 71) {
- var5.addChild((Box)var6);
- var2.ppeer = (Box)var6;
- ((Box)var6).cpeer = var2;
- } else {
- ((MMultiscripts)var5).postscripts_done();
- var2.ppeer = null;
- }
-
- var2.empty = var4;
- ((Box)var6).setAttributeVec(((Box)var2).getAttributeVec());
- if (var2.type == 26) {
- ((MAction)var6).init();
- }
-
- if (!var4) {
- this.parseSequence(var2);
- ((Box)var6).addData(var2.adata);
- }
-
- }
-
- private void process_sep(Box var1, ContentBox var2, String var3) throws ParseException {
- this.parseParam(var2, var3, true);
- var1.addData("<sep/>");
- }
-
- private void wrapMatrixRows(Box var1) {
- Object var2 = null;
-
- for(int var3 = 0; var3 < var1.getNumChildren(); ++var3) {
- Box var5 = var1.getChild(var3);
- if (!var5.getClass().getName().equals("webeq3.schema.MTr")) {
- var5 = var1.removeChildAt(var3);
- MTr var4 = new MTr(var1);
- var5.setParent(var4);
- ((Box)var4).addChild(var5);
- this.wrapMatrixCells(var4);
- var1.insertChildAt(var4, var3);
- }
- }
-
- }
-
- private String toUnicode(String var1) {
- StringBuffer var3 = new StringBuffer();
-
- for(int var4 = 0; var4 < var1.length(); ++var4) {
- char var2 = var1.charAt(var4);
- if (var2 == '&') {
- int var5 = var1.indexOf(59, var4);
- var3.append(EntityNames.get(var1.substring(var4 + 1, var5)));
- var4 = var5;
- } else {
- var3.append(var2);
- }
- }
-
- return var3.toString();
- }
-
- private void wrapMatrixCells(Box var1) {
- Object var2 = null;
-
- for(int var3 = 0; var3 < var1.getNumChildren(); ++var3) {
- Box var5 = var1.getChild(var3);
- if (!var5.getClass().getName().equals("webeq3.schema.MTd")) {
- var5 = var1.removeChildAt(var3);
- MTd var4 = new MTd(var1);
- var5.setParent(var4);
- ((Box)var4).addChild(var5);
- var1.insertChildAt(var4, var3);
- }
- }
-
- }
- }
-