////////////////////////////////////////////////////////////////////////////
// CTxtColorMgr クラスのインタフェース宣言
//
////////////////////////////////////////////////////////////////////////////

#if !defined( TXTCOLORMGR_H_INCLUDED_ )
#define TXTCOLORMGR_H_INCLUDED_

#include "../LineData.h"
#include "../TaEdit_std.h"
#include "../ConfigInfo.h"
#include "LangConfig.h"

namespace NLangExt {

class CTxtColorMgr
{
public:
	CTxtColorMgr(){};
	virtual ~CTxtColorMgr() {};

	// 初期化
	virtual bool Initialize( VClsPtr< CConfigInfo > pConf ) = 0;

	// 使用する色の数を取得
	virtual int GetColorCount() const = 0;

	// 色を取得
	virtual Pixel GetColor( int idx ) const = 0;

	// 色情報から色のインデックスへ変換
	virtual int TranseToIdx( unsigned char c ) const = 0;

	// 初期状態で更新
	virtual void InitiUpdate( T_LineData &rData ) const = 0;

	// 文字列の更新に伴う色の更新
	virtual void Update( T_LineData &rData, const T_SelRange &range ) const = 0;

	// 言語種類コードを取得
	virtual enumLANGTYPE GetLangType() const = 0;
};

// 初期状態での更新を行う
template< typename T_ >
void InitUpdateColorFunc( const T_ &rHM, T_LineData &rData )
{
	CLinePseudoPtr_txt pSTxt( &rData );
	CLinePseudoPtr_txt pETxt( &rData );
	CLinePseudoPtr_clr pSCB( &rData );
	pETxt.SetEnd();
	rHM.FullUpdate( pSTxt, pETxt, pSCB );
}

// 文字列の更新に伴う、色の更新
template< typename T_ >
void UpdateColorFunc( const T_ &rHM, T_LineData &rData, const T_SelRange &range )
{
	CLinePseudoPtr_txt pSTxt( &rData );
	CLinePseudoPtr_txt pETxt( &rData );
	CLinePseudoPtr_txt pUpdateSTxt( &rData );
	CLinePseudoPtr_txt pUpdateETxt( &rData );
	CLinePseudoPtr_clr pUpdateSPosCB( &rData );
	pETxt.SetEnd();
	pUpdateSTxt.SetPos( range.GetSPos() );
	pUpdateETxt.SetPos( range.GetEPos() );
	pUpdateSPosCB.SetPos( range.GetSPos() );
	rHM.UpdateWidthChange( pSTxt, pETxt, pUpdateSTxt, pUpdateSPosCB, pUpdateETxt );
}

}; // NLangExt

#endif // TXTCOLORMGR_H_INCLUDED_

