home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / kav / xsl / ExpressionParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-05-16  |  6.2 KB  |  388 lines

  1. package com.kav.xsl;
  2.  
  3. import com.kav.util.Tokenizer;
  4. import com.kav.xsl.util.BooleanTokenizer;
  5. import com.kav.xsl.util.PathTokenizer;
  6. import java.util.StringTokenizer;
  7.  
  8. public class ExpressionParser {
  9.    private static final String STREXPR_START = "{";
  10.    private static final String STREXPR_END = "}";
  11.    private static final String QUALIFIER_START = "[";
  12.    private static final String QUALIFIER_END = "]";
  13.    private static final String PARAMLIST_START = "(";
  14.    private static final String PARAMLIST_END = ")";
  15.    private static final String RELATION_SEP = "/";
  16.    private static final String PATTERN_SEP = "|";
  17.    private static final String QUALIFIER_SEP = ",";
  18.    private static final String DOUBLE_QUOTE = "\"";
  19.    private static final String SINGLE_QUOTE = "'";
  20.    private static final String EQUALS = "=";
  21.    private static final String SPACE = " ";
  22.    // $FF: renamed from: LF java.lang.String
  23.    private static final String field_0 = "\n";
  24.    // $FF: renamed from: CR java.lang.String
  25.    private static final String field_1 = "\r";
  26.    private static final String TAB = "\t";
  27.  
  28.    public static BooleanExpr createBooleanExpr(String var0) throws InvalidExprException {
  29.       Object var1 = null;
  30.       Object var2 = null;
  31.       BooleanTokenizer var3 = new BooleanTokenizer(var0);
  32.       if (!((Tokenizer)var3).hasMoreTokens()) {
  33.          throw new InvalidExprException("Invalid BooleanExpr: " + var0);
  34.       } else {
  35.          byte var5 = 2;
  36.  
  37.          while(((Tokenizer)var3).hasMoreTokens()) {
  38.             String var4 = ((Tokenizer)var3).nextToken();
  39.             if (((Tokenizer)var3).isDelimiter(var4)) {
  40.                if (" and ".equals(var4)) {
  41.                   var5 = 0;
  42.                } else if (" or ".equals(var4)) {
  43.                   var5 = 1;
  44.                }
  45.             }
  46.          }
  47.  
  48.          ((Tokenizer)var3).resetPosition();
  49.          BooleanExpr var6 = new BooleanExpr(var5);
  50.  
  51.          while(((Tokenizer)var3).hasMoreTokens()) {
  52.             String var8 = ((Tokenizer)var3).nextToken();
  53.             if (" and ".equals(var8)) {
  54.                if (var6.getType() != 0) {
  55.                   throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'and' is located in an invalid position.");
  56.                }
  57.  
  58.                if (!((Tokenizer)var3).hasMoreTokens()) {
  59.                   throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'and' -> missing remainder of expression.");
  60.                }
  61.             } else if (" or ".equals(var8)) {
  62.                if (var6.getType() != 1) {
  63.                   throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'or' is located in an invalid position.");
  64.                }
  65.  
  66.                if (!((Tokenizer)var3).hasMoreTokens()) {
  67.                   throw new InvalidExprException("Invalid BooleanExpr: " + var0 + "; 'or' -> missing remainder of expression.");
  68.                }
  69.             } else {
  70.                BooleanPrimaryExpr var7 = createBooleanPrimaryExpr(var8);
  71.                if (var7 != null) {
  72.                   var6.addBooleanPrimaryExpr(var7);
  73.                }
  74.             }
  75.          }
  76.  
  77.          return var6;
  78.       }
  79.    }
  80.  
  81.    public static BooleanPrimaryExpr createBooleanPrimaryExpr(String var0) throws InvalidExprException {
  82.       Object var1 = null;
  83.       Object var2 = null;
  84.       Object var3 = null;
  85.       if (var0 == null) {
  86.          return null;
  87.       } else {
  88.          int var4 = var0.indexOf("(");
  89.          int var5 = var0.lastIndexOf(")");
  90.          String var6 = null;
  91.          Object var7 = null;
  92.          int var8 = var0.indexOf("=");
  93.          String var15;
  94.          if (var8 >= 0) {
  95.             var15 = var0.substring(0, var8).trim();
  96.             var6 = removeQuotes(var0.substring(var8 + 1));
  97.          } else {
  98.             var15 = var0;
  99.          }
  100.  
  101.          SelectExpr var9 = null;
  102.  
  103.          try {
  104.             var9 = createSelectExpr(var15);
  105.          } catch (InvalidExprException var10) {
  106.          }
  107.  
  108.          if (var9 != null) {
  109.             BooleanPrimaryExpr var12;
  110.             if (var6 == null) {
  111.                var12 = new BooleanPrimaryExpr(5);
  112.             } else {
  113.                var12 = new BooleanPrimaryExpr(6);
  114.             }
  115.  
  116.             var12.setSelectExpr(var9);
  117.             var12.setLiteral(var6);
  118.             return var12;
  119.          } else if (var4 >= 0 && var5 >= 0) {
  120.             String var13 = var0.substring(0, var4);
  121.             String var14 = var0.substring(var4 + 1, var5);
  122.             if (var13 != null) {
  123.                var13 = var13.intern();
  124.             }
  125.  
  126.             BooleanPrimaryExpr var11;
  127.             if (var13.length() == 0) {
  128.                var11 = new BooleanPrimaryExpr(7);
  129.                var11.setBooleanExpr(createBooleanExpr(var14));
  130.             } else if (var13 == "first-of-type") {
  131.                var11 = new BooleanPrimaryExpr(1);
  132.             } else if (var13 == "first-of-any") {
  133.                var11 = new BooleanPrimaryExpr(2);
  134.             } else if (var13 == "last-of-type") {
  135.                var11 = new BooleanPrimaryExpr(3);
  136.             } else if (var13 == "last-of-any") {
  137.                var11 = new BooleanPrimaryExpr(4);
  138.             } else {
  139.                if (var13 != "not") {
  140.                   throw new InvalidExprException("Invalid boolean function: " + var13 + "(" + var14 + ")");
  141.                }
  142.  
  143.                var11 = new BooleanPrimaryExpr(0);
  144.                var11.setBooleanExpr(createBooleanExpr(var14));
  145.             }
  146.  
  147.             return var11;
  148.          } else {
  149.             throw new InvalidExprException("Invalid BooleanPrimaryExpr: " + var0);
  150.          }
  151.       }
  152.    }
  153.  
  154.    public static FilterExpr createFilterExpr(String var0) throws InvalidExprException {
  155.       FilterExpr var1 = new FilterExpr();
  156.       NodeExpr var2 = createNodeExpr(getNamePart(var0));
  157.       if (var2 == null) {
  158.          throw new InvalidExprException(var0);
  159.       } else {
  160.          var1.setNodeExpr(var2);
  161.          Object var3 = null;
  162.          String var5;
  163.          if ((var5 = getQualifierPart(var0)) != null) {
  164.             BooleanExpr var4 = createBooleanExpr(var5.trim());
  165.             if (var4 != null) {
  166.                var1.setBooleanExpr(var4);
  167.             }
  168.          }
  169.  
  170.          return var1;
  171.       }
  172.    }
  173.  
  174.    public static MatchExpr createMatchExpr(String var0) throws InvalidExprException {
  175.       MatchExpr var1 = new MatchExpr();
  176.       var1.setUnionExpr(createUnionExpr(var0));
  177.       return var1;
  178.    }
  179.  
  180.    public static NodeExpr createNodeExpr(String var0) throws InvalidExprException {
  181.       Object var1 = null;
  182.       Object var2 = null;
  183.       Object var3 = null;
  184.       var0 = var0.trim();
  185.       int var4 = var0.indexOf("(");
  186.       int var5 = var0.indexOf(")");
  187.       if (var4 < 0) {
  188.          NodeExpr var12;
  189.          if (var0.startsWith("@")) {
  190.             var12 = new NodeExpr(1);
  191.             var12.setName(var0.substring(1));
  192.          } else if (".".equals(var0)) {
  193.             var12 = new NodeExpr(4);
  194.             var12.setName(var0);
  195.          } else if ("..".equals(var0)) {
  196.             var12 = new NodeExpr(5);
  197.             var12.setName(var0);
  198.          } else {
  199.             var12 = new NodeExpr(2);
  200.             var12.setName(var0);
  201.          }
  202.  
  203.          return var12;
  204.       } else {
  205.          String var10 = var0.substring(0, var4);
  206.          if (var5 < 0) {
  207.             throw new InvalidExprException("Invalid node expression - " + var0 + "- missing closing ')'");
  208.          } else {
  209.             String var8 = var0.substring(var4 + 1, var5).trim();
  210.             Object var6 = null;
  211.             if (var10 != null) {
  212.                var10 = var10.intern();
  213.             }
  214.  
  215.             if (var10 == AncestorExpr.ANCESTOR_OR_SELF) {
  216.                var3 = new AncestorExpr(true);
  217.                MatchExpr var13 = createMatchExpr(var8);
  218.                ((AncestorExpr)var3).setMatchExpr(var13);
  219.             } else if (var10 == AncestorExpr.ANCESTOR) {
  220.                var3 = new AncestorExpr(false);
  221.                MatchExpr var14 = createMatchExpr(var8);
  222.                ((AncestorExpr)var3).setMatchExpr(var14);
  223.             } else if (var10 == "id") {
  224.                if (var8.startsWith("'")) {
  225.                   var8 = removeQuotes(var8);
  226.                   var3 = new IdExpr(var8);
  227.                } else {
  228.                   var3 = new IdExpr(createSelectExpr(var8));
  229.                }
  230.             } else if (var10 == "text") {
  231.                var3 = new NodeExpr(6);
  232.             } else if (var10 == "comment") {
  233.                var3 = new NodeExpr(7);
  234.             } else {
  235.                if (var10 != "pi") {
  236.                   throw new InvalidExprException("Invalid node expression - " + var0);
  237.                }
  238.  
  239.                var3 = new NodeExpr(8);
  240.                if (var8.length() > 0) {
  241.                   ((NodeExpr)var3).setName(var8);
  242.                }
  243.             }
  244.  
  245.             return (NodeExpr)var3;
  246.          }
  247.       }
  248.    }
  249.  
  250.    public static PathExpr createPathExpr(String var0) throws InvalidExprException {
  251.       PathExpr var1 = new PathExpr();
  252.       Object var2 = null;
  253.       Object var3 = null;
  254.       Object var4 = null;
  255.       if (var0 == null) {
  256.          return var1;
  257.       } else {
  258.          var0 = var0.trim();
  259.          if ("/".equals(var0)) {
  260.             var1.appendChild(createFilterExpr(var0));
  261.             return var1;
  262.          } else {
  263.             PathTokenizer var7 = new PathTokenizer(var0);
  264.             byte var5 = 0;
  265.  
  266.             while(((Tokenizer)var7).hasMoreTokens()) {
  267.                String var8 = ((Tokenizer)var7).nextToken();
  268.                if (var8.equals("//")) {
  269.                   var5 = 1;
  270.                } else if (var8.equals("/")) {
  271.                   var5 = 2;
  272.                } else {
  273.                   FilterExpr var9 = createFilterExpr(var8);
  274.                   ((PatternExpr)var9).setAncestryOp(var5);
  275.                   var1.appendChild(var9);
  276.                   var5 = 0;
  277.                }
  278.             }
  279.  
  280.             return var1;
  281.          }
  282.       }
  283.    }
  284.  
  285.    public static ReferenceExpr createReferenceExpr(String var0) throws InvalidExprException {
  286.       Object var1 = null;
  287.       Object var2 = null;
  288.       Object var3 = null;
  289.       if (var0 == null) {
  290.          return null;
  291.       } else {
  292.          var0 = var0.trim();
  293.          int var4 = var0.indexOf("(");
  294.          int var5 = var0.indexOf(")");
  295.          if (var4 >= 0 && var5 >= 0) {
  296.             String var8 = var0.substring(0, var4);
  297.             String var7 = var0.substring(var4 + 1, var5);
  298.             if (var7.startsWith("'") && var7.endsWith("'")) {
  299.                var7 = var7.substring(1, var7.length() - 1);
  300.             }
  301.  
  302.             if (var8 != null) {
  303.                var8 = var8.intern();
  304.             }
  305.  
  306.             ReferenceExpr var9;
  307.             if (var8 == "constant") {
  308.                var9 = new ReferenceExpr(0);
  309.                var9.setName(var7);
  310.             } else if (var8 == "arg") {
  311.                var9 = new ReferenceExpr(1);
  312.                var9.setName(var7);
  313.             } else {
  314.                if (var8 != "name") {
  315.                   return null;
  316.                }
  317.  
  318.                var9 = new ReferenceExpr(2);
  319.                var9.setName(var7);
  320.                var9.setSelectExpr(createSelectExpr(var7));
  321.             }
  322.  
  323.             return var9;
  324.          } else {
  325.             return null;
  326.          }
  327.       }
  328.    }
  329.  
  330.    public static SelectExpr createSelectExpr(String var0) throws InvalidExprException {
  331.       SelectExpr var1 = new SelectExpr();
  332.       var1.setUnionExpr(createUnionExpr(var0));
  333.       return var1;
  334.    }
  335.  
  336.    public static StringExpr createStringExpr(String var0) throws InvalidExprException {
  337.       return new StringExpr(var0);
  338.    }
  339.  
  340.    public static UnionExpr createUnionExpr(String var0) throws InvalidExprException {
  341.       UnionExpr var1 = new UnionExpr();
  342.       if (var0 == null) {
  343.          throw new InvalidExprException("null pattern");
  344.       } else {
  345.          StringTokenizer var2 = new StringTokenizer(var0, "|");
  346.          Object var3 = null;
  347.  
  348.          while(var2.hasMoreTokens()) {
  349.             String var4 = var2.nextToken().trim();
  350.             if (var4.length() > 0) {
  351.                var1.appendChild(createPathExpr(var4));
  352.             }
  353.          }
  354.  
  355.          return var1;
  356.       }
  357.    }
  358.  
  359.    private static String getNamePart(String var0) {
  360.       int var1 = var0.indexOf("[");
  361.       int var2 = var0.indexOf("(");
  362.       return var1 >= 0 && (var2 <= 0 || var2 >= var1) ? var0.substring(0, var1) : var0;
  363.    }
  364.  
  365.    private static String getQualifierPart(String var0) {
  366.       int var1 = var0.indexOf("[");
  367.       int var2 = var0.indexOf("]");
  368.       if (var1 < 0) {
  369.          return null;
  370.       } else {
  371.          return var2 < 0 ? null : var0.substring(var1 + 1, var2);
  372.       }
  373.    }
  374.  
  375.    private static String removeQuotes(String var0) {
  376.       String var1 = var0.trim();
  377.       if (var1.startsWith("'")) {
  378.          if (var1.endsWith("'")) {
  379.             var1 = var1.substring(1, var1.length() - 1);
  380.          }
  381.       } else if (var1.startsWith("\"") && var1.endsWith("\"")) {
  382.          var1 = var1.substring(1, var1.length() - 1);
  383.       }
  384.  
  385.       return var1;
  386.    }
  387. }
  388.