/*-----------------------------------------------------------------------------
[名称]	Unicoder.h
[概要]	ユニコード管理クラスのヘッダ
[備考]	なし
[履歴]	2003-02-27	NC		コメント付加(moralog)
		2004-03-31 pnger	pnger用カスタマイズ(moralog)
		2004-06-06 b0401111	(3344)共通設定のユニコード文字で追加のボタンを押すと強制終了(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_UNICODER_H_INCLUDED_)
#define AFX_UNICODER_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "LogFont.h"


//-----------------------------------------------------------------------------
// 定数
//-----------------------------------------------------------------------------
const	int HTMLCHARCODE_LENGTH = (16);		// HTML文字符号格納用バッファ大きさ


/*-----------------------------------------------------------------------------
[名称]	ユニコード表示管理
[用途]	ユニコードの表示に関するカプセル。
[備考]	なし
-----------------------------------------------------------------------------*/
class CUnicoder  
{
public:
	// インスタンスの取得・破棄
	static CUnicoder*	GetInstance();
	virtual ~CUnicoder();

// 文字列変換
	// Unicode→SJis変換（文字列）
	static long GetSJisString(
		const char*		pcstr,
		const wchar_t*	pwcstr,
		char*			pDst
	);

	static CString GetSJisString(
		const char*		pcstr,
		const wchar_t*	pwcstr
	);

	// ユニコード文字列を文字符号交じりShift-Jisに変換（１文字）
	static int		UnicodeToSJIS(
		const wchar_t	uniSrc,
		char*			sjisDst
	);


// 単文字変換
	// ユニコードを文字符号に変換
	int		UnicodeToCharCode(
		const wchar_t	uniSrc,
		char*			sjisDst
	);

	// ユニコードを実体参照に変換
	static int		UnicodeToEntityRef(
		const wchar_t	uniSrc,
		char*			sjisDst
	);

// ユニコード検査
	long		IsUnicode(
		const char*	pstrSrc,
		wchar_t*	pwcharUnicode
	);

// 描画
	// 描画
	void DrawCharCode(
		HDC				hdc,
		const RECT&		rcDst,
		wchar_t			tCharCode
	);

	// 使用矩形計算
	SIZE ExtextCharCode(
		HDC				hdc,
		wchar_t			tCharCode
	);

	// ユニコードに対応するフォント取得
	HFONT GetFont(
		HDC			hdc,
		wchar_t		tCharCode
	);

	// HTML文字符号有効有無設定・取得
	void SetEnable(
		BOOL	bEnable
	){ m_bEnable = bEnable; };
	BOOL GetEnable(){ return( m_bEnable ); };

	// 描画可能確認
	BOOL	IsDrawable(
		HDC			hdc,
		HFONT		font,
		wchar_t		tCharCode
	);

protected:
	// ユニコード文字列を文字符号交じりShift-Jisに変換（文字列）
	static long	GetSJisStringCore(
		const char*		pcstr,
		const wchar_t*	pwcstr,
		char*			pDstBuffer
	);


	BOOL				m_bEnable;			// HTML文字符号有効 [-] (TRUE:有効、FALSE:無効)

private:
	// 隠蔽されたコンストラクタ
	CUnicoder();
};

#endif // !defined(AFX_UNICODER_H_INCLUDED_)
