home *** CD-ROM | disk | FTP | other *** search
- package com.kav.xsl;
-
- import com.kav.util.Tokenizer;
- import com.kav.xsl.util.BooleanTokenizer;
- import com.kav.xsl.util.PathTokenizer;
- import java.util.StringTokenizer;
-
- public class ExpressionParser {
- private static final String STREXPR_START = "{";
- private static final String STREXPR_END = "}";
- private static final String QUALIFIER_START = "[";
- private static final String QUALIFIER_END = "]";
- private static final String PARAMLIST_START = "(";
- private static final String PARAMLIST_END = ")";
- private static final String RELATION_SEP = "/";
- private static final String PATTERN_SEP = "|";
- private static final String QUALIFIER_SEP = ",";
- private static final String DOUBLE_QUOTE = "\"";
- private static final String SINGLE_QUOTE = "'";
- private static final String EQUALS = "=";
- private static final String SPACE = " ";
- // $FF: renamed from: LF java.lang.String
- private static final String field_0 = "\n";
- // $FF: renamed from: CR java.lang.String
- private static final String field_1 = "\r";
- private static final String TAB = "\t";
-
- public static BooleanExpr createBooleanExpr(String var0) throws InvalidExprException {
- Object var1 = null;
- Object var2 = null;
- BooleanTokenizer var3 = new BooleanTokenizer(var0);
- if (!((Tokenizer)var3).hasMoreTokens()) {
- throw new InvalidExprException("Invalid BooleanExpr: " + var0);
- } else {
- byte var5 = 2;
-
- while(((Tokenizer)var3).hasMoreTokens()) {
- String var4 = ((Tokenizer)var3).nextToken();
- if (((Tokenizer)var3).isDelimiter(var4)) {
- if (" and ".equals(var4)) {
- var5 = 0;
- } else if (" or ".equals(var4)) {
- var5 = 1;
- }
- }
- }
-
- ((Tokenizer)var3).resetPosition();
- BooleanExpr var6 = new BooleanExpr(var5);
-
- while(((Tokenizer)var3).hasMoreTokens()) {
- String var8 = ((Tokenizer)var3).nextToken();
- if (" and ".equals(var8)) {
- if (var6.getType() != 0) {
- throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'and' is located in an invalid position.");
- }
-
- if (!((Tokenizer)var3).hasMoreTokens()) {
- throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'and' -> missing remainder of expression.");
- }
- } else if (" or ".equals(var8)) {
- if (var6.getType() != 1) {
- throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'or' is located in an invalid position.");
- }
-
- if (!((Tokenizer)var3).hasMoreTokens()) {
- throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'or' -> missing remainder of expression.");
- }
- } else {
- BooleanPrimaryExpr var7 = createBooleanPrimaryExpr(var8);
- if (var7 != null) {
- var6.addBooleanPrimaryExpr(var7);
- }
- }
- }
-
- return var6;
- }
- }
-
- public static BooleanPrimaryExpr createBooleanPrimaryExpr(String var0) throws InvalidExprException {
- Object var1 = null;
- Object var2 = null;
- Object var3 = null;
- if (var0 == null) {
- return null;
- } else {
- int var4 = var0.indexOf("(");
- int var5 = var0.lastIndexOf(")");
- String var6 = null;
- Object var7 = null;
- int var8 = var0.indexOf("=");
- String var15;
- if (var8 >= 0) {
- var15 = var0.substring(0, var8).trim();
- var6 = removeQuotes(var0.substring(var8 + 1));
- } else {
- var15 = var0;
- }
-
- SelectExpr var9 = null;
-
- try {
- var9 = createSelectExpr(var15);
- } catch (InvalidExprException var10) {
- }
-
- if (var9 != null) {
- BooleanPrimaryExpr var12;
- if (var6 == null) {
- var12 = new BooleanPrimaryExpr(5);
- } else {
- var12 = new BooleanPrimaryExpr(6);
- }
-
- var12.setSelectExpr(var9);
- var12.setLiteral(var6);
- return var12;
- } else if (var4 >= 0 && var5 >= 0) {
- String var13 = var0.substring(0, var4);
- String var14 = var0.substring(var4 + 1, var5);
- if (var13 != null) {
- var13 = var13.intern();
- }
-
- BooleanPrimaryExpr var11;
- if (var13.length() == 0) {
- var11 = new BooleanPrimaryExpr(7);
- var11.setBooleanExpr(createBooleanExpr(var14));
- } else if (var13 == "first-of-type") {
- var11 = new BooleanPrimaryExpr(1);
- } else if (var13 == "first-of-any") {
- var11 = new BooleanPrimaryExpr(2);
- } else if (var13 == "last-of-type") {
- var11 = new BooleanPrimaryExpr(3);
- } else if (var13 == "last-of-any") {
- var11 = new BooleanPrimaryExpr(4);
- } else {
- if (var13 != "not") {
- throw new InvalidExprException("Invalid boolean function: " + var13 + "(" + var14 + ")");
- }
-
- var11 = new BooleanPrimaryExpr(0);
- var11.setBooleanExpr(createBooleanExpr(var14));
- }
-
- return var11;
- } else {
- throw new InvalidExprException("Invalid BooleanPrimaryExpr: " + var0);
- }
- }
- }
-
- public static FilterExpr createFilterExpr(String var0) throws InvalidExprException {
- FilterExpr var1 = new FilterExpr();
- NodeExpr var2 = createNodeExpr(getNamePart(var0));
- if (var2 == null) {
- throw new InvalidExprException(var0);
- } else {
- var1.setNodeExpr(var2);
- Object var3 = null;
- String var5;
- if ((var5 = getQualifierPart(var0)) != null) {
- BooleanExpr var4 = createBooleanExpr(var5.trim());
- if (var4 != null) {
- var1.setBooleanExpr(var4);
- }
- }
-
- return var1;
- }
- }
-
- public static MatchExpr createMatchExpr(String var0) throws InvalidExprException {
- MatchExpr var1 = new MatchExpr();
- var1.setUnionExpr(createUnionExpr(var0));
- return var1;
- }
-
- public static NodeExpr createNodeExpr(String var0) throws InvalidExprException {
- Object var1 = null;
- Object var2 = null;
- Object var3 = null;
- var0 = var0.trim();
- int var4 = var0.indexOf("(");
- int var5 = var0.indexOf(")");
- if (var4 < 0) {
- NodeExpr var12;
- if (var0.startsWith("@")) {
- var12 = new NodeExpr(1);
- var12.setName(var0.substring(1));
- } else if (".".equals(var0)) {
- var12 = new NodeExpr(4);
- var12.setName(var0);
- } else if ("..".equals(var0)) {
- var12 = new NodeExpr(5);
- var12.setName(var0);
- } else {
- var12 = new NodeExpr(2);
- var12.setName(var0);
- }
-
- return var12;
- } else {
- String var10 = var0.substring(0, var4);
- if (var5 < 0) {
- throw new InvalidExprException("Invalid node expression - " + var0 + "- missing closing ')'");
- } else {
- String var8 = var0.substring(var4 + 1, var5).trim();
- Object var6 = null;
- if (var10 != null) {
- var10 = var10.intern();
- }
-
- if (var10 == AncestorExpr.ANCESTOR_OR_SELF) {
- var3 = new AncestorExpr(true);
- MatchExpr var13 = createMatchExpr(var8);
- ((AncestorExpr)var3).setMatchExpr(var13);
- } else if (var10 == AncestorExpr.ANCESTOR) {
- var3 = new AncestorExpr(false);
- MatchExpr var14 = createMatchExpr(var8);
- ((AncestorExpr)var3).setMatchExpr(var14);
- } else if (var10 == "id") {
- if (var8.startsWith("'")) {
- var8 = removeQuotes(var8);
- var3 = new IdExpr(var8);
- } else {
- var3 = new IdExpr(createSelectExpr(var8));
- }
- } else if (var10 == "text") {
- var3 = new NodeExpr(6);
- } else if (var10 == "comment") {
- var3 = new NodeExpr(7);
- } else {
- if (var10 != "pi") {
- throw new InvalidExprException("Invalid node expression - " + var0);
- }
-
- var3 = new NodeExpr(8);
- if (var8.length() > 0) {
- ((NodeExpr)var3).setName(var8);
- }
- }
-
- return (NodeExpr)var3;
- }
- }
- }
-
- public static PathExpr createPathExpr(String var0) throws InvalidExprException {
- PathExpr var1 = new PathExpr();
- Object var2 = null;
- Object var3 = null;
- Object var4 = null;
- if (var0 == null) {
- return var1;
- } else {
- var0 = var0.trim();
- if ("/".equals(var0)) {
- var1.appendChild(createFilterExpr(var0));
- return var1;
- } else {
- PathTokenizer var7 = new PathTokenizer(var0);
- byte var5 = 0;
-
- while(((Tokenizer)var7).hasMoreTokens()) {
- String var8 = ((Tokenizer)var7).nextToken();
- if (var8.equals("//")) {
- var5 = 1;
- } else if (var8.equals("/")) {
- var5 = 2;
- } else {
- FilterExpr var9 = createFilterExpr(var8);
- ((PatternExpr)var9).setAncestryOp(var5);
- var1.appendChild(var9);
- var5 = 0;
- }
- }
-
- return var1;
- }
- }
- }
-
- public static ReferenceExpr createReferenceExpr(String var0) throws InvalidExprException {
- Object var1 = null;
- Object var2 = null;
- Object var3 = null;
- if (var0 == null) {
- return null;
- } else {
- var0 = var0.trim();
- int var4 = var0.indexOf("(");
- int var5 = var0.indexOf(")");
- if (var4 >= 0 && var5 >= 0) {
- String var8 = var0.substring(0, var4);
- String var7 = var0.substring(var4 + 1, var5);
- if (var7.startsWith("'") && var7.endsWith("'")) {
- var7 = var7.substring(1, var7.length() - 1);
- }
-
- if (var8 != null) {
- var8 = var8.intern();
- }
-
- ReferenceExpr var9;
- if (var8 == "constant") {
- var9 = new ReferenceExpr(0);
- var9.setName(var7);
- } else if (var8 == "arg") {
- var9 = new ReferenceExpr(1);
- var9.setName(var7);
- } else {
- if (var8 != "name") {
- return null;
- }
-
- var9 = new ReferenceExpr(2);
- var9.setName(var7);
- var9.setSelectExpr(createSelectExpr(var7));
- }
-
- return var9;
- } else {
- return null;
- }
- }
- }
-
- public static SelectExpr createSelectExpr(String var0) throws InvalidExprException {
- SelectExpr var1 = new SelectExpr();
- var1.setUnionExpr(createUnionExpr(var0));
- return var1;
- }
-
- public static StringExpr createStringExpr(String var0) throws InvalidExprException {
- return new StringExpr(var0);
- }
-
- public static UnionExpr createUnionExpr(String var0) throws InvalidExprException {
- UnionExpr var1 = new UnionExpr();
- if (var0 == null) {
- throw new InvalidExprException("null pattern");
- } else {
- StringTokenizer var2 = new StringTokenizer(var0, "|");
- Object var3 = null;
-
- while(var2.hasMoreTokens()) {
- String var4 = var2.nextToken().trim();
- if (var4.length() > 0) {
- var1.appendChild(createPathExpr(var4));
- }
- }
-
- return var1;
- }
- }
-
- private static String getNamePart(String var0) {
- int var1 = var0.indexOf("[");
- int var2 = var0.indexOf("(");
- return var1 >= 0 && (var2 <= 0 || var2 >= var1) ? var0.substring(0, var1) : var0;
- }
-
- private static String getQualifierPart(String var0) {
- int var1 = var0.indexOf("[");
- int var2 = var0.indexOf("]");
- if (var1 < 0) {
- return null;
- } else {
- return var2 < 0 ? null : var0.substring(var1 + 1, var2);
- }
- }
-
- private static String removeQuotes(String var0) {
- String var1 = var0.trim();
- if (var1.startsWith("'")) {
- if (var1.endsWith("'")) {
- var1 = var1.substring(1, var1.length() - 1);
- }
- } else if (var1.startsWith("\"") && var1.endsWith("\"")) {
- var1 = var1.substring(1, var1.length() - 1);
- }
-
- return var1;
- }
- }
-