示例#1
0
/**
 * @brief 折り返し設定
 * @param nColumn 桁数
 * @param nMode 折り返しモード
 */
void CFootyDoc::SetLapel(size_t nColumn,int nMode)
{
	// 状態を設定する
	m_nLapelColumns = nColumn;
	m_nLapelMode = nMode;

	// ループさせて収集
	LinePt pLine = m_lsLines.begin();
	LinePt pPrevLine = m_lsLines.begin();
	pLine->FlushString(m_nGlobalID, m_nTabLen,m_nLapelColumns,m_nLapelMode, NULL, false/*改行を含むか by Tetr@pod*/);
	
	for (pLine++;pLine != m_lsLines.end();pLine++,pPrevLine++)
	{
		pLine->FlushString(m_nGlobalID, m_nTabLen,m_nLapelColumns,m_nLapelMode, NULL, false/*改行を含むか by Tetr@pod*/);
		pLine->SetPrevLineInfo(pPrevLine);
	}	
}
示例#2
0
/**
 * @brief 行の内容が変更されたとき、その情報を収集していく処理です。
 * @param pBegin 変更領域最初の行
 * @param pEnd 変更領域の最後の行
 * @return 全ての再描画を要求するときtrue
 */
bool CFootyDoc::SetLineInfo(LinePt pBegin, LinePt pEnd, bool ForceListUpdate/*改行を含むか by Tetr@pod*/)
{
	LinePt pLine;
	bool bAllRedraw = false;
	bool bPrevLineInfoChanged = false;
	bool bEmphasisChanged = false;

	// 変更された領域は常に見ておく
	for (pLine = pBegin; ;pLine++)
	{
		// それがすでに文書の最後の行のときは関数を終了
		if (pLine == m_lsLines.end()) {
			return bAllRedraw;
		}

		// 現在の行を調査する
		bPrevLineInfoChanged = pLine->FlushString(m_nGlobalID/*by Tetr@pod*/, m_nTabLen,m_nLapelColumns,m_nLapelMode, &bAllRedraw/*by Tetr@pod*/, ForceListUpdate/*改行を含むか by Tetr@pod*/);

		if (pLine == m_lsLines.begin())
			bEmphasisChanged = pLine->SearchEmphasis(NULL,&m_lsEmphasisWord);
		else
		{
			LinePt pPrevLine = pLine;
			pPrevLine--;
			bEmphasisChanged = pLine->SearchEmphasis(pPrevLine->GetBetweenNext(),&m_lsEmphasisWord);
			bPrevLineInfoChanged = pLine->SetPrevLineInfo(pPrevLine);
		}
		bAllRedraw = bAllRedraw/*by Tetr@pod*/ || bEmphasisChanged || bPrevLineInfoChanged;

		// 常に見る領域を抜けるかどうかの判定
		if (pLine == pEnd)break;
	}

	// ループさせて最後まで取っていく
	for (pLine++ ; pLine != m_lsLines.end(); pLine++)
	{
		if (pLine != m_lsLines.end()) {
			// 前の情報を入れておく
			if (bPrevLineInfoChanged && pLine != m_lsLines.begin())
			{
				LinePt pPrevLine = pLine;
				pPrevLine--;
				bPrevLineInfoChanged = pLine->SetPrevLineInfo(pPrevLine);
				bAllRedraw = bAllRedraw || bPrevLineInfoChanged;
			}
		}

		// 強調が変わったときは全てフラグをおろしておく
		if (bEmphasisChanged)
			pLine->SetEmphasisChached(false);
	}

	return bAllRedraw;
}
示例#3
0
/**
 * @brief 指定した行以降のオフセット値と実際の行番号を設定するルーチン
 * @param pBegin 設定するための開始位置
 * @return 全ての再描画を要求するときtrue
 * @note pBeginは文字列が変更されているのでURLとメールアドレスを再検索。
 *       以降の行は強調表示文字列を全て検索します。
 */
bool CFootyDoc::SetLineInfo(LinePt pBegin, bool ForceListUpdate/*改行を含むか by Tetr@pod*/)
{
	bool bAllRedraw = false;
	bool bPrevLineInfoChanged = false;
	bool bEmphasisChanged = false;
	
	// 最初の行だけを確定させる
	bPrevLineInfoChanged = pBegin->FlushString(m_nGlobalID/*by Tetr@pod*/, m_nTabLen,m_nLapelColumns,m_nLapelMode, &bAllRedraw/*by Tetr@pod*/, ForceListUpdate/*改行を含むか by Tetr@pod*/);
	if (pBegin == m_lsLines.begin())
		bEmphasisChanged = pBegin->SearchEmphasis(NULL,&m_lsEmphasisWord);
	else
	{
		LinePt pPrevLine = pBegin;
		pPrevLine--;
		bEmphasisChanged = pBegin->SearchEmphasis(pPrevLine->GetBetweenNext(),&m_lsEmphasisWord);
	}
	bAllRedraw = bAllRedraw/*by Tetr@pod*/ || bEmphasisChanged || bPrevLineInfoChanged;

	// ループさせて収集(pBeginの次の行から最後までループ)
	pBegin++;
	for (LinePt pLine = pBegin; pLine != m_lsLines.end(); pLine++)
	{
		// 前の情報を入れておく
		if (bPrevLineInfoChanged && pLine != m_lsLines.begin())
		{
			LinePt pPrevLine = pLine;
			pPrevLine--;
			bPrevLineInfoChanged = pLine->SetPrevLineInfo(pPrevLine);
			bAllRedraw = bAllRedraw || bPrevLineInfoChanged;
		}

		// 強調が変わったときは全てフラグをおろしておく
		if (bEmphasisChanged)
			pLine->SetEmphasisChached(false);
	}

	return bAllRedraw;
}
示例#4
0
bool CFootyDoc::FlushString2(LinePt pLine)// by Tetr@pod
{
	return pLine->FlushString(m_nGlobalID/*by Tetr@pod*/, m_nTabLen,m_nLapelColumns,m_nLapelMode, NULL/*by Tetr@pod*/, false/*改行を含むか by Tetr@pod*/);
}