1 #include "fconstruct.h"
2
3 std::map<FConstruct::FCLid, wxRegEx*> FConstruct::FCLReMap;
4 std::map<FConstruct::FCLid, std::vector<wxString> > FConstruct::FCLWordMap;
5 std::map<wxString, std::vector<FConstruct::FCLid> > FConstruct::WordFCLidMap;
6
FConstruct()7 FConstruct::FConstruct()
8 {
9 //ctor
10 }
11
~FConstruct()12 FConstruct::~FConstruct()
13 {
14 //dtor
15 }
16
Clear()17 void FConstruct::Clear()
18 {
19 m_Parts.clear();
20 m_Fct = ctUnknown;
21 }
22
AddPart(const wxString & word1,const wxString & word2,const wxString & word3)23 void FConstruct::AddPart(const wxString& word1, const wxString& word2, const wxString& word3)
24 {
25 if (word1.IsEmpty())
26 return;
27 std::vector<wxString> part;
28 part.push_back(word1);
29
30 if (word2.IsEmpty())
31 {
32 m_Parts.push_back(part);
33 return;
34 }
35 else
36 part.push_back(word2);
37
38 if (word3.IsEmpty())
39 {
40 m_Parts.push_back(part);
41 return;
42 }
43 else
44 part.push_back(word3);
45 m_Parts.push_back(part);
46 }
47
GetWords(int i,wxString & word1,wxString & word2,wxString & word3,FCLid & flid) const48 void FConstruct::GetWords(int i, wxString& word1, wxString& word2, wxString& word3, FCLid& flid) const
49 {
50 flid = fclUnknown;
51 if (int(m_Parts.size()) <= i)
52 return;
53 size_t nw = m_Parts[i].size();
54
55 if (nw > 2)
56 {
57 word1 = m_Parts[i][0];
58 word2 = m_Parts[i][1];
59 word3 = m_Parts[i][2];
60 }
61 else if (nw > 1)
62 {
63 word1 = m_Parts[i][0];
64 word2 = m_Parts[i][1];
65 word3 = wxEmptyString;
66 }
67 else
68 {
69 word1 = m_Parts[i][0];
70 word2 = wxEmptyString;
71 word3 = wxEmptyString;
72 }
73
74 if (word1.IsSameAs(_T("if")) && word2.IsSameAs(_T("then")) && word3.IsSameAs(wxEmptyString))
75 flid = fclIf_if_then;
76 else if (word1.IsSameAs(_T("else")) && word2.IsSameAs(_T("if")) && word3.IsSameAs(_T("then")))
77 flid = fclIf_else_if_then;
78 else if (word1.IsSameAs(_T("else")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
79 flid = fclIf_else;
80 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("if")) && word3.IsSameAs(wxEmptyString))
81 flid = fclIf_end_if;
82
83 else if (word1.IsSameAs(_T("do")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
84 flid = fclDo_do;
85 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("do")) && word3.IsSameAs(wxEmptyString))
86 flid = fclDo_end_do;
87
88 else if (word1.IsSameAs(_T("interface")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
89 flid = fclInterf_interf;
90 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("interface")) && word3.IsSameAs(wxEmptyString))
91 flid = fclInterf_end_interf;
92
93 else if (word1.IsSameAs(_T("function")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
94 flid = fclFun_fun;
95 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("function")) && word3.IsSameAs(wxEmptyString))
96 flid = fclFun_end_fun;
97
98 else if (word1.IsSameAs(_T("subroutine")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
99 flid = fclSub_sub;
100 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("subroutine")) && word3.IsSameAs(wxEmptyString))
101 flid = fclSub_end_sub;
102
103 else if (word1.IsSameAs(_T("program")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
104 flid = fclProg_prog;
105 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("program")) && word3.IsSameAs(wxEmptyString))
106 flid = fclProg_end_prog;
107
108 else if (word1.IsSameAs(_T("module")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
109 flid = fclMod_module;
110 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("module")) && word3.IsSameAs(wxEmptyString))
111 flid = fclMod_end_module;
112
113 else if (word1.IsSameAs(_T("submodule")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
114 flid = fclSubmod_submod;
115 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("submodule")) && word3.IsSameAs(wxEmptyString))
116 flid = fclSubmod_end_submod;
117
118 else if (word1.IsSameAs(_T("select")) && word2.IsSameAs(_T("case")) && word3.IsSameAs(wxEmptyString))
119 flid = fclSelectCase_start;
120 else if (word1.IsSameAs(_T("case")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
121 flid = fclSelectCase_case;
122 else if (word1.IsSameAs(_T("case")) && word2.IsSameAs(_T("default")) && word3.IsSameAs(wxEmptyString))
123 flid = fclSelectCase_case;
124 else if (word1.IsSameAs(_T("select")) && word2.IsSameAs(_T("type")) && word3.IsSameAs(wxEmptyString))
125 flid = fclSelectType_start;
126 else if (word1.IsSameAs(_T("type")) && word2.IsSameAs(_T("is")) && word3.IsSameAs(wxEmptyString))
127 flid = fclSelectType_type_is;
128 else if (word1.IsSameAs(_T("class")) && word2.IsSameAs(_T("is")) && word3.IsSameAs(wxEmptyString))
129 flid = fclSelectType_class_is;
130 else if (word1.IsSameAs(_T("class")) && word2.IsSameAs(_T("default")) && word3.IsSameAs(wxEmptyString))
131 flid = fclSelectType_class_default;
132 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("select")) && word3.IsSameAs(wxEmptyString))
133 flid = fclSelect_end;
134
135 else if (word1.IsSameAs(_T("type")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
136 flid = fclType_type;
137 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("type")) && word3.IsSameAs(wxEmptyString))
138 flid = fclType_end_type;
139
140 else if (word1.IsSameAs(_T("enum")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
141 flid = fclEnum_enum;
142 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("enum")) && word3.IsSameAs(wxEmptyString))
143 flid = fclEnum_end_enum;
144
145 else if (word1.IsSameAs(_T("critical")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
146 flid = fclCritical_critical;
147 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("critical")) && word3.IsSameAs(wxEmptyString))
148 flid = fclCritical_end_critical;
149
150 else if (word1.IsSameAs(_T("forall")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
151 flid = fclForall_forall;
152 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("forall")) && word3.IsSameAs(wxEmptyString))
153 flid = fclForall_end_forall;
154
155 else if (word1.IsSameAs(_T("associate")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
156 flid = fclAssoc_associate;
157 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("associate")) && word3.IsSameAs(wxEmptyString))
158 flid = fclAssoc_end_associate;
159
160 else if (word1.IsSameAs(_T("block")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
161 flid = fclBlock_block;
162 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("block")) && word3.IsSameAs(wxEmptyString))
163 flid = fclBlock_end_block;
164
165 else if (word1.IsSameAs(_T("block")) && word2.IsSameAs(_T("data")) && word3.IsSameAs(wxEmptyString))
166 flid = fclBlockdata_blockdata;
167 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("block")) && word3.IsSameAs(_T("data")))
168 flid = fclBlockdata_end_blockdata;
169
170 else if (word1.IsSameAs(_T("change")) && word2.IsSameAs(_T("team")) && word3.IsSameAs(wxEmptyString))
171 flid = fclTeam_change_team;
172 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("team")) && word3.IsSameAs(wxEmptyString))
173 flid = fclTeam_end_team;
174
175 else if (word1.IsSameAs(_T("where")) && word2.IsSameAs(wxEmptyString) && word3.IsSameAs(wxEmptyString))
176 flid = fclWhere_where;
177 else if (word1.IsSameAs(_T("else")) && word2.IsSameAs(_T("where")) && word3.IsSameAs(wxEmptyString))
178 flid = fclWhere_else_where;
179 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("where")) && word3.IsSameAs(wxEmptyString))
180 flid = fclWhere_end_where;
181
182 else if (word1.IsSameAs(_T("module")) && word2.IsSameAs(_T("procedure")) && word3.IsSameAs(wxEmptyString))
183 flid = fclProc_mod_proc;
184 else if (word1.IsSameAs(_T("end")) && word2.IsSameAs(_T("procedure")) && word3.IsSameAs(wxEmptyString))
185 flid = fclProc_end_proc;
186 }
187
MakeFCLReMap()188 void FConstruct::MakeFCLReMap()
189 {
190 int options = wxRE_ADVANCED | wxRE_ICASE;
191
192 FCLReMap[fclIf_if_then] = new wxRegEx( wxT("^(\\s*)(([a-zA-Z0-9_]+)(\\s*)(:)(\\s*))?((if)(\\s*)(\\()(.+)(\\))(\\s*)(then))((\\s*)!(.*))?(\\s*)$"), options);
193 FCLReMap[fclIf_else_if_then] = new wxRegEx( wxT("^(\\s*)(else)(\\s*)((if)(\\s*)(\\()(.+)(\\))(\\s*)(then)((\\s+)([a-zA-Z0-9_]+))?)((\\s*)!(.*))?(\\s*)$"), options);
194 FCLReMap[fclIf_else] = new wxRegEx( wxT("^(\\s*)(else)(\\s*)((\\s+)([a-zA-Z0-9_]+))?((\\s*)!(.*))?(\\s*)$"), options );
195 FCLReMap[fclIf_end_if] = new wxRegEx( wxT("^(\\s*)(end)(\\s*)(if)((\\s+)([a-zA-Z0-9_]+))?(\\s*)"), options );
196
197 FCLReMap[fclDo_do] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)(\\s*)(:)(\\s*))?(do)(([\\s\\t]*$)|([\\s\\t]+[a-z_]+.*))"), options);
198 FCLReMap[fclDo_end_do] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(do)\\y"), options);
199
200 FCLReMap[fclInterf_interf] = new wxRegEx(_T("^[\\s\\t]*(abstract[\\s\\t]+)?interface\\y"), options);
201 FCLReMap[fclInterf_end_interf] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(interface)\\y"), options);
202
203 FCLReMap[fclFun_fun] = new wxRegEx(_T("^((.*[\\s\\t]+)|([\\s\\t]*))function(\\s+)([a-z0-9_]+)(\\s*)(\\(.*[\\)&]+)"), options);
204 FCLReMap[fclFun_end_fun] = new wxRegEx(_T("^[\\s\\t]*(end|((endfunction|(end(\\s+)function))((\\s)+[a-z0-9_]+)?))(\\s*)$"), options);
205
206 FCLReMap[fclSub_sub] = new wxRegEx(_T("^[\\s\\t]*((elemental|impure|module|non_recursive|pure|recursive)\\s+)*subroutine(\\s+)([a-z0-9_]+)(\\s*)(\\(.*[\\)&]+)?\\s*$"), options );
207 FCLReMap[fclSub_end_sub] = new wxRegEx(_T("^[\\s\\t]*(end|((endsubroutine|(end(\\s+)subroutine))((\\s)+[a-z0-9_]+)?))(\\s*)$"), options);
208
209 FCLReMap[fclProg_prog] = new wxRegEx(_T("^[\\s\\t]*program(\\s+)([a-z0-9_]+)([\\s\\t]*)$"), options );
210 FCLReMap[fclProg_end_prog] = new wxRegEx(_T("^[\\s\\t]*(end|((endprogram|(end(\\s+)program))((\\s)+[a-z0-9_]+)?))(\\s*)$"), options);
211
212 FCLReMap[fclMod_module] = new wxRegEx(_T("^[\\s\\t]*(module)(\\s+)((?!procedure[\\s:]+)[a-z0-9_]+)([\\s\\t]*)$"), options );
213 FCLReMap[fclMod_end_module] = new wxRegEx(_T("^[\\s\\t]*(end|((endmodule|(end(\\s+)module))((\\s)+[a-z0-9_]+)?))(\\s*)$"), options);
214
215 FCLReMap[fclSubmod_submod] = new wxRegEx(_T("^[\\s\\t]*(submodule)(\\s*)(\\(\\s*[a-z0-9_:]+\\s*\\))(\\s*)([a-z0-9_]+)([\\s\\t]*)$"), options);
216 FCLReMap[fclSubmod_end_submod] = new wxRegEx(_T("^[\\s\\t]*(end|((endsubmodule|(end(\\s+)submodule))((\\s)+[a-z0-9_]+)?))(\\s*)$"), options);
217
218 FCLReMap[fclSelectCase_start] = new wxRegEx(_T("^[\\s\\t]*(([a-zA-Z0-9_]+)(\\s*)(:)(\\s*))?select(\\s*)case(\\s*)(\\(.*[\\)&]+)"), options);
219 FCLReMap[fclSelectCase_case] = new wxRegEx(_T("^[\\s\\t]*((case(\\s+)default)|(case(\\s*)\\(.*\\)))([\\s\\t]*[a-z0-9_]+)?([\\s\\t]*)$"), options);
220 FCLReMap[fclSelect_end] = new wxRegEx(_T("^[\\s\\t]*(end(\\s*)select)((\\s)+[a-z0-9_]+)?(\\s*)$"), options);
221
222 FCLReMap[fclSelectType_start] = new wxRegEx(_T("^[\\s\\t]*(([a-zA-Z0-9_]+)(\\s*)(:)(\\s*))?select(\\s*)type(\\s*)(\\(.*[\\)&]+)"), options);
223 FCLReMap[fclSelectType_type_is] = new wxRegEx(_T("^[\\s\\t]*type(\\s+)is(\\s*)(\\(.*[\\)&]+)"), options );
224 FCLReMap[fclSelectType_class_is] = new wxRegEx(_T("^[\\s\\t]*class(\\s+)is(\\s*)(\\(.*[\\)&]+)"), options );
225 FCLReMap[fclSelectType_class_default] = new wxRegEx(_T("^[\\s\\t]*class(\\s+)default((\\s)+[a-z0-9_]+)?(\\s*)$"), options);
226
227 FCLReMap[fclType_type] = new wxRegEx(_T("^([\\s\\t]*)(type)(\\s*)((\\s*,\\s*(([a-z0-9_]+)|(extends\\([a-z0-9_]+\\))))*\\s*::)?(\\s*)([a-z0-9_]+)\\y"), options);
228 FCLReMap[fclType_end_type] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(type)\\y"), options);
229
230 FCLReMap[fclEnum_enum] = new wxRegEx(_T("^[\\s\\t]*enum\\y"), options);
231 FCLReMap[fclEnum_end_enum] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(enum)\\y"), options);
232
233 FCLReMap[fclCritical_critical] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)(\\s*)(:)(\\s*))?(critical)\\y"), options);
234 FCLReMap[fclCritical_end_critical] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(critical)\\y"), options);
235
236 FCLReMap[fclForall_forall] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)(\\s*)(:)(\\s*))?(forall)(\\s*)(\\([^\\)]+\\))(\\s*)$"), options);
237 FCLReMap[fclForall_end_forall] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(forall)\\y"), options);
238
239 FCLReMap[fclAssoc_associate] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)(\\s*)(:)(\\s*))?(associate)(\\s*)(\\(.*\\))(\\s*)$"), options);
240 FCLReMap[fclAssoc_end_associate] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(associate)\\y"), options);
241
242 FCLReMap[fclBlock_block] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)\\s*:\\s*)?(block)(\\s*)$"), options);
243 FCLReMap[fclBlock_end_block] = new wxRegEx(_T("^[\\s\\t]*([0-9]*)([\\s\\t]*)(end)(\\s*)(block)([\\s\\t]*)(([\\s\\t]+)([a-z0-9_]+)\\s*)?$"), options);
244
245 FCLReMap[fclTeam_change_team] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)(\\s*)(:)(\\s*))?(change\\s+team)\\s*\\(.*\\)(\\s*)$"), options);
246 FCLReMap[fclTeam_end_team] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(end\\s*team)\\y"), options);
247
248 FCLReMap[fclBlockdata_blockdata] = new wxRegEx(_T("^([\\s\\t]*)(block\\s*data)(([\\s\\t]+)([a-z0-9_]+))?\\s*$"), options);
249 FCLReMap[fclBlockdata_end_blockdata] = new wxRegEx(_T("^([\\s\\t]*)(end|((end\\s*block\\s*data)(([\\s\\t]+)([a-z0-9_]+))?))\\s*$"), options);
250
251 FCLReMap[fclWhere_where] = new wxRegEx(_T("^([\\s\\t]*)([0-9]*)([\\s\\t]*)(([a-z0-9_]+)(\\s*)(:)(\\s*))?(where)(\\s*)(\\([^\\)]+\\))(\\s*)$"), options);
252 FCLReMap[fclWhere_else_where] = new wxRegEx(_T("^([\\s\\t]*)(else\\s*where)\\y"), options);
253 FCLReMap[fclWhere_end_where] = new wxRegEx(_T("^[\\s\\t]*(end)(\\s*)(where)\\y"), options);
254
255 FCLReMap[fclProc_mod_proc] = new wxRegEx(_T("^[\\s\\t]*module(\\s+)procedure(\\s+)([a-z0-9_]+)(\\s*)$"), options );
256 FCLReMap[fclProc_end_proc] = new wxRegEx(_T("^[\\s\\t]*(end|((endprocedure|(end(\\s+)procedure))((\\s)+[a-z0-9_]+)?))(\\s*)$"), options);
257 }
258
DelFCLReMap()259 void FConstruct::DelFCLReMap()
260 {
261 for (std::map<FCLid, wxRegEx*>::iterator it=FCLReMap.begin(); it!=FCLReMap.end(); ++it)
262 delete it->second;
263 FCLReMap.clear();
264 }
265
MakeFCLWordMap()266 void FConstruct::MakeFCLWordMap()
267 {
268 std::vector<wxString> words;
269 words.resize(3);
270 words[0] = _T("if");
271 words[1] = _T("then");
272 words[2] = wxEmptyString;
273 FCLWordMap[fclIf_if_then] = words;
274
275 words[0] = _T("else");
276 words[1] = _T("if");
277 words[2] = _T("then");
278 FCLWordMap[fclIf_else_if_then] = words;
279
280 words[0] = _T("else");
281 words[1] = wxEmptyString;
282 words[2] = wxEmptyString;
283 FCLWordMap[fclIf_else] = words;
284
285 words[0] = _T("end");
286 words[1] = _T("if");
287 words[2] = wxEmptyString;
288 FCLWordMap[fclIf_end_if] = words;
289
290 words[0] = _T("do");
291 words[1] = wxEmptyString;
292 words[2] = wxEmptyString;
293 FCLWordMap[fclDo_do] = words;
294
295 words[0] = _T("end");
296 words[1] = _T("do");
297 words[2] = wxEmptyString;
298 FCLWordMap[fclDo_end_do] = words;
299
300 words[0] = _T("interface");
301 words[1] = wxEmptyString;
302 words[2] = wxEmptyString;
303 FCLWordMap[fclInterf_interf] = words;
304
305 words[0] = _T("end");
306 words[1] = _T("interface");
307 words[2] = wxEmptyString;
308 FCLWordMap[fclInterf_end_interf] = words;
309
310 words[0] = _T("function");
311 words[1] = wxEmptyString;
312 words[2] = wxEmptyString;
313 FCLWordMap[fclFun_fun] = words;
314
315 words[0] = _T("end");
316 words[1] = _T("function");
317 words[2] = wxEmptyString;
318 FCLWordMap[fclFun_end_fun] = words;
319
320 words[0] = _T("subroutine");
321 words[1] = wxEmptyString;
322 words[2] = wxEmptyString;
323 FCLWordMap[fclSub_sub] = words;
324
325 words[0] = _T("end");
326 words[1] = _T("subroutine");
327 words[2] = wxEmptyString;
328 FCLWordMap[fclSub_end_sub] = words;
329
330 words[0] = _T("program");
331 words[1] = wxEmptyString;
332 words[2] = wxEmptyString;
333 FCLWordMap[fclProg_prog] = words;
334
335 words[0] = _T("end");
336 words[1] = _T("program");
337 words[2] = wxEmptyString;
338 FCLWordMap[fclProg_end_prog] = words;
339
340 words[0] = _T("module");
341 words[1] = wxEmptyString;
342 words[2] = wxEmptyString;
343 FCLWordMap[fclMod_module] = words;
344
345 words[0] = _T("end");
346 words[1] = _T("module");
347 words[2] = wxEmptyString;
348 FCLWordMap[fclMod_end_module] = words;
349
350 words[0] = _T("submodule");
351 words[1] = wxEmptyString;
352 words[2] = wxEmptyString;
353 FCLWordMap[fclSubmod_submod] = words;
354
355 words[0] = _T("end");
356 words[1] = _T("submodule");
357 words[2] = wxEmptyString;
358 FCLWordMap[fclSubmod_end_submod] = words;
359
360 words[0] = _T("select");
361 words[1] = _T("type");
362 words[2] = wxEmptyString;
363 FCLWordMap[fclSelectType_start] = words;
364
365 words[0] = _T("type");
366 words[1] = _T("is");
367 words[2] = wxEmptyString;
368 FCLWordMap[fclSelectType_type_is] = words;
369
370 words[0] = _T("class");
371 words[1] = _T("is");
372 words[2] = wxEmptyString;
373 FCLWordMap[fclSelectType_class_is] = words;
374
375 words[0] = _T("class");
376 words[1] = _T("default");
377 words[2] = wxEmptyString;
378 FCLWordMap[fclSelectType_class_default] = words;
379
380 words[0] = _T("select");
381 words[1] = _T("case");
382 words[2] = wxEmptyString;
383 FCLWordMap[fclSelectCase_start] = words;
384
385 words[0] = _T("case");
386 words[1] = _T("default");
387 words[2] = wxEmptyString;
388 FCLWordMap[fclSelectCase_case] = words;
389
390 words[0] = _T("end");
391 words[1] = _T("select");
392 words[2] = wxEmptyString;
393 FCLWordMap[fclSelect_end] = words;
394
395 words[0] = _T("type");
396 words[1] = wxEmptyString;
397 words[2] = wxEmptyString;
398 FCLWordMap[fclType_type] = words;
399
400 words[0] = _T("end");
401 words[1] = _T("type");
402 words[2] = wxEmptyString;
403 FCLWordMap[fclType_end_type] = words;
404
405 words[0] = _T("enum");
406 words[1] = wxEmptyString;
407 words[2] = wxEmptyString;
408 FCLWordMap[fclEnum_enum] = words;
409
410 words[0] = _T("end");
411 words[1] = _T("enum");
412 words[2] = wxEmptyString;
413 FCLWordMap[fclEnum_end_enum] = words;
414
415 words[0] = _T("critical");
416 words[1] = wxEmptyString;
417 words[2] = wxEmptyString;
418 FCLWordMap[fclCritical_critical] = words;
419
420 words[0] = _T("end");
421 words[1] = _T("critical");
422 words[2] = wxEmptyString;
423 FCLWordMap[fclCritical_end_critical] = words;
424
425 words[0] = _T("forall");
426 words[1] = wxEmptyString;
427 words[2] = wxEmptyString;
428 FCLWordMap[fclForall_forall] = words;
429
430 words[0] = _T("end");
431 words[1] = _T("forall");
432 words[2] = wxEmptyString;
433 FCLWordMap[fclForall_end_forall] = words;
434
435 words[0] = _T("associate");
436 words[1] = wxEmptyString;
437 words[2] = wxEmptyString;
438 FCLWordMap[fclAssoc_associate] = words;
439
440 words[0] = _T("end");
441 words[1] = _T("associate");
442 words[2] = wxEmptyString;
443 FCLWordMap[fclAssoc_end_associate] = words;
444
445 words[0] = _T("block");
446 words[1] = wxEmptyString;
447 words[2] = wxEmptyString;
448 FCLWordMap[fclBlock_block] = words;
449
450 words[0] = _T("end");
451 words[1] = _T("block");
452 words[2] = wxEmptyString;
453 FCLWordMap[fclBlock_end_block] = words;
454
455 words[0] = _T("block");
456 words[1] = _T("data");
457 words[2] = wxEmptyString;
458 FCLWordMap[fclBlockdata_blockdata] = words;
459
460 words[0] = _T("end");
461 words[1] = _T("block");
462 words[2] = _T("data");
463 FCLWordMap[fclBlockdata_end_blockdata] = words;
464
465 words[0] = _T("change");
466 words[1] = _T("team");
467 words[2] = wxEmptyString;
468 FCLWordMap[fclTeam_change_team] = words;
469
470 words[0] = _T("end");
471 words[1] = _T("team");
472 words[2] = wxEmptyString;
473 FCLWordMap[fclTeam_end_team] = words;
474
475 words[0] = _T("where");
476 words[1] = wxEmptyString;
477 words[2] = wxEmptyString;
478 FCLWordMap[fclWhere_where] = words;
479
480 words[0] = _T("else");
481 words[1] = _T("where");
482 words[2] = wxEmptyString;
483 FCLWordMap[fclWhere_else_where] = words;
484
485 words[0] = _T("end");
486 words[1] = _T("where");
487 words[2] = wxEmptyString;
488 FCLWordMap[fclWhere_end_where] = words;
489
490 words[0] = _T("module");
491 words[1] = _T("procedure");
492 words[2] = wxEmptyString;
493 FCLWordMap[fclProc_mod_proc] = words;
494
495 words[0] = _T("end");
496 words[1] = _T("procedure");
497 words[2] = wxEmptyString;
498 FCLWordMap[fclProc_end_proc] = words;
499 }
500
GetWordsFromFCLid(FCLid flid,wxString & word1,wxString & word2,wxString & word3)501 void FConstruct::GetWordsFromFCLid(FCLid flid, wxString& word1, wxString& word2, wxString& word3)
502 {
503 if (FCLWordMap.count(flid) > 0)
504 {
505 std::vector<wxString> words;
506 words = FCLWordMap[flid];
507 word1 = words[0];
508 word2 = words[1];
509 word3 = words[2];
510 }
511 else
512 {
513 word1 = wxEmptyString;
514 word2 = wxEmptyString;
515 word3 = wxEmptyString;
516 }
517 }
518
MakeWordFCLidMap()519 void FConstruct::MakeWordFCLidMap()
520 {
521 std::vector<FCLid> idv;
522 wxString kw = _T("if");
523 idv.push_back(fclIf_if_then);
524 idv.push_back(fclIf_else_if_then);
525 idv.push_back(fclIf_end_if);
526 WordFCLidMap[kw] = idv;
527
528 idv.clear();
529 kw = _T("then");
530 idv.push_back(fclIf_if_then);
531 idv.push_back(fclIf_else_if_then);
532 WordFCLidMap[kw] = idv;
533
534 idv.clear();
535 kw = _T("else");
536 idv.push_back(fclIf_else_if_then);
537 idv.push_back(fclIf_else);
538 idv.push_back(fclWhere_else_where);
539 WordFCLidMap[kw] = idv;
540
541 idv.clear();
542 kw = _T("elseif");
543 idv.push_back(fclIf_else_if_then);
544 WordFCLidMap[kw] = idv;
545
546 idv.clear();
547 kw = _T("end");
548 idv.push_back(fclIf_end_if);
549 idv.push_back(fclDo_end_do);
550 idv.push_back(fclInterf_end_interf);
551 idv.push_back(fclSub_end_sub);
552 idv.push_back(fclFun_end_fun);
553 idv.push_back(fclProg_end_prog);
554 idv.push_back(fclMod_end_module);
555 idv.push_back(fclSubmod_end_submod);
556 idv.push_back(fclSelect_end);
557 idv.push_back(fclType_end_type);
558 idv.push_back(fclEnum_end_enum);
559 idv.push_back(fclCritical_end_critical);
560 idv.push_back(fclForall_end_forall);
561 idv.push_back(fclWhere_end_where);
562 idv.push_back(fclAssoc_end_associate);
563 idv.push_back(fclBlock_end_block);
564 idv.push_back(fclTeam_end_team);
565 idv.push_back(fclBlockdata_end_blockdata);
566 idv.push_back(fclProc_end_proc);
567 WordFCLidMap[kw] = idv;
568
569 idv.clear();
570 kw = _T("endif");
571 idv.push_back(fclIf_end_if);
572 WordFCLidMap[kw] = idv;
573
574 idv.clear();
575 kw = _T("do");
576 idv.push_back(fclDo_do);
577 idv.push_back(fclDo_end_do);
578 WordFCLidMap[kw] = idv;
579
580 idv.clear();
581 kw = _T("enddo");
582 idv.push_back(fclDo_end_do);
583 WordFCLidMap[kw] = idv;
584
585 idv.clear();
586 kw = _T("while");
587 idv.push_back(fclDo_do);
588 WordFCLidMap[kw] = idv;
589
590 idv.clear();
591 kw = _T("concurrent");
592 idv.push_back(fclDo_do);
593 WordFCLidMap[kw] = idv;
594
595 idv.clear();
596 kw = _T("abstract");
597 idv.push_back(fclInterf_interf);
598 WordFCLidMap[kw] = idv;
599
600 idv.clear();
601 kw = _T("interface");
602 idv.push_back(fclInterf_interf);
603 idv.push_back(fclInterf_end_interf);
604 WordFCLidMap[kw] = idv;
605
606 idv.clear();
607 kw = _T("endinterface");
608 idv.push_back(fclInterf_end_interf);
609 WordFCLidMap[kw] = idv;
610
611 idv.clear();
612 kw = _T("function");
613 idv.push_back(fclFun_fun);
614 idv.push_back(fclFun_end_fun);
615 WordFCLidMap[kw] = idv;
616
617 idv.clear();
618 kw = _T("endfunction");
619 idv.push_back(fclFun_end_fun);
620 WordFCLidMap[kw] = idv;
621
622 idv.clear();
623 kw = _T("subroutine");
624 idv.push_back(fclSub_sub);
625 idv.push_back(fclSub_end_sub);
626 WordFCLidMap[kw] = idv;
627
628 idv.clear();
629 kw = _T("endsubroutine");
630 idv.push_back(fclSub_end_sub);
631 WordFCLidMap[kw] = idv;
632
633 idv.clear();
634 kw = _T("program");
635 idv.push_back(fclProg_prog);
636 idv.push_back(fclProg_end_prog);
637 WordFCLidMap[kw] = idv;
638
639 idv.clear();
640 kw = _T("endprogram");
641 idv.push_back(fclProg_end_prog);
642 WordFCLidMap[kw] = idv;
643
644 idv.clear();
645 kw = _T("module");
646 idv.push_back(fclMod_module);
647 idv.push_back(fclMod_end_module);
648 idv.push_back(fclProc_mod_proc);
649 idv.push_back(fclProc_end_proc);
650 WordFCLidMap[kw] = idv;
651
652 idv.clear();
653 kw = _T("endmodule");
654 idv.push_back(fclMod_end_module);
655 WordFCLidMap[kw] = idv;
656
657 idv.clear();
658 kw = _T("submodule");
659 idv.push_back(fclSubmod_submod);
660 idv.push_back(fclSubmod_end_submod);
661 WordFCLidMap[kw] = idv;
662
663 idv.clear();
664 kw = _T("endsubmodule");
665 idv.push_back(fclSubmod_end_submod);
666 WordFCLidMap[kw] = idv;
667
668 idv.clear();
669 kw = _T("select");
670 idv.push_back(fclSelectCase_start);
671 idv.push_back(fclSelect_end);
672 idv.push_back(fclSelectType_start);
673 WordFCLidMap[kw] = idv;
674
675 idv.clear();
676 kw = _T("case");
677 idv.push_back(fclSelectCase_start);
678 idv.push_back(fclSelectCase_case);
679 WordFCLidMap[kw] = idv;
680
681 idv.clear();
682 kw = _T("selectcase");
683 idv.push_back(fclSelectCase_start);
684 WordFCLidMap[kw] = idv;
685
686 idv.clear();
687 kw = _T("selecttype");
688 idv.push_back(fclSelectType_start);
689 WordFCLidMap[kw] = idv;
690
691 idv.clear();
692 kw = _T("endselect");
693 idv.push_back(fclSelect_end);
694 WordFCLidMap[kw] = idv;
695
696 idv.clear();
697 kw = _T("default");
698 idv.push_back(fclSelectCase_case);
699 idv.push_back(fclSelectType_class_default);
700 WordFCLidMap[kw] = idv;
701
702 idv.clear();
703 kw = _T("type");
704 idv.push_back(fclSelectType_start);
705 idv.push_back(fclSelectType_type_is);
706 idv.push_back(fclType_type);
707 idv.push_back(fclType_end_type);
708 WordFCLidMap[kw] = idv;
709
710 idv.clear();
711 kw = _T("class");
712 idv.push_back(fclSelectType_class_is);
713 idv.push_back(fclSelectType_class_default);
714 WordFCLidMap[kw] = idv;
715
716 idv.clear();
717 kw = _T("is");
718 idv.push_back(fclSelectType_type_is);
719 idv.push_back(fclSelectType_class_is);
720 WordFCLidMap[kw] = idv;
721
722 idv.clear();
723 kw = _T("endtype");
724 idv.push_back(fclType_end_type);
725 WordFCLidMap[kw] = idv;
726
727 idv.clear();
728 kw = _T("enum");
729 idv.push_back(fclEnum_enum);
730 idv.push_back(fclEnum_end_enum);
731 WordFCLidMap[kw] = idv;
732
733 idv.clear();
734 kw = _T("endenum");
735 idv.push_back(fclEnum_end_enum);
736 WordFCLidMap[kw] = idv;
737
738 idv.clear();
739 kw = _T("critical");
740 idv.push_back(fclCritical_critical);
741 idv.push_back(fclCritical_end_critical);
742 WordFCLidMap[kw] = idv;
743
744 idv.clear();
745 kw = _T("endcritical");
746 idv.push_back(fclCritical_end_critical);
747 WordFCLidMap[kw] = idv;
748
749 idv.clear();
750 kw = _T("forall");
751 idv.push_back(fclForall_forall);
752 idv.push_back(fclForall_end_forall);
753 WordFCLidMap[kw] = idv;
754
755 idv.clear();
756 kw = _T("endforall");
757 idv.push_back(fclForall_end_forall);
758 WordFCLidMap[kw] = idv;
759
760 idv.clear();
761 kw = _T("associate");
762 idv.push_back(fclAssoc_associate);
763 idv.push_back(fclAssoc_end_associate);
764 WordFCLidMap[kw] = idv;
765
766 idv.clear();
767 kw = _T("endassociate");
768 idv.push_back(fclAssoc_end_associate);
769 WordFCLidMap[kw] = idv;
770
771 idv.clear();
772 kw = _T("block");
773 idv.push_back(fclBlock_block);
774 idv.push_back(fclBlock_end_block);
775 idv.push_back(fclBlockdata_blockdata);
776 idv.push_back(fclBlockdata_end_blockdata);
777 WordFCLidMap[kw] = idv;
778
779 idv.clear();
780 kw = _T("endblock");
781 idv.push_back(fclBlock_end_block);
782 idv.push_back(fclBlockdata_end_blockdata);
783 WordFCLidMap[kw] = idv;
784
785 idv.clear();
786 kw = _T("data");
787 idv.push_back(fclBlockdata_blockdata);
788 idv.push_back(fclBlockdata_end_blockdata);
789 WordFCLidMap[kw] = idv;
790
791 idv.clear();
792 kw = _T("blockdata");
793 idv.push_back(fclBlockdata_blockdata);
794 idv.push_back(fclBlockdata_end_blockdata);
795 WordFCLidMap[kw] = idv;
796
797 idv.clear();
798 kw = _T("endblockdata");
799 idv.push_back(fclBlockdata_end_blockdata);
800 WordFCLidMap[kw] = idv;
801
802 idv.clear();
803 kw = _T("change");
804 idv.push_back(fclTeam_change_team);
805 WordFCLidMap[kw] = idv;
806
807 idv.clear();
808 kw = _T("team");
809 idv.push_back(fclTeam_change_team);
810 idv.push_back(fclTeam_end_team);
811 WordFCLidMap[kw] = idv;
812
813 idv.clear();
814 kw = _T("endteam");
815 idv.push_back(fclTeam_end_team);
816 WordFCLidMap[kw] = idv;
817
818 idv.clear();
819 kw = _T("where");
820 idv.push_back(fclWhere_where);
821 idv.push_back(fclWhere_else_where);
822 idv.push_back(fclWhere_end_where);
823 WordFCLidMap[kw] = idv;
824
825 idv.clear();
826 kw = _T("elsewhere");
827 idv.push_back(fclWhere_else_where);
828 WordFCLidMap[kw] = idv;
829
830 idv.clear();
831 kw = _T("endwhere");
832 idv.push_back(fclWhere_end_where);
833 WordFCLidMap[kw] = idv;
834
835 idv.clear();
836 kw = _T("procedure");
837 idv.push_back(fclProc_mod_proc);
838 idv.push_back(fclProc_end_proc);
839 WordFCLidMap[kw] = idv;
840 }
841
842