All Downloads are FREE. Search and download functionalities are using the official Maven repository.

juzu.impl.router.regex.Literal Maven / Gradle / Ivy

/*
 * Copyright 2013 eXo Platform SAS
 *
 * Licensed 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 juzu.impl.router.regex;

import java.io.IOException;

/** @author Julien Viet */
public class Literal {
  /**
   * Return true if the char should be escaped. Note that the implementation sometime may escape the char although the
   * context in which it is used would not require its escape.
   *
   * @param c the char to test
   * @return true when the char should be escaped.
   */
  public static boolean isEscaped(char c) {
    return c >= '(' && c <= '+' // ()*+
        || c == '?'
        || c == '{'
        || c == '}'
        || c == '|'
        || c == '$'
        || c == '&'
        || c == '^'
        || c == '-'
        || c == '.'
        || c == '['
        || c == ']'
        || c == '\\';
  }

  /**
   * Return the char value as a string literal in a regexp. Note that the implementation does not tries to optimize the
   * value with respect to the AST context, (for instance (?) would be fine as (?) but it will rewritten as (\?).
   *
   * @param value the value
   * @return the escaped string
   */
  public String getEscape(char value) {
    switch (value) {
      case '|':
        return "\\|";
      case '&':
        return "\\&";
      case '$':
        return "\\$";
      case '^':
        return "\\^";
      case '-':
        return "\\-";
      case '.':
        return "\\.";
      case '?':
        return "\\?";
      case '+':
        return "\\+";
      case '*':
        return "\\*";
      case '[':
        return "\\[";
      case ']':
        return "\\]";
      case '(':
        return "\\(";
      case ')':
        return "\\)";
      case '{':
        return "\\{";
      case '}':
        return "\\}";
      case '\\':
        return "\\\\";
      default:
        return Character.toString(value);
    }
  }

  public static void escapeTo(char value, Appendable appendable) throws IOException, NullPointerException {
    if (appendable == null) {
      throw new NullPointerException();
    }
    if (isEscaped(value)) {
      appendable.append('\\');
    }
    appendable.append(value);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy