]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/scintilla/include/Accessor.h
A fix for attribrute sorting, but it's still broken if there are
[wxWidgets.git] / src / stc / scintilla / include / Accessor.h
index 1bba4af55e91f47b1197ea6b109f786657ca57ce..b4b7e62ecf2d8573d18b9d4b8b9c18bbb3df3234 100644 (file)
@@ -3,26 +3,30 @@
 // Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
 // The License.txt file describes the conditions under which this software may be distributed.
 
 // Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
 // The License.txt file describes the conditions under which this software may be distributed.
 
+enum { wsSpace = 1, wsTab = 2, wsSpaceTab = 4, wsInconsistent=8};
+
+class Accessor;
+
+typedef bool (*PFNIsCommentLeader)(Accessor &styler, int pos, int len);
+
+// Interface to data in a Scintilla
 class Accessor {
 protected:
 class Accessor {
 protected:
-       // bufferSize is a trade off between time taken to copy the characters and SendMessage overhead
+       enum {extremePosition=0x7FFFFFFF};
+       // bufferSize is a trade off between time taken to copy the characters and retrieval overhead
        // slopSize positions the buffer before the desired position in case there is some backtracking
        enum {bufferSize=4000, slopSize=bufferSize/8};
        char buf[bufferSize+1];
        // slopSize positions the buffer before the desired position in case there is some backtracking
        enum {bufferSize=4000, slopSize=bufferSize/8};
        char buf[bufferSize+1];
-       WindowID id;
-       PropSet &props;
        int startPos;
        int endPos;
        int startPos;
        int endPos;
-       int lenDoc;
-       int offset;     // Optional but including an offset makes GCC generate better code 
-       void Fill(int position);
+       int codePage;   
+
+       virtual bool InternalIsLeadByte(char ch)=0;
+       virtual void Fill(int position)=0;
 public:
 public:
-       Accessor(WindowID id_, PropSet &props_, int offset_=0) : 
-                       id(id_), props(props_), startPos(0x7FFFFFFF), endPos(0), 
-                       lenDoc(-1), offset(offset_) {
-       }
+       Accessor() : startPos(extremePosition), endPos(0), codePage(0) {}
+       virtual ~Accessor() {}
        char operator[](int position) {
        char operator[](int position) {
-               position += offset;
                if (position < startPos || position >= endPos) {
                        Fill(position);
                }
                if (position < startPos || position >= endPos) {
                        Fill(position);
                }
@@ -30,7 +34,6 @@ public:
        }
        char SafeGetCharAt(int position, char chDefault=' ') {
                // Safe version of operator[], returning a defined value for invalid position 
        }
        char SafeGetCharAt(int position, char chDefault=' ') {
                // Safe version of operator[], returning a defined value for invalid position 
-               position += offset;
                if (position < startPos || position >= endPos) {
                        Fill(position);
                        if (position < startPos || position >= endPos) {
                if (position < startPos || position >= endPos) {
                        Fill(position);
                        if (position < startPos || position >= endPos) {
@@ -40,37 +43,28 @@ public:
                }
                return buf[position - startPos];
        }
                }
                return buf[position - startPos];
        }
-       char StyleAt(int position);
-       int GetLine(int position);
-       int LineStart(int line);
-       int LevelAt(int line);
-       int Length();
-       void Flush() {
-               startPos = 0x7FFFFFFF;
-               lenDoc = -1;
+       bool IsLeadByte(char ch) {
+               return codePage && InternalIsLeadByte(ch);
        }
        }
-       int GetLineState(int line);
-       int SetLineState(int line, int state);
-       PropSet &GetPropSet() { return props; }
-};
+       void SetCodePage(int codePage_) { codePage = codePage_; }
 
 
-class StylingContext : public Accessor {
-       char styleBuf[bufferSize];
-       int validLen;
-       char chFlags;
-       char chWhile;
-       unsigned int startSeg;
-public:
-       StylingContext(WindowID id_, PropSet &props_, int offset_=0) : 
-               Accessor(id_,props_,offset_), validLen(0), chFlags(0) {}
-       void StartAt(unsigned int start, char chMask=31);
-       void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; };
-       void ColourSegment(unsigned int start, unsigned int end, int chAttr);
-       unsigned int GetStartSegment() { return startSeg; }
-       void StartSegment(unsigned int pos);
-       void ColourTo(unsigned int pos, int chAttr);
-       int GetLine(int position);
-       void SetLevel(int line, int level);
-       void Flush();
+       virtual char StyleAt(int position)=0;
+       virtual int GetLine(int position)=0;
+       virtual int LineStart(int line)=0;
+       virtual int LevelAt(int line)=0;
+       virtual int Length()=0;
+       virtual void Flush()=0;
+       virtual int GetLineState(int line)=0;
+       virtual int SetLineState(int line, int state)=0;
+       virtual int GetPropertyInt(const char *key, int defaultValue=0)=0;
+
+       // Style setting
+       virtual void StartAt(unsigned int start, char chMask=31)=0;
+       virtual void SetFlags(char chFlags_, char chWhile_)=0;
+       virtual unsigned int GetStartSegment()=0;
+       virtual void StartSegment(unsigned int pos)=0;
+       virtual void ColourTo(unsigned int pos, int chAttr)=0;
+       virtual void SetLevel(int line, int level)=0;
+       virtual int IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader = 0)=0;
 };
 
 };