Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Logback: the reliable, generic, fast and flexible logging framework. Copyright (C) 1999-2011, QOS.ch. All rights reserved. This program and the accompanying materials are dual-licensed under either the terms of the Eclipse Public License v1.0 as published by the Eclipse Foundation or (per the licensee's choosing) under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.
 
 package ch.qos.logback.core.pattern.parser;
 
 import java.util.List;
 
 import static ch.qos.logback.core.CoreConstants.CURLY_LEFT;
 import static ch.qos.logback.core.CoreConstants.ESCAPE_CHAR;
 

Return a steady stream of tokens.

The returned tokens are one of: LITERAL, '%', FORMAT_MODIFIER, SIMPLE_KEYWORD, COMPOSITE_KEYWORD OPTION, LEFT_PARENTHESIS, and RIGHT_PARENTHESIS.

The '\' character is used as escape. It can be used to escape '_', '%', '(' and '('.

Note that there is no EOS token returned.

 
 class TokenStream {
 
   enum TokenizerState { LITERAL_STATE,  FORMAT_MODIFIER_STATE, KEYWORD_STATE, OPTION_STATE,  RIGHT_PARENTHESIS_STATE}
 
   final String pattern;
   final int patternLength;
   final IEscapeUtil escapeUtil;
 
 
   int pointer = 0;
 
   // this variant should be used for testing purposes only
   TokenStream(String pattern) {
     this(patternnew RegularEscapeUtil());
   }
 
   TokenStream(String patternIEscapeUtil escapeUtil) {
     if (pattern == null || pattern.length() == 0) {
       throw new IllegalArgumentException(
               "null or empty pattern string not allowed");
     }
     this. = pattern;
      = pattern.length();
     this. = escapeUtil;
   }
 
   List tokenize() throws ScanException {
     List<TokentokenList = new ArrayList<Token>();
     StringBuffer buf = new StringBuffer();
 
     while ( < ) {
       char c = .charAt();
       ++;
 
       switch () {
         case :
           handleLiteralState(ctokenListbuf);
           break;
         case :
           handleFormatModifierState(ctokenListbuf);
           break;
         case :
           processOption(ctokenListbuf);
           break;
         case :
           handleKeywordState(ctokenListbuf);
           break;
         case :
           handleRightParenthesisState(ctokenListbuf);
           break;
 
        default:
      }
    }
    // EOS
    switch () {
      case :
        addValuedToken(.buftokenList);
        break;
      case :
        tokenList.add(new Token(.buf.toString()));
        break;
      case :
        tokenList.add(.);
        break;
      case :
      case :
        throw new ScanException("Unexpected end of pattern string");
    }
    return tokenList;
  }
  private void handleRightParenthesisState(char cList<TokentokenListStringBuffer buf) {
    switch (c) {
        break;
      case :
         = .;
        break;
      case :
        escape("%{}"buf);
        break;
      default:
        buf.append(c);
    }
  }
  private void processOption(char cList<TokentokenListStringBuffer bufthrows ScanException {
    OptionTokenizer ot = new OptionTokenizer(this);
    ot.tokenize(ctokenList);
  }
  private void handleFormatModifierState(char cList<TokentokenListStringBuffer buf) {
    if (c == .) {
      addValuedToken(.buftokenList);
      tokenList.add(.);
    } else if (Character.isJavaIdentifierStart(c)) {
      addValuedToken(.buftokenList);
      buf.append(c);
    } else {
      buf.append(c);
    }
  }
  private void handleLiteralState(char cList<TokentokenListStringBuffer buf) {
    switch (c) {
      case :
        escape("%()"buf);
        break;
      case .:
        addValuedToken(.buftokenList);
        tokenList.add(.);
        break;
        addValuedToken(.buftokenList);
        break;
      default:
        buf.append(c);
    }
  }
  private void handleKeywordState(char cList<TokentokenListStringBuffer buf) {
    if (Character.isJavaIdentifierPart(c)) {
      buf.append(c);
    } else if (c == ) {
      addValuedToken(.buftokenList);
    } else if (c == .) {
      addValuedToken(.buftokenList);
    } else if (c == .) {
      addValuedToken(.buftokenList);
      tokenList.add(.);
    } else if (c == .) {
      addValuedToken(.buftokenList);
    } else {
      addValuedToken(.buftokenList);
      if (c == ) {
        if (( < )) {
          char next = .charAt(++);
          .escape("%()"bufnext);
        }
      } else {
        buf.append(c);
      }
    }
  }
  void escape(String escapeCharsStringBuffer buf) {
    if (( < )) {
      char next = .charAt(++);
      .escape(escapeCharsbufnext);
    }
  }
  void optionEscape(String escapeCharsStringBuffer buf) {
    if (( < )) {
      char next = .charAt(++);
      .escape(escapeCharsbufnext);
    }
  }
  private void addValuedToken(int typeStringBuffer bufList<TokentokenList) {
    if (buf.length() > 0) {
      tokenList.add(new Token(typebuf.toString()));
      buf.setLength(0);
    }
  }
New to GrepCode? Check out our FAQ X