1 // Scintilla source code edit control 
   3  ** Rapid easy access to contents of a Scintilla. 
   5 // Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org> 
   6 // The License.txt file describes the conditions under which this software may be distributed. 
   8 enum { wsSpace 
= 1, wsTab 
= 2, wsSpaceTab 
= 4, wsInconsistent
=8}; 
  12 typedef bool (*PFNIsCommentLeader
)(Accessor 
&styler
, int pos
, int len
); 
  15  * Interface to data in a Scintilla. 
  19         enum {extremePosition
=0x7FFFFFFF}; 
  20         /** @a bufferSize is a trade off between time taken to copy the characters 
  21          * and retrieval overhead. 
  22          * @a slopSize positions the buffer before the desired position 
  23          * in case there is some backtracking. */ 
  24         enum {bufferSize
=4000, slopSize
=bufferSize
/8}; 
  25         char buf
[bufferSize
+1]; 
  30         virtual bool InternalIsLeadByte(char ch
)=0; 
  31         virtual void Fill(int position
)=0; 
  34         Accessor() : startPos(extremePosition
), endPos(0), codePage(0) {} 
  35         virtual ~Accessor() {} 
  36         char operator[](int position
) { 
  37                 if (position 
< startPos 
|| position 
>= endPos
) { 
  40                 return buf
[position 
- startPos
]; 
  42         /** Safe version of operator[], returning a defined value for invalid position. */ 
  43         char SafeGetCharAt(int position
, char chDefault
=' ') { 
  44                 if (position 
< startPos 
|| position 
>= endPos
) { 
  46                         if (position 
< startPos 
|| position 
>= endPos
) { 
  47                                 // Position is outside range of document  
  51                 return buf
[position 
- startPos
]; 
  53         bool IsLeadByte(char ch
) { 
  54                 return codePage 
&& InternalIsLeadByte(ch
); 
  56         void SetCodePage(int codePage_
) { codePage 
= codePage_
; } 
  58         virtual bool Match(int pos
, const char *s
)=0; 
  59         virtual char StyleAt(int position
)=0; 
  60         virtual int GetLine(int position
)=0; 
  61         virtual int LineStart(int line
)=0; 
  62         virtual int LevelAt(int line
)=0; 
  63         virtual int Length()=0; 
  64         virtual void Flush()=0; 
  65         virtual int GetLineState(int line
)=0; 
  66         virtual int SetLineState(int line
, int state
)=0; 
  67         virtual int GetPropertyInt(const char *key
, int defaultValue
=0)=0; 
  68         virtual char *GetProperties()=0; 
  71         virtual void StartAt(unsigned int start
, char chMask
=31)=0; 
  72         virtual void SetFlags(char chFlags_
, char chWhile_
)=0; 
  73         virtual unsigned int GetStartSegment()=0; 
  74         virtual void StartSegment(unsigned int pos
)=0; 
  75         virtual void ColourTo(unsigned int pos
, int chAttr
)=0; 
  76         virtual void SetLevel(int line
, int level
)=0; 
  77         virtual int IndentAmount(int line
, int *flags
, PFNIsCommentLeader pfnIsCommentLeader 
= 0)=0;