org.apache.rocketmq.shaded.ch.qos.logback.core.pattern.util.RegularEscapeUtil Maven / Gradle / Ivy
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, 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 org.apache.rocketmq.shaded.ch.qos.logback.core.pattern.util;
/**
* This implementation is intended for use in PatternLayout.
*
* @author Ceki Gülcü
*/
public class RegularEscapeUtil implements IEscapeUtil {
public void escape(String escapeChars, StringBuffer buf, char next, int pointer) {
if (escapeChars.indexOf(next) >= 0) {
buf.append(next);
} else
switch (next) {
case '_':
// the \_ sequence is swallowed
break;
case '\\':
buf.append(next);
break;
case 't':
buf.append('\t');
break;
case 'r':
buf.append('\r');
break;
case 'n':
buf.append('\n');
break;
default:
String commaSeperatedEscapeChars = formatEscapeCharsForListing(escapeChars);
throw new IllegalArgumentException("Illegal char '" + next + " at column " + pointer + ". Only \\\\, \\_" + commaSeperatedEscapeChars
+ ", \\t, \\n, \\r combinations are allowed as escape characters.");
}
}
String formatEscapeCharsForListing(String escapeChars) {
StringBuilder commaSeperatedEscapeChars = new StringBuilder();
for (int i = 0; i < escapeChars.length(); i++) {
commaSeperatedEscapeChars.append(", \\").append(escapeChars.charAt(i));
}
return commaSeperatedEscapeChars.toString();
}
public static String basicEscape(String s) {
char c;
int len = s.length();
StringBuilder sbuf = new StringBuilder(len);
int i = 0;
while (i < len) {
c = s.charAt(i++);
if (c == '\\') {
c = s.charAt(i++);
if (c == 'n') {
c = '\n';
} else if (c == 'r') {
c = '\r';
} else if (c == 't') {
c = '\t';
} else if (c == 'f') {
c = '\f';
} else if (c == '\b') {
c = '\b';
} else if (c == '\"') {
c = '\"';
} else if (c == '\'') {
c = '\'';
} else if (c == '\\') {
c = '\\';
}
}
sbuf.append(c);
}
return sbuf.toString();
}
}