/** * @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); } }
/** * @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; }
/** * @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; }
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*/); }