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

panda.lang.escape.UnicodeEscaper Maven / Gradle / Ivy

Go to download

Panda Core is the core module of Panda Framework, it contains commonly used utility classes similar to apache-commons.

There is a newer version: 1.8.0
Show newest version
package panda.lang.escape;

import java.io.IOException;

/**
 * Translates codepoints to their Unicode escaped value.
 *
 */
public class UnicodeEscaper extends CodePointTranslator {

	private final int below;
	private final int above;
	private final boolean between;

	/**
	 * 

* Constructs a UnicodeEscaper for all characters. *

*/ public UnicodeEscaper() { this(0, Integer.MAX_VALUE, true); } /** *

* Constructs a UnicodeEscaper for the specified range. This is the underlying * method for the other constructors/builders. The below and above * boundaries are inclusive when between is true and exclusive when it * is false. *

* * @param below int value representing the lowest codepoint boundary * @param above int value representing the highest codepoint boundary * @param between whether to escape between the boundaries or outside them */ protected UnicodeEscaper(final int below, final int above, final boolean between) { this.below = below; this.above = above; this.between = between; } /** *

* Constructs a UnicodeEscaper below the specified value (exclusive). *

* * @param codepoint below which to escape * @return the newly created {@code UnicodeEscaper} instance */ public static UnicodeEscaper below(final int codepoint) { return outsideOf(codepoint, Integer.MAX_VALUE); } /** *

* Constructs a UnicodeEscaper above the specified value (exclusive). *

* * @param codepoint above which to escape * @return the newly created {@code UnicodeEscaper} instance */ public static UnicodeEscaper above(final int codepoint) { return outsideOf(0, codepoint); } /** *

* Constructs a UnicodeEscaper outside of the specified values (exclusive). *

* * @param codepointLow below which to escape * @param codepointHigh above which to escape * @return the newly created {@code UnicodeEscaper} instance */ public static UnicodeEscaper outsideOf(final int codepointLow, final int codepointHigh) { return new UnicodeEscaper(codepointLow, codepointHigh, false); } /** *

* Constructs a UnicodeEscaper between the specified values (inclusive). *

* * @param codepointLow above which to escape * @param codepointHigh below which to escape * @return the newly created {@code UnicodeEscaper} instance */ public static UnicodeEscaper between(final int codepointLow, final int codepointHigh) { return new UnicodeEscaper(codepointLow, codepointHigh, true); } /** * {@inheritDoc} */ @Override public boolean translate(final int codepoint, final Appendable out) throws IOException { if (between) { if (codepoint < below || codepoint > above) { return false; } } else { if (codepoint >= below && codepoint <= above) { return false; } } // TODO: Handle potential + sign per various Unicode escape implementations if (codepoint > 0xffff) { out.append(toUtf16Escape(codepoint)); } else if (codepoint > 0xfff) { out.append("\\u" + hex(codepoint)); } else if (codepoint > 0xff) { out.append("\\u0" + hex(codepoint)); } else if (codepoint > 0xf) { out.append("\\u00" + hex(codepoint)); } else { out.append("\\u000" + hex(codepoint)); } return true; } /** * Converts the given codepoint to a hex string of the form {@code "\\uXXXX"} * * @param codepoint a Unicode code point * @return the hex string for the given codepoint */ protected String toUtf16Escape(final int codepoint) { return "\\u" + hex(codepoint); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy