/*-----------------------------------------------------------------------------
[名称]	Padding.h
[概要]	パディングクラスのヘッダ
[備考]	なし
[履歴]	2002-12-12	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_PADDING_H__5F4DE505_B96B_40F8_A357_417857D47D9C__INCLUDED_)
#define AFX_PADDING_H__5F4DE505_B96B_40F8_A357_417857D47D9C__INCLUDED_

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


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include <afxtempl.h>
#include "WhitespaceDefine.h"


/*-----------------------------------------------------------------------------
[名称]	空白文字情報
[用途]	パディングに使用する空白文字の補助情報を格納する。
[備考]	Padding()で生成され、PaddingCore()で使用する。
-----------------------------------------------------------------------------*/
typedef struct {
	long		nCount;			// 連続出現回数 [-] (0〜)
	long		lWidth;			// 幅 [pixel] (-)
} TCharItemData;


/*-----------------------------------------------------------------------------
[名称]	パディングクラス
[用途]	空白文字列を生成する。
[備考]	空白文字定義を反映する。
-----------------------------------------------------------------------------*/
class CPadding  
{
public:
	// 生成・破棄
	CPadding();
	virtual ~CPadding();

	// 空白文字パディング
	long	Padding(
		CDC*								pDC,
		long								lLength,
		CString&							strDstLine,
		CArray<TWhiteSpace,TWhiteSpace&>&	atCharz,
		BOOL								bEnableHeadSpace = FALSE
	);

	// 指定カラム以前の空白開始位置を得る
	long	PrevWhiteSpaceColumn(
		const char*							pstrLine,
		long								iTargetColumn,
		CArray<TWhiteSpace,TWhiteSpace&>&	atCharz
	);

	// 指定カラム以後の空白以外文字開始位置を得る
	long	NextBlackSpaceColumn(
		const char*							pstrLine,
		long								iTargetColumn,
		CArray<TWhiteSpace,TWhiteSpace&>&	atCharz
	);

// ▼ (4419) BGN 2004.06.10 (moralog) 右余白の除去
	CString	TrimRight(
		CString									strSrc,		// I: 元文字列 [-] (-) :-
		CArray<TWhiteSpace,TWhiteSpace&>&		atCharz		// I: 空白文字定義 [-] (-) :-
	);
// ▲ (4419) END

protected:
	// 空白文字パディング
	long	PaddingCore(
		long									lLength,
		char*									pstrCurrent,
		char*									pstrPrev,
		CArray<TWhiteSpace,TWhiteSpace&>&		atCharz,
		CArray<TCharItemData,TCharItemData&>&	atCharDataz,
		BOOL									bEnableHeadSpace
	);
};

#endif // !defined(AFX_PADDING_H_INCLUDED_)
