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: sourcepainter.h 34519 2005-06-02 09:44:45Z ABX $
8 // Copyright:   (c) Aleskandars Gluchovas
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef __SOURCEPAINTER_G__
13 #define __SOURCEPAINTER_G__
14 
15 #ifndef ASSERT
16 #define ASSERT(x) if (!(x)) throw
17 #endif
18 
19 #if defined( wxUSE_TEMPLATE_STL )
20 
21     #include <vector.h>
22     typedef vector<int> SPBlockListT;
23 
24     #ifdef WIN32
25         #include <bstring.h>
26     #else
27         #include <strclass.h>
28         #include <string.h>
29     #endif
30 #else
31 
32     #include "wxstlvec.h"
33     #include "wx/string.h"
34 
35     typedef WXSTL_VECTOR_SHALLOW_COPY(int) SPBlockListT;
36 
37 #endif
38 
39 #include "markup.h" // import MarkupTagsT definition
40 
41 // "colored" codes for highlighted blocks
42 
43 #define RANK_BLACK  0 // common source fragments
44 #define RANK_BLUE   1 // basic types
45 #define RANK_RED    2 // reserved words
46 #define RANK_GREEN  3 // comments
47 
48 // colored block description format :
49 // int( ( rank << 16 ) | ( source_range_len ) )
50 
51 
52 // FOR NOW:: no lagnguage-map selection
53 
54 // source code syntax heighlighter (CPP+JAVA+VB+PASCAL)
55 
56 class SourcePainter
57 {
58 protected:
59     wxString        mResultStr;
60     SPBlockListT    mBlocks;
61     bool            mCollectResultsOn;
62 
63     // state variables
64     bool            mIsInComment;
65     bool            mCommentIsMultiline;
66 public:
67 
68     // assembleResultString == true - instructs painter
69     // to collect each chunk of srouce passed to ProcessSource(),
70     // so that results cann be futher obtained in a single string
71     // instead of vector of block descriptions
72 
73     SourcePainter( bool assembleResultString = true );
~SourcePainter()74     virtual ~SourcePainter() {}
75 
76     // can be called multiple times (e.g. on each source line)
77     void ProcessSource( char* src, int srcLen );
78 
79     // method, for manually adjusting state of source painter
80     void SetState( bool isInComment,
81                    bool commentIsMultiline );
82 
83     // reinitializes object - clears results of previouse processing
84     void Init( bool assembleResultString = true );
85 
86     // generates string of highlighted source for the scipting
87     // language given by "tags" argument
88 
89     virtual void GetResultString(wxString& result, MarkupTagsT tags);
90 
91     // returns vector of block descriptors, see SPBlockListT definition
92     // (block descriptors can be used for fast custom highlighted text generation)
93 
94     SPBlockListT& GetBlocks();
95 
96     // NOTE:: static method
97     // returns if the given word is a reserved word or basic type identifier
98     static bool IsKeyword( char* word, int wordLen );
99 };
100 
101 #endif
102