86 lines
2.3 KiB
C
86 lines
2.3 KiB
C
|
#include "convbase.h"
|
||
|
|
||
|
enum KANA_MODE
|
||
|
{
|
||
|
FULL_MODE = 0,
|
||
|
ESC_MODE = 1,
|
||
|
SIO_MODE = 2,
|
||
|
};
|
||
|
|
||
|
enum JIS_ESC_STATE
|
||
|
{
|
||
|
JIS_ASCII = 0,
|
||
|
JIS_Roman = 1,
|
||
|
JIS_Kana = 2,
|
||
|
JIS_DoubleByte = 3,
|
||
|
};
|
||
|
|
||
|
class CInccJisIn : public CINetCodeConverter
|
||
|
{
|
||
|
private:
|
||
|
BOOL (CInccJisIn::*m_pfnConv)(UCHAR tc);
|
||
|
BOOL (CInccJisIn::*m_pfnCleanUp)();
|
||
|
BOOL m_fShift; /* Shift in/out control */
|
||
|
BOOL m_fJapan; /* IN_JP OUT_JP control */
|
||
|
BOOL m_fLeadByte; /* Shift in and lead byte flag */
|
||
|
UCHAR m_tcLeadByte; /* perserve the last lead byte */
|
||
|
UINT m_nESCBytes; /* # bytes of ESC sequence */
|
||
|
JIS_ESC_STATE m_eEscState; /* State of ESC sequence */
|
||
|
|
||
|
public:
|
||
|
CInccJisIn(UINT uCodePage, int nCodeSet);
|
||
|
~CInccJisIn() {}
|
||
|
virtual HRESULT ConvertChar(UCHAR tc, int cchSrc=-1);
|
||
|
virtual BOOL CleanUp();
|
||
|
virtual int GetUnconvertBytes();
|
||
|
virtual DWORD GetConvertMode();
|
||
|
virtual void SetConvertMode(DWORD mode);
|
||
|
|
||
|
private:
|
||
|
void Reset();
|
||
|
BOOL ConvMain(UCHAR tc);
|
||
|
BOOL CleanUpMain();
|
||
|
BOOL ConvEsc(UCHAR tc);
|
||
|
BOOL CleanUpEsc();
|
||
|
BOOL ConvIsoIn(UCHAR tc);
|
||
|
BOOL CleanUpIsoIn();
|
||
|
BOOL ConvIsoInJp(UCHAR tc);
|
||
|
BOOL CleanUpIsoInJp();
|
||
|
BOOL ConvIsoOut(UCHAR tc);
|
||
|
BOOL CleanUpIsoOut();
|
||
|
BOOL ConvStar(UCHAR tc);
|
||
|
BOOL CleanUpStar();
|
||
|
BOOL ConvDoubleByte(UCHAR tc);
|
||
|
BOOL CleanUpDoubleByte();
|
||
|
};
|
||
|
|
||
|
class CInccJisOut : public CINetCodeConverter
|
||
|
{
|
||
|
private:
|
||
|
BOOL m_fDoubleByte;
|
||
|
UCHAR m_tcLeadByte; // use for DBCS lead byte
|
||
|
UCHAR m_tcPrevByte; // use for half width kana as a saved previous byte
|
||
|
|
||
|
BOOL m_fKana;
|
||
|
BOOL m_fJapan;
|
||
|
BOOL m_fSaveByte;
|
||
|
DWORD m_dwFlag;
|
||
|
WCHAR *m_lpFallBack;
|
||
|
|
||
|
KANA_MODE m_eKanaMode ; // half width kana convert method
|
||
|
|
||
|
public:
|
||
|
CInccJisOut(UINT uCodePage, int nCodeSet, DWORD dwFlag, WCHAR *lpFallBack);
|
||
|
~CInccJisOut() {}
|
||
|
virtual HRESULT ConvertChar(UCHAR tc, int cchSrc=-1);
|
||
|
virtual BOOL CleanUp();
|
||
|
virtual int GetUnconvertBytes();
|
||
|
virtual DWORD GetConvertMode();
|
||
|
virtual void SetConvertMode(DWORD mode);
|
||
|
void SetKanaMode(UINT uCodePage);
|
||
|
private:
|
||
|
void Reset();
|
||
|
HRESULT ConvFullWidthKana(UCHAR tc);
|
||
|
BOOL KanaCleanUp();
|
||
|
};
|