// Path: src/main/java/hextostring/utils/Charsets.java
// public class Charsets implements ValueClass {
// 
// 	// Charsets used in Japanese games
// 	@CommandLineValue(
// 		value = "sjis",
// 		shortcut = "j",
// 		description = "Shift JIS"
// 	)
// 	public static final Charset SHIFT_JIS = Charset.forName("Shift_JIS");
// 	@CommandLineValue(
// 		value = "utf16-le",
// 		shortcut = "l",
// 		description = "UTF16 Little Endian"
// 	)
// 	public static final Charset UTF16_LE = Charset.forName("UTF-16LE");
// 	@CommandLineValue(
// 		value = "utf16-be",
// 		shortcut = "b",
// 		description = "UTF16 Bid Endian"
// 	)
// 	public static final Charset UTF16_BE = Charset.forName("UTF-16BE");
// 	// also used for test files
// 	@CommandLineValue(
// 		value = "utf8",
// 		shortcut = "u",
// 		description = "UTF8"
// 	)
// 	public static final Charset UTF8 = Charset.forName("UTF-8");
// 
// 	// not a charset, used for automatic recognition
// 	@CommandLineValue(
// 		value = "detect",
// 		shortcut = "d",
// 		description = "Detect the right encoding among the other ones"
// 	)
// 	public static final Charset DETECT = CharsetAutodetect.getInstance();
// 
// 	public static final Charset[] ALL_CHARSETS = getAllCharsets();
// 
// 	public static Charset getValidCharset(String charsetName) {
// 		for (Charset cs : ALL_CHARSETS) {
// 			if (cs.name().equals(charsetName)) {
// 				return cs;
// 			}
// 		}
// 		return null;
// 	}
// 
// 	private static Charset[] getAllCharsets() {
// 
// 		List<Field> charsetFields = ReflectionUtils.getAnnotatedFields(
// 			Charsets.class,
// 			CommandLineValue.class
// 		);
// 		Charset[] allCharsets = new Charset[charsetFields.size()];
// 		int eltCounter = 0;
// 		for (Field charsetField : charsetFields) {
// 			try {
// 				allCharsets[eltCounter++] = (Charset) charsetField.get(null);
// 			} catch (IllegalArgumentException | IllegalAccessException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 		return allCharsets;
// 	}
// 
// }


import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import hextostring.utils.Charsets;
package hextostring.convert;



/**
 * Standard converter for UTF-16-encoded hexadecimal strings.
 *
 * @author Maxime PIA
 */
public class UTF16Converter extends AbstractConverter {

	public UTF16Converter(boolean bigEndian) {
// Path: src/main/java/hextostring/utils/Charsets.java
// public class Charsets implements ValueClass {
// 
// 	// Charsets used in Japanese games
// 	@CommandLineValue(
// 		value = "sjis",
// 		shortcut = "j",
// 		description = "Shift JIS"
// 	)
// 	public static final Charset SHIFT_JIS = Charset.forName("Shift_JIS");
// 	@CommandLineValue(
// 		value = "utf16-le",
// 		shortcut = "l",
// 		description = "UTF16 Little Endian"
// 	)
// 	public static final Charset UTF16_LE = Charset.forName("UTF-16LE");
// 	@CommandLineValue(
// 		value = "utf16-be",
// 		shortcut = "b",
// 		description = "UTF16 Bid Endian"
// 	)
// 	public static final Charset UTF16_BE = Charset.forName("UTF-16BE");
// 	// also used for test files
// 	@CommandLineValue(
// 		value = "utf8",
// 		shortcut = "u",
// 		description = "UTF8"
// 	)
// 	public static final Charset UTF8 = Charset.forName("UTF-8");
// 
// 	// not a charset, used for automatic recognition
// 	@CommandLineValue(
// 		value = "detect",
// 		shortcut = "d",
// 		description = "Detect the right encoding among the other ones"
// 	)
// 	public static final Charset DETECT = CharsetAutodetect.getInstance();
// 
// 	public static final Charset[] ALL_CHARSETS = getAllCharsets();
// 
// 	public static Charset getValidCharset(String charsetName) {
// 		for (Charset cs : ALL_CHARSETS) {
// 			if (cs.name().equals(charsetName)) {
// 				return cs;
// 			}
// 		}
// 		return null;
// 	}
// 
// 	private static Charset[] getAllCharsets() {
// 
// 		List<Field> charsetFields = ReflectionUtils.getAnnotatedFields(
// 			Charsets.class,
// 			CommandLineValue.class
// 		);
// 		Charset[] allCharsets = new Charset[charsetFields.size()];
// 		int eltCounter = 0;
// 		for (Field charsetField : charsetFields) {
// 			try {
// 				allCharsets[eltCounter++] = (Charset) charsetField.get(null);
// 			} catch (IllegalArgumentException | IllegalAccessException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 		return allCharsets;
// 	}
// 
// }


// Path: src/main/java/hextostring/convert/UTF16Converter.java
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import hextostring.utils.Charsets;

package hextostring.convert;



/**
 * Standard converter for UTF-16-encoded hexadecimal strings.
 *
 * @author Maxime PIA
 */
public class UTF16Converter extends AbstractConverter {

	public UTF16Converter(boolean bigEndian) {
		super(bigEndian ? Charsets.UTF16_BE : Charsets.UTF16_LE);