Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.apache.catalina.ssi;


Parses an expression string to return the individual tokens. This is patterned similar to the StreamTokenizer in the JDK but customized for SSI conditional expression parsing.

Author(s):
Paul Speed
Version:
$Revision: 515 $
 
 public class ExpressionTokenizer {
     public static final int TOKEN_STRING = 0;
     public static final int TOKEN_AND = 1;
     public static final int TOKEN_OR = 2;
     public static final int TOKEN_NOT = 3;
     public static final int TOKEN_EQ = 4;
     public static final int TOKEN_NOT_EQ = 5;
     public static final int TOKEN_RBRACE = 6;
     public static final int TOKEN_LBRACE = 7;
     public static final int TOKEN_GE = 8;
     public static final int TOKEN_LE = 9;
     public static final int TOKEN_GT = 10;
     public static final int TOKEN_LT = 11;
     public static final int TOKEN_END = 12;
     private char[] expr;
     private String tokenVal = null;
     private int index;
     private int length;


    
Creates a new parser for the specified expression.
 
     public ExpressionTokenizer(String expr) {
         this. = expr.trim().toCharArray();
         this. = this..length;
     }


    
Returns true if there are more tokens.
 
     public boolean hasMoreTokens() {
         return  < ;
     }


    
Returns the current index for error reporting purposes.
 
     public int getIndex() {
         return ;
     }
 
 
     protected boolean isMetaChar(char c) {
         return Character.isWhitespace(c) || c == '(' || c == ')' || c == '!'
                 || c == '<' || c == '>' || c == '|' || c == '&' || c == '=';
     }


    
Returns the next token type and initializes any state variables accordingly.
 
     public int nextToken() {
         // Skip any leading white space
         while ( <  && Character.isWhitespace([]))
             ++;
         // Clear the current token val
          = null;
         if ( == return // End of string
         int start = ;
         char currentChar = [];
         char nextChar = (char)0;
         ++;
         if ( < nextChar = [];
         // Check for a known token start
         switch (currentChar) {
             case '(' :
                 return ;
             case ')' :
                return ;
            case '=' :
                return ;
            case '!' :
                if (nextChar == '=') {
                    ++;
                    return ;
                } else {
                    return ;
                }
            case '|' :
                if (nextChar == '|') {
                    ++;
                    return ;
                }
                break;
            case '&' :
                if (nextChar == '&') {
                    ++;
                    return ;
                }
                break;
            case '>' :
                if (nextChar == '=') {
                    ++;
                    return // Greater than or equal
                } else {
                    return // Greater than
                }
            case '<' :
                if (nextChar == '=') {
                    ++;
                    return // Less than or equal
                } else {
                    return // Less than
                }
            default :
                // Otherwise it's a string
                break;
        }
        int end = ;
        // If it's a quoted string then end is the next unescaped quote
        if (currentChar == '"' || currentChar == '\'') {
            char endChar = currentChar;
            boolean escaped = false;
            start++;
            for (;  < ++) {
                if ([] == '\\' && !escaped) {
                    escaped = true;
                    continue;
                }
                if ([] == endChar && !escapedbreak;
                escaped = false;
            }
            end = ;
            ++; // Skip the end quote
        } else {
            // End is the next whitespace character
            for (;  < ++) {
                if (isMetaChar([])) break;
            }
            end = ;
        }
        // Extract the string from the array
        this. = new String(startend - start);
        return ;
    }


    
Returns the String value of the token if it was type TOKEN_STRING. Otherwise null is returned.
    public String getTokenValue() {
        return ;
    }
New to GrepCode? Check out our FAQ X