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

66 lines
1.5 KiB
C++

// =================================================================================
// Internet Character Set Detection: For Korean
// =================================================================================
#include "private.h"
#include "detcbase.h"
#include "detckrn.h"
#include "fechrcnv.h"
#include "codepage.h"
CIncdKorean::CIncdKorean()
{
m_nEscMode = NO_ESC ;
m_bFindDesigator = FALSE ;
m_nCharCount = 0 ;
}
BOOL CIncdKorean::DetectChar(UCHAR tc)
{
switch ( tc )
{
case ESC:
if ( m_nEscMode == NO_ESC )
m_nEscMode = sESC ;
else
m_nEscMode = NO_ESC ;
break;
case ISO2022_IN_CHAR : // '$'
if ( m_nEscMode == sESC )
m_nEscMode = sESC_1 ;
else
m_nEscMode = NO_ESC ;
break;
case ISO2022_IN_KR_CHAR_1 : // ')'
if ( m_nEscMode == sESC_1 )
m_nEscMode = sESC_2 ;
else
m_nEscMode = NO_ESC ;
break;
case ISO2022_IN_KR_CHAR_2 : // 'C'
if ( m_nEscMode == sESC_2 )
{
m_bFindDesigator = TRUE ;
return TRUE ;
}
break;
default:
m_nEscMode = NO_ESC ;
break;
}
// only look ahead a max 1024 char
if ( ++m_nCharCount > 1024 )
return TRUE;
return FALSE;
}
int CIncdKorean::GetDetectedCodeSet()
{
if ( m_bFindDesigator )
return CP_ISO_2022_KR ; // ISO
else
return CP_KOR_5601 ; // Korean Windows
}