1/////////////////////////////////////////////////////////////////////////////
2// Name:        No names yet.
3// Purpose:     Implementation of C++/Java parser
4//              compatible with SourceParserBase interface
5// Author:      Aleksandras Gluchovas
6// Modified by:
7// Created:     22/09/98
8// RCS-ID:      $Id: cjparser.h 34519 2005-06-02 09:44:45Z ABX $
9// Copyright:   (c) Aleskandars Gluchovas
10// Licence:       wxWindows licence
11/////////////////////////////////////////////////////////////////////////////
12
13#ifndef __CJPARSESR_G__
14#define __CJPARSESR_G__
15
16#include "srcparser.h"
17
18#include <memory.h>
19#include <stdlib.h>
20#include <stdio.h>
21
22#if wxUSE_IOSTREAMH
23    #include <iostream.h>
24#else
25    #include <iostream>
26#endif
27
28// class parses given "memory-resident" Java or C++ source code
29// and captures information about classes/attrubutes/methods/
30// arguments/etc into structures. Conforms with SourceParserBase
31// interface requirements.
32
33class CJSourceParser : public SourceParserBase
34{
35protected:
36    // begining of the full-text area of the source file
37    wxChar* mpStart;
38
39    // points to first character after the end
40    // of teh full-text area
41    wxChar* mpEnd;
42
43    // current "privacy level"
44    int   mCurVis;
45
46    // current parsing position int full-text area
47    wxChar*  m_cur;
48
49    // about the current class
50    bool   mIsVirtual;
51    bool   mIsTemplate;
52    size_t mNestingLevel;
53
54    // context data for which is currently being collected
55    spContext* mpCurCtx;
56
57    int mCurCtxType; // type of the current context
58
59    bool mCommentsOn;
60    bool mMacrosOn;
61
62protected:
63
64    void AttachComments( spContext& ctx, char* cur );
65    void ParseKeyword( char*& cur );
66    bool ParseNameAndRetVal( char*& cur, bool& isAMacro );
67    bool ParseArguments( char*& cur );
68    void ParseMemberVar( char*& cur );
69    void SkipFunction( char*& cur );
70    void SkipFunctionBody( char*& cur );
71    bool CheckVisibilty( char*& cur );
72
73    void AddClassNode( char*& cur );
74    void AddMacroNode( char*& cur );
75    void AddEnumNode( char*& cur );
76    void AddTypeDefNode( char*& cur );
77
78    void DumpOperationInfo( spOperation& info, const wxString& tab, wxSTD ostream& os );
79    void DumpClassHeader( spClass& info, wxSTD ostream& os );
80    void DumpClassBody( spClass& info, wxSTD ostream& os );
81
82public:
83
84    // NOTE:: discarding of macros or comments improves performance and
85    //          decreases memory usage
86
87    CJSourceParser(bool collectCommnets = 1,
88                   bool collectMacros   = 1);
89
90    // returns the root-node of the created context tree
91    // (user is responsible for releasing it from the heep)
92    // "end" should point to the last (character + 1) of the
93    // source text
94
95    virtual spFile* Parse( char* start, char* end );
96};
97
98// inline'ed helpers used (just info):
99/*
100static inline void skip_to_eol( char*& cur );
101static inline void skip_eol( char*& cur );
102static inline bool skip_to_next_comment_in_the_line( char*& cur );
103static void skip_to_prev_line( char*& cur );
104static inline void skip_comments( char*& cur );
105static inline void clear_commets_queue();
106static inline void skip_quoted_string( char*& cur );
107static inline bool get_next_token( char*& cur );
108static inline void skip_preprocessor_dir( char*& cur );
109static void skip_token( char*& cur );
110static inline size_t get_token_len( char* tok );
111static inline bool cmp_tokens( char* tok1, char* tok2 );
112static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len );
113static inline void skip_tempalate_statement( char*& cur );
114static inline void skip_statement( char*& cur );
115static inline void skip_token_back( char*& cur );
116static inline void skip_next_token_back( char*& cur );
117static wxString get_token_str( char* cur );
118static size_t skip_block( char*& cur );
119static inline bool skip_imp_block( char*& cur );
120static bool is_class_token( char*& cur );
121inline static bool is_forward_decl( char* cur );
122inline static bool is_function( char* cur, bool& isAMacro );
123static inline void skip_scope_block( char*& cur );
124static void arrange_indirection_tokens_between( wxString& type, wxString& identifier );
125static bool is_keyword( char* cur );
126static inline void get_string_between( char* start, char* end, wxString* pStr );
127static char* set_comment_text( wxString& text, char* start );
128*/
129
130#endif
131