0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
| | Index: sakura_core/CDlgFuncList.cpp
===================================================================
--- sakura_core/CDlgFuncList.cpp (revision 1089)
+++ sakura_core/CDlgFuncList.cpp (working copy)
@@ -901,7 +901,8 @@
// Global空間の場合 (C++のみ)
// 2002/10/27 frozen ここから
- if( 3 <= pcFuncInfo->m_nInfo && pcFuncInfo->m_nInfo <= 7 )
+ // 2007.05.26 genta "__interface" をクラスに類する扱いにする
+ if( 3 <= pcFuncInfo->m_nInfo && pcFuncInfo->m_nInfo <= 8 )
htiClass = TVI_ROOT;
else
{
@@ -922,7 +923,7 @@
htiClass = htiGlobal;
}
}
- pFuncName = new char[ strlen(pWork) + 1 + 7 ]; // +6 は追加する文字列の最大長
+ pFuncName = new char[ strlen(pWork) + 1 + 18 ]; // +16 は追加する文字列の最大長
strcpy( pFuncName, pWork );
// 2002/10/27 frozen 追加文字列の種類を増やした
@@ -934,6 +935,8 @@
case 5: strcat( pFuncName, " 列挙体" );break;
case 6: strcat( pFuncName, " 共用体" );break;
// case 7: strcat( pFuncName, " 名前空間" );break;
+
+ case 8: strcat( pFuncName, " インターフェース" );break; // 2007.05.26 genta : "__interface"
};
// }
/* 該当クラス名のアイテムの子として、メソッドのアイテムを登録 */
Index: sakura_core/CEditDoc_FuncList1.cpp
===================================================================
--- sakura_core/CEditDoc_FuncList1.cpp (revision 1089)
+++ sakura_core/CEditDoc_FuncList1.cpp (working copy)
@@ -302,8 +302,11 @@
enum MODE2
{
M2_NORMAL = 0x00, //!< 通常
+ M2_ATTRIBUTE = 0x02, //!< C++/CLI attribute : 2007.05.26 genta
+
M2_NAMESPACE_SAVE = 0x11, //!< ネームスペース名調査中
- // 「通常」状態で単語 "class" "struct" "union" "enum" "namespace"を読み込むと、この状態になり、';' '{' ',' '>' '='を読み込むと「通常」になる。
+ // 「通常」状態で単語 "class" "struct" "union" "enum" "namespace", "__interface" を読み込むと、この状態になり、';' '{' ',' '>' '='を読み込むと「通常」になる。
+ // 2007.05.26 genta キーワードに__interface追加
//
// ':' を読み込むと「ネームスペース名調査完了」へ移行すると同時に
// szWordをszTokenNameに保存し、あとで ':' 又は '{' の直前の単語が調べられるようにしている。
@@ -596,6 +599,8 @@
nItemFuncId = 5;
else if( strcmp(szWord,"union")==0 )
nItemFuncId = 6;
+ else if( strcmp(szWord,"__interface")==0 )
+ nItemFuncId = 8;
if( nItemFuncId != 0 )
{
nMode2 = M2_NAMESPACE_SAVE;
@@ -788,7 +793,10 @@
// nNestLevel2 = 1;
// }
// nMode = 0;
- if( nNestLevel_func == 0 && (nMode2 == M2_NORMAL || nMode2 == M2_NAMESPACE_SAVE || nMode2 == M2_NAMESPACE_END) )
+ // 2007.05.26 genta C++/CLI nMode2 == M2_NAMESPACE_ENDの場合を対象外に
+ // NAMESPACE_END(class クラス名 :の後ろ)においては()を関数とみなさない.
+ // TEMPLATE<sizeof(int)> のようなケースでsizeofを関数と誤認する.
+ if( nNestLevel_func == 0 && (nMode2 == M2_NORMAL || nMode2 == M2_NAMESPACE_SAVE ) )
{
if( strcmp(szWordPrev, "__declspec") == 0 ) {continue;}
if(nNestLevel_fparam==0)
@@ -818,7 +826,8 @@
if( nNestLevel_fparam > 0)
{
--nNestLevel_fparam;
- if( nNestLevel_fparam == 0)
+ // 2007.05.26 genta C++/CLI Attribute内部ではnMode2の変更は行わない
+ if( nNestLevel_fparam == 0 && nMode2 != M2_ATTRIBUTE )
{
nMode2 = M2_FUNC_NAME_END;
nItemFuncId = 2;
@@ -827,6 +836,22 @@
// 2002/10/27 frozen ここまで
continue;
}else
+ // From Here 2007.05.26 genta C++/CLI Attributeの取り扱い
+ if( '[' == pLine[i] ){
+ if( nNestLevel_func == 0 && nNestLevel_fparam == 0 && nMode2 == M2_NORMAL ) {
+ nMode2 = M2_ATTRIBUTE;
+ continue;
+ }
+ } else
+ if( ']' == pLine[i] ){
+ // Attribute内部でも[]を配列として使うかもしれないので,
+ // 括弧のレベルは元に戻っている必要有り
+ if( nNestLevel_fparam == 0 && nMode2 == M2_ATTRIBUTE ) {
+ nMode2 = M2_NORMAL;
+ continue;
+ }
+ } else
+ // To Here 2007.05.26 genta C++/CLI Attributeの取り扱い
if( ';' == pLine[i] ){
// 2002/10/27 frozen ここから
// if( 2 == nNestLevel2 ){
@@ -898,7 +923,8 @@
// 2002/10/27 frozen ここまで
nMode = 0;
continue;
- }else if( nNestLevel_fparam == 0 ){
+ }else if( nNestLevel_fparam == 0 && nMode2 != M2_ATTRIBUTE ){
+ // 2007.05.26 genta C++/CLI Attribute内部では関数名処理は一切行わない
if( C_IsWordChar( pLine[i] ) ){
// 2002/10/27 frozen ここから削除
// if( 2 == nNestLevel2 ){
|