package net.arnx.wmf2svg.gdi; import java.io.UnsupportedEncodingException; public final class GdiUtils { public static String convertString(byte[] chars, int charset) { String str = null; int length = 0; while (length < chars.length && chars[length] != 0) { length++; } try { str = new String(chars, 0, length, getCharset(charset)); } catch (UnsupportedEncodingException e) { try { str = new String(chars, 0, length, "Cp1252"); } catch (UnsupportedEncodingException e2) { throw new IllegalStateException(e2); } } return str; } public static String getCharset(int charset) { switch (charset) { case GdiFont.ANSI_CHARSET: return "Cp1252"; case GdiFont.SYMBOL_CHARSET: return "Cp1252"; case GdiFont.MAC_CHARSET: return "MacRoman"; case GdiFont.SHIFTJIS_CHARSET: return "MS932"; case GdiFont.HANGUL_CHARSET: return "MS949"; case GdiFont.JOHAB_CHARSET: return "Johab"; case GdiFont.GB2312_CHARSET: return "MS936"; case GdiFont.CHINESEBIG5_CHARSET: return "MS950"; case GdiFont.GREEK_CHARSET: return "Cp1253"; case GdiFont.TURKISH_CHARSET: return "Cp1254"; case GdiFont.VIETNAMESE_CHARSET: return "Cp1258"; case GdiFont.HEBREW_CHARSET: return "Cp1255"; case GdiFont.ARABIC_CHARSET: return "Cp1256"; case GdiFont.BALTIC_CHARSET: return "Cp1257"; case GdiFont.RUSSIAN_CHARSET: return "Cp1251"; case GdiFont.THAI_CHARSET: return "MS874"; case GdiFont.EASTEUROPE_CHARSET: return "Cp1250"; case GdiFont.OEM_CHARSET: return "Cp1252"; default: return "Cp1252"; } } public static String getLanguage(int charset) { switch (charset) { case GdiFont.ANSI_CHARSET: return "en"; case GdiFont.SYMBOL_CHARSET: return "en"; case GdiFont.MAC_CHARSET: return "en"; case GdiFont.SHIFTJIS_CHARSET: return "ja"; case GdiFont.HANGUL_CHARSET: return "ko"; case GdiFont.JOHAB_CHARSET: return "ko"; case GdiFont.GB2312_CHARSET: return "zh-CN"; case GdiFont.CHINESEBIG5_CHARSET: return "zh-TW"; case GdiFont.GREEK_CHARSET: return "el"; case GdiFont.TURKISH_CHARSET: return "tr"; case GdiFont.VIETNAMESE_CHARSET: return "vi"; case GdiFont.HEBREW_CHARSET: return "iw"; case GdiFont.ARABIC_CHARSET: return "ar"; case GdiFont.BALTIC_CHARSET: return "bat"; case GdiFont.RUSSIAN_CHARSET: return "ru"; case GdiFont.THAI_CHARSET: return "th"; case GdiFont.EASTEUROPE_CHARSET: return null; case GdiFont.OEM_CHARSET: return null; default: return null; } } private static int[][] FBA_SHIFT_JIS = {{0x81, 0x9F}, {0xE0, 0xFC}}; private static int[][] FBA_HANGUL_CHARSET = {{0x80, 0xFF}}; private static int[][] FBA_JOHAB_CHARSET = {{0x80, 0xFF}}; private static int[][] FBA_GB2312_CHARSET = {{0x80, 0xFF}}; private static int[][] FBA_CHINESEBIG5_CHARSET = {{0xA1, 0xFE}}; public static int[][] getFirstByteArea(int charset) { switch (charset) { case GdiFont.SHIFTJIS_CHARSET: return FBA_SHIFT_JIS; case GdiFont.HANGUL_CHARSET: return FBA_HANGUL_CHARSET; case GdiFont.JOHAB_CHARSET: return FBA_JOHAB_CHARSET; case GdiFont.GB2312_CHARSET: return FBA_GB2312_CHARSET; case GdiFont.CHINESEBIG5_CHARSET: return FBA_CHINESEBIG5_CHARSET; default: return null; } } }