blob: ae87a1e22b977ed3ecbdd08433676c36ca076dbe [file] [log] [blame]
package org.codehaus.jackson.io;
import org.codehaus.jackson.SerializableString;
import org.codehaus.jackson.util.CharTypes;
/**
* Abstract base class that defines interface for customizing character
* escaping aspects for String values, for formats that use escaping.
* For JSON this applies to both property names and String values.
*
* @since 1.8
*/
public abstract class CharacterEscapes
{
/**
* Value used for lookup tables to indicate that matching characters
* do not need to be escaped.
*/
public final static int ESCAPE_NONE = 0;
/**
* Value used for lookup tables to indicate that matching characters
* are to be escaped using standard escaping; for JSON this means
* (for example) using "backslash - u" escape method.
*/
public final static int ESCAPE_STANDARD = -1;
/**
* Value used for lookup tables to indicate that matching characters
* will need custom escapes; and that another call
* to {@link #getEscapeSequence} is needed to figure out exact escape
* sequence to output.
*/
public final static int ESCAPE_CUSTOM = -2;
/**
* Method generators can call to get lookup table for determining
* escape handling for first 128 characters of Unicode (ASCII
* characters. Caller is not to modify contents of this array, since
* this is expected to be a shared copy.
*
* @return Array with size of at least 128, where first 128 entries
* have either one of <code>ESCAPE_xxx</code> constants, or non-zero positive
* integer (meaning of which is data format specific; for JSON it means
* that combination of backslash and character with that value is to be used)
* to indicate that specific escape sequence is to be used.
*/
public abstract int[] getEscapeCodesForAscii();
/**
* Method generators can call to get lookup table for determining
* exact escape sequence to use for given character.
* It can be called for any character, but typically is called for
* either for ASCII characters for which custom escape
* sequence is needed; or for any non-ASCII character.
*/
public abstract SerializableString getEscapeSequence(int ch);
/**
* Helper method that can be used to get a copy of standard JSON
* escape definitions; this is useful when just wanting to slightly
* customize definitions. Caller can modify this array as it sees
* fit and usually returns modified instance via {@link #getEscapeCodesForAscii}
*/
public static int[] standardAsciiEscapesForJSON()
{
int[] esc = CharTypes.get7BitOutputEscapes();
int len = esc.length;
int[] result = new int[len];
System.arraycopy(esc, 0, result, 0, esc.length);
return result;
}
}