📄 ceditdoc_funclist1.cpp
字号:
if( nMode2 == M2_FUNC_NAME_END || nMode2 == M2_KR_FUNC )
++ nNestLevel_func;
else
{
++ nNestLevel_global;
nNamespaceLen[nNestLevel_global] = nNamespaceLen[nNestLevel_global-1] + nItemNameLen;
if( nItemFuncId == 7)
strcpy(&szNamespace[nNamespaceLen[nNestLevel_global]],"::定義位置");
else
{
szNamespace[nNamespaceLen[nNestLevel_global]] = '\0';
szNamespace[nNamespaceLen[nNestLevel_global]+1] = ':';
if(bVisibleMemberFunc == false && nNestPoint_class == 0)
nNestPoint_class = nNestLevel_global;
}
}
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
int nPosX;
int nPosY;
m_cLayoutMgr.CaretPos_Phys2Log(
0,
nItemLine - 1,
&nPosX,
&nPosY
);
pcFuncInfoArr->AppendData( nItemLine, nPosY + 1 , szNamespace, nItemFuncId);
// Jan. 30, 2005 genta M2_KR_FUNC 追加
if( nMode2 != M2_FUNC_NAME_END && nMode2 != M2_KR_FUNC )
{
szNamespace[nNamespaceLen[nNestLevel_global]] = ':';
nNamespaceLen[nNestLevel_global] += 2;
}
}
else
{
// Jan. 30, 2005 genta M2_KR_FUNC 追加
if(nMode2 == M2_FUNC_NAME_END || nMode2 == M2_KR_FUNC)
++ nNestLevel_func;
else
{
++ nNestLevel_global;
if ( nNestLevel_global <= nNamespaceNestMax )
nNamespaceLen[nNestLevel_global]=nNamespaceLen[nNestLevel_global-1];
}
}
// bCppInitSkip = false; // Mar. 4, 2001 genta
nMode = 0;
nMode2 = M2_NORMAL;
// nNestLevel2 = 0;
continue;
}else
// 2002/10/27 frozen ここまで
if( '}' == pLine[i] ){
// 2002/10/27 frozen ここから
// nNestLevel2 = 0;
if(nNestLevel_func == 0)
{
if(nNestLevel_global!=0)
{
if(nNestLevel_global == nNestPoint_class)
nNestPoint_class = 0;
--nNestLevel_global;
}
}
else
--nNestLevel_func;
// 2002/10/27 frozen ここまで
nMode = 0;
nMode2 = M2_NORMAL;
continue;
}else
if( '(' == pLine[i] ){
// 2002/10/27 frozen ここから
// if( nNestLevel == 0 && !bCppInitSkip ){
// strcpy( szFuncName, szWordPrev );
// nFuncLine = nLineCount + 1;
// nNestLevel2 = 1;
// }
// nMode = 0;
if( nNestLevel_func == 0 && (nMode2 == M2_NORMAL || nMode2 == M2_NAMESPACE_SAVE || nMode2 == M2_NAMESPACE_END) )
{
if( strcmp(szWordPrev, "__declspec") == 0 ) {continue;}
if(nNestLevel_fparam==0)
{
strcpy( szItemName, szWordPrev);
nItemLine = nLineCount + 1;
}
++ nNestLevel_fparam;
}
// 2002/10/27 frozen ここまで
// From Here Jan. 30, 2005 genta
if( nNestLevel_func == 0 && nMode2 == M2_KR_FUNC ){
// throwなら (例外の型,...) を読み飛ばす
if(nNestLevel_fparam==0)
++ nNestLevel_fparam;
}
// To Here Jan. 30, 2005 genta
continue;
}else
if( ')' == pLine[i] ){
// 2002/10/27 frozen ここから
// if( 1 == nNestLevel2 ){
// nNestLevel2 = 2;
// }
// nMode = 0;
if( nNestLevel_fparam > 0)
{
--nNestLevel_fparam;
if( nNestLevel_fparam == 0)
{
nMode2 = M2_FUNC_NAME_END;
nItemFuncId = 2;
}
}
// 2002/10/27 frozen ここまで
continue;
}else
if( ';' == pLine[i] ){
// 2002/10/27 frozen ここから
// if( 2 == nNestLevel2 ){
// // 閉じ括弧')'の後の';' すなわち関数宣言
// if( 0 != strcmp( "sizeof", szFuncName ) ){
// nFuncId = 1;
// ++nFuncNum;
// /*
// カーソル位置変換
// 物理位置(行頭からのバイト数、折り返し無し行位置)
// →
// レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
// */
// int nPosX;
// int nPosY;
// m_cLayoutMgr.CaretPos_Phys2Log(
// 0,
// nFuncLine - 1,
// &nPosX,
// &nPosY
// );
// pcFuncInfoArr->AppendData( nFuncLine, nPosY + 1, szFuncName, nFuncId);
//// pcFuncInfoArr->AppendData( nFuncLine, szFuncName, nFuncId );
// }
// }
// nNestLevel2 = 0;
if( nMode2 == M2_KR_FUNC )
{
// Jan. 30, 2005 genta 関数後の const, throwの後ろの
// ';'はK&R形式宣言の終わりでなく関数宣言の終わり
if( strcmp( szWordPrev, "const" ) == 0 ||
strcmp( szWordPrev, "throw" ) == 0 ){
nMode2 = M2_FUNC_NAME_END;
// すぐ下のif文に引っかかりますように
}
else {
// zenryaku K&Rスタイルの関数宣言の終了後 M2_FUNC_NAME_END にもどす
nMode2 = M2_FUNC_NAME_END;
continue;
}
} // Jan. 30, 2005 genta K&R処理に引き続いて宣言処理も行う.
if( nMode2 == M2_FUNC_NAME_END &&
nNestLevel_global < nNamespaceNestMax &&
(nNamespaceLen[nNestLevel_global] + strlen(szItemName)) < nNamespaceLenMax &&
nNestPoint_class == 0)
// 3番目の(&&の後の)条件
// バッファが足りない場合は項目の追加を行わない。
{
strcpy( &szNamespace[nNamespaceLen[ nNestLevel_global]] , szItemName);
nItemFuncId = 1;
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
int nPosX;
int nPosY;
m_cLayoutMgr.CaretPos_Phys2Log(
0,
nItemLine - 1,
&nPosX,
&nPosY
);
pcFuncInfoArr->AppendData( nItemLine, nPosY + 1, szNamespace, nItemFuncId);
}
nMode2 = M2_NORMAL;
// 2002/10/27 frozen ここまで
nMode = 0;
continue;
}else if( nNestLevel_fparam == 0 ){
if( C_IsWordChar( pLine[i] ) ){
// 2002/10/27 frozen ここから削除
// if( 2 == nNestLevel2 ){
// // 閉じ括弧が無いけどとりあえず登録しちゃう
// if( 0 != strcmp( "sizeof", szFuncName ) ){
// nFuncId = 2;
// ++nFuncNum;
// /*
// カーソル位置変換
// 物理位置(行頭からのバイト数、折り返し無し行位置)
// →
// レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
// */
// int nPosX;
// int nPosY;
// m_cLayoutMgr.CaretPos_Phys2Log(
// 0,
// nFuncLine - 1,
// &nPosX,
// &nPosY
// );
// pcFuncInfoArr->AppendData( nFuncLine, nPosY + 1 , szFuncName, nFuncId );
// }
// nNestLevel2 = 0;
// // Mar 4, 2001 genta 初期化子だったときはそれ以降の登録を制限する
// if( pLine[i] == ':' )
// bCppInitSkip = true;
// }
// 2002/10/27 frozen ここまで削除
// // Mar. 15, 2000 genta
// From Here
// 直前のwordの最後が::か,あるいは直後のwordの先頭が::なら
// クラス限定子と考えて両者を接続する.
{
int pos = strlen( szWordPrev ) - 2;
if( // 前の文字列の末尾チェック
( pos > 0 && szWordPrev[pos] == ':' &&
szWordPrev[pos + 1] == ':' ) ||
// 次の文字列の先頭チェック
( i < nLineLen - 1 && pLine[i] == ':' &&
pLine[i+1] == ':' )
){
// 前の文字列に続ける
strcpy( szWord, szWordPrev );
nWordIdx = strlen( szWord );
}
// From Here Apr. 1, 2001 genta
// operator new/delete 演算子の対応
else if( C_IsOperator( szWordPrev, pos + 2 ) ){
// スペースを入れて、前の文字列に続ける
szWordPrev[pos + 2] = ' ';
szWordPrev[pos + 3] = '\0';
strcpy( szWord, szWordPrev );
nWordIdx = strlen( szWord );
}
// To Here Apr. 1, 2001 genta
else{
nWordIdx = 0;
}
}
// strcpy( szWordPrev, szWord ); 不要?
// To Here
if( pLine[i] == ':')
{
if(nMode2 == M2_NAMESPACE_SAVE)
{
if(szWord[0]!='\0')
strcpy( szItemName, szWord );
nMode2 = M2_NAMESPACE_END;
}
else if( nMode2 == M2_TEMPLATE_SAVE)
{
strncat( szItemName, szWord, nItemNameLenMax - strlen(szItemName) );
szItemName[ nItemNameLenMax - 1 ] = '\0';
nMode2 = M2_NAMESPACE_END;
}
}
szWord[nWordIdx] = pLine[i];
szWord[nWordIdx + 1] = '\0';
// // Mar. 15, 2000 genta
// From Here
// 長さチェックは必須
if( nWordIdx < nMaxWordLeng ){
nMode = 1;
}
else{
nMode = 999;
}
// To Here
}else{
// Aug. 13, 2004 genta
// szWordPrevが失われないうちにoperatorの判定を行う
// operatorの判定は前にクラス名が付いている可能性があるので
// 専用の判定関数を使うべし.
// operatorで無ければ=は代入なのでここは宣言文ではない.
if( pLine[i] == '=' && nNestLevel_func == 0 && nNestLevel_fparam==0
&& nMode2 == M2_NORMAL && ! C_IsOperator(szWordPrev,strlen(szWordPrev)) ){
nMode2 = M2_AFTER_EQUAL;
}
strcpy( szWordPrev, szWord );
nWordIdx = 0;
szWord[nWordIdx] = pLine[i];
szWord[nWordIdx + 1] = '\0';
nMode = 2;
// 2002/10/27 frozen ここから
if( nMode2 == M2_NAMESPACE_SAVE )
{
if( pLine[i] == '>' || pLine[i] == ',' || pLine[i] == '=')
// '<' の前に '>' , ',' , '=' があったので、おそらく
// 前にあった"class"はテンプレートパラメータの型を表していたと考えられる。
// よって、クラス名の調査は終了。
// '>' はテンプレートパラメータの終了
// ',' はテンプレートパラメータの区切り
// '=' はデフォルトテンプレートパラメータの指定
nMode2 = M2_NORMAL;
else if( pLine[i] == '<' )
nMode2 = M2_TEMPLATE_SAVE;
}
if( nMode2 == M2_TEMPLATE_SAVE)
{
int nItemNameLen = strlen(szItemName);
if(nItemNameLen + 1 < nItemNameLenMax )
{
szItemName[nItemNameLen] = pLine[i];
szItemName[nItemNameLen + 1 ] = '\0';
}
}
// 2002/10/27 frozen ここまで
}
}
}
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -