package com.github.fge.grappa.run.trace;
import com.google.common.escape.ArrayBasedUnicodeEscaper;
import java.util.Collections;
/**
* A label escaper used by the {@link TracingListener} when writing CSVs
*/
public final class LabelEscaper
extends ArrayBasedUnicodeEscaper
{
/*
* ASCII control, except DEL: 0x00 to 0x1f
*/
private static final int ASCII_CTL_MAX = 0x1f;
private static final String[] ASCII_CTL_ESCAPES = {
"<NUL>", /* 0x00 */
"<STH>",
"<STX>",
"<ETX>",
"<EOT>",
"<ENQ>",
"<ACK>",
"<BEL>",
"\\b",
"\\t",
"\\n",
"<VT>",
"\\f",
"\\r",
"<SO>",
"<SI>",
"<DLE>", /* 0x10 */
"<DC1>",
"<DC2>",
"<DC3>",
"<DC4>",
"<NAK>",
"<SYN>",
"<ETB>",
"<CAN>",
"<EM>",
"<SUB>",
"<ESC>",
"<FS>",
"<GS>",
"<RS>",
"<US>" /* 0x1f */
};
/*
* ASCII DEL
*/
private static final int ASCII_DEL = 0x7f;
private static final String ASCII_DEL_ESCAPE = "<DEL>";
public LabelEscaper()
{
super(Collections.<Character, String>emptyMap(), 0x80,
Character.MAX_CODE_POINT, null);
}
@Override
protected char[] escapeUnsafe(final int cp)
{
if (cp <= ASCII_CTL_MAX)
return ASCII_CTL_ESCAPES[cp].toCharArray();
if (cp == ASCII_DEL)
return ASCII_DEL_ESCAPE.toCharArray();
return null;
}
}