X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cde9f08e1f2bba81294708c1d65bb869ed744e56..cecfc5e7e54067ea099334a1fbce852ca69a6b11:/utils/HelpGen/include/cjparser.h diff --git a/utils/HelpGen/include/cjparser.h b/utils/HelpGen/include/cjparser.h new file mode 100644 index 0000000000..47c955e832 --- /dev/null +++ b/utils/HelpGen/include/cjparser.h @@ -0,0 +1,125 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: No names yet. +// Purpose: Implementation of C++/Java parser +// compatible with SourceParserBase interface +// Author: Aleksandras Gluchovas +// Modified by: +// Created: 22/09/98 +// RCS-ID: $Id$ +// Copyright: (c) Aleskandars Gluchovas +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __CJPARSESR_G__ +#define __CJPARSESR_G__ + +#include "srcparser.h" + +#include +#include +#include +#include + +// class parses given "memory-resident" Java or C++ source code +// and captures information about classes/attrubutes/methods/ +// arguments/etc into structures. Conforms with SourceParserBase +// interface requirements. + +class CJSourceParser : public SourceParserBase +{ +protected: + // begining of the full-text area of the source file + char* mpStart; + + // points to first character after the end + // of teh full-text area + char* mpEnd; + + // current "privacy level" + int mCurVis; + + // current parsing position int full-text area + char* cur; + + // about the current class + bool mIsVirtaul; + bool mIsTemplate; + size_t mNestingLevel; + + // context data for which is currently being collected + spContext* mpCurCtx; + + int mCurCtxType; // type of the current context + + bool mCommentsOn; + bool mMacrosOn; + +protected: + + void AttachComments( spContext& ctx, char* cur ); + void ParseKeyword( char*& cur ); + bool ParseNameAndRetVal( char*& cur, bool& isAMacro ); + bool ParseArguments( char*& cur ); + void ParseMemberVar( char*& cur ); + void SkipFunction( char*& cur ); + void SkipFunctionBody( char*& cur ); + bool CheckVisibilty( char*& cur ); + + void AddClassNode( char*& cur ); + void AddMacroNode( char*& cur ); + void AddEnumNode( char*& cur ); + void AddTypeDefNode( char*& cur ); + + void DumpOperationInfo( spOperation& info, const string& tab, ostream& os ); + void DumpClassHeader( spClass& info, ostream& os ); + void DumpClassBody( spClass& info, ostream& os ); + +public: + + // NOTE:: discarding of macros or comments improves performance and + // decreases memory usage + + CJSourceParser(bool collectCommnets = 1, + bool collectMacros = 1); + + // returns the root-node of the created context tree + // (user is responsible for releasing it from the heep) + // "end" should point to the last (character + 1) of the + // source text + + virtual spFile* Parse( char* start, char* end ); +}; + +// inline'ed helpers used (just info): +/* +static inline void skip_to_eol( char*& cur ); +static inline void skip_eol( char*& cur ); +static inline bool skip_to_next_comment_in_the_line( char*& cur ); +static void skip_to_prev_line( char*& cur ); +static inline void skip_comments( char*& cur ); +static inline void clear_commets_queue(); +static inline void skip_quoted_string( char*& cur ); +static inline bool get_next_token( char*& cur ); +static inline void skip_preprocessor_dir( char*& cur ); +static void skip_token( char*& cur ); +static inline size_t get_token_len( char* tok ); +static inline bool cmp_tokens( char* tok1, char* tok2 ); +static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len ); +static inline void skip_tempalate_statement( char*& cur ); +static inline void skip_statement( char*& cur ); +static inline void skip_token_back( char*& cur ); +static inline void skip_next_token_back( char*& cur ); +static string get_token_str( char* cur ); +static size_t skip_block( char*& cur ); +static inline bool skip_imp_block( char*& cur ); +static bool is_class_token( char*& cur ); +inline static bool is_forward_decl( char* cur ); +inline static bool is_function( char* cur, bool& isAMacro ); +static inline void skip_scope_block( char*& cur ); +static void arrange_indirection_tokens_between( string& type, string& identifier ); +static bool is_keyword( char* cur ); +static inline void get_string_between( char* start, char* end, string* pStr ); +static char* set_comment_text( string& text, char* start ); +*/ + +#endif