windows-nt/Source/XPSP1/NT/shell/ext/mlang/jisobj.h
2020-09-26 16:20:57 +08:00

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();
};