package com.fasterxml.jackson.core;

import com.fasterxml.jackson.core.io.CharacterEscapes;
import com.fasterxml.jackson.core.io.SerializedString;

/**
 * Convenience {@link CharacterEscapes} implementation that escapes
 * Unicode characters `0x2028` and `0x2029` (in addition to characters
 * escaped otherwise), which are apparently considered linefeeds as
 * per newer Javascript specifications, and consequently problematic
 * when using JSONP (see https://en.wikipedia.org/wiki/JSONP).
 *
 * @since 2.8
 */
public class JsonpCharacterEscapes extends CharacterEscapes
{
    private static final long serialVersionUID = 1L;

    private static final int[] asciiEscapes = CharacterEscapes.standardAsciiEscapesForJSON();
    private static final SerializedString escapeFor2028 = new SerializedString("\\u2028");
    private static final SerializedString escapeFor2029 = new SerializedString("\\u2029");

    private static final JsonpCharacterEscapes sInstance = new JsonpCharacterEscapes();

    public static JsonpCharacterEscapes instance() {
        return sInstance;
    }

    @Override
    public SerializableString getEscapeSequence(int ch)
    {
        switch (ch) {
        case 0x2028:
            return escapeFor2028;
        case 0x2029:
            return escapeFor2029;
        default:
            return null;
        }
    }

    @Override
    public int[] getEscapeCodesForAscii() {
        return asciiEscapes;
    }
}
