1 /*
2  * This file is part of the FortranProject plugin for Code::Blocks IDE
3  * and licensed under the GNU General Public License, version 3
4  * http://www.gnu.org/licenses/gpl-3.0.html
5  */
6 
7 #ifndef KEYWORDSPARSERF_H
8 #define KEYWORDSPARSERF_H
9 
10 #include <sdk.h>
11 #ifndef CB_PRECOMP
12     #include <wx/string.h>
13     #include <wx/event.h>
14     #include <wx/file.h>
15 
16     #include <cbeditor.h>
17 #endif
18 #include <set>
19 #include <vector>
20 
21 #include "tokenf.h"
22 #include "tokenizerf.h"
23 #include "parserf.h"
24 
25 typedef std::vector<FortranSourceForm> ArrayOfFortranSourceForm;
26 typedef std::set<wxString> StringSet;
27 
28 enum CompilerDirective
29 {
30     cdNone = 0,
31     cdOther,
32     cdOpenMP,
33     cdOpenACC,
34 };
35 
36 class KeywordsParserF
37 {
38     public:
39         KeywordsParserF();
40         ~KeywordsParserF();
41         bool HasTokenSuitableKind(const wxString& name, int tokKind);
42         void GetCallTips(const wxString& name, wxArrayString& callTips, TokensArrayFlat* result);
43         void FindTokens(const wxString& name, TokensArrayFlat& result);
GetParser()44         ParserF* GetParser(){ return &m_Parser; };
45         const wxArrayString* GetKeywords(CompilerDirective cdir);
46 
47     protected:
48     private:
49         void MakeOtherKeywordSet();
50         bool m_IsDone;
51 
52         ParserF m_Parser;
53 
54         StringSet m_SubrSet;
55         StringSet m_FuncSet;
56         StringSet m_OtherKeywordSet;
57 
58         wxArrayString m_OpenMPKeywords;
59         wxArrayString m_OpenACCKeywords;
60 };
61 
62 #endif // KEYWORDSPARSERF_H
63