
#ifndef DKUTIL_PARSER_SJIS_UTIL_HPP
#define DKUTIL_PARSER_SJIS_UTIL_HPP



#include <dkutil_c/dkcString.h>

namespace dkutil{

/*
#if defined(jms1) || defined(jms2)
#	error please undef jms1 and jms2
#endif



#define jms1(c) (((((unsigned char)(c))>=0x81)&&(((unsigned char)(c))<=0x9F))||((((unsigned char)(c))>=0xE0)&&(((unsigned char)(c))<=0xFC)))
#define jms2(c) ((((unsigned char)(c))!=0x7F)&&(((unsigned char)(c))>=0x40)&&(((unsigned char)(c))<=0xFC))
*/


//#undef jms1
//#undef jms2

///dkutil_beta2との互換性を保つため･･･
inline int isJMS(const char *str,int nPos){
	return dkcIsShiftJIS(str,nPos);
}

//**********************************************************
//SYN氏のHPより。http://www.emit.jp/　


inline BOOL IsSJIS1(BYTE c)
{
	return dkcmIsSJIS1(c);
}

inline BOOL IsSJIS2(BYTE c)
{
  return dkcmIsSJIS2(c);
}

/*
// SJIS文字の１バイト目のコード
const BYTE SJIS1_S1 = 0x81;
const BYTE SJIS1_E1 = 0x9f;
const BYTE SJIS1_S2 = 0xe0;
const BYTE SJIS1_E2 = 0xf5;

// SJIS文字の２バイト目のコード
const BYTE SJIS2_S1 = 0x40;
const BYTE SJIS2_E1 = 0x7e;
const BYTE SJIS2_S2 = 0x80;
const BYTE SJIS2_E2 = 0xfc;

inline BOOL IsSJIS1(BYTE c)
{
    // 普通に書けばこのような感じだが、高速化する
    // if((c >= SJIS1_S1 && c <= SJIS1_E1) || (c >= SJIS1_S2 && c <= SJIS1_E2)) return TRUE;
    c ^= 0x20;
    if(c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20)) return TRUE;
    return FALSE;
}

inline BOOL IsSJIS2(BYTE c)
{
    if((c >= SJIS2_S1 && c <= SJIS2_E1) || (c >= SJIS2_S2 && c <= SJIS2_E2)) return TRUE;
    return FALSE;
}

// SJIS文字を除外して文字を検索、最初に見つかった位置を返す
inline int SJIS_StrChrSearch(const char *s, char c)
{
    // c == 0 も考慮している
    for(int i = 0; ; i++){
        if(s[i] == c) return i;
        if(s[i] == '\0') break;
        if(IsSJIS1(s[i]) && IsSJIS2(s[i + 1])) i++;
    }
    return -1;
} 

// SJIS文字を除外して文字を検索、最後に見つかった位置を返す
inline int SJIS_StrChrSearchLast(const char *s, char c)
{
    int nLast = -1;
    // c == 0 も考慮している
    for(int i = 0; ; i++){
        if(s[i] == c) nLast = i;
        if(s[i] == '\0') break;
        if(IsSJIS1(s[i]) && IsSJIS2(s[i + 1])) i++;
    }
    return nLast;
} 
*/

}//end of dkutil namespace




#endif//end of include once
