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