using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WMFConverter.Gdi
{
///
/// Utils functions.
///
public class GdiUtils
{
#region Local Variables
private static int[,] FBA_SHIFT_JIS = new int[,] { { 0x81, 0x9F }, { 0xE0, 0xFC } };
private static int[,] FBA_HANGUL_CHARSET = new int[,] { { 0x80, 0xFF } };
private static int[,] FBA_JOHAB_CHARSET = new int[,] { { 0x80, 0xFF } };
private static int[,] FBA_GB2312_CHARSET = new int[,] { { 0x80, 0xFF } };
private static int[,] FBA_CHINESEBIG5_CHARSET = new int[,] { { 0xA1, 0xFE } };
#endregion
#region Public Methods
///
/// Convert byte array to string using specified charset.
///
///
///
///
public static string ConvertString(byte[] chars, int charset)
{
string str = null;
int length = 0;
while (length < chars.Count() && chars[length] != 0)
{
length++;
}
try
{
str = System.Text.Encoding.GetEncoding(GetCharset(charset)).GetString(chars).Substring(0, length);
}
catch (Exception ex)
{
try
{
str = System.Text.Encoding.GetEncoding("US-ASCII").GetString(chars).Substring(0, length);
}
catch (Exception ex2)
{
throw new Exception(ex.Message+ex2.Message);
}
}
return str;
}
///
/// Get specified charset.
///
///
///
public static string GetCharset(int charset)
{
switch (charset)
{
case (int)FontCharsetEnum.ANSI_CHARSET:
return "Cp1252";
case (int)FontCharsetEnum.SYMBOL_CHARSET:
return "Cp1252";
case (int)FontCharsetEnum.MAC_CHARSET:
return "MacRoman";
case (int)FontCharsetEnum.SHIFTJIS_CHARSET:
return "MS932";
case (int)FontCharsetEnum.HANGUL_CHARSET:
return "MS949";
case (int)FontCharsetEnum.JOHAB_CHARSET:
return "Johab";
case (int)FontCharsetEnum.GB2312_CHARSET:
return "MS936";
case (int)FontCharsetEnum.CHINESEBIG5_CHARSET:
return "MS950";
case (int)FontCharsetEnum.GREEK_CHARSET:
return "Cp1253";
case (int)FontCharsetEnum.TURKISH_CHARSET:
return "Cp1254";
case (int)FontCharsetEnum.VIETNAMESE_CHARSET:
return "Cp1258";
case (int)FontCharsetEnum.HEBREW_CHARSET:
return "Cp1255";
case (int)FontCharsetEnum.ARABIC_CHARSET:
return "Cp1256";
case (int)FontCharsetEnum.BALTIC_CHARSET:
return "Cp1257";
case (int)FontCharsetEnum.RUSSIAN_CHARSET:
return "Cp1251";
case (int)FontCharsetEnum.THAI_CHARSET:
return "MS874";
case (int)FontCharsetEnum.EASTEUROPE_CHARSET:
return "Cp1250";
case (int)FontCharsetEnum.OEM_CHARSET:
return "Cp1252";
default:
return "Cp1252";
}
}
///
/// Get language using specified charset.
///
///
///
public static string GetLanguage(int charset)
{
switch (charset)
{
case (int)FontCharsetEnum.ANSI_CHARSET:
return "en";
case (int)FontCharsetEnum.SYMBOL_CHARSET:
return "en";
case (int)FontCharsetEnum.MAC_CHARSET:
return "en";
case (int)FontCharsetEnum.SHIFTJIS_CHARSET:
return "ja";
case (int)FontCharsetEnum.HANGUL_CHARSET:
return "ko";
case (int)FontCharsetEnum.JOHAB_CHARSET:
return "ko";
case (int)FontCharsetEnum.GB2312_CHARSET:
return "zh-CN";
case (int)FontCharsetEnum.CHINESEBIG5_CHARSET:
return "zh-TW";
case (int)FontCharsetEnum.GREEK_CHARSET:
return "el";
case (int)FontCharsetEnum.TURKISH_CHARSET:
return "tr";
case (int)FontCharsetEnum.VIETNAMESE_CHARSET:
return "vi";
case (int)FontCharsetEnum.HEBREW_CHARSET:
return "iw";
case (int)FontCharsetEnum.ARABIC_CHARSET:
return "ar";
case (int)FontCharsetEnum.BALTIC_CHARSET:
return "bat";
case (int)FontCharsetEnum.RUSSIAN_CHARSET:
return "ru";
case (int)FontCharsetEnum.THAI_CHARSET:
return "th";
case (int)FontCharsetEnum.EASTEUROPE_CHARSET:
return null;
case (int)FontCharsetEnum.OEM_CHARSET:
return null;
default:
return null;
}
}
///
/// Get the first byte area specified charset.
///
///
///
public static int[,] GetFirstByteArea(int charset)
{
switch (charset)
{
case (int)FontCharsetEnum.SHIFTJIS_CHARSET:
return FBA_SHIFT_JIS;
case (int)FontCharsetEnum.HANGUL_CHARSET:
return FBA_HANGUL_CHARSET;
case (int)FontCharsetEnum.JOHAB_CHARSET:
return FBA_JOHAB_CHARSET;
case (int)FontCharsetEnum.GB2312_CHARSET:
return FBA_GB2312_CHARSET;
case (int)FontCharsetEnum.CHINESEBIG5_CHARSET:
return FBA_CHINESEBIG5_CHARSET;
default:
return null;
}
}
#endregion
}
}