1/////////////////////////////////////////////////////////////////////////////
2// Name:        No names yet.
3// Purpose:     Contrib. demo
4// Author:      Aleksandras Gluchovas
5// Modified by:
6// Created:     22/09/98
7// RCS-ID:      $Id: docripper.h 41020 2006-09-05 20:47:48Z VZ $
8// Copyright:   (c) Aleskandars Gluchovas
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef __DOCRIPPER_G__
13#define __DOCRIPPER_G__
14
15#include "scriptbinder.h"
16#include "srcparser.h"
17#include "sourcepainter.h"
18
19#if defined( wxUSE_TEMPLATE_STL )
20
21    #include <vector>
22
23    typedef vector<ScriptTemplate*> STemplateListT;
24
25#else
26
27    #include "wxstlvec.h"
28
29    typedef ScriptTemplate* ScriptTemplatePtrT;
30    typedef WXSTL_VECTOR_SHALLOW_COPY(ScriptTemplatePtrT) STemplateListT;
31
32#endif
33
34
35// specific DocGenerator class for "Ripper",
36// also acts as source code visitor
37
38class RipperDocGen : public DocGeneratorBase, public spVisitor
39{
40protected:
41    // templates for various sections
42    ScriptTemplate mTopTempl;
43    ScriptTemplate mContentIdxTempl;
44    ScriptTemplate mSuperContentTempl;
45    ScriptTemplate mSubContentTempl;
46    ScriptTemplate mOutLineTempl;
47    ScriptTemplate mOutLine1Templ;
48
49    // template used for corss-references
50    ScriptTemplate mRefTempl;
51
52    // template used to show not-existing sections
53    ScriptTemplate mDeadRefTempl;
54
55    // template collection for generation of class-tree
56    STemplateListT mTreeTemplates;
57
58    // pointers to all major index sections
59    ScriptSection* mpTopIdx;
60    ScriptSection* mpClassIdx;
61    ScriptSection* mpEnumIdx;
62    ScriptSection* mpTypeDefIdx;
63    ScriptSection* mpMacroIdx;
64    ScriptSection* mpGlobalVarsIdx;
65    ScriptSection* mpGlobalFuncIdx;
66    ScriptSection* mpConstIdx;
67
68    // parser set up from user-code for sepcific language
69    SourceParserBase* mpParser;
70
71    // class section, which is currently being
72    // assembled
73    ScriptSection*    mpCurClassSect;
74
75    // source syntax heighlighter object
76    SourcePainter  mSrcPainter;
77
78    // context, to which all file contexts
79    // are assembled
80    spContext*     mpFileBinderCtx;
81
82    // script tags set up from usesr code
83    MarkupTagsT    m_Tags;
84
85protected:
86    // helpers
87    void AppendComments( spContext& fromContext, wxString& str );
88
89    void AppendMulitilineStr( wxString& st, wxString& mlStr );
90
91    void AppendHighlightedSource( wxString& st, wxString source );
92
93    // returns true, if no comments found in the context,
94    // plus, creates dummy(empty) section, and puts a
95    // reference woth "dead-link" template to it in the
96    // given index-section "toSect"
97
98    bool CheckIfUncommented( spContext& ctx, ScriptSection& toSect );
99
100    // checks if context has any comments, then returns
101    // template of normal reference, otherwise of dead reference
102
103    ScriptTemplate* GetRefTemplFor( spContext& ctx );
104
105    // adds "someClass::" perfix to the context name,
106    // if it's not in the file scope (i.e. if it's not global)
107
108    wxString GetScopedName( spContext& ofCtx );
109
110    // adds section to currently assembled class section
111    // and places references to it from "public", "protected"
112    // or "private" indexing-subsections of the class, depending
113    // on the visibility of the context
114
115    void AddToCurrentClass( ScriptSection* pSection, spContext& ctx,
116                            const char* subSectionName );
117
118    // called, after all files are processed, to
119    // resolve possible super/derived class relations,
120    // and put cross references to them - where resolution was
121    // successful
122    void LinkSuperClassRefs();
123
124    // implementations of "visiting procedures", declared in spVisitor
125
126    virtual void VisitClass( spClass& cl );
127    virtual void VisitEnumeration( spEnumeration& en );
128    virtual void VisitTypeDef( spTypeDef& td );
129    virtual void VisitPreprocessorLine( spPreprocessorLine& pd );
130    virtual void VisitAttribute( spAttribute& attr );
131    virtual void VisitOperation( spOperation& op );
132
133    // overriden member of DocGernatorBase
134
135    virtual bool OnSaveDocument( ScriptStream& stm );
136
137    virtual ScriptSection* GetTopSection()
138        { return mpTopIdx; }
139
140public:
141    RipperDocGen();
142    virtual ~RipperDocGen();
143
144    // should be called onece to set user-code provided,
145    // parser for specific source code language
146    // (NOTE:: it's the user-code's responsibility to
147    //  relseas memory of pParser)
148
149    void Init( SourceParserBase* pParser );
150
151    // should be called on each file
152
153    void ProcessFile( const char* sourceFile );
154};
155
156
157#endif
158