• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/amule/wxWidgets-2.8.12/contrib/src/stc/scintilla/include/
1// Scintilla source code edit control
2/** @file Accessor.h
3 ** Rapid easy access to contents of a Scintilla.
4 **/
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.
7
8enum { wsSpace = 1, wsTab = 2, wsSpaceTab = 4, wsInconsistent=8};
9
10class Accessor;
11
12typedef bool (*PFNIsCommentLeader)(Accessor &styler, int pos, int len);
13
14/**
15 * Interface to data in a Scintilla.
16 */
17class Accessor {
18protected:
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];
26	int startPos;
27	int endPos;
28	int codePage;
29
30	virtual bool InternalIsLeadByte(char ch)=0;
31	virtual void Fill(int position)=0;
32
33public:
34	Accessor() : startPos(extremePosition), endPos(0), codePage(0) {}
35	virtual ~Accessor() {}
36	char operator[](int position) {
37		if (position < startPos || position >= endPos) {
38			Fill(position);
39		}
40		return buf[position - startPos];
41	}
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) {
45			Fill(position);
46			if (position < startPos || position >= endPos) {
47				// Position is outside range of document
48				return chDefault;
49			}
50		}
51		return buf[position - startPos];
52	}
53	bool IsLeadByte(char ch) {
54		return codePage && InternalIsLeadByte(ch);
55	}
56	void SetCodePage(int codePage_) { codePage = codePage_; }
57
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;
69
70	// Style setting
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;
78};
79