/*!
	保持構造体に文字列を記録する
	@param[in]	*pvcUnits	保持ベクータへのポインター
	@param[in]	ptText		記録する文字列
	@param[in]	cchSize		文字数
	@return		HRESULT		終了状態コード
*/
HRESULT UserDefSetString( vector<ONELINE> *pvcUnits, LPCTSTR ptText, UINT cchSize )
{
	UINT	i;
	INT		yLine;
	ONELINE	stLine;
	LETTER	stLetter;

	ZeroONELINE( &stLine );

	pvcUnits->push_back( stLine );	//	壱発目

	yLine = 0;
	for( i = 0; cchSize > i; i++ )
	{
		if( CC_CR == ptText[i] && CC_LF == ptText[i+1] )	//	改行であったら
		{
			pvcUnits->push_back( stLine );

			i++;		//	0x0D,0x0Aだから、壱文字飛ばすのがポイント
			yLine++;	//	改行したからFocusは次の行へ
		}
		else if( CC_TAB == ptText[i] )
		{
			//	タブは挿入しない
		}
		else
		{
			DocLetterDataCheck( &stLetter, ptText[i] );
			//ZeroMemory( &stLetter, sizeof(LETTER) );
			//stLetter.cchMozi = ptText[i];
			//stLetter.rdWidth = ViewLetterWidthGet( ptText[i] );
			//stLetter.mzStyle = CT_NORMAL;
			//if( iswspace( ptText[i] ) ){	stLetter.mzStyle |= CT_SPACE;	}
			////	非シフトJIS文字を確認
			//if( !( DocIsSjisTrance( ptText[i], stLetter.acSjis ) ) ){	stLetter.mzStyle |= CT_CANTSJIS;	}
			//DocLetterByteCheck( &stLetter );	//	バイト数確認

			pvcUnits->at( yLine ).vcLine.push_back( stLetter );

			pvcUnits->at( yLine ).iDotCnt += stLetter.rdWidth;
			pvcUnits->at( yLine ).iByteSz += stLetter.mzByte;
		}
	}

	//	末尾とかの空白も含めてテンプレかなと思ってる

	return S_OK;
}
/*!
	指定行のドット位置(キャレット位置)に壱文字追加する・この函数内ではアンドゥの面倒は見ない
	@param[in]	nowDot	挿入するドット位置
	@param[in]	rdLine	対象の行番号・絶対0インデックスか
	@param[in]	ch		追加したい文字
	@return		INT		追加した文字のドット数
*/
INT DocInputLetter( INT nowDot, INT rdLine, TCHAR ch )
{
	INT_PTR	iLetter, iCount, iLines;
	LETTER	stLetter;
	LETR_ITR	vcItr;
	LINE_ITR	itLine;

	//	アンドゥリドゥは呼んだところで

#ifdef DO_TRY_CATCH
	try{
#endif

	if( 0 == ch )
	{
		TRACE( TEXT("NULL文字が入った") );
		return 0;
	}

	iLines = DocNowFilePageLineCount( );

	if( iLines <= rdLine )
	{
		TRACE( TEXT("OutOfRange 指定[%d] 行数[%d]"), rdLine, iLines );
		return 0;
	}

	iLetter = DocLetterPosGetAdjust( &nowDot, rdLine, 0 );	//	今の文字位置を確認

	itLine = (*gitFileIt).vcCont.at( gixFocusPage ).ltPage.begin();
	std::advance( itLine, rdLine );	//	対象行までイテレートする

	//	文字数確認
	iCount = itLine->vcLine.size( );

	//	データ作成
	DocLetterDataCheck( &stLetter, ch );	//	指定行のドット位置(キャレット位置)に壱文字追加するとき

	if( iLetter >=  iCount )	//	文字数同じなら末端に追加ということ
	{
		itLine->vcLine.push_back( stLetter );
	}
	else	//	そうでないなら途中に追加
	{
		vcItr = itLine->vcLine.begin( );
		vcItr += iLetter;
		itLine->vcLine.insert( vcItr, stLetter );
	}

	itLine->iDotCnt += stLetter.rdWidth;
	itLine->iByteSz += stLetter.mzByte;

	(*gitFileIt).vcCont.at( gixFocusPage ).dByteSz += stLetter.mzByte;

//	DocBadSpaceCheck( rdLine );	呼んだところでまとめてやる

#ifdef DO_TRY_CATCH
	}
	catch( exception &err ){	return ETC_MSG( err.what(), 0 );	}
	catch( ... ){	return  ETC_MSG( ("etc error"), 0 );	}
#endif

	return stLetter.rdWidth;
}