/*	
 *	clipunic.h
 *
 *	Unicode
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2015 Naoyuki Sawa
 *
 *	* Thu Mar 05 21:20:02 JST 2015 Naoyuki Sawa
 *	- 1st リリース。
 *	* Fri Mar 06 21:21:37 JST 2015 Naoyuki Sawa
 *	- strdup_ShiftJisToUtf8(),strdup_Utf8ToShiftJis()を追加しました。
 *	* Sat Mar 07 13:24:35 JST 2015 Naoyuki Sawa
 *	- 圧縮方法を「Canonical Huffman Code(CHC)」「Range Coder(RC)」「Byte Pair Encoding(BPE)」から選択できるようにしました。
 *	  前回までは「RC」固定でしたが、圧縮方法による違いを比較したいと思ったからです。
 *	- 圧縮方法の選択は、当モジュールのビルド時にCOMPRESSION_METHODの定義を書き換える事で行うので、アプリケーションが選択する事はできません。
 *	  圧縮方法を比較したところ「CHC」が速度と容量のバランスが良いと思ったので、現在は「CHC」(COMPRESSION_METHOD=1)を選択してあります。
 */
#ifndef __CLIP_UNIC_H__
#define __CLIP_UNIC_H__
/****************************************************************************
 *	文字コード変換(シフトJIS⇔Unicode(UCS-2))
 ****************************************************************************/
/* シフトJIS文字コードを、Unicode文字コードに変換します。
 * [in]
 *	c		シフトJIS文字コード
 * [out]
 *	戻り値		Unicode文字コード
 * [note]
 *	- 変換できなかった場合は、'?'(0x003F)を返します。
 */
int ShiftJisToUnicodeChr(int c);
/* Unicode文字コードを、シフトJIS文字コードに変換します。
 * [in]
 *	c		Unicode文字コード
 * [out]
 *	戻り値		シフトJIS文字コード
 * [note]
 *	- 変換できなかった場合は、'?'(0x3F)を返します。
 */
int UnicodeToShiftJisChr(int c);
/****************************************************************************
 *	文字列変換(シフトJIS⇔Unicode(UCS-2))
 ****************************************************************************/
/* シフトJIS文字列を、Unicode文字列に変換します。
 * [in]
 *	s		シフトJIS文字列
 *	buf		Unicode文字列を格納するバッファ
 *	cap		bufの要素数
 * [out]
 *	戻り値		変換後のUnicode文字列のワード数。終端文字は含みません。
 *			capと同じかそれ以上の値が返された場合、文字が破棄された事を示します。
 * [note]
 *	□使用例
 *	│len=ShiftJisToUnicodeStr(s,NULL,0);	//変換後のワード数(終端文字含まず)を求める。
 *	│buf=malloc((len+1)*sizeof(wchar_t));	//バッファを確保する。終端文字の(+1)とsizeof(wchar_t)倍する事を忘れずに!!
 *	│ShiftJisToUnicodeStr(s,buf,len+1);	//変換後の文字列(終端文字も含む)を格納する。
 */
int ShiftJisToUnicodeStr(const char* _s, wchar_t buf[/*cap*/], int cap);
/* Unicode文字列を、シフトJIS文字列に変換します。
 * [in]
 *	s		Unicode文字列
 *	buf		シフトJIS文字列を格納するバッファ
 *	cap		bufの要素数
 * [out]
 *	戻り値		変換後のシフトJIS文字列のバイト数。終端文字は含みません。
 *			capと同じかそれ以上の値が返された場合、文字が破棄された事を示します。
 * [note]
 *	□使用例
 *	│len=UnicodeToShiftJisStr(s,NULL,0);	//変換後のバイト数(終端文字含まず)を求める。
 *	│buf=malloc(len+1);			//バッファを確保する。終端文字の(+1)を忘れずに!!
 *	│UnicodeToShiftJisStr(s,buf,len+1);	//変換後の文字列(終端文字も含む)を格納する。
 */
int UnicodeToShiftJisStr(const wchar_t* s, char buf[/*cap*/], int cap);
/****************************************************************************
 *	文字列変換(UTF-8⇔UCS-2)
 ****************************************************************************/
/* UTF-8文字列を、UCS-2文字列に変換します。
 * [in]
 *	s		UTF-8文字列
 *	buf		UCS-2文字列を格納するバッファ
 *	cap		bufの要素数
 * [out]
 *	戻り値		変換後のUCS-2文字列のワード数。終端文字は含みません。
 *			capと同じかそれ以上の値が返された場合、文字が破棄された事を示します。
 * [note]
 *	□使用例
 *	│len=Ucs2ToUtf8Str(s,NULL,0);		//変換後のワード数(終端文字含まず)を求める。
 *	│buf=malloc((len+1)*sizeof(wchar_t));	//バッファを確保する。終端文字の(+1)とsizeof(wchar_t)倍する事を忘れずに!!
 *	│Ucs2ToUtf8Str(s,buf,len+1);		//変換後の文字列(終端文字も含む)を格納する。
 */
int Utf8ToUcs2Str(const unsigned char* s, wchar_t buf[/*cap*/], int cap);
/* UCS-2文字列を、UTF-8文字列に変換します。
 * [in]
 *	s		UCS-2文字列
 *	buf		UTF-8文字列を格納するバッファ
 *	cap		bufの要素数
 * [out]
 *	戻り値		変換後のUTF-8文字列のバイト数。終端文字は含みません。
 *			capと同じかそれ以上の値が返された場合、文字が破棄された事を示します。
 * [note]
 *	□使用例
 *	│len=Ucs2ToUtf8Str(s,NULL,0);		//変換後のバイト数(終端文字含まず)を求める。
 *	│buf=malloc(len+1);			//バッファを確保する。終端文字の(+1)を忘れずに!!
 *	│Ucs2ToUtf8Str(s,buf,len+1);		//変換後の文字列(終端文字も含む)を格納する。
 */
int Ucs2ToUtf8Str(const wchar_t* s, unsigned char buf[/*cap*/], int cap);
/****************************************************************************
 *	ユーティリティ関数(シフトJIS⇔UTF-8)
 ****************************************************************************/
unsigned char* strdup_ShiftJisToUtf8(const char* s);
char* strdup_Utf8ToShiftJis(const unsigned char* s);
#endif//__CLIP_UNIC_H__
