⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ceditdoc_funclist1.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						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 + -