Minor tweaks and such to be saved prior to messing with the wxPython

build system...


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@8503 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2000-10-09 20:40:06 +00:00
parent 2814e52084
commit e1b27de63f
94 changed files with 12016 additions and 7634 deletions

View File

@@ -1,181 +0,0 @@
// Scintilla source code edit control
// SciLexer - interface to the added lexer functions in the SciLexer version of the edit control
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef SCILEXER_H
#define SCILEXER_H
// SciLexer features - not in standard Scintilla
#define SCLEX_CONTAINER 0
#define SCLEX_NULL 1
#define SCLEX_PYTHON 2
#define SCLEX_CPP 3
#define SCLEX_HTML 4
#define SCLEX_XML 5
#define SCLEX_PERL 6
#define SCLEX_SQL 7
#define SCLEX_VB 8
#define SCLEX_PROPERTIES 9
#define SCLEX_ERRORLIST 10
#define SCLEX_MAKEFILE 11
#define SCLEX_BATCH 12
#define SCLEX_XCODE 13
#define SCLEX_LATEX 14
// Lexical states for SCLEX_PYTHON
#define SCE_P_DEFAULT 0
#define SCE_P_COMMENTLINE 1
#define SCE_P_NUMBER 2
#define SCE_P_STRING 3
#define SCE_P_CHARACTER 4
#define SCE_P_WORD 5
#define SCE_P_TRIPLE 6
#define SCE_P_TRIPLEDOUBLE 7
#define SCE_P_CLASSNAME 8
#define SCE_P_DEFNAME 9
#define SCE_P_OPERATOR 10
#define SCE_P_IDENTIFIER 11
#define SCE_P_COMMENTBLOCK 12
#define SCE_P_STRINGEOL 13
// Lexical states for SCLEX_CPP, SCLEX_VB
#define SCE_C_DEFAULT 0
#define SCE_C_COMMENT 1
#define SCE_C_COMMENTLINE 2
#define SCE_C_COMMENTDOC 3
#define SCE_C_NUMBER 4
#define SCE_C_WORD 5
#define SCE_C_STRING 6
#define SCE_C_CHARACTER 7
#define SCE_C_UUID 8
#define SCE_C_PREPROCESSOR 9
#define SCE_C_OPERATOR 10
#define SCE_C_IDENTIFIER 11
#define SCE_C_STRINGEOL 12
// Lexical states for SCLEX_HTML, SCLEX_xML
#define SCE_H_DEFAULT 0
#define SCE_H_TAG 1
#define SCE_H_TAGUNKNOWN 2
#define SCE_H_ATTRIBUTE 3
#define SCE_H_ATTRIBUTEUNKNOWN 4
#define SCE_H_NUMBER 5
#define SCE_H_DOUBLESTRING 6
#define SCE_H_SINGLESTRING 7
#define SCE_H_OTHER 8
#define SCE_H_COMMENT 9
#define SCE_H_ENTITY 10
// XML and ASP
#define SCE_H_TAGEND 11
#define SCE_H_XMLSTART 12
#define SCE_H_XMLEND 13
#define SCE_H_SCRIPT 14
#define SCE_H_ASP 15
#define SCE_H_ASPAT 16
// Embedded Javascript
#define SCE_HJ_START 40
#define SCE_HJ_DEFAULT 41
#define SCE_HJ_COMMENT 42
#define SCE_HJ_COMMENTLINE 43
#define SCE_HJ_COMMENTDOC 44
#define SCE_HJ_NUMBER 45
#define SCE_HJ_WORD 46
#define SCE_HJ_KEYWORD 47
#define SCE_HJ_DOUBLESTRING 48
#define SCE_HJ_SINGLESTRING 49
#define SCE_HJ_SYMBOLS 50
#define SCE_HJ_STRINGEOL 51
// ASP Javascript
#define SCE_HJA_START 55
#define SCE_HJA_DEFAULT 56
#define SCE_HJA_COMMENT 57
#define SCE_HJA_COMMENTLINE 58
#define SCE_HJA_COMMENTDOC 59
#define SCE_HJA_NUMBER 60
#define SCE_HJA_WORD 61
#define SCE_HJA_KEYWORD 62
#define SCE_HJA_DOUBLESTRING 63
#define SCE_HJA_SINGLESTRING 64
#define SCE_HJA_SYMBOLS 65
#define SCE_HJA_STRINGEOL 66
// Embedded VBScript
#define SCE_HB_START 70
#define SCE_HB_DEFAULT 71
#define SCE_HB_COMMENTLINE 72
#define SCE_HB_NUMBER 73
#define SCE_HB_WORD 74
#define SCE_HB_STRING 75
#define SCE_HB_IDENTIFIER 76
#define SCE_HB_STRINGEOL 77
// ASP VBScript
#define SCE_HBA_START 80
#define SCE_HBA_DEFAULT 81
#define SCE_HBA_COMMENTLINE 82
#define SCE_HBA_NUMBER 83
#define SCE_HBA_WORD 84
#define SCE_HBA_STRING 85
#define SCE_HBA_IDENTIFIER 86
#define SCE_HBA_STRINGEOL 87
// Embedded Python
#define SCE_HP_START 90
#define SCE_HP_DEFAULT 91
#define SCE_HP_COMMENTLINE 92
#define SCE_HP_NUMBER 93
#define SCE_HP_STRING 94
#define SCE_HP_CHARACTER 95
#define SCE_HP_WORD 96
#define SCE_HP_TRIPLE 97
#define SCE_HP_TRIPLEDOUBLE 98
#define SCE_HP_CLASSNAME 99
#define SCE_HP_DEFNAME 100
#define SCE_HP_OPERATOR 101
#define SCE_HP_IDENTIFIER 102
// ASP Python
#define SCE_HPA_START 105
#define SCE_HPA_DEFAULT 106
#define SCE_HPA_COMMENTLINE 107
#define SCE_HPA_NUMBER 108
#define SCE_HPA_STRING 109
#define SCE_HPA_CHARACTER 110
#define SCE_HPA_WORD 111
#define SCE_HPA_TRIPLE 112
#define SCE_HPA_TRIPLEDOUBLE 113
#define SCE_HPA_CLASSNAME 114
#define SCE_HPA_DEFNAME 115
#define SCE_HPA_OPERATOR 116
#define SCE_HPA_IDENTIFIER 117
// Lexical states for SCLEX_PERL
#define SCE_PL_DEFAULT 0
#define SCE_PL_HERE 1
#define SCE_PL_COMMENTLINE 2
#define SCE_PL_POD 3
#define SCE_PL_NUMBER 4
#define SCE_PL_WORD 5
#define SCE_PL_STRING 6
#define SCE_PL_CHARACTER 7
#define SCE_PL_PUNCTUATION 8
#define SCE_PL_PREPROCESSOR 9
#define SCE_PL_OPERATOR 10
#define SCE_PL_IDENTIFIER 11
#define SCE_PL_SCALAR 12
#define SCE_PL_ARRAY 13
#define SCE_PL_HASH 14
#define SCE_PL_SYMBOLTABLE 15
#define SCE_PL_REF 16
#define SCE_PL_REGEX 17
#define SCE_PL_REGSUBST 18
#define SCE_PL_LONGQUOTE 19
#define SCE_PL_BACKTICKS 20
#define SCE_PL_DATASECTION 21
// Lexical states for SCLEX_LATEX
#define SCE_L_DEFAULT 0
#define SCE_L_COMMAND 1
#define SCE_L_TAG 2
#define SCE_L_MATH 3
#define SCE_L_COMMENT 4
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -26,6 +26,7 @@ OBJECTS=PlatWX.o ScintillaWX.o stc.o \
DocumentAccessor.o \
LexCPP.o \
LexHTML.o \
LexLua.o \
LexOthers.o \
LexPerl.o \
LexPython.o \
@@ -47,6 +48,7 @@ OBJECTS=PlatWX.o ScintillaWX.o stc.o \
ScintillaBase.o \
Style.o \
ViewStyle.o \
PosRegExp.o \
APPEXTRADEFS=-D__WX__ -DSCI_LEXER -I$(scintilla_dir)/src -I$(scintilla_dir)/include -I$(top_srcdir)/contrib/include

View File

@@ -456,7 +456,25 @@ ListBox::~ListBox() {
void ListBox::Create(Window &parent, int ctrlID) {
id = new wxListBox(parent.id, ctrlID, wxDefaultPosition, wxDefaultSize,
0, NULL, wxLB_SINGLE | wxLB_SORT);
((wxListBox*)id)->Show(FALSE);
}
PRectangle ListBox::GetDesiredRect() {
wxSize sz = ((wxListBox*)id)->GetBestSize();
PRectangle rc;
rc.top = 0;
rc.left = 0;
rc.right = sz.x;
rc.bottom = sz.y;
return rc;
}
void ListBox::SetAverageCharWidth(int width) {
aveCharWidth = width;
}
void ListBox::SetFont(Font &font) {
Window::SetFont(font);
}
void ListBox::Clear() {

View File

@@ -273,8 +273,6 @@ void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) {
if (!enabled)
popup.GetID()->Enable(cmd, enabled);
// TODO: need to create event handler mappings for the cmd ID
}
@@ -283,18 +281,18 @@ void ScintillaWX::ClaimSelection() {
}
LRESULT ScintillaWX::DefWndProc(UINT /*iMessage*/, WPARAM /*wParam*/, LPARAM /*lParam*/) {
long ScintillaWX::DefWndProc(unsigned int /*iMessage*/, unsigned long /*wParam*/, long /*lParam*/) {
return 0;
}
LRESULT ScintillaWX::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
switch (iMessage) {
case EM_CANPASTE:
return CanPaste();
default:
long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) {
// switch (iMessage) {
// case EM_CANPASTE:
// return CanPaste();
// default:
return ScintillaBase::WndProc(iMessage, wParam, lParam);
}
return 0;
// }
// return 0;
}
@@ -415,6 +413,29 @@ void ScintillaWX::DoAddChar(char ch) {
}
int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt) {
switch (key) {
case WXK_DOWN: key = SCK_DOWN; break;
case WXK_UP: key = SCK_UP; break;
case WXK_LEFT: key = SCK_LEFT; break;
case WXK_RIGHT: key = SCK_RIGHT; break;
case WXK_HOME: key = SCK_HOME; break;
case WXK_END: key = SCK_END; break;
case WXK_PRIOR: key = SCK_PRIOR; break;
case WXK_NEXT: key = SCK_NEXT; break;
case WXK_DELETE: key = SCK_DELETE; break;
case WXK_INSERT: key = SCK_INSERT; break;
case WXK_ESCAPE: key = SCK_ESCAPE; break;
case WXK_BACK: key = SCK_BACK; break;
case WXK_TAB: key = SCK_TAB; break;
case WXK_RETURN: key = SCK_RETURN; break;
case WXK_ADD: key = SCK_ADD; break;
case WXK_SUBTRACT: key = SCK_SUBTRACT; break;
case WXK_DIVIDE: key = SCK_DIVIDE; break;
case WXK_CONTROL: key = 0; break;
case WXK_ALT: key = 0; break;
case WXK_SHIFT: key = 0; break;
}
return KeyDown(key, shift, ctrl, alt);
}

View File

@@ -97,8 +97,12 @@ public:
virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
virtual void ClaimSelection();
virtual LRESULT DefWndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual long DefWndProc(unsigned int iMessage,
unsigned long wParam,
long lParam);
virtual long WndProc(unsigned int iMessage,
unsigned long wParam,
long lParam);
virtual void NotifyChange();
virtual void NotifyParent(SCNotification scn);

View File

@@ -34,6 +34,7 @@ OBJECTS = \
KeyWords.obj \
LexCPP.obj \
LexHTML.obj \
LexLua.obj \
LexOthers.obj \
LexPerl.obj \
LexPython.obj \
@@ -41,6 +42,7 @@ OBJECTS = \
LexVB.obj \
LineMarker.obj \
PropSet.obj \
PosRegExp.obj \
ScintillaBase.obj \
Style.obj \
UniConversion.obj \

View File

@@ -27,6 +27,7 @@ OBJECTS = \
$(S)/ViewStyle.$(OBJSUFF) \
$(S)/LexCPP.$(OBJSUFF) \
$(S)/LexHTML.$(OBJSUFF) \
$(S)/LexLua.$(OBJSUFF) \
$(S)/LexOthers.$(OBJSUFF) \
$(S)/LexPerl.$(OBJSUFF) \
$(S)/LexPython.$(OBJSUFF) \
@@ -35,6 +36,7 @@ OBJECTS = \
$(S)/DocumentAccessor.$(OBJSUFF)\
$(S)/UniConversion.$(OBJSUFF) \
$(S)/WindowAccessor.$(OBJSUFF) \
$(S)/PosRegExp.$(OBJSUFF) \
PlatWX.$(OBJSUFF) \
ScintillaWX.$(OBJSUFF) \
stc.$(OBJSUFF)

View File

@@ -27,12 +27,14 @@ OBJECTS = \
$(D)\KeyWords.obj \
$(D)\LexCPP.obj \
$(D)\LexHTML.obj \
$(D)\LexLua.obj \
$(D)\LexOthers.obj \
$(D)\LexPerl.obj \
$(D)\LexPython.obj \
$(D)\LexSQL.obj \
$(D)\LexVB.obj \
$(D)\LineMarker.obj \
$(D)\PosRegExp.obj \
$(D)\PropSet.obj \
$(D)\ScintillaBase.obj \
$(D)\Style.obj \

View File

@@ -3,6 +3,5 @@ scintilla/include directories from the Scintilla/SCiTE source
distribution. All other code needed to implement Scintilla on top of
wxWindows is located in the directory above this one.
The current version of the Scintilla code is 1.25+ (from their CVS on
5-19-2000).
The current version of the Scintilla code is 1.32

View File

@@ -80,12 +80,6 @@ typedef wxWindow* WindowID;
typedef wxMenu* MenuID;
#endif
#if PLAT_GTK || PLAT_WX
#define SHIFT_PRESSED 1
#define LEFT_CTRL_PRESSED 2
#define LEFT_ALT_PRESSED 4
#endif
// Point is exactly the same as the Win32 POINT and GTK+ GdkPoint so can be used interchangeably
class Point {
@@ -199,6 +193,7 @@ public:
};
class Font {
protected:
FontID id;
#if PLAT_WX
int ascent;
@@ -208,10 +203,10 @@ class Font {
Font &operator=(const Font &) { id=0; return *this; }
public:
Font();
~Font();
virtual ~Font();
void Create(const char *faceName, int characterSet, int size, bool bold, bool italic);
void Release();
virtual void Create(const char *faceName, int characterSet, int size, bool bold, bool italic);
virtual void Release();
FontID GetID() { return id; }
// Alias another font - caller guarantees not to Release
@@ -327,7 +322,7 @@ public:
void Show(bool show=true);
void InvalidateAll();
void InvalidateRectangle(PRectangle rc);
void SetFont(Font &font);
virtual void SetFont(Font &font);
enum Cursor { cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow };
void SetCursor(Cursor curs);
void SetTitle(const char *s);
@@ -344,14 +339,17 @@ class ListBox : public Window {
WindowID scroller;
int current;
#endif
int desiredVisibleRows;
unsigned int maxItemCharacters;
unsigned int aveCharWidth;
public:
ListBox();
virtual ~ListBox();
ListBox &operator=(WindowID id_) {
id = id_;
return *this;
}
void Create(Window &parent, int ctrlID);
virtual void SetFont(Font &font);
void SetAverageCharWidth(int width);
void SetVisibleRows(int rows);
PRectangle GetDesiredRect();
void Clear();
void Append(char *s);
int Length();
@@ -396,6 +394,16 @@ public:
// These are utility functions not really tied to a platform
static int Minimum(int a, int b);
static int Maximum(int a, int b);
// Next three assume 16 bit shorts and 32 bit longs
static long LongFromTwoShorts(short a,short b) {
return (a) | ((b) << 16);
}
static short HighShortFromLong(long x) {
return static_cast<short>(x >> 16);
}
static short LowShortFromLong(long x) {
return static_cast<short>(x & 0xffff);
}
static void DebugPrintf(const char *format, ...);
static int Clamp(int val, int minVal, int maxVal);
};

View File

@@ -8,44 +8,92 @@
bool EqualCaseInsensitive(const char *a, const char *b);
#if PLAT_WIN
#define strcasecmp stricmp
#define strncasecmp strnicmp
#endif
#ifdef __WXMSW__
#define strcasecmp stricmp
#define strncasecmp strnicmp
#endif
// Define another string class.
// While it would be 'better' to use std::string, that doubles the executable size.
inline char *StringDup(const char *s) {
inline char *StringDup(const char *s, int len=-1) {
if (!s)
return 0;
char *sNew = new char[strlen(s) + 1];
if (sNew)
strcpy(sNew, s);
if (len == -1)
len = strlen(s);
char *sNew = new char[len + 1];
if (sNew) {
strncpy(sNew, s, len);
sNew[len] = '\0';
}
return sNew;
}
class SString {
char *s;
int ssize;
public:
typedef const char* const_iterator;
typedef int size_type;
static size_type npos;
const char* begin(void) const {
return s;
}
const char* end(void) const {
return &s[ssize];
}
size_type size(void) const {
if (s)
return ssize;
else
return 0;
}
SString &assign(const char* sother, int size_ = -1) {
char *t = s;
s = StringDup(sother,size_);
ssize = (s) ? strlen(s) : 0;
delete []t;
return *this;
}
SString &assign(const SString& sother, int size_ = -1) {
return assign(sother.s,size_);
}
SString &assign(const_iterator ibeg, const_iterator iend) {
return assign(ibeg,iend - ibeg);
}
SString() {
s = 0;
ssize = 0;
}
SString(const SString &source) {
s = StringDup(source.s);
ssize = (s) ? strlen(s) : 0;
}
SString(const char *s_) {
s = StringDup(s_);
ssize = (s) ? strlen(s) : 0;
}
SString(int i) {
char number[100];
sprintf(number, "%0d", i);
//itoa(i, number, 10);
s = StringDup(number);
ssize = (s) ? strlen(s) : 0;
}
~SString() {
delete []s;
s = 0;
ssize = 0;
}
SString &operator=(const SString &source) {
if (this != &source) {
delete []s;
s = StringDup(source.s);
ssize = (s) ? strlen(s) : 0;
}
return *this;
}
@@ -56,6 +104,9 @@ public:
return false;
return strcmp(s, other.s) == 0;
}
bool operator!=(const SString &other) const {
return !operator==(other);
}
bool operator==(const char *sother) const {
if ((s == 0) && (sother == 0))
return true;
@@ -63,6 +114,9 @@ public:
return false;
return strcmp(s, sother) == 0;
}
bool operator!=(const char *sother) const {
return !operator==(sother);
}
const char *c_str() const {
if (s)
return s;
@@ -82,99 +136,109 @@ public:
return '\0';
}
SString &operator +=(const char *sother) {
return append(sother,-1);
}
SString &operator +=(const SString &sother) {
return append(sother.s,sother.ssize);
}
SString &operator +=(char ch) {
return append(&ch,1);
}
SString &append(const char* sother, int lenOther) {
int len = length();
int lenOther = strlen(sother);
if(lenOther < 0)
lenOther = strlen(sother);
char *sNew = new char[len + lenOther + 1];
if (sNew) {
if (s)
memcpy(sNew, s, len);
memcpy(sNew + len, sother, lenOther);
strncpy(&sNew[len], sother, lenOther);
sNew[len + lenOther] = '\0';
delete []s;
s = sNew;
ssize = (s) ? strlen(s) : 0;
}
return *this;
}
int value() const {
if (s)
return atoi(s);
else
else
return 0;
}
void substitute(char find, char replace) {
char *t = s;
while (t) {
t = strchr(t, find);
if (t)
*t = replace;
}
}
// I don't think this really belongs here -- Neil
void correctPath() {
#ifdef unix
substitute('\\', '/');
#else
substitute('/', '\\');
#endif
}
};
struct Property {
unsigned int hash;
char *key;
char *val;
Property *next;
Property() : hash(0), key(0), val(0), next(0) {}
};
class PropSet {
private:
char **vals;
int size;
int used;
enum { hashRoots=31 };
Property *props[hashRoots];
public:
PropSet *superPS;
PropSet();
~PropSet();
void EnsureCanAddEntry();
void Set(const char *key, const char *val);
void Set(char *keyval);
SString Get(const char *key);
SString GetExpanded(const char *key);
SString Expand(const char *withvars);
int GetInt(const char *key, int defaultValue=0);
SString GetWild(const char *keybase, const char *filename);
SString GetNewExpand(const char *keybase, const char *filename);
void Clear();
void ReadFromMemory(const char *data, int len);
void Read(const char *filename);
};
// This is a fixed length list of strings suitable for display in combo boxes
// as a memory of user entries
template<int sz>
class EntryMemory {
SString entries[sz];
public:
void Insert(SString s) {
for (int i=0;i<sz;i++) {
if (entries[i] == s) {
for (int j=i;j>0;j--) {
entries[j] = entries[j-1];
}
entries[0] = s;
return;
}
}
for (int k=sz-1;k>0;k--) {
entries[k] = entries[k-1];
}
entries[0] = s;
}
int Length() const {
int len = 0;
for (int i=0;i<sz;i++)
if (entries[i].length())
len++;
return len;
}
SString At(int n) const {
return entries[n];
}
void ReadFromMemory(const char *data, int len, const char *directoryForImports=0);
void Read(const char *filename, const char *directoryForImports);
};
class WordList {
public:
// Each word contains at least one character - a empty word acts as sentinal at the end.
char **words;
char **wordsNoCase;
char *list;
int len;
bool onlyLineEnds; // Delimited by any white space or only line ends
bool sorted;
int starts[256];
WordList(bool onlyLineEnds_ = false) :
words(0), list(0), len(0), onlyLineEnds(onlyLineEnds_) {}
WordList(bool onlyLineEnds_ = false) :
words(0), wordsNoCase(0), list(0), len(0), onlyLineEnds(onlyLineEnds_), sorted(false) {}
~WordList() { Clear(); }
operator bool() { return list ? true : false; }
operator bool() { return words ? true : false; }
const char *operator[](int ind) { return words[ind]; }
void Clear();
void Set(const char *s);
char *Allocate(int size);
void SetFromAllocated();
bool InList(const char *s);
const char *GetNearestWord(const char *wordStart, int searchLen = -1, bool ignoreCase = false);
char *GetNearestWords(const char *wordStart, int searchLen = -1, bool ignoreCase = false);
};
inline bool nonFuncChar(char ch) {
return strchr("\t\n\r !\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~", ch) != NULL;
}
#endif

View File

@@ -3,11 +3,15 @@
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
// Most of this file is automatically generated from the Scintilla.iface interface definition
// file which contains any comments about the definitions. HFacer.py does the generation.
#ifndef SCILEXER_H
#define SCILEXER_H
// SciLexer features - not in standard Scintilla
//++Autogenerated -- start of section automatically generated from Scintilla.iface
#define SCLEX_CONTAINER 0
#define SCLEX_NULL 1
#define SCLEX_PYTHON 2
@@ -23,8 +27,8 @@
#define SCLEX_BATCH 12
#define SCLEX_XCODE 13
#define SCLEX_LATEX 14
// Lexical states for SCLEX_PYTHON
#define SCLEX_LUA 15
#define SCLEX_DIFF 16
#define SCE_P_DEFAULT 0
#define SCE_P_COMMENTLINE 1
#define SCE_P_NUMBER 2
@@ -39,8 +43,6 @@
#define SCE_P_IDENTIFIER 11
#define SCE_P_COMMENTBLOCK 12
#define SCE_P_STRINGEOL 13
// Lexical states for SCLEX_CPP, SCLEX_VB
#define SCE_C_DEFAULT 0
#define SCE_C_COMMENT 1
#define SCE_C_COMMENTLINE 2
@@ -54,8 +56,7 @@
#define SCE_C_OPERATOR 10
#define SCE_C_IDENTIFIER 11
#define SCE_C_STRINGEOL 12
// Lexical states for SCLEX_HTML, SCLEX_xML
#define SCE_C_VERBATIM 13
#define SCE_H_DEFAULT 0
#define SCE_H_TAG 1
#define SCE_H_TAGUNKNOWN 2
@@ -67,14 +68,15 @@
#define SCE_H_OTHER 8
#define SCE_H_COMMENT 9
#define SCE_H_ENTITY 10
// XML and ASP
#define SCE_H_TAGEND 11
#define SCE_H_XMLSTART 12
#define SCE_H_XMLEND 13
#define SCE_H_SCRIPT 14
#define SCE_H_ASP 15
#define SCE_H_ASPAT 16
// Embedded Javascript
#define SCE_H_CDATA 17
#define SCE_H_QUESTION 18
#define SCE_H_VALUE 19
#define SCE_HJ_START 40
#define SCE_HJ_DEFAULT 41
#define SCE_HJ_COMMENT 42
@@ -87,7 +89,6 @@
#define SCE_HJ_SINGLESTRING 49
#define SCE_HJ_SYMBOLS 50
#define SCE_HJ_STRINGEOL 51
// ASP Javascript
#define SCE_HJA_START 55
#define SCE_HJA_DEFAULT 56
#define SCE_HJA_COMMENT 57
@@ -100,7 +101,6 @@
#define SCE_HJA_SINGLESTRING 64
#define SCE_HJA_SYMBOLS 65
#define SCE_HJA_STRINGEOL 66
// Embedded VBScript
#define SCE_HB_START 70
#define SCE_HB_DEFAULT 71
#define SCE_HB_COMMENTLINE 72
@@ -109,7 +109,6 @@
#define SCE_HB_STRING 75
#define SCE_HB_IDENTIFIER 76
#define SCE_HB_STRINGEOL 77
// ASP VBScript
#define SCE_HBA_START 80
#define SCE_HBA_DEFAULT 81
#define SCE_HBA_COMMENTLINE 82
@@ -118,7 +117,6 @@
#define SCE_HBA_STRING 85
#define SCE_HBA_IDENTIFIER 86
#define SCE_HBA_STRINGEOL 87
// Embedded Python
#define SCE_HP_START 90
#define SCE_HP_DEFAULT 91
#define SCE_HP_COMMENTLINE 92
@@ -132,7 +130,6 @@
#define SCE_HP_DEFNAME 100
#define SCE_HP_OPERATOR 101
#define SCE_HP_IDENTIFIER 102
// ASP Python
#define SCE_HPA_START 105
#define SCE_HPA_DEFAULT 106
#define SCE_HPA_COMMENTLINE 107
@@ -146,8 +143,15 @@
#define SCE_HPA_DEFNAME 115
#define SCE_HPA_OPERATOR 116
#define SCE_HPA_IDENTIFIER 117
// Lexical states for SCLEX_PERL
#define SCE_HPHP_DEFAULT 118
#define SCE_HPHP_HSTRING 119
#define SCE_HPHP_SIMPLESTRING 120
#define SCE_HPHP_WORD 121
#define SCE_HPHP_NUMBER 122
#define SCE_HPHP_VARIABLE 123
#define SCE_HPHP_COMMENT 124
#define SCE_HPHP_COMMENTLINE 125
#define SCE_HPHP_STRINGEOL 126
#define SCE_PL_DEFAULT 0
#define SCE_PL_HERE 1
#define SCE_PL_COMMENTLINE 2
@@ -170,12 +174,31 @@
#define SCE_PL_LONGQUOTE 19
#define SCE_PL_BACKTICKS 20
#define SCE_PL_DATASECTION 21
// Lexical states for SCLEX_LATEX
#define SCE_L_DEFAULT 0
#define SCE_L_COMMAND 1
#define SCE_L_TAG 2
#define SCE_L_MATH 3
#define SCE_L_COMMENT 4
#define SCE_LUA_DEFAULT 0
#define SCE_LUA_COMMENT 1
#define SCE_LUA_COMMENTLINE 2
#define SCE_LUA_COMMENTDOC 3
#define SCE_LUA_NUMBER 4
#define SCE_LUA_WORD 5
#define SCE_LUA_STRING 6
#define SCE_LUA_CHARACTER 7
#define SCE_LUA_LITERALSTRING 8
#define SCE_LUA_PREPROCESSOR 9
#define SCE_LUA_OPERATOR 10
#define SCE_LUA_IDENTIFIER 11
#define SCE_LUA_STRINGEOL 12
#define SCE_ERR_DEFAULT 0
#define SCE_ERR_PYTHON 1
#define SCE_ERR_GCC 2
#define SCE_ERR_MS 3
#define SCE_ERR_CMD 4
#define SCE_ERR_BORLAND 5
#define SCE_ERR_PERL 6
//--Autogenerated -- end of section automatically generated from Scintilla.iface
#endif

View File

@@ -3,119 +3,74 @@
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
// Most of this file is automatically generated from the Scintilla.iface interface definition
// file which contains any comments about the definitions. HFacer.py does the generation.
#ifndef SCINTILLA_H
#define SCINTILLA_H
// Compile-time configuration options
#define MACRO_SUPPORT 1 // Comment out to remove macro hooks
#if PLAT_GTK
#include <gdk/gdk.h>
#include <gtk/gtkvbox.h>
#ifdef __cplusplus
extern "C" {
#if PLAT_WIN
#ifdef STATIC_BUILD
void Scintilla_RegisterClasses(HINSTANCE hInstance);
#endif
#endif
#define SCINTILLA(obj) GTK_CHECK_CAST (obj, scintilla_get_type (), ScintillaObject)
#define SCINTILLA_CLASS(klass) GTK_CHECK_CLASS_CAS T (klass, scintilla_get_type (), ScintillaClass)
#define IS_SCINTILLA(obj) GTK_CHECK_TYPE (obj, scintilla_get_type ())
typedef long (*SciFnDirect)(long ptr, unsigned int iMessage, unsigned long wParam, long lParam);
typedef struct _ScintillaObject ScintillaObject;
typedef struct _ScintillaClass ScintillaClass;
struct _ScintillaObject
{
GtkFixed vbox;
void *pscin;
};
struct _ScintillaClass
{
GtkFixedClass parent_class;
void (* command) (ScintillaObject *ttt);
void (* notify) (ScintillaObject *ttt);
};
guint scintilla_get_type (void);
GtkWidget* scintilla_new (void);
void scintilla_set_id (ScintillaObject *sci,int id);
long scintilla_send_message (ScintillaObject *sci,int iMessage,int wParam,int lParam);
#include "WinDefs.h"
#ifdef __cplusplus
}
#endif
#endif
#if PLAT_WX
#include "WinDefs.h"
#endif
// Both GTK and Windows
#define INVALID_POSITION -1
// Define start of Scintilla messages to be greater than all edit (EM_*) messages
// as many EM_ messages can be used.
//++Autogenerated -- start of section automatically generated from Scintilla.iface
#define INVALID_POSITION -1
#define SCI_START 2000
#define SCI_OPTIONAL_START 3000
#define SCI_LEXER_START 4000
#define SCI_ADDTEXT SCI_START + 1
#define SCI_ADDSTYLEDTEXT SCI_START + 2
#define SCI_INSERTTEXT SCI_START + 3
#define SCI_CLEARALL SCI_START + 4
#define SCI_GETLENGTH SCI_START + 6
#define SCI_GETCHARAT SCI_START + 7
#define SCI_GETCURRENTPOS SCI_START + 8
#define SCI_GETANCHOR SCI_START + 9
#define SCI_GETSTYLEAT SCI_START + 10
#define SCI_REDO SCI_START + 11
#define SCI_SETUNDOCOLLECTION SCI_START + 12
#define SCI_SELECTALL SCI_START + 13
#define SCI_SETSAVEPOINT SCI_START + 14
#define SCI_GETSTYLEDTEXT SCI_START + 15
#define SCI_CANREDO SCI_START + 16
#define SCI_MARKERLINEFROMHANDLE SCI_START + 17
#define SCI_MARKERDELETEHANDLE SCI_START + 18
#define SC_UNDOCOLLECT_NONE 0
#define SC_UNDOCOLLECT_AUTOSTART 1
#define SCI_GETVIEWWS SCI_START + 20
#define SCI_SETVIEWWS SCI_START + 21
#define SCI_GOTOLINE SCI_START + 24
#define SCI_GOTOPOS SCI_START + 25
#define SCI_SETANCHOR SCI_START + 26
#define SCI_GETCURLINE SCI_START + 27
#define SCI_GETENDSTYLED SCI_START + 28
#define SCI_CONVERTEOLS SCI_START + 29
#define SCI_GETEOLMODE SCI_START + 30
#define SCI_SETEOLMODE SCI_START + 31
#define SCI_ADDTEXT 2001
#define SCI_ADDSTYLEDTEXT 2002
#define SCI_INSERTTEXT 2003
#define SCI_CLEARALL 2004
#define SCI_CLEARDOCUMENTSTYLE 2005
#define SCI_GETLENGTH 2006
#define SCI_GETCHARAT 2007
#define SCI_GETCURRENTPOS 2008
#define SCI_GETANCHOR 2009
#define SCI_GETSTYLEAT 2010
#define SCI_REDO 2011
#define SCI_SETUNDOCOLLECTION 2012
#define SCI_SELECTALL 2013
#define SCI_SETSAVEPOINT 2014
#define SCI_GETSTYLEDTEXT 2015
#define SCI_CANREDO 2016
#define SCI_MARKERLINEFROMHANDLE 2017
#define SCI_MARKERDELETEHANDLE 2018
#define SCI_GETUNDOCOLLECTION 2019
#define SCWS_INVISIBLE 0
#define SCWS_VISIBLEALWAYS 1
#define SCWS_VISIBLEAFTERINDENT 2
#define SCI_GETVIEWWS 2020
#define SCI_SETVIEWWS 2021
#define SCI_POSITIONFROMPOINT 2022
#define SCI_GOTOLINE 2024
#define SCI_GOTOPOS 2025
#define SCI_SETANCHOR 2026
#define SCI_GETCURLINE 2027
#define SCI_GETENDSTYLED 2028
#define SCI_CONVERTEOLS 2029
#define SC_EOL_CRLF 0
#define SC_EOL_CR 1
#define SC_EOL_LF 2
#define SCI_STARTSTYLING SCI_START + 32
#define SCI_SETSTYLING SCI_START + 33
// This is the same value as CP_UTF8 in Windows
#define SCI_GETEOLMODE 2030
#define SCI_SETEOLMODE 2031
#define SCI_STARTSTYLING 2032
#define SCI_SETSTYLING 2033
#define SCI_GETBUFFEREDDRAW 2034
#define SCI_SETBUFFEREDDRAW 2035
#define SCI_SETTABWIDTH 2036
#define SCI_GETTABWIDTH 2121
#define SC_CP_UTF8 65001
#define SCI_SETBUFFEREDDRAW SCI_START + 35
#define SCI_SETTABWIDTH SCI_START + 36
#define SCI_SETCODEPAGE SCI_START + 37
#define SCI_SETUSEPALETTE SCI_START + 39
#define SCI_SETCODEPAGE 2037
#define SCI_SETUSEPALETTE 2039
#define MARKER_MAX 31
#define SC_MARK_CIRCLE 0
#define SC_MARK_ROUNDRECT 1
#define SC_MARK_ARROW 2
@@ -125,255 +80,296 @@ extern "C" {
#define SC_MARK_ARROWDOWN 6
#define SC_MARK_MINUS 7
#define SC_MARK_PLUS 8
#define SCI_MARKERDEFINE SCI_START + 40
#define SCI_MARKERSETFORE SCI_START + 41
#define SCI_MARKERSETBACK SCI_START + 42
#define SCI_MARKERADD SCI_START + 43
#define SCI_MARKERDELETE SCI_START + 44
#define SCI_MARKERDELETEALL SCI_START + 45
#define SCI_MARKERGET SCI_START + 46
#define SCI_MARKERNEXT SCI_START + 47
#define SCI_MARKERPREVIOUS SCI_START + 48
#define SC_MARKNUM_FOLDER 30
#define SC_MARKNUM_FOLDEROPEN 31
#define SC_MASK_FOLDERS ((1<<SC_MARKNUM_FOLDER) | (1<<SC_MARKNUM_FOLDEROPEN))
#define SCI_MARKERDEFINE 2040
#define SCI_MARKERSETFORE 2041
#define SCI_MARKERSETBACK 2042
#define SCI_MARKERADD 2043
#define SCI_MARKERDELETE 2044
#define SCI_MARKERDELETEALL 2045
#define SCI_MARKERGET 2046
#define SCI_MARKERNEXT 2047
#define SCI_MARKERPREVIOUS 2048
#define SC_MARGIN_SYMBOL 0
#define SC_MARGIN_NUMBER 1
#define SCI_SETMARGINTYPEN SCI_START + 240
#define SCI_GETMARGINTYPEN SCI_START + 241
#define SCI_SETMARGINWIDTHN SCI_START + 242
#define SCI_GETMARGINWIDTHN SCI_START + 243
#define SCI_SETMARGINMASKN SCI_START + 244
#define SCI_GETMARGINMASKN SCI_START + 245
#define SCI_SETMARGINSENSITIVEN SCI_START + 246
#define SCI_GETMARGINSENSITIVEN SCI_START + 247
#define SCI_SETMARGINTYPEN 2240
#define SCI_GETMARGINTYPEN 2241
#define SCI_SETMARGINWIDTHN 2242
#define SCI_GETMARGINWIDTHN 2243
#define SCI_SETMARGINMASKN 2244
#define SCI_GETMARGINMASKN 2245
#define SCI_SETMARGINSENSITIVEN 2246
#define SCI_GETMARGINSENSITIVEN 2247
#define STYLE_DEFAULT 32
#define STYLE_LINENUMBER 33
#define STYLE_BRACELIGHT 34
#define STYLE_BRACEBAD 35
#define STYLE_CONTROLCHAR 36
#define STYLE_INDENTGUIDE 37
#define STYLE_MAX 127
#define SC_CHARSET_ANSI 0
#define SC_CHARSET_DEFAULT 1
#define SC_CHARSET_BALTIC 186
#define SC_CHARSET_CHINESEBIG5 136
#define SC_CHARSET_EASTEUROPE 238
#define SC_CHARSET_GB2312 134
#define SC_CHARSET_GREEK 161
#define SC_CHARSET_HANGUL 129
#define SC_CHARSET_MAC 77
#define SC_CHARSET_OEM 255
#define SC_CHARSET_RUSSIAN 204
#define SCI_STYLECLEARALL SCI_START + 50
#define SCI_STYLESETFORE SCI_START + 51
#define SCI_STYLESETBACK SCI_START + 52
#define SCI_STYLESETBOLD SCI_START + 53
#define SCI_STYLESETITALIC SCI_START + 54
#define SCI_STYLESETSIZE SCI_START + 55
#define SCI_STYLESETFONT SCI_START + 56
#define SCI_STYLESETEOLFILLED SCI_START + 57
#define SCI_STYLERESETDEFAULT SCI_START + 58
#define SCI_STYLESETUNDERLINE SCI_START + 59
#define SCI_STYLESETCHARACTERSET SCI_START + 66
#define SCI_SETSELFORE SCI_START + 67
#define SCI_SETSELBACK SCI_START + 68
#define SCI_SETCARETFORE SCI_START + 69
#define SCI_ASSIGNCMDKEY SCI_START + 70
#define SCI_CLEARCMDKEY SCI_START + 71
#define SCI_CLEARALLCMDKEYS SCI_START + 72
#define SCI_SETSTYLINGEX SCI_START + 73
#define SCI_GETCARETPERIOD SCI_START + 75
#define SCI_SETCARETPERIOD SCI_START + 76
#define SCI_SETWORDCHARS SCI_START + 77
#define SCI_BEGINUNDOACTION SCI_START + 78
#define SCI_ENDUNDOACTION SCI_START + 79
#define SC_CHARSET_SHIFTJIS 128
#define SC_CHARSET_SYMBOL 2
#define SC_CHARSET_TURKISH 162
#define SC_CHARSET_JOHAB 130
#define SC_CHARSET_HEBREW 177
#define SC_CHARSET_ARABIC 178
#define SC_CHARSET_VIETNAMESE 163
#define SC_CHARSET_THAI 222
#define SCI_STYLECLEARALL 2050
#define SCI_STYLESETFORE 2051
#define SCI_STYLESETBACK 2052
#define SCI_STYLESETBOLD 2053
#define SCI_STYLESETITALIC 2054
#define SCI_STYLESETSIZE 2055
#define SCI_STYLESETFONT 2056
#define SCI_STYLESETEOLFILLED 2057
#define SCI_STYLERESETDEFAULT 2058
#define SCI_STYLESETUNDERLINE 2059
#define SCI_STYLESETCHARACTERSET 2066
#define SCI_SETSELFORE 2067
#define SCI_SETSELBACK 2068
#define SCI_SETCARETFORE 2069
#define SCI_ASSIGNCMDKEY 2070
#define SCI_CLEARCMDKEY 2071
#define SCI_CLEARALLCMDKEYS 2072
#define SCI_SETSTYLINGEX 2073
#define SCI_STYLESETVISIBLE 2074
#define SCI_GETCARETPERIOD 2075
#define SCI_SETCARETPERIOD 2076
#define SCI_SETWORDCHARS 2077
#define SCI_BEGINUNDOACTION 2078
#define SCI_ENDUNDOACTION 2079
#define INDIC_MAX 7
#define INDIC_PLAIN 0
#define INDIC_SQUIGGLE 1
#define INDIC_TT 2
#define INDIC_DIAGONAL 3
#define INDIC_STRIKE 4
#define INDIC0_MASK 32
#define INDIC1_MASK 64
#define INDIC2_MASK 128
#define INDICS_MASK (INDIC0_MASK | INDIC1_MASK | INDIC2_MASK)
#define SCI_INDICSETSTYLE SCI_START + 80
#define SCI_INDICGETSTYLE SCI_START + 81
#define SCI_INDICSETFORE SCI_START + 82
#define SCI_INDICGETFORE SCI_START + 83
#define SCI_SETSTYLEBITS SCI_START + 90
#define SCI_GETSTYLEBITS SCI_START + 91
#define SCI_SETLINESTATE SCI_START + 92
#define SCI_GETLINESTATE SCI_START + 93
#define SCI_GETMAXLINESTATE SCI_START + 94
#define SCI_AUTOCSHOW SCI_START + 100
#define SCI_AUTOCCANCEL SCI_START + 101
#define SCI_AUTOCACTIVE SCI_START + 102
#define SCI_AUTOCPOSSTART SCI_START + 103
#define SCI_AUTOCCOMPLETE SCI_START + 104
#define SCI_AUTOCSTOPS SCI_START + 105
#define SCI_AUTOCSETSEPARATOR SCI_START + 106
#define SCI_AUTOCGETSEPARATOR SCI_START + 107
#define SCI_AUTOCSELECT SCI_START + 108
#define SCI_GETTABWIDTH SCI_START + 121
#define SCI_SETINDENT SCI_START + 122
#define SCI_GETINDENT SCI_START + 123
#define SCI_SETUSETABS SCI_START + 124
#define SCI_GETUSETABS SCI_START + 125
#define SCI_SETLINEINDENTATION SCI_START + 126
#define SCI_GETLINEINDENTATION SCI_START + 127
#define SCI_GETLINEINDENTPOSITION SCI_START + 128
#define SCI_SETHSCROLLBAR SCI_START + 130
#define SCI_GETHSCROLLBAR SCI_START + 131
#define SCI_CALLTIPSHOW SCI_START + 200
#define SCI_CALLTIPCANCEL SCI_START + 201
#define SCI_CALLTIPACTIVE SCI_START + 202
#define SCI_CALLTIPPOSSTART SCI_START + 203
#define SCI_CALLTIPSETHLT SCI_START + 204
#define SCI_CALLTIPSETBACK SCI_START + 205
#define INDICS_MASK INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
#define SCI_INDICSETSTYLE 2080
#define SCI_INDICGETSTYLE 2081
#define SCI_INDICSETFORE 2082
#define SCI_INDICGETFORE 2083
#define SCI_SETSTYLEBITS 2090
#define SCI_GETSTYLEBITS 2091
#define SCI_SETLINESTATE 2092
#define SCI_GETLINESTATE 2093
#define SCI_GETMAXLINESTATE 2094
#define SCI_AUTOCSHOW 2100
#define SCI_AUTOCCANCEL 2101
#define SCI_AUTOCACTIVE 2102
#define SCI_AUTOCPOSSTART 2103
#define SCI_AUTOCCOMPLETE 2104
#define SCI_AUTOCSTOPS 2105
#define SCI_AUTOCSETSEPARATOR 2106
#define SCI_AUTOCGETSEPARATOR 2107
#define SCI_AUTOCSELECT 2108
#define SCI_AUTOCSETCANCELATSTART 2110
#define SCI_AUTOCGETCANCELATSTART 2111
#define SCI_AUTOCSETFILLUPS 2112
#define SCI_AUTOCSETCHOOSESINGLE 2113
#define SCI_AUTOCGETCHOOSESINGLE 2114
#define SCI_AUTOCSETIGNORECASE 2115
#define SCI_AUTOCGETIGNORECASE 2116
#define SCI_SETINDENT 2122
#define SCI_GETINDENT 2123
#define SCI_SETUSETABS 2124
#define SCI_GETUSETABS 2125
#define SCI_SETLINEINDENTATION 2126
#define SCI_GETLINEINDENTATION 2127
#define SCI_GETLINEINDENTPOSITION 2128
#define SCI_GETCOLUMN 2129
#define SCI_SETHSCROLLBAR 2130
#define SCI_GETHSCROLLBAR 2131
#define SCI_SETINDENTATIONGUIDES 2132
#define SCI_GETINDENTATIONGUIDES 2133
#define SCI_SETHIGHLIGHTGUIDE 2134
#define SCI_GETHIGHLIGHTGUIDE 2135
#define SCI_GETLINEENDPOSITION 2136
#define SCI_GETCODEPAGE 2137
#define SCI_GETCARETFORE 2138
#define SCI_GETUSEPALETTE 2139
#define SCI_GETREADONLY 2140
#define SCI_SETCURRENTPOS 2141
#define SCI_SETSELECTIONSTART 2142
#define SCI_GETSELECTIONSTART 2143
#define SCI_SETSELECTIONEND 2144
#define SCI_GETSELECTIONEND 2145
#define SCI_SETPRINTMAGNIFICATION 2146
#define SCI_GETPRINTMAGNIFICATION 2147
#define SC_PRINT_NORMAL 0
#define SC_PRINT_INVERTLIGHT 1
#define SC_PRINT_BLACKONWHITE 2
#define SCI_SETPRINTCOLOURMODE 2148
#define SCI_GETPRINTCOLOURMODE 2149
#define SCFIND_DOWN 1
#define SCFIND_WHOLEWORD 2
#define SCFIND_MATCHCASE 4
#define SCFIND_WORDSTART 0x00100000
#define SCFIND_REGEXP 0x00200000
#define SCI_FINDTEXT 2150
#define SCI_FORMATRANGE 2151
#define SCI_GETFIRSTVISIBLELINE 2152
#define SCI_GETLINE 2153
#define SCI_GETLINECOUNT 2154
#define SCI_SETMARGINLEFT 2155
#define SCI_GETMARGINLEFT 2156
#define SCI_SETMARGINRIGHT 2157
#define SCI_GETMARGINRIGHT 2158
#define SCI_GETMODIFY 2159
#define SCI_SETSEL 2160
#define SCI_GETSELTEXT 2161
#define SCI_GETTEXTRANGE 2162
#define SCI_HIDESELECTION 2163
#define SCI_POINTXFROMPOSITION 2164
#define SCI_POINTYFROMPOSITION 2165
#define SCI_LINEFROMPOSITION 2166
#define SCI_POSITIONFROMLINE 2167
#define SCI_LINESCROLL 2168
#define SCI_SCROLLCARET 2169
#define SCI_REPLACESEL 2170
#define SCI_SETREADONLY 2171
#define SCI_NULL 2172
#define SCI_CANPASTE 2173
#define SCI_CANUNDO 2174
#define SCI_EMPTYUNDOBUFFER 2175
#define SCI_UNDO 2176
#define SCI_CUT 2177
#define SCI_COPY 2178
#define SCI_PASTE 2179
#define SCI_CLEAR 2180
#define SCI_SETTEXT 2181
#define SCI_GETTEXT 2182
#define SCI_GETTEXTLENGTH 2183
#define SCI_GETDIRECTFUNCTION 2184
#define SCI_GETDIRECTPOINTER 2185
#define SCI_SETOVERTYPE 2186
#define SCI_GETOVERTYPE 2187
#define SCI_CALLTIPSHOW 2200
#define SCI_CALLTIPCANCEL 2201
#define SCI_CALLTIPACTIVE 2202
#define SCI_CALLTIPPOSSTART 2203
#define SCI_CALLTIPSETHLT 2204
#define SCI_CALLTIPSETBACK 2205
#define SCI_VISIBLEFROMDOCLINE 2220
#define SCI_DOCLINEFROMVISIBLE 2221
#define SC_FOLDLEVELBASE 0x400
#define SC_FOLDLEVELWHITEFLAG 0x1000
#define SC_FOLDLEVELHEADERFLAG 0x2000
#define SC_FOLDLEVELNUMBERMASK 0x0FFF
#define SCI_VISIBLEFROMDOCLINE SCI_START + 220
#define SCI_DOCLINEFROMVISIBLE SCI_START + 221
#define SCI_SETFOLDLEVEL SCI_START + 222
#define SCI_GETFOLDLEVEL SCI_START + 223
#define SCI_GETLASTCHILD SCI_START + 224
#define SCI_GETFOLDPARENT SCI_START + 225
#define SCI_SHOWLINES SCI_START + 226
#define SCI_HIDELINES SCI_START + 227
#define SCI_GETLINEVISIBLE SCI_START + 228
#define SCI_SETFOLDEXPANDED SCI_START + 229
#define SCI_GETFOLDEXPANDED SCI_START + 230
#define SCI_TOGGLEFOLD SCI_START + 231
#define SCI_ENSUREVISIBLE SCI_START + 232
#define SCI_SETFOLDFLAGS SCI_START + 233
// Key messages
#define SCI_LINEDOWN SCI_START + 300
#define SCI_LINEDOWNEXTEND SCI_START + 301
#define SCI_LINEUP SCI_START + 302
#define SCI_LINEUPEXTEND SCI_START + 303
#define SCI_CHARLEFT SCI_START + 304
#define SCI_CHARLEFTEXTEND SCI_START + 305
#define SCI_CHARRIGHT SCI_START + 306
#define SCI_CHARRIGHTEXTEND SCI_START + 307
#define SCI_WORDLEFT SCI_START + 308
#define SCI_WORDLEFTEXTEND SCI_START + 309
#define SCI_WORDRIGHT SCI_START + 310
#define SCI_WORDRIGHTEXTEND SCI_START + 311
#define SCI_HOME SCI_START + 312
#define SCI_HOMEEXTEND SCI_START + 313
#define SCI_LINEEND SCI_START + 314
#define SCI_LINEENDEXTEND SCI_START + 315
#define SCI_DOCUMENTSTART SCI_START + 316
#define SCI_DOCUMENTSTARTEXTEND SCI_START + 317
#define SCI_DOCUMENTEND SCI_START + 318
#define SCI_DOCUMENTENDEXTEND SCI_START + 319
#define SCI_PAGEUP SCI_START + 320
#define SCI_PAGEUPEXTEND SCI_START + 321
#define SCI_PAGEDOWN SCI_START + 322
#define SCI_PAGEDOWNEXTEND SCI_START + 323
#define SCI_EDITTOGGLEOVERTYPE SCI_START + 324
#define SCI_CANCEL SCI_START + 325
#define SCI_DELETEBACK SCI_START + 326
#define SCI_TAB SCI_START + 327
#define SCI_BACKTAB SCI_START + 328
#define SCI_NEWLINE SCI_START + 329
#define SCI_FORMFEED SCI_START + 330
#define SCI_VCHOME SCI_START + 331
#define SCI_VCHOMEEXTEND SCI_START + 332
#define SCI_ZOOMIN SCI_START + 333
#define SCI_ZOOMOUT SCI_START + 334
#define SCI_DELWORDLEFT SCI_START + 335
#define SCI_DELWORDRIGHT SCI_START + 336
#define SCI_LINECUT SCI_START + 337
#define SCI_LINEDELETE SCI_START + 338
#define SCI_LINETRANSPOSE SCI_START + 339
#define SCI_LOWERCASE SCI_START + 340
#define SCI_UPPERCASE SCI_START + 341
#define SCI_LINESCROLLDOWN SCI_START + 342
#define SCI_LINESCROLLUP SCI_START + 343
#define SCI_LINELENGTH SCI_START + 350
#define SCI_BRACEHIGHLIGHT SCI_START + 351
#define SCI_BRACEBADLIGHT SCI_START + 352
#define SCI_BRACEMATCH SCI_START + 353
#define SCI_GETVIEWEOL SCI_START + 355
#define SCI_SETVIEWEOL SCI_START + 356
#define SCI_GETDOCPOINTER SCI_START + 357
#define SCI_SETDOCPOINTER SCI_START + 358
#define SCI_SETMODEVENTMASK SCI_START + 359
#define SCI_SETFOLDLEVEL 2222
#define SCI_GETFOLDLEVEL 2223
#define SCI_GETLASTCHILD 2224
#define SCI_GETFOLDPARENT 2225
#define SCI_SHOWLINES 2226
#define SCI_HIDELINES 2227
#define SCI_GETLINEVISIBLE 2228
#define SCI_SETFOLDEXPANDED 2229
#define SCI_GETFOLDEXPANDED 2230
#define SCI_TOGGLEFOLD 2231
#define SCI_ENSUREVISIBLE 2232
#define SCI_SETFOLDFLAGS 2233
#define SCI_LINEDOWN 2300
#define SCI_LINEDOWNEXTEND 2301
#define SCI_LINEUP 2302
#define SCI_LINEUPEXTEND 2303
#define SCI_CHARLEFT 2304
#define SCI_CHARLEFTEXTEND 2305
#define SCI_CHARRIGHT 2306
#define SCI_CHARRIGHTEXTEND 2307
#define SCI_WORDLEFT 2308
#define SCI_WORDLEFTEXTEND 2309
#define SCI_WORDRIGHT 2310
#define SCI_WORDRIGHTEXTEND 2311
#define SCI_HOME 2312
#define SCI_HOMEEXTEND 2313
#define SCI_LINEEND 2314
#define SCI_LINEENDEXTEND 2315
#define SCI_DOCUMENTSTART 2316
#define SCI_DOCUMENTSTARTEXTEND 2317
#define SCI_DOCUMENTEND 2318
#define SCI_DOCUMENTENDEXTEND 2319
#define SCI_PAGEUP 2320
#define SCI_PAGEUPEXTEND 2321
#define SCI_PAGEDOWN 2322
#define SCI_PAGEDOWNEXTEND 2323
#define SCI_EDITTOGGLEOVERTYPE 2324
#define SCI_CANCEL 2325
#define SCI_DELETEBACK 2326
#define SCI_TAB 2327
#define SCI_BACKTAB 2328
#define SCI_NEWLINE 2329
#define SCI_FORMFEED 2330
#define SCI_VCHOME 2331
#define SCI_VCHOMEEXTEND 2332
#define SCI_ZOOMIN 2333
#define SCI_ZOOMOUT 2334
#define SCI_DELWORDLEFT 2335
#define SCI_DELWORDRIGHT 2336
#define SCI_LINECUT 2337
#define SCI_LINEDELETE 2338
#define SCI_LINETRANSPOSE 2339
#define SCI_LOWERCASE 2340
#define SCI_UPPERCASE 2341
#define SCI_LINESCROLLDOWN 2342
#define SCI_LINESCROLLUP 2343
#define SCI_LINELENGTH 2350
#define SCI_BRACEHIGHLIGHT 2351
#define SCI_BRACEBADLIGHT 2352
#define SCI_BRACEMATCH 2353
#define SCI_GETVIEWEOL 2355
#define SCI_SETVIEWEOL 2356
#define SCI_GETDOCPOINTER 2357
#define SCI_SETDOCPOINTER 2358
#define SCI_SETMODEVENTMASK 2359
#define EDGE_NONE 0
#define EDGE_LINE 1
#define EDGE_BACKGROUND 2
#define SCI_GETEDGECOLUMN SCI_START + 360
#define SCI_SETEDGECOLUMN SCI_START + 361
#define SCI_GETEDGEMODE SCI_START + 362
#define SCI_SETEDGEMODE SCI_START + 363
#define SCI_GETEDGECOLOUR SCI_START + 364
#define SCI_SETEDGECOLOUR SCI_START + 365
#define SCI_SEARCHANCHOR SCI_START + 366
#define SCI_SEARCHNEXT SCI_START + 367
#define SCI_SEARCHPREV SCI_START + 368
#define CARET_SLOP 0x01 // Show caret within N lines of edge when it's scrolled to view
#define CARET_CENTER 0x02 // Center caret on screen when it's scrolled to view
#define CARET_STRICT 0x04 // OR this with CARET_CENTER to reposition even when visible, or
// OR this with CARET_SLOP to reposition whenever outside slop border
#define SCI_SETCARETPOLICY SCI_START + 369
#define SCI_LINESONSCREEN SCI_START + 370
#define SCI_USEPOPUP SCI_START + 371
#define SCI_SELECTIONISRECTANGLE SCI_START + 372
#define SCI_SETZOOM SCI_START + 373
#define SCI_GETZOOM SCI_START + 374
#define SCI_ADDREFDOC SCI_START + 375
#define SCI_RELEASEDOC SCI_START + 376
// GTK+ Specific
#define SCI_GRABFOCUS SCI_START + 400
// Optional module for macro recording
#ifdef MACRO_SUPPORT
typedef void (tMacroRecorder)(UINT iMessage, WPARAM wParam, LPARAM lParam,
void *userData);
#define SCI_STARTRECORD SCI_OPTIONAL_START + 1
#define SCI_STOPRECORD SCI_OPTIONAL_START + 2
#endif
#define SCI_SETLEXER SCI_LEXER_START + 1
#define SCI_GETLEXER SCI_LEXER_START + 2
#define SCI_COLOURISE SCI_LEXER_START + 3
#define SCI_SETPROPERTY SCI_LEXER_START + 4
#define SCI_SETKEYWORDS SCI_LEXER_START + 5
// Notifications
// Type of modification and the action which caused the modification
// These are defined as a bit mask to make it easy to specify which notifications are wanted.
// One bit is set from each of SC_MOD_* and SC_PERFORMED_*.
#define SCI_GETEDGECOLUMN 2360
#define SCI_SETEDGECOLUMN 2361
#define SCI_GETEDGEMODE 2362
#define SCI_SETEDGEMODE 2363
#define SCI_GETEDGECOLOUR 2364
#define SCI_SETEDGECOLOUR 2365
#define SCI_SEARCHANCHOR 2366
#define SCI_SEARCHNEXT 2367
#define SCI_SEARCHPREV 2368
#define CARET_SLOP 0x01
#define CARET_CENTER 0x02
#define CARET_STRICT 0x04
#define SCI_SETCARETPOLICY 2369
#define SCI_LINESONSCREEN 2370
#define SCI_USEPOPUP 2371
#define SCI_SELECTIONISRECTANGLE 2372
#define SCI_SETZOOM 2373
#define SCI_GETZOOM 2374
#define SCI_CREATEDOCUMENT 2375
#define SCI_ADDREFDOCUMENT 2376
#define SCI_RELEASEDOCUMENT 2377
#define SCI_GETMODEVENTMASK 2378
#define SCI_GRABFOCUS 2400
#define SCI_STARTRECORD 3001
#define SCI_STOPRECORD 3002
#define SCI_SETLEXER 4001
#define SCI_GETLEXER 4002
#define SCI_COLOURISE 4003
#define SCI_SETPROPERTY 4004
#define SCI_SETKEYWORDS 4005
#define SC_MOD_INSERTTEXT 0x1
#define SC_MOD_DELETETEXT 0x2
#define SC_MOD_CHANGESTYLE 0x4
@@ -385,11 +381,98 @@ typedef void (tMacroRecorder)(UINT iMessage, WPARAM wParam, LPARAM lParam,
#define SC_MOD_CHANGEMARKER 0x200
#define SC_MOD_BEFOREINSERT 0x400
#define SC_MOD_BEFOREDELETE 0x800
#define SC_MODEVENTMASKALL 0xF77
#define SCEN_CHANGE 768
#define SCEN_SETFOCUS 512
#define SCEN_KILLFOCUS 256
#define SCK_DOWN 300
#define SCK_UP 301
#define SCK_LEFT 302
#define SCK_RIGHT 303
#define SCK_HOME 304
#define SCK_END 305
#define SCK_PRIOR 306
#define SCK_NEXT 307
#define SCK_DELETE 308
#define SCK_INSERT 309
#define SCK_ESCAPE 7
#define SCK_BACK 8
#define SCK_TAB 9
#define SCK_RETURN 13
#define SCK_ADD 310
#define SCK_SUBTRACT 311
#define SCK_DIVIDE 312
#define SCMOD_SHIFT 1
#define SCMOD_CTRL 2
#define SCMOD_ALT 4
#define SCN_STYLENEEDED 2000
#define SCN_CHARADDED 2001
#define SCN_SAVEPOINTREACHED 2002
#define SCN_SAVEPOINTLEFT 2003
#define SCN_MODIFYATTEMPTRO 2004
#define SCN_KEY 2005
#define SCN_DOUBLECLICK 2006
#define SCN_UPDATEUI 2007
#define SCN_CHECKBRACE 2007
#define SCN_MODIFIED 2008
#define SCN_MACRORECORD 2009
#define SCN_MARGINCLICK 2010
#define SCN_NEEDSHOWN 2011
#define SCN_POSCHANGED 2012
//--Autogenerated -- end of section automatically generated from Scintilla.iface
// Optional module for macro recording
#ifdef MACRO_SUPPORT
typedef void (tMacroRecorder)(unsigned int iMessage, unsigned long wParam,
long lParam, void *userData);
#endif
// These structures are defined to be exactly the same shape as the Win32
// CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs.
// So older code that treats Scintilla as a RichEdit will work.
struct CharacterRange {
long cpMin;
long cpMax;
};
struct TextRange {
CharacterRange chrg;
char *lpstrText;
};
struct TextToFind {
CharacterRange chrg;
char *lpstrText;
CharacterRange chrgText;
};
#ifdef PLATFORM_H
// This structure is used in printing and requires some of the graphics types
// from Platform.h. Not needed by most client code.
struct RangeToFormat {
SurfaceID hdc;
SurfaceID hdcTarget;
PRectangle rc;
PRectangle rcPage;
CharacterRange chrg;
};
#endif
struct NotifyHeader {
// hwndFrom is really an environment specifc window handle or pointer
// but most clients of Scintilla.h do not have this type visible.
//WindowID hwndFrom;
void *hwndFrom;
unsigned int idFrom;
unsigned int code;
};
struct SCNotification {
NMHDR nmhdr;
NotifyHeader nmhdr;
int position; // SCN_STYLENEEDED, SCN_MODIFIED
int ch; // SCN_CHARADDED, SCN_KEY
int modifiers; // SCN_KEY
@@ -408,28 +491,7 @@ struct SCNotification {
int margin; // SCN_MARGINCLICK
};
#define SCN_STYLENEEDED 2000
#define SCN_CHARADDED 2001
#define SCN_SAVEPOINTREACHED 2002
#define SCN_SAVEPOINTLEFT 2003
#define SCN_MODIFYATTEMPTRO 2004
// GTK+ Specific to work around focus and accelerator problems:
#define SCN_KEY 2005
#define SCN_DOUBLECLICK 2006
#define SCN_UPDATEUI 2007
// The old name for SCN_UPDATEUI:
#define SCN_CHECKBRACE 2007
#define SCN_MODIFIED 2008
// Optional module for macro recording
#ifdef MACRO_SUPPORT
#define SCN_MACRORECORD 2009
#endif
#define SCN_MARGINCLICK 2010
#define SCN_NEEDSHOWN 2011
#ifdef STATIC_BUILD
void Scintilla_RegisterClasses(HINSTANCE hInstance);
#endif
#define SC_MASK_FOLDERS ((1<<SC_MARKNUM_FOLDER) | (1<<SC_MARKNUM_FOLDEROPEN))
// Deprecation section listing all API features that are deprecated and will
// will be removed completely in a future version.
@@ -437,23 +499,9 @@ void Scintilla_RegisterClasses(HINSTANCE hInstance);
#ifdef INCLUDE_DEPRECATED_FEATURES
#define SCI_CHANGEPOSITION SCI_START + 22
// Default style settings. These are deprecated and will be removed in a future version.
#define SCI_SETFORE SCI_START + 60
#define SCI_SETBACK SCI_START + 61
#define SCI_SETBOLD SCI_START + 62
#define SCI_SETITALIC SCI_START + 63
#define SCI_SETSIZE SCI_START + 64
#define SCI_SETFONT SCI_START + 65
#define SCI_APPENDUNDOSTARTACTION SCI_START + 74
#define SC_UNDOCOLLECT_MANUALSTART 2
// Deprecated in release 1.22
#define SCI_SETMARGINWIDTH SCI_START + 34
#define SCI_SETLINENUMBERWIDTH SCI_START + 38
// Deprecated in 1.27
#define SC_UNDOCOLLECT_NONE 0
#define SC_UNDOCOLLECT_AUTOSTART 1
#endif

View File

@@ -3,16 +3,17 @@
## This file defines the interface to Scintilla
## A line starting with ## is a pure comment and should be stripped by readers.
## A line starting with #!! is for future shbang use
## A line starting with # followed by a space is a documentation comment and refers
## A line starting with #! is for future shbang use
## A line starting with # followed by a space is a documentation comment and refers
## to the next feature definition.
## Each feature is defined by a line starting with fun, get, set or val.
## Each feature is defined by a line starting with fun, get, set, val or evt.
## cat -> start a category
## fun -> a function
## get -> a property get function
## get -> a property set function
## set -> a property set function
## val -> definition of a constant
## evt -> an event
## All other feature names should be ignored. They may be defined in the future.
## A property may have a set function, a get function or both. Each will have
## "Get" or "Set" in their names and the corresponding name will have the obvious switch.
@@ -21,6 +22,7 @@
## <featureType><ws><returnType><ws><name>[=<number](<param>,<param>)
## param is <paramType><ws><paramName>[=<value>]
## Additional white space is allowed between elements.
## The syntax for evt is <featureType><ws><returnType><ws><name>[=<number]([<param>[,<param>]*])
## Feature names that contain an underscore are defined by Windows, so in these
## cases, using the Windows definition is preferred where available.
@@ -33,20 +35,27 @@
## string -> pointer to const character
## stringresult -> pointer to character
## cells -> pointer to array of cells, each cell containing a style byte and character byte
## textrange -> complex structure
## charrange -> range of a min and a max position
## charrangeresult -> like charrange, but output param
## textrange -> charrange + output string
## findtext -> searchrange, text -> foundposition
## findtextex -> searchrange
## keymod -> integer containing key in low half and modifiers in high half
## countedstring
## formatrange
## point -> x,y
## Client code should ignore definitions containing types it does not understand, except
## pointresult -> like point, but output param
## rectangle -> left,top,right,bottom
## Client code should ignore definitions containing types it does not understand, except
## for possibly #defining the constants
cat Basics
cat Basics
################################################
## From Scintilla.h
## For Scintilla.h
val INVALID_POSITION=-1
## Define start of Scintilla messages to be greater than all edit (EM_*) messages
## as many EM_ messages can be used although that use is deprecated.
val SCI_START=2000
val SCI_OPTIONAL_START=3000
val SCI_LEXER_START=4000
@@ -63,6 +72,9 @@ fun void InsertText=2003(position pos, string text)
# Delete all text in the document
fun void ClearAll=2004(,)
# Set all style bytes to 0, remove all folding information
fun void ClearDocumentStyle=2005(,)
# The number of characters in the document
get int GetLength=2006(,)
@@ -81,17 +93,14 @@ get int GetStyleAt=2010(position pos,)
# Redoes the next action on the undo history
fun void Redo=2011(,)
val SC_UNDOCOLLECT_NONE=0
val SC_UNDOCOLLECT_AUTOSTART=1
# Choose between collecting actions into the undo
# Choose between collecting actions into the undo
# history and discarding them.
set void SetUndoCollection=2012(int collectUndo,)
set void SetUndoCollection=2012(bool collectUndo,)
# Select all the text in the document.
fun void SelectAll=2013(,)
# Remember the current position in the undo history as the position
# Remember the current position in the undo history as the position
# at which the document was saved.
fun void SetSavePoint=2014(,)
@@ -108,11 +117,22 @@ fun int MarkerLineFromHandle=2017(int handle,)
# Delete a marker.
fun void MarkerDeleteHandle=2018(int handle,)
# Are white space characters currently visible?
get bool GetViewWS=2020(,)
# Is undo history being collected?
get bool GetUndoCollection=2019(,)
# Make white space characters visible or invisible.
set void SetViewWS=2021(bool viewWS,)
val SCWS_INVISIBLE=0
val SCWS_VISIBLEALWAYS=1
val SCWS_VISIBLEAFTERINDENT=2
# Are white space characters currently visible?
# Returns one of SCWS_* constants.
get int GetViewWS=2020(,)
# Make white space characters invisible, always visible or visible outside indentation.
set void SetViewWS=2021(int viewWS,)
# Find the position from a point within the window.
fun int PositionFromPoint=2022(int x, int y)
# Set caret to start of a line and ensure it is visible.
fun void GotoLine=2024(int line,)
@@ -145,7 +165,7 @@ get int GetEOLMode=2030(,)
set void SetEOLMode=2031(int eolMode,)
# Set the current styling position to pos and the styling mask to mask.
# The styling mask can be used to protect some bits in each styling byte from
# The styling mask can be used to protect some bits in each styling byte from
# modification.
fun void StartStyling=2032(position pos, int mask)
@@ -153,17 +173,22 @@ fun void StartStyling=2032(position pos, int mask)
# and move the current styling position to after this newly styled segment.
fun void SetStyling=2033(int length, int style)
# Is drawing done first into a buffer or direct to the screen.
get bool GetBufferedDraw=2034(,)
# If drawing is buffered then each line of text is drawn into a bitmap buffer
# before drawing it to the screen to avoid flicker.
set void SetBufferedDraw=2035(bool buffered,)
# Change the visible size of a tab to be a multiple of the width of a space
# Change the visible size of a tab to be a multiple of the width of a space
# character.
set void SetTabWidth=2036(int tabWidth,)
# Retrieve the visible size of a tab.
# Retrieve the visible size of a tab.
get int GetTabWidth=2121(,)
# The SC_CP_UTF8 value can be used to enter Unicode mode.
# This is the same value as CP_UTF8 in Windows
val SC_CP_UTF8=65001
# Set the code page used to interpret the bytes of the document as characters.
@@ -187,7 +212,6 @@ val SC_MARK_PLUS=8
val SC_MARKNUM_FOLDER=30
val SC_MARKNUM_FOLDEROPEN=31
##val SC_MASK_FOLDERS=1<<SC_MARKNUM_FOLDER | 1<<SC_MARKNUM_FOLDEROPEN
# Set the symbol used for a particular marker number.
fun void MarkerDefine=2040(int markerNumber, int markerSymbol)
@@ -248,8 +272,31 @@ val STYLE_LINENUMBER=33
val STYLE_BRACELIGHT=34
val STYLE_BRACEBAD=35
val STYLE_CONTROLCHAR=36
val STYLE_INDENTGUIDE=37
val STYLE_MAX=127
# Character set identifiers are used in StyleSetCharacterSet.
# The values are the same as the Windows *_CHARSET values.
val SC_CHARSET_ANSI=0
val SC_CHARSET_DEFAULT=1
val SC_CHARSET_BALTIC=186
val SC_CHARSET_CHINESEBIG5=136
val SC_CHARSET_EASTEUROPE=238
val SC_CHARSET_GB2312=134
val SC_CHARSET_GREEK=161
val SC_CHARSET_HANGUL=129
val SC_CHARSET_MAC=77
val SC_CHARSET_OEM=255
val SC_CHARSET_RUSSIAN=204
val SC_CHARSET_SHIFTJIS=128
val SC_CHARSET_SYMBOL=2
val SC_CHARSET_TURKISH=162
val SC_CHARSET_JOHAB=130
val SC_CHARSET_HEBREW=177
val SC_CHARSET_ARABIC=178
val SC_CHARSET_VIETNAMESE=163
val SC_CHARSET_THAI=222
# Clear all the styles and make equivalent to the global default style.
set void StyleClearAll=2050(,)
@@ -290,7 +337,7 @@ fun void SetSelFore=2067(bool useSetting, colour fore)
fun void SetSelBack=2068(bool useSetting, colour back)
# Set the foreground colour of the caret.
fun void SetCaretFore=2069(colour fore,)
set void SetCaretFore=2069(colour fore,)
# When key+modifier combination km is pressed perform msg.
fun void AssignCmdKey=2070(keymod km, int msg)
@@ -304,13 +351,16 @@ fun void ClearAllCmdKeys=2072(,)
# Set the styles for a segment of the document.
fun void SetStylingEx=2073(int length, string styles)
# Get the time in milliseconds that the caret is on and off.
# Set a style to be visible or not.
set void StyleSetVisible=2074(int style, bool visible)
# Get the time in milliseconds that the caret is on and off.
get int GetCaretPeriod=2075(,)
# Get the time in milliseconds that the caret is on and off. 0 = steady on.
set void SetCaretPeriod=2076(int periodMilliseconds,)
# Set the set of characters making up words for when moving or selecting
# Set the set of characters making up words for when moving or selecting
# by word.
set void SetWordChars=2077(, string characters)
@@ -330,7 +380,8 @@ val INDIC_STRIKE=4
val INDIC0_MASK=32
val INDIC1_MASK=64
val INDIC2_MASK=128
val INDICS_MASK=INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
##val INDICS_MASK=INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
val INDICS_MASK=32 | 64 | 128
# Set an indicator to plain, squiggle or TT.
set void IndicSetStyle=2080(int indic, int style)
@@ -358,7 +409,7 @@ set void SetLineState=2092(int line, int state)
# Retrieve the extra styling information for a line.
get int GetLineState=2093(int line,)
# Retrieve the last line number that has line state.
# Retrieve the last line number that has line state.
get int GetMaxLineState=2094(,)
# Display a auto-completion list.
@@ -372,7 +423,7 @@ fun void AutoCCancel=2101(,)
# Is there an auto-completion list visible?
fun bool AutoCActive=2102(,)
# Retrieve the position of the caret when the auto-completion list was
# Retrieve the position of the caret when the auto-completion list was
# displayed.
fun position AutoCPosStart=2103(,)
@@ -382,7 +433,7 @@ fun void AutoCComplete=2104(,)
# Define a set of character that when typed cancel the auto-completion list.
fun void AutoCStops=2105(, string characterSet)
# Change the separator character in the string setting up an auto-completion
# Change the separator character in the string setting up an auto-completion
# list. Default is space but can be changed if items contain space.
set void AutoCSetSeparator=2106(int separatorCharacter,)
@@ -392,6 +443,28 @@ get int AutoCGetSeparator=2107(,)
# Select the item in the auto-completion list that starts with a string.
fun void AutoCSelect=2108(, string text)
# Should the auto-completion list be cancelled if the user backspaces to a
# position before where the box was created.
set void AutoCSetCancelAtStart=2110(bool cancel,)
# Retrieve whether auto-completion cancelled by backspacing before start.
get bool AutoCGetCancelAtStart=2111(,)
# Define a set of character that when typed fills up the selected word.
set void AutoCSetFillUps=2112(, string characterSet)
# Should a single item auto-completion list automatically choose the item.
set void AutoCSetChooseSingle=2113(bool chooseSingle,)
# Retrieve whether a single item auto-completion list automatically choose the item.
get bool AutoCGetChooseSingle=2114(,)
# Set whether case is significant when performing auto-completion searches.
set void AutoCSetIgnoreCase=2115(bool ignoreCase,)
# Retrieve state of ignore case flag.
get bool AutoCGetIgnoreCase=2116(,)
# Set the number of spaces used for one level of indentation.
set void SetIndent=2122(int indentSize,)
@@ -414,12 +487,203 @@ get int GetLineIndentation=2127(int line,)
# Retrieve the position before the first non indentation character on a line.
get position GetLineIndentPosition=2128(int line,)
# Show or hide the horizontal scroll bar
# Retrieve the column number of a position, taking tab width into account.
get int GetColumn=2129(position pos,)
# Show or hide the horizontal scroll bar.
set void SetHScrollBar=2130(bool show,)
# Is the horizontal scroll bar visible.
# Is the horizontal scroll bar visible?
get bool GetHScrollBar=2131(,)
# Show or hide indentation guides.
set void SetIndentationGuides=2132(bool show,)
# Are the indentation guides visible?
get bool GetIndentationGuides=2133(,)
# Set the highlighted indentation guide column.
# 0 = no highlighted guide.
set void SetHighlightGuide=2134(int column,)
# Get the highlighted indentation guide column.
get int GetHighlightGuide=2135(,)
# Get the position after the last visible characters on a line.
get int GetLineEndPosition=2136(int line,)
# Get the code page used to interpret the bytes of the document as characters.
get int GetCodePage=2137(,)
# Get the foreground colour of the caret.
get colour GetCaretFore=2138(,)
# In palette mode?
get bool GetUsePalette=2139(,)
# In read-only mode?
get bool GetReadOnly=2140(,)
# Sets the position of the caret.
set void SetCurrentPos=2141(position pos,)
# Sets the position that starts the selection - this becomes the anchor.
set void SetSelectionStart=2142(position pos,)
# Returns the position at the start of the selection.
get position GetSelectionStart=2143(,)
# Sets the position that ends the selection - this becomes the currentPosition.
set void SetSelectionEnd=2144(position pos,)
# Returns the position at the end of the selection.
get position GetSelectionEnd=2145(,)
# Sets the print magnification added to the point size of each style for printing.
set void SetPrintMagnification=2146(int magnification,)
# Returns the print magnification.
get int GetPrintMagnification=2147(,)
# PrintColourMode - use same colours as screen.
val SC_PRINT_NORMAL=0
# PrintColourMode - invert the light value of each style for printing.
val SC_PRINT_INVERTLIGHT=1
# PrintColourMode - force black text on white background for printing.
val SC_PRINT_BLACKONWHITE=2
# Modify colours when printing for clearer printed text.
set void SetPrintColourMode=2148(int mode,)
# Returns the print colour mode.
get int GetPrintColourMode=2149(,)
val SCFIND_DOWN=1
val SCFIND_WHOLEWORD=2
val SCFIND_MATCHCASE=4
val SCFIND_WORDSTART=0x00100000
# SCFIND_REGEXP is not yet implemented.
val SCFIND_REGEXP=0x00200000
# Find some text in the document.
fun position FindText=2150(int flags, findtext ft)
# On Windows will draw the document into a display context such as a printer.
fun void FormatRange=2151(bool draw, formatrange fr)
# Retrieve the line at the top of the display.
get int GetFirstVisibleLine=2152(,)
# Retrieve the contents of a line.
# Returns the length of the line.
fun int GetLine=2153(int line, stringresult text)
# Returns the number of lines in the document. There is always at least one.
get int GetLineCount=2154(,)
# Sets the size in pixels of the left margin.
set void SetMarginLeft=2155(, int width)
# Returns the size in pixels of the left margin.
get int GetMarginLeft=2156(,)
# Sets the size in pixels of the right margin.
set void SetMarginRight=2157(, int width)
# Returns the size in pixels of the right margin.
get int GetMarginRight=2158(,)
# Is the document different from when it was last saved?
get bool GetModify=2159(,)
# Select a range of text.
fun void SetSel=2160(position start, position end)
# Retrieve the selected text.
# Return the length of the text.
fun int GetSelText=2161(,stringresult text)
# Retrieve a range of text.
# Return the length of the text.
fun int GetTextRange=2162(, textrange tr)
# Draw the selection in normal style or with selection highlighted.
fun void HideSelection=2163(bool normal,)
# Retrieve the x value of the point in the window where a position is displayed.
fun int PointXFromPosition=2164(, position pos)
# Retrieve the y value of the point in the window where a position is displayed.
fun int PointYFromPosition=2165(, position pos)
# Retrieve the line containing a position.
fun int LineFromPosition=2166(position pos,)
# Retrieve the position at the start of a line.
fun int PositionFromLine=2167(int line,)
# Scroll horizontally and vertically.
fun void LineScroll=2168(int columns, int lines)
# Ensure the caret is visible.
fun void ScrollCaret=2169(,)
# Replace the selected text with the argument text.
fun void ReplaceSel=2170(, string text)
# Set to read only or read write.
set void SetReadOnly=2171(bool readOnly,)
# Null operation.
fun void Null=2172(,)
# Will a paste succeed?
fun bool CanPaste=2173(,)
# Are there any undoable actions in the undo history.
fun bool CanUndo=2174(,)
# Delete the undo history.
fun void EmptyUndoBuffer=2175(,)
# Undo one action in the undo history.
fun void Undo=2176(,)
# Cut the selection to the clipboard.
fun void Cut=2177(,)
# Copy the selection to the clipboard.
fun void Copy=2178(,)
# Paste the contents of the clipboard into the document replacing the selection.
fun void Paste=2179(,)
# Clear the selection.
fun void Clear=2180(,)
# Replace the contents of the document with the argument text.
fun void SetText=2181(, string text)
# Retrieve all the text in the document.
# Returns number of characters retrieved.
fun int GetText=2182(int length, stringresult text)
# Retrieve the number of characters in the document.
get int GetTextLength=2183(,)
# Retrieve a pointer to a function that processes messages for this Scintilla.
get int GetDirectFunction=2184(,)
# Retrieve a pointer value to use as the first argument when calling
# the function returned by GetDirectFunction.
get int GetDirectPointer=2185(,)
# Set to overtype (true) or insert mode
set void SetOvertype=2186(bool overtype,)
# Returns true if overtype mode is active otherwise false is returned.
get bool GetOvertype=2187(,)
# Show a call tip containing a definition near position pos.
fun void CallTipShow=2200(position pos, string definition)
@@ -458,7 +722,7 @@ set void SetFoldLevel=2222(int line, int level)
get int GetFoldLevel=2223(int line,)
# Find the last child line of a header line.
get int GetLastChild=2224(int line,)
get int GetLastChild=2224(int line, int level)
# Find the parent line of a child line.
get int GetFoldParent=2225(int line,)
@@ -487,6 +751,7 @@ fun void EnsureVisible=2232(int line,)
# Set some debugging options for folding
fun void SetFoldFlags=2233(int flags,)
## Start of key messages
# Move caret down one line.
fun void LineDown=2300(,)
@@ -568,7 +833,7 @@ fun void Cancel=2325(,)
# Delete the selection or if no selection, the character before the caret.
fun void DeleteBack=2326(,)
# If selection is empty or all on one line replace the selection with a tab
# If selection is empty or all on one line replace the selection with a tab
# character.
# If more than one line selected, indent the lines.
fun void Tab=2327(,)
@@ -582,7 +847,7 @@ fun void NewLine=2329(,)
# Insert a Form Feed character.
fun void FormFeed=2330(,)
# Move caret to before first visible character on line.
# Move caret to before first visible character on line.
# If already there move to first character on line.
fun void VCHome=2331(,)
@@ -656,8 +921,8 @@ val EDGE_BACKGROUND=2
# Retrieve the column number which text should be kept within.
get int GetEdgeColumn=2360(,)
# Set the column number of the edge.
# If text goes past the edge then it is highlighted.
# Set the column number of the edge.
# If text goes past the edge then it is highlighted.
set void SetEdgeColumn=2361(int column,)
# Retrieve the edge highlight mode.
@@ -682,8 +947,12 @@ fun int SearchNext=2367(int flags, string text)
# Find some text starting at the search anchor and moving backwards.
fun int SearchPrev=2368(int flags, string text)
# Show caret within N lines of edge when it's scrolled to view
val CARET_SLOP=0x01
# Center caret on screen when it's scrolled to view
val CARET_CENTER=0x02
# OR this with CARET_CENTER to reposition even when visible, or
# OR this with CARET_SLOP to reposition whenever outside slop border
val CARET_STRICT=0x04
# Set the way the line the caret is on is kept visible.
fun void SetCaretPolicy=2369(int caretPolicy, int caretSlop)
@@ -698,18 +967,25 @@ fun void UsePopUp=2371(bool allowPopUp,)
# Is the selection a rectangular. The alternative is the more common stream selection.
get bool SelectionIsRectangle=2372(,)
# Set the zoom level. This number of points is added to the size of all fonts.
# Set the zoom level. This number of points is added to the size of all fonts.
# It may be positive to magnify or negative to reduce.
set void SetZoom=2373(int zoom,)
# Retrieve the zoom level.
get int GetZoom=2374(,)
# Create a new document object.
# Starts with reference count of 1 and not selected into editor.
fun int CreateDocument=2375(,)
# Extend life of document.
fun void AddRefDoc=2375(, int doc)
fun void AddRefDocument=2376(, int doc)
# Release a reference to the document, deleting document if it fades to black.
fun void ReleaseDoc=2376(, int doc)
fun void ReleaseDocument=2377(, int doc)
# Get which document modification events are sent to the container.
get int GetModEventMask=2378(,)
# Set the focus to this Scintilla widget.
# GTK+ Specific
fun void GrabFocus=2400(,)
# Start notifying the container of all key presses and commands.
@@ -718,10 +994,10 @@ fun void StartRecord=3001(,)
# Stop notifying the container of all key presses and commands.
fun void StopRecord=3002(,)
# Set the lexing language of the document.
# Set the lexing language of the document.
set void SetLexer=4001(int lexer,)
# Retrieve the lexing language of the document.
# Retrieve the lexing language of the document.
get int GetLexer=4002(,)
# Colourise a segment of the document using the current lexing language.
@@ -733,6 +1009,10 @@ set void SetProperty=4004(string key, string value)
# Set up the key words used by the lexer.
set void SetKeyWords=4005(int keywordSet, string keyWords)
# Notifications
# Type of modification and the action which caused the modification
# These are defined as a bit mask to make it easy to specify which notifications are wanted.
# One bit is set from each of SC_MOD_* and SC_PERFORMED_*.
val SC_MOD_INSERTTEXT=0x1
val SC_MOD_DELETETEXT=0x2
val SC_MOD_CHANGESTYLE=0x4
@@ -745,22 +1025,41 @@ val SC_MOD_CHANGEMARKER=0x200
val SC_MOD_BEFOREINSERT=0x400
val SC_MOD_BEFOREDELETE=0x800
val SC_MODEVENTMASKALL=0xF77
val SCN_STYLENEEDED=2000
val SCN_CHARADDED=2001
val SCN_SAVEPOINTREACHED=2002
val SCN_SAVEPOINTLEFT=2003
val SCN_MODIFYATTEMPTRO=2004
val SCN_KEY=2005
val SCN_DOUBLECLICK=2006
val SCN_UPDATEUI=2007
val SCN_CHECKBRACE=2007
val SCN_MODIFIED=2008
val SCN_MACRORECORD=2009
val SCN_MARGINCLICK=2010
val SCN_NEEDSHOWN=2011
# For compatibility, these go through the COMMAND notification rather than NOTIFY
# and have exactly the same values as the EN_* constants.
val SCEN_CHANGE=768
val SCEN_SETFOCUS=512
val SCEN_KILLFOCUS=256
# Symbolic key codes and modifier flags
# ASCII and other printable characters below 256
# Extended keys above 300
val SCK_DOWN=300
val SCK_UP=301
val SCK_LEFT=302
val SCK_RIGHT=303
val SCK_HOME=304
val SCK_END=305
val SCK_PRIOR=306
val SCK_NEXT=307
val SCK_DELETE=308
val SCK_INSERT=309
val SCK_ESCAPE=7
val SCK_BACK=8
val SCK_TAB=9
val SCK_RETURN=13
val SCK_ADD=310
val SCK_SUBTRACT=311
val SCK_DIVIDE=312
val SCMOD_SHIFT=1
val SCMOD_CTRL=2
val SCMOD_ALT=4
################################################
# From SciLexer.h
# For SciLexer.h
val SCLEX_CONTAINER=0
val SCLEX_NULL=1
val SCLEX_PYTHON=2
@@ -776,6 +1075,9 @@ val SCLEX_MAKEFILE=11
val SCLEX_BATCH=12
val SCLEX_XCODE=13
val SCLEX_LATEX=14
val SCLEX_LUA=15
val SCLEX_DIFF=16
# Lexical states for SCLEX_PYTHON
val SCE_P_DEFAULT=0
val SCE_P_COMMENTLINE=1
val SCE_P_NUMBER=2
@@ -790,6 +1092,7 @@ val SCE_P_OPERATOR=10
val SCE_P_IDENTIFIER=11
val SCE_P_COMMENTBLOCK=12
val SCE_P_STRINGEOL=13
# Lexical states for SCLEX_CPP, SCLEX_VB
val SCE_C_DEFAULT=0
val SCE_C_COMMENT=1
val SCE_C_COMMENTLINE=2
@@ -803,6 +1106,8 @@ val SCE_C_PREPROCESSOR=9
val SCE_C_OPERATOR=10
val SCE_C_IDENTIFIER=11
val SCE_C_STRINGEOL=12
val SCE_C_VERBATIM=13
# Lexical states for SCLEX_HTML, SCLEX_XML
val SCE_H_DEFAULT=0
val SCE_H_TAG=1
val SCE_H_TAGUNKNOWN=2
@@ -814,12 +1119,18 @@ val SCE_H_SINGLESTRING=7
val SCE_H_OTHER=8
val SCE_H_COMMENT=9
val SCE_H_ENTITY=10
# XML and ASP
val SCE_H_TAGEND=11
val SCE_H_XMLSTART=12
val SCE_H_XMLEND=13
val SCE_H_SCRIPT=14
val SCE_H_ASP=15
val SCE_H_ASPAT=16
val SCE_H_CDATA=17
val SCE_H_QUESTION=18
# More HTML
val SCE_H_VALUE=19
# Embedded Javascript
val SCE_HJ_START=40
val SCE_HJ_DEFAULT=41
val SCE_HJ_COMMENT=42
@@ -832,6 +1143,7 @@ val SCE_HJ_DOUBLESTRING=48
val SCE_HJ_SINGLESTRING=49
val SCE_HJ_SYMBOLS=50
val SCE_HJ_STRINGEOL=51
# ASP Javascript
val SCE_HJA_START=55
val SCE_HJA_DEFAULT=56
val SCE_HJA_COMMENT=57
@@ -844,6 +1156,7 @@ val SCE_HJA_DOUBLESTRING=63
val SCE_HJA_SINGLESTRING=64
val SCE_HJA_SYMBOLS=65
val SCE_HJA_STRINGEOL=66
# Embedded VBScript
val SCE_HB_START=70
val SCE_HB_DEFAULT=71
val SCE_HB_COMMENTLINE=72
@@ -852,6 +1165,7 @@ val SCE_HB_WORD=74
val SCE_HB_STRING=75
val SCE_HB_IDENTIFIER=76
val SCE_HB_STRINGEOL=77
# ASP VBScript
val SCE_HBA_START=80
val SCE_HBA_DEFAULT=81
val SCE_HBA_COMMENTLINE=82
@@ -860,6 +1174,7 @@ val SCE_HBA_WORD=84
val SCE_HBA_STRING=85
val SCE_HBA_IDENTIFIER=86
val SCE_HBA_STRINGEOL=87
# Embedded Python
val SCE_HP_START=90
val SCE_HP_DEFAULT=91
val SCE_HP_COMMENTLINE=92
@@ -873,6 +1188,7 @@ val SCE_HP_CLASSNAME=99
val SCE_HP_DEFNAME=100
val SCE_HP_OPERATOR=101
val SCE_HP_IDENTIFIER=102
# ASP Python
val SCE_HPA_START=105
val SCE_HPA_DEFAULT=106
val SCE_HPA_COMMENTLINE=107
@@ -886,6 +1202,17 @@ val SCE_HPA_CLASSNAME=114
val SCE_HPA_DEFNAME=115
val SCE_HPA_OPERATOR=116
val SCE_HPA_IDENTIFIER=117
# PHP
val SCE_HPHP_DEFAULT=118
val SCE_HPHP_HSTRING=119
val SCE_HPHP_SIMPLESTRING=120
val SCE_HPHP_WORD=121
val SCE_HPHP_NUMBER=122
val SCE_HPHP_VARIABLE=123
val SCE_HPHP_COMMENT=124
val SCE_HPHP_COMMENTLINE=125
val SCE_HPHP_STRINGEOL=126
# Lexical states for SCLEX_PERL
val SCE_PL_DEFAULT=0
val SCE_PL_HERE=1
val SCE_PL_COMMENTLINE=2
@@ -908,15 +1235,61 @@ val SCE_PL_REGSUBST=18
val SCE_PL_LONGQUOTE=19
val SCE_PL_BACKTICKS=20
val SCE_PL_DATASECTION=21
# Lexical states for SCLEX_LATEX
val SCE_L_DEFAULT=0
val SCE_L_COMMAND=1
val SCE_L_TAG=2
val SCE_L_MATH=3
val SCE_L_COMMENT=4
# Lexical states for SCLEX_LUA
val SCE_LUA_DEFAULT=0
val SCE_LUA_COMMENT=1
val SCE_LUA_COMMENTLINE=2
val SCE_LUA_COMMENTDOC=3
val SCE_LUA_NUMBER=4
val SCE_LUA_WORD=5
val SCE_LUA_STRING=6
val SCE_LUA_CHARACTER=7
val SCE_LUA_LITERALSTRING=8
val SCE_LUA_PREPROCESSOR=9
val SCE_LUA_OPERATOR=10
val SCE_LUA_IDENTIFIER=11
val SCE_LUA_STRINGEOL=12
val SCE_ERR_DEFAULT=0
val SCE_ERR_PYTHON=1
val SCE_ERR_GCC=2
val SCE_ERR_MS=3
val SCE_ERR_CMD=4
val SCE_ERR_BORLAND=5
val SCE_ERR_PERL=6
# Events
evt void StyleNeeded=2000(int position)
evt void CharAdded=2001(int ch)
evt void SavePointReached=2002(void)
evt void SavePointLeft=2003(void)
evt void ModifyAttemptRO=2004(void)
# GTK+ Specific to work around focus and accelerator problems:
evt void Key=2005(int ch, int modifiers)
evt void DoubleClick=2006(void)
evt void UpdateUI=2007(void)
# The old name for SCN_UPDATEUI
val SCN_CHECKBRACE=2007
evt void Modified=2008(int position, int modificationType, string text, int length, int linesAdded, int line, int foldLevelNow, int foldLevelPrev)
# Optional module for macro recording
evt void MacroRecord=2009(int message, int wParam, int lParam)
evt void MarginClick=2010(int modifiers, int position, int margin)
evt void NeedShown=2011(int position, int length)
evt void PosChanged=2012(int position)
cat Deprecated
################################################
# From WinDefs.h
# ***** DEPRECATED from here to end of file ******
# Will a paste succeed?
fun bool EM_CanPaste=1074(,)
@@ -930,7 +1303,7 @@ fun int EM_CharFromPos=215(,point pt)
fun void EM_EmptyUndoBuffer=205(,)
# Retrieve the selection range.
fun void EM_ExGetSel=1076(,charrange cr)
fun void EM_ExGetSel=1076(,charrangeresult cr)
# Retrieve the line number of a position in the document.
get int EM_ExLineFromChar=1078(,position pos)
@@ -942,7 +1315,7 @@ fun void EM_ExSetSel=1079(,charrange cr)
fun position EM_FindText=1080(int flags, findtext ft)
# Find some text in the document. Returns range of found text in ft argument.
fun position EM_FindTextEx=1103(int flags, findtext ft)
fun position EM_FindTextEx=1103(int flags, findtextex ft)
# On Windows will draw the document into a display context such as a printer.
fun void EM_FormatRange=1081(bool draw, formatrange fr)
@@ -995,7 +1368,7 @@ fun int EM_LineLength=193(int line,)
fun void EM_LineScroll=182(int columns, int lines)
# Retrieve the point in the window where a position is displayed.
fun void EM_PosFromChar=214(point pt, position pos)
fun void EM_PosFromChar=214(pointresult pt, position pos)
# Replace the selected text with the argument text.
fun void EM_ReplaceSel=194(, string text)
@@ -1052,9 +1425,9 @@ fun void WM_SetText=12(, string text)
fun void WM_Undo=772(,)
# Notification codes
val EN_CHANGE=768
val EN_KILLFOCUS=512
val EN_SETFOCUS=256
val EN_CHANGE=768
val EN_KILLFOCUS=512
val EN_SETFOCUS=256
# Flags for setting margins.
val EC_LEFTMARGIN=1
@@ -1062,16 +1435,18 @@ val EC_RIGHTMARGIN=2
val EC_USEFONTINFO=0xffff
# Selection type.
val SEL_EMPTY=0
val SEL_TEXT=1
val SEL_EMPTY=0
val SEL_TEXT=1
# Find replace mask constants
val FR_MATCHCASE=0x4
val FR_WHOLEWORD=0x2
val FR_DOWN=0x1
val FR_MATCHCASE=0x4
val FR_WHOLEWORD=0x2
val FR_DOWN=0x1
# Key modifier flag.
val SHIFT_PRESSED=1
val LEFT_CTRL_PRESSED=2
val LEFT_ALT_PRESSED=4
#events
evt void EN_Change=768(void)

View File

@@ -16,6 +16,7 @@
#define LPSTR char *
#define LONG long
//#if 0
/* RTF control */
#define EM_CANPASTE (1074)
#define EM_CANUNDO (198)
@@ -52,12 +53,10 @@
#define WM_NULL (0)
#define WM_CLEAR (771)
#define WM_COMMAND (273)
#define WM_COPY (769)
#define WM_CUT (768)
#define WM_GETTEXT (13)
#define WM_GETTEXTLENGTH (14)
#define WM_NOTIFY (78)
#define WM_PASTE (770)
#define WM_SETTEXT (12)
#define WM_UNDO (772)
@@ -70,6 +69,9 @@
#define EC_RIGHTMARGIN 2
#define EC_USEFONTINFO 0xffff
//#endif
#if 0
#if PLAT_GTK
#define VK_DOWN GDK_Down
#define VK_UP GDK_Up
@@ -109,12 +111,16 @@
#define VK_SUBTRACT WXK_SUBTRACT
//TODO:
#define VK_DIVIDE WXK_DIVIDE
#endif
#define SHIFT_PRESSED 1
#define LEFT_CTRL_PRESSED 2
#define LEFT_ALT_PRESSED 4
// Are these needed any more
#define LPSTR char *
#define LONG long
#define LPDWORD (long *)
#endif
/* SELCHANGE structure */
#define SEL_EMPTY (0)
@@ -123,15 +129,6 @@
#define SEL_MULTICHAR (4)
#define SEL_MULTIOBJECT (8)
/* FINDREPLACE structure */
#define FR_MATCHCASE (0x4)
#define FR_WHOLEWORD (0x2)
#define FR_DOWN (0x1)
#define SHIFT_PRESSED 1
#define LEFT_CTRL_PRESSED 2
#define LEFT_ALT_PRESSED 4
struct RECT {
LONG left;
LONG top;
@@ -139,6 +136,15 @@ struct RECT {
LONG bottom;
};
/* FINDREPLACE structure */
#define FR_MATCHCASE (0x4)
#define FR_WHOLEWORD (0x2)
#define FR_DOWN (0x1)
#endif
#if 0
struct CHARRANGE {
LONG cpMin;
LONG cpMax;
@@ -168,9 +174,10 @@ struct FORMATRANGE {
RECT rcPage;
CHARRANGE chrg;
};
#endif
#define MAKELONG(a, b) ((a) | ((b) << 16))
#define LOWORD(x) (x & 0xffff)
#define HIWORD(x) (x >> 16)
//#define MAKELONG(a, b) ((a) | ((b) << 16))
//#define LOWORD(x) (x & 0xffff)
//#define HIWORD(x) (x >> 16)
#endif

View File

@@ -22,7 +22,7 @@ protected:
public:
WindowAccessor(WindowID id_, PropSet &props_) :
Accessor(), id(id_), props(props_),
lenDoc(-1), validLen(0), chFlags(0) {
lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
}
~WindowAccessor();
char StyleAt(int position);

View File

@@ -10,12 +10,16 @@
#include "AutoComplete.h"
AutoComplete::AutoComplete() {
lb = 0;
active = false;
posStart = 0;
strcpy(stopChars, "");
separator = ' ';
AutoComplete::AutoComplete() :
active(false),
separator(' '),
ignoreCase(false),
chooseSingle(false),
posStart(0),
startLen(0),
cancelAtStartPos(true) {
stopChars[0] = '\0';
fillUpChars[0] = '\0';
}
AutoComplete::~AutoComplete() {
@@ -45,6 +49,15 @@ bool AutoComplete::IsStopChar(char ch) {
return ch && strchr(stopChars, ch);
}
void AutoComplete::SetFillUpChars(const char *fillUpChars_) {
strncpy(fillUpChars, fillUpChars_, sizeof(fillUpChars));
fillUpChars[sizeof(fillUpChars) - 1] = '\0';
}
bool AutoComplete::IsFillUpChar(char ch) {
return ch && strchr(fillUpChars, ch);
}
void AutoComplete::SetSeparator(char separator_) {
separator = separator_;
}
@@ -53,8 +66,7 @@ char AutoComplete::GetSeparator() {
return separator;
}
int AutoComplete::SetList(const char *list) {
int maxStrLen = 12;
void AutoComplete::SetList(const char *list) {
lb.Clear();
char *words = new char[strlen(list) + 1];
if (words) {
@@ -65,18 +77,15 @@ int AutoComplete::SetList(const char *list) {
if (words[i] == separator) {
words[i] = '\0';
lb.Append(startword);
maxStrLen = Platform::Maximum(maxStrLen, strlen(startword));
startword = words + i + 1;
}
}
if (startword) {
lb.Append(startword);
maxStrLen = Platform::Maximum(maxStrLen, strlen(startword));
}
delete []words;
}
lb.Sort();
return maxStrLen;
}
void AutoComplete::Show() {
@@ -87,7 +96,6 @@ void AutoComplete::Show() {
void AutoComplete::Cancel() {
if (lb.Created()) {
lb.Destroy();
lb = 0;
active = false;
}
}

View File

@@ -9,11 +9,16 @@
class AutoComplete {
bool active;
char stopChars[256];
char fillUpChars[256];
char separator;
public:
bool ignoreCase;
bool chooseSingle;
ListBox lb;
int posStart;
int startLen;
// Should autocompletion be canceled if editor's currentPos <= startPos?
bool cancelAtStartPos;
AutoComplete();
~AutoComplete();
@@ -28,12 +33,16 @@ public:
void SetStopChars(const char *stopChars_);
bool IsStopChar(char ch);
// The fillup chars are characters which, when typed, fill up the selected word
void SetFillUpChars(const char *fillUpChars_);
bool IsFillUpChar(char ch);
// The separator character is used when interpreting the list in SetList
void SetSeparator(char separator_);
char GetSeparator();
// The list string contains a sequence of words separated by the separator character
int SetList(const char *list);
void SetList(const char *list);
void Show();
void Cancel();

View File

@@ -88,7 +88,7 @@ void MarkerHandleSet::RemoveHandle(int handle) {
if (mhn->handle == handle) {
*pmhn = mhn->next;
delete mhn;
return;
return ;
}
pmhn = &((*pmhn)->next);
}
@@ -101,7 +101,7 @@ void MarkerHandleSet::RemoveNumber(int markerNum) {
if (mhn->number == markerNum) {
*pmhn = mhn->next;
delete mhn;
return;
return ;
}
pmhn = &((*pmhn)->next);
}
@@ -119,7 +119,11 @@ void MarkerHandleSet::CombineWith(MarkerHandleSet *other) {
LineVector::LineVector() {
linesData = 0;
lines = 0;
size = 0;
levels = 0;
sizeLevels = 0;
handleCurrent = 1;
Init();
}
@@ -161,6 +165,7 @@ void LineVector::Expand(int sizeNew) {
Platform::DebugPrintf("No memory available\n");
// TODO: Blow up
}
}
void LineVector::ExpandLevels(int sizeNew) {
@@ -180,6 +185,13 @@ void LineVector::ExpandLevels(int sizeNew) {
Platform::DebugPrintf("No memory available\n");
// TODO: Blow up
}
}
void LineVector::ClearLevels() {
delete []levels;
levels = 0;
sizeLevels = 0;
}
void LineVector::InsertValue(int pos, int value) {
@@ -202,10 +214,10 @@ void LineVector::InsertValue(int pos, int value) {
}
if (pos == 0) {
levels[pos] = SC_FOLDLEVELBASE;
} else if (pos == (lines-1)) { // Last line will not be a folder
} else if (pos == (lines - 1)) { // Last line will not be a folder
levels[pos] = SC_FOLDLEVELBASE;
} else {
levels[pos] = levels[pos-1];
levels[pos] = levels[pos - 1];
}
}
}
@@ -234,10 +246,10 @@ void LineVector::Remove(int pos) {
linesData[i] = linesData[i + 1];
}
if (levels) {
// Level information merges back onto previous line
int posAbove = pos-1;
if (posAbove < 0)
posAbove = 0;
// Level information merges back onto previous line
int posAbove = pos - 1;
if (posAbove < 0)
posAbove = 0;
for (int j = posAbove; j < lines; j++) {
levels[j] = levels[j + 1];
}
@@ -280,11 +292,12 @@ int LineVector::AddMark(int line, int markerNum) {
}
void LineVector::MergeMarkers(int pos) {
if (linesData[pos].handleSet || linesData[pos + 1].handleSet) {
if (linesData[pos].handleSet && linesData[pos + 1].handleSet) {
linesData[pos].handleSet->CombineWith(linesData[pos].handleSet);
linesData[pos].handleSet = 0;
}
if (linesData[pos + 1].handleSet != NULL) {
if (linesData[pos].handleSet == NULL )
linesData[pos].handleSet = new MarkerHandleSet;
linesData[pos].handleSet->CombineWith(linesData[pos + 1].handleSet);
delete linesData[pos + 1].handleSet;
linesData[pos + 1].handleSet = NULL;
}
}
@@ -358,7 +371,7 @@ void Action::Grab(Action *source) {
data = source->data;
lenData = source->lenData;
mayCoalesce = source->mayCoalesce;
// Ownership of source data transferred to this
source->position = 0;
source->at = startAction;
@@ -367,21 +380,21 @@ void Action::Grab(Action *source) {
source->mayCoalesce = true;
}
// The undo history stores a sequence of user operations that represent the user's view of the
// commands executed on the text.
// The undo history stores a sequence of user operations that represent the user's view of the
// commands executed on the text.
// Each user operation contains a sequence of text insertion and text deletion actions.
// All the user operations are stored in a list of individual actions with 'start' actions used
// as delimiters between user operations.
// Initially there is one start action in the history.
// As each action is performed, it is recorded in the history. The action may either become
// Initially there is one start action in the history.
// As each action is performed, it is recorded in the history. The action may either become
// part of the current user operation or may start a new user operation. If it is to be part of the
// current operation, then it overwrites the current last action. If it is to be part of a new
// current operation, then it overwrites the current last action. If it is to be part of a new
// operation, it is appended after the current last action.
// After writing the new action, a new start action is appended at the end of the history.
// The decision of whether to start a new user operation is based upon two factors. If a
// The decision of whether to start a new user operation is based upon two factors. If a
// compound operation has been explicitly started by calling BeginUndoAction and no matching
// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current
// operation. If there is no outstanding BeginUndoAction call then a new operation is started
// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current
// operation. If there is no outstanding BeginUndoAction call then a new operation is started
// unless it looks as if the new action is caused by the user typing or deleting a stream of text.
// Sequences that look like typing or deletion are coalesced into a single user operation.
@@ -412,7 +425,7 @@ void UndoHistory::EnsureUndoRoom() {
int lenActionsNew = lenActions * 2;
Action *actionsNew = new Action[lenActionsNew];
if (!actionsNew)
return;
return ;
for (int act = 0; act <= currentAction; act++)
actionsNew[act].Grab(&actions[act]);
delete []actions;
@@ -425,11 +438,11 @@ void UndoHistory::EnsureUndoRoom() {
void UndoHistory::AppendAction(actionType at, int position, char *data, int lengthData) {
EnsureUndoRoom();
//Platform::DebugPrintf("%% %d action %d %d %d\n", at, position, lengthData, currentAction);
//Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at,
//Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at,
// actions[currentAction - 1].position, actions[currentAction - 1].lenData);
if (currentAction >= 1) {
if (0 == undoSequenceDepth) {
// Top level actions may not always be coalesced
// Top level actions may not always be coalesced
Action &actPrevious = actions[currentAction - 1];
// See if current action can be coalesced into previous action
// Will work if both are inserts or deletes and position is same
@@ -437,22 +450,23 @@ void UndoHistory::AppendAction(actionType at, int position, char *data, int leng
currentAction++;
} else if (currentAction == savePoint) {
currentAction++;
} else if ((at == removeAction) &&
((position + lengthData * 2) != actPrevious.position)) {
} else if ((at == removeAction) &&
((position + lengthData * 2) != actPrevious.position)) {
// Removals must be at same position to coalesce
currentAction++;
} else if ((at == insertAction) &&
(position != (actPrevious.position + actPrevious.lenData*2))) {
} else if ((at == insertAction) &&
(position != (actPrevious.position + actPrevious.lenData*2))) {
// Insertions must be immediately after to coalesce
currentAction++;
} else {
//Platform::DebugPrintf("action coalesced\n");
}
} else {
// Actions not at top level are always coalesced unless this is after return to top level
if (!actions[currentAction].mayCoalesce)
currentAction++;
}
}
} else {
currentAction++;
}
@@ -487,7 +501,7 @@ void UndoHistory::EndUndoAction() {
actions[currentAction].mayCoalesce = false;
}
}
void UndoHistory::DropUndoSequence() {
undoSequenceDepth = 0;
}
@@ -517,9 +531,9 @@ int UndoHistory::StartUndo() {
// Drop any trailing startAction
if (actions[currentAction].at == startAction && currentAction > 0)
currentAction--;
// Count the steps in this action
int act = currentAction;
int act = currentAction;
while (actions[act].at != startAction && act > 0) {
act--;
}
@@ -542,9 +556,9 @@ int UndoHistory::StartRedo() {
// Drop any leading startAction
if (actions[currentAction].at == startAction && currentAction < maxAction)
currentAction++;
// Count the steps in this action
int act = currentAction;
int act = currentAction;
while (actions[act].at != startAction && act < maxAction) {
act++;
}
@@ -563,11 +577,11 @@ CellBuffer::CellBuffer(int initialLength) {
body = new char[initialLength];
size = initialLength;
length = 0;
part1len = 0;
part1len = 0;
gaplen = initialLength;
part2body = body + gaplen;
readOnly = false;
collectingUndo = undoCollectAutoStart;
collectingUndo = true;
}
CellBuffer::~CellBuffer() {
@@ -577,7 +591,7 @@ CellBuffer::~CellBuffer() {
void CellBuffer::GapTo(int position) {
if (position == part1len)
return;
return ;
if (position < part1len) {
int diff = part1len - position;
//Platform::DebugPrintf("Move gap backwards to %d diff = %d part1len=%d length=%d \n", position,diff, part1len, length);
@@ -609,6 +623,7 @@ void CellBuffer::RoomFor(int insertionLength) {
size = newSize;
//Platform::DebugPrintf("end need room %d %d - size=%d length=%d\n", gaplen, insertionLength,size,length);
}
}
// To make it easier to write code that uses ByteAt, a position outside the range of the buffer
@@ -633,16 +648,16 @@ void CellBuffer::SetByteAt(int position, char ch) {
if (position < 0) {
//Platform::DebugPrintf("Bad position %d\n",position);
return;
return ;
}
if (position >= length + 11) {
Platform::DebugPrintf("Very Bad position %d of %d\n", position, length);
//exit(2);
return;
return ;
}
if (position >= length) {
//Platform::DebugPrintf("Bad position %d of %d\n",position,length);
return;
return ;
}
if (position < part1len) {
@@ -658,20 +673,20 @@ char CellBuffer::CharAt(int position) {
void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) {
if (lengthRetrieve < 0)
return;
return ;
if (position < 0)
return;
return ;
int bytePos = position * 2;
if ((bytePos + lengthRetrieve * 2) > length) {
Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n",bytePos,
lengthRetrieve, length);
return;
Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n", bytePos,
lengthRetrieve, length);
return ;
}
GapTo(0); // Move the buffer so its easy to subscript into it
char *pb = part2body + bytePos;
while (lengthRetrieve--) {
*buffer++ = *pb;
pb +=2;
pb += 2;
}
}
@@ -706,7 +721,7 @@ void CellBuffer::InsertCharStyle(int position, char ch, char style) {
}
bool CellBuffer::SetStyleAt(int position, char style, char mask) {
char curVal = ByteAt(position*2 + 1);
char curVal = ByteAt(position * 2 + 1);
if ((curVal & mask) != style) {
SetByteAt(position*2 + 1, static_cast<char>((curVal & ~mask) | style));
return true;
@@ -823,7 +838,7 @@ int CellBuffer::LineFromHandle(int markerHandle) {
void CellBuffer::BasicInsertString(int position, char *s, int insertLength) {
//Platform::DebugPrintf("Inserting at %d for %d\n", position, insertLength);
if (insertLength == 0)
return;
return ;
RoomFor(insertLength);
GapTo(position);
@@ -883,7 +898,7 @@ void CellBuffer::BasicInsertString(int position, char *s, int insertLength) {
void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
//Platform::DebugPrintf("Deleting at %d for %d\n", position, deleteLength);
if (deleteLength == 0)
return;
return ;
if ((position == 0) && (deleteLength == length)) {
// If whole buffer is being deleted, faster to reinitialise lines data
@@ -915,6 +930,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
ignoreNL = true; // First \n is not real deletion
}
char ch = chNext;
for (int i = 0; i < deleteLength; i += 2) {
chNext = ' ';
@@ -932,6 +948,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
ignoreNL = false; // Further \n are not real deletions
}
ch = chNext;
}
// May have to fix up end if last deletion causes cr to be next to lf
@@ -952,7 +969,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
part2body = body + gaplen;
}
undoCollectionType CellBuffer::SetUndoCollection(undoCollectionType collectUndo) {
bool CellBuffer::SetUndoCollection(bool collectUndo) {
collectingUndo = collectUndo;
uh.DropUndoSequence();
return collectingUndo;
@@ -994,12 +1011,12 @@ void CellBuffer::PerformUndoStep() {
char *styledData = new char[actionStep.lenData * 2];
for (int i = 0; i < actionStep.lenData; i++) {
styledData[i*2] = actionStep.data[i];
styledData[i*2+1] = 0;
styledData[i*2 + 1] = 0;
}
BasicInsertString(actionStep.position, styledData, actionStep.lenData*2);
delete []styledData;
}
uh.CompletedUndoStep();
uh.CompletedUndoStep();
}
bool CellBuffer::CanRedo() {
@@ -1020,14 +1037,14 @@ void CellBuffer::PerformRedoStep() {
char *styledData = new char[actionStep.lenData * 2];
for (int i = 0; i < actionStep.lenData; i++) {
styledData[i*2] = actionStep.data[i];
styledData[i*2+1] = 0;
styledData[i*2 + 1] = 0;
}
BasicInsertString(actionStep.position, styledData, actionStep.lenData*2);
delete []styledData;
} else if (actionStep.at == removeAction) {
BasicDeleteChars(actionStep.position, actionStep.lenData*2);
}
uh.CompletedRedoStep();
uh.CompletedRedoStep();
}
int CellBuffer::SetLineState(int line, int state) {
@@ -1043,7 +1060,7 @@ int CellBuffer::GetLineState(int line) {
int CellBuffer::GetMaxLineState() {
return lineStates.Length();
}
int CellBuffer::SetLevel(int line, int level) {
int prev = 0;
if ((line >= 0) && (line < lv.lines)) {
@@ -1066,3 +1083,6 @@ int CellBuffer::GetLevel(int line) {
}
}
void CellBuffer::ClearLevels() {
lv.ClearLevels();
}

View File

@@ -58,6 +58,7 @@ public:
void Expand(int sizeNew);
void ExpandLevels(int sizeNew=-1);
void ClearLevels();
void InsertValue(int pos, int value);
void SetValue(int pos, int value);
void Remove(int pos);
@@ -88,8 +89,6 @@ public:
void Grab(Action *source);
};
enum undoCollectionType { undoCollectNone, undoCollectAutoStart, undoCollectManualStart };
class UndoHistory {
Action *actions;
int lenActions;
@@ -141,12 +140,12 @@ private:
char *part2body;
bool readOnly;
undoCollectionType collectingUndo;
bool collectingUndo;
UndoHistory uh;
LineVector lv;
SVector<int, 4000> lineStates;
SVector lineStates;
void GapTo(int position);
void RoomFor(int insertionLength);
@@ -199,7 +198,7 @@ public:
void BasicInsertString(int position, char *s, int insertLength);
void BasicDeleteChars(int position, int deleteLength);
undoCollectionType SetUndoCollection(undoCollectionType collectUndo);
bool SetUndoCollection(bool collectUndo);
bool IsCollectingUndo();
void BeginUndoAction();
void EndUndoAction();
@@ -222,6 +221,7 @@ public:
int SetLevel(int line, int level);
int GetLevel(int line);
void ClearLevels();
};
#define CELL_SIZE 2

View File

@@ -171,12 +171,6 @@ bool ContractionState::SetVisible(int lineDocStart, int lineDocEnd, bool visible
delta += visible ? 1 : -1;
lines[line].visible = visible;
}
lines[line].displayLine += delta;
}
if (delta != 0) {
for (int line=lineDocEnd+1; line <= linesInDoc; line++) {
lines[line].displayLine += delta;
}
}
}
linesInDisplay += delta;
@@ -206,3 +200,9 @@ bool ContractionState::SetExpanded(int lineDoc, bool expanded) {
}
return false;
}
void ContractionState::ShowAll() {
delete []lines;
lines = 0;
size = 0;
}

View File

@@ -42,9 +42,11 @@ public:
bool GetVisible(int lineDoc) const;
bool SetVisible(int lineDocStart, int lineDocEnd, bool visible);
bool GetExpanded(int lineDoc) const;
bool SetExpanded(int lineDoc, bool expanded);
void ShowAll();
};
#endif

View File

@@ -54,7 +54,7 @@ int Document::AddRef() {
return refCount++;
}
// Decrease reference count and return its provius value.
// Decrease reference count and return its previous value.
// Delete the document if reference count reaches zero.
int Document::Release() {
int curRefCount = --refCount;
@@ -201,8 +201,8 @@ bool Document::IsCrLf(int pos) {
return (cb.CharAt(pos) == '\r') && (cb.CharAt(pos + 1) == '\n');
}
bool Document::IsDBCS(int pos) {
#if PLAT_WIN
bool Document::IsDBCS(int pos) {
if (dbcsCodePage) {
if (SC_CP_UTF8 == dbcsCodePage) {
unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos));
@@ -224,10 +224,14 @@ bool Document::IsDBCS(int pos) {
}
}
return false;
#else
return false;
#endif
}
#else
// PLAT_GTK or PLAT_WX
// TODO: support DBCS under GTK+ and WX
bool Document::IsDBCS(int) {
return false;
}
#endif
int Document::LenChar(int pos) {
if (IsCrLf(pos)) {
@@ -334,6 +338,8 @@ void Document::ModifiedAt(int pos) {
// Unlike Undo, Redo, and InsertStyledString, the pos argument is a cell number not a char number
void Document::DeleteChars(int pos, int len) {
if ((pos + len) > Length())
return;
if (cb.IsReadOnly() && enteredReadOnlyCount==0) {
enteredReadOnlyCount++;
NotifyModifyAttempt();
@@ -590,6 +596,8 @@ void Document::SetLineIndentation(int line, int indent) {
}
int Document::GetLineIndentPosition(int line) {
if (line < 0)
return 0;
int pos = LineStart(line);
int length = Length();
while ((pos < length) && isindentchar(cb.CharAt(pos))) {
@@ -598,6 +606,25 @@ int Document::GetLineIndentPosition(int line) {
return pos;
}
int Document::GetColumn(int pos) {
int column = 0;
int line = LineFromPosition(pos);
if ((line >= 0) && (line < LinesTotal())) {
for (int i=LineStart(line);i<pos;i++) {
char ch = cb.CharAt(i);
if (ch == '\t')
column = NextTab(column, tabInChars);
else if (ch == '\r')
return column;
else if (ch == '\n')
return column;
else
column++;
}
}
return column;
}
void Document::Indent(bool forwards, int lineBottom, int lineTop) {
// Dedent - suck white space off the front of the line to dedent by equivalent of a tab
for (int line = lineBottom; line >= lineTop; line--) {
@@ -690,25 +717,29 @@ int Document::NextWordStart(int pos, int delta) {
return pos;
}
bool Document::IsWordAt(int start, int end) {
int lengthDoc = Length();
if (start > 0) {
char ch = CharAt(start - 1);
if (IsWordChar(ch))
return false;
}
if (end < lengthDoc - 1) {
char ch = CharAt(end);
if (IsWordChar(ch))
return false;
bool Document::IsWordStartAt(int pos) {
if (pos > 0) {
return !IsWordChar(CharAt(pos - 1));
}
return true;
}
bool Document::IsWordEndAt(int pos) {
if (pos < Length() - 1) {
return !IsWordChar(CharAt(pos));
}
return true;
}
bool Document::IsWordAt(int start, int end) {
return IsWordStartAt(start) && IsWordEndAt(end);
}
// Find text in document, supporting both forward and backward
// searches (just pass minPos > maxPos to do a backward search)
// Has not been tested with backwards DBCS searches yet.
long Document::FindText(int minPos, int maxPos, const char *s, bool caseSensitive, bool word) {
long Document::FindText(int minPos, int maxPos, const char *s,
bool caseSensitive, bool word, bool wordStart) {
bool forward = minPos <= maxPos;
int increment = forward ? 1 : -1;
@@ -738,8 +769,10 @@ long Document::FindText(int minPos, int maxPos, const char *s, bool caseSensitiv
found = false;
}
if (found) {
if ((!word) || IsWordAt(pos, pos + lengthFind))
return pos;
if ((!word && !wordStart) ||
word && IsWordAt(pos, pos + lengthFind) ||
wordStart && IsWordStartAt(pos))
return pos;
}
}
} else {
@@ -751,8 +784,10 @@ long Document::FindText(int minPos, int maxPos, const char *s, bool caseSensitiv
found = false;
}
if (found) {
if ((!word) || IsWordAt(pos, pos + lengthFind))
return pos;
if (!(word && wordStart) ||
word && IsWordAt(pos, pos + lengthFind) ||
wordStart && IsWordStartAt(pos))
return pos;
}
}
}

View File

@@ -113,9 +113,10 @@ public:
bool CanUndo() { return cb.CanUndo(); }
bool CanRedo() { return cb.CanRedo(); }
void DeleteUndoHistory() { cb.DeleteUndoHistory(); }
undoCollectionType SetUndoCollection(undoCollectionType collectUndo) {
bool SetUndoCollection(bool collectUndo) {
return cb.SetUndoCollection(collectUndo);
}
bool IsCollectingUndo() { return cb.IsCollectingUndo(); }
void BeginUndoAction() { cb.BeginUndoAction(); }
void EndUndoAction() { cb.EndUndoAction(); }
void SetSavePoint();
@@ -124,9 +125,11 @@ public:
int GetLineIndentation(int line);
void SetLineIndentation(int line, int indent);
int GetLineIndentPosition(int line);
int GetColumn(int position);
void Indent(bool forwards, int lineBottom, int lineTop);
void ConvertLineEnds(int eolModeSet);
void SetReadOnly(bool set) { cb.SetReadOnly(set); }
bool IsReadOnly() { return cb.IsReadOnly(); }
void InsertChar(int pos, char ch);
void InsertString(int position, const char *s);
@@ -153,6 +156,7 @@ public:
int SetLevel(int line, int level);
int GetLevel(int line) { return cb.GetLevel(line); }
void ClearLevels() { cb.ClearLevels(); }
int GetLastChild(int lineParent, int level=-1);
int GetFoldParent(int line);
@@ -160,8 +164,9 @@ public:
int ExtendWordSelect(int pos, int delta);
int NextWordStart(int pos, int delta);
int Length() { return cb.Length(); }
long FindText(int minPos, int maxPos, const char *s, bool caseSensitive, bool word);
long FindText(WORD iMessage,WPARAM wParam,LPARAM lParam);
long FindText(int minPos, int maxPos, const char *s,
bool caseSensitive, bool word, bool wordStart);
long FindText(int iMessage, unsigned long wParam, long lParam);
int LinesTotal();
void ChangeCase(Range r, bool makeUpperCase);
@@ -186,6 +191,8 @@ public:
private:
bool IsDBCS(int pos);
bool IsWordChar(unsigned char ch);
bool IsWordStartAt(int pos);
bool IsWordEndAt(int pos);
bool IsWordAt(int start, int end);
void ModifiedAt(int pos);

View File

@@ -4,6 +4,7 @@
// The License.txt file describes the conditions under which this software may be distributed.
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
@@ -20,21 +21,22 @@
DocumentAccessor::~DocumentAccessor() {
}
#if PLAT_WIN
bool DocumentAccessor::InternalIsLeadByte(char ch) {
#if PLAT_GTK
// TODO: support DBCS under GTK+
return false;
#elif PLAT_WIN
if (SC_CP_UTF8 == codePage)
// For lexing, all characters >= 0x80 are treated the
// same so none is considered a lead byte.
return false;
else
return IsDBCSLeadByteEx(codePage, ch);
#elif PLAT_WX
return false;
#endif
}
#else
// PLAT_GTK or PLAT_WX
// TODO: support DBCS under GTK+ and WX
bool DocumentAccessor::InternalIsLeadByte(char) {
return false;
}
#endif
void DocumentAccessor::Fill(int position) {
if (lenDoc == -1)

View File

@@ -24,7 +24,7 @@ protected:
public:
DocumentAccessor(Document *pdoc_, PropSet &props_) :
Accessor(), pdoc(pdoc_), props(props_),
lenDoc(-1), validLen(0), chFlags(0) {
lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
}
~DocumentAccessor();
char StyleAt(int position);

File diff suppressed because it is too large Load Diff

View File

@@ -31,10 +31,15 @@ public:
// Drawing is only performed for maxLineLength characters on each line.
enum {maxLineLength = 4000};
int numCharsInLine;
char chars[maxLineLength];
char styles[maxLineLength];
char indicators[maxLineLength];
int positions[maxLineLength];
int xHighlightGuide;
bool highlightColumn;
int selStart;
int selEnd;
int edgeColumn;
char chars[maxLineLength+1];
char styles[maxLineLength+1];
char indicators[maxLineLength+1];
int positions[maxLineLength+1];
};
class Editor : public DocWatcher {
@@ -54,6 +59,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool stylesValid;
ViewStyle vs;
Palette palette;
int printMagnification;
int printColourMode;
bool hideSelection;
bool inOverstrike;
@@ -69,6 +76,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
Surface pixmapLine;
Surface pixmapSelMargin;
Surface pixmapSelPattern;
Surface pixmapIndentGuide;
Surface pixmapIndentGuideHighlight;
// Intellimouse support - currently only implemented for Windows
unsigned int ucWheelScrollLines;
int cWheelDelta; //wheel delta from roll
@@ -98,8 +107,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool needUpdateUI;
Position braces[2];
int bracesMatchStyle;
int highlightGuideColumn;
int edgeState;
int theEdge;
enum { notPainting, painting, paintAbandoned } paintState;
@@ -114,6 +123,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
enum { selStream, selRectangle, selRectangleFixed } selType;
int xStartSelect;
int xEndSelect;
bool primarySelection;
int caretPolicy;
int caretSlop;
@@ -168,6 +178,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
void SetSelection(int currentPos_, int anchor_);
void SetSelection(int currentPos_);
void SetEmptySelection(int currentPos_);
int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true);
int MovePositionTo(int newPos, bool extend = false);
int MovePositionSoVisible(int pos, int moveDir);
void SetLastXChosen();
@@ -183,10 +194,10 @@ protected: // ScintillaBase subclass needs access to much of Editor
void PaintSelMargin(Surface *surface, PRectangle &rc);
void LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout &ll);
void DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int xStart,
void DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVisible, int xStart,
PRectangle rcLine, LineLayout &ll);
void Paint(Surface *surfaceWindow, PRectangle rcArea);
long FormatRange(bool draw, FORMATRANGE *pfr);
long FormatRange(bool draw, RangeToFormat *pfr);
virtual void SetVerticalScrollPos() = 0;
virtual void SetHorizontalScrollPos() = 0;
@@ -199,6 +210,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
virtual void AddCharUTF(char *s, unsigned int len);
void ClearSelection();
void ClearAll();
void ClearDocumentStyle();
void Cut();
void PasteRectangular(int pos, const char *ptr, int len);
virtual void Copy() = 0;
@@ -216,6 +228,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
virtual void NotifyParent(SCNotification scn) = 0;
virtual void NotifyStyleToNeeded(int endStyleNeeded);
void NotifyChar(char ch);
void NotifyMove(int position);
void NotifySavePoint(bool isSavePoint);
void NotifyModifyAttempt();
virtual void NotifyDoubleClick(Point pt, bool shift);
@@ -231,24 +244,25 @@ protected: // ScintillaBase subclass needs access to much of Editor
#ifdef MACRO_SUPPORT
void NotifyMacroRecord(UINT iMessage, WPARAM wParam, LPARAM lParam);
void NotifyMacroRecord(unsigned int iMessage, unsigned long wParam, long lParam);
#endif
void PageMove(int direction, bool extend=false);
void ChangeCaseOfSelection(bool makeUpperCase);
void LineTranspose();
virtual int KeyCommand(UINT iMessage);
virtual void CancelModes();
virtual int KeyCommand(unsigned int iMessage);
virtual int KeyDefault(int /* key */, int /*modifiers*/);
int KeyDown(int key, bool shift, bool ctrl, bool alt);
bool GetWhitespaceVisible();
void SetWhitespaceVisible(bool view);
int GetWhitespaceVisible();
void SetWhitespaceVisible(int view);
void Indent(bool forwards);
long FindText(UINT iMessage,WPARAM wParam,LPARAM lParam);
long FindText(unsigned int iMessage, unsigned long wParam, long lParam);
void SearchAnchor();
long SearchText(UINT iMessage,WPARAM wParam,LPARAM lParam);
long SearchText(unsigned int iMessage, unsigned long wParam, long lParam);
void GoToLine(int lineNo);
char *CopyRange(int start, int end);
@@ -282,11 +296,11 @@ protected: // ScintillaBase subclass needs access to much of Editor
void ToggleContraction(int line);
void EnsureLineVisible(int line);
virtual LRESULT DefWndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) = 0;
virtual long DefWndProc(unsigned int iMessage, unsigned long wParam, long lParam) = 0;
public:
// Public so scintilla_send_message can use it
virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual long WndProc(unsigned int iMessage, unsigned long wParam, long lParam);
// Public so scintilla_set_id can use it
int ctrlID;
};

View File

@@ -28,7 +28,7 @@ void KeyMap::Clear() {
alloc = 0;
}
void KeyMap::AssignCmdKey(int key, int modifiers, UINT msg) {
void KeyMap::AssignCmdKey(int key, int modifiers, unsigned int msg) {
if ((len+1) >= alloc) {
KeyToCommand *ktcNew = new KeyToCommand[alloc + 5];
if (!ktcNew)
@@ -51,7 +51,7 @@ void KeyMap::AssignCmdKey(int key, int modifiers, UINT msg) {
len++;
}
UINT KeyMap::Find(int key, int modifiers) {
unsigned int KeyMap::Find(int key, int modifiers) {
for (int i=0; i < len; i++) {
if ((key == kmap[i].key) && (modifiers == kmap[i].modifiers)) {
return kmap[i].msg;
@@ -61,53 +61,55 @@ UINT KeyMap::Find(int key, int modifiers) {
}
KeyToCommand KeyMap::MapDefault[] = {
{VK_DOWN, SCI_NORM, SCI_LINEDOWN},
{VK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND},
{VK_DOWN, SCI_CTRL, SCI_LINESCROLLDOWN},
{VK_UP, SCI_NORM, SCI_LINEUP},
{VK_UP, SCI_SHIFT, SCI_LINEUPEXTEND},
{VK_UP, SCI_CTRL, SCI_LINESCROLLUP},
{VK_LEFT, SCI_NORM, SCI_CHARLEFT},
{VK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND},
{VK_LEFT, SCI_CTRL, SCI_WORDLEFT},
{VK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND},
{VK_RIGHT, SCI_NORM, SCI_CHARRIGHT},
{VK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND},
{VK_RIGHT, SCI_CTRL, SCI_WORDRIGHT},
{VK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND},
{VK_HOME, SCI_NORM, SCI_VCHOME},
{VK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND},
{VK_HOME, SCI_CTRL, SCI_DOCUMENTSTART},
{VK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND},
{VK_END, SCI_NORM, SCI_LINEEND},
{VK_END, SCI_SHIFT, SCI_LINEENDEXTEND},
{VK_END, SCI_CTRL, SCI_DOCUMENTEND},
{VK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND},
{VK_PRIOR, SCI_NORM, SCI_PAGEUP},
{VK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND},
{VK_NEXT, SCI_NORM, SCI_PAGEDOWN},
{VK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND},
{VK_DELETE, SCI_NORM, WM_CLEAR},
{VK_DELETE, SCI_SHIFT, WM_CUT},
{VK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT},
{VK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE},
{VK_INSERT, SCI_SHIFT, WM_PASTE},
{VK_INSERT, SCI_CTRL, WM_COPY},
{VK_ESCAPE, SCI_NORM, SCI_CANCEL},
{VK_BACK, SCI_NORM, SCI_DELETEBACK},
{VK_BACK, SCI_CTRL, SCI_DELWORDLEFT},
{'Z', SCI_CTRL, WM_UNDO},
{SCK_DOWN, SCI_NORM, SCI_LINEDOWN},
{SCK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND},
{SCK_DOWN, SCI_CTRL, SCI_LINESCROLLDOWN},
{SCK_UP, SCI_NORM, SCI_LINEUP},
{SCK_UP, SCI_SHIFT, SCI_LINEUPEXTEND},
{SCK_UP, SCI_CTRL, SCI_LINESCROLLUP},
{SCK_LEFT, SCI_NORM, SCI_CHARLEFT},
{SCK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND},
{SCK_LEFT, SCI_CTRL, SCI_WORDLEFT},
{SCK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND},
{SCK_RIGHT, SCI_NORM, SCI_CHARRIGHT},
{SCK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND},
{SCK_RIGHT, SCI_CTRL, SCI_WORDRIGHT},
{SCK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND},
{SCK_HOME, SCI_NORM, SCI_VCHOME},
{SCK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND},
{SCK_HOME, SCI_CTRL, SCI_DOCUMENTSTART},
{SCK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND},
{SCK_END, SCI_NORM, SCI_LINEEND},
{SCK_END, SCI_SHIFT, SCI_LINEENDEXTEND},
{SCK_END, SCI_CTRL, SCI_DOCUMENTEND},
{SCK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND},
{SCK_PRIOR, SCI_NORM, SCI_PAGEUP},
{SCK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND},
{SCK_NEXT, SCI_NORM, SCI_PAGEDOWN},
{SCK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND},
{SCK_DELETE, SCI_NORM, SCI_CLEAR},
{SCK_DELETE, SCI_SHIFT, SCI_CUT},
{SCK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT},
{SCK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE},
{SCK_INSERT, SCI_SHIFT, SCI_PASTE},
{SCK_INSERT, SCI_CTRL, SCI_COPY},
{SCK_ESCAPE, SCI_NORM, SCI_CANCEL},
{SCK_BACK, SCI_NORM, SCI_DELETEBACK},
{SCK_BACK, SCI_SHIFT, SCI_DELETEBACK},
{SCK_BACK, SCI_CTRL, SCI_DELWORDLEFT},
{SCK_BACK, SCI_ALT, SCI_UNDO},
{'Z', SCI_CTRL, SCI_UNDO},
{'Y', SCI_CTRL, SCI_REDO},
{'X', SCI_CTRL, WM_CUT},
{'C', SCI_CTRL, WM_COPY},
{'V', SCI_CTRL, WM_PASTE},
{'X', SCI_CTRL, SCI_CUT},
{'C', SCI_CTRL, SCI_COPY},
{'V', SCI_CTRL, SCI_PASTE},
{'A', SCI_CTRL, SCI_SELECTALL},
{VK_TAB, SCI_NORM, SCI_TAB},
{VK_TAB, SCI_SHIFT, SCI_BACKTAB},
{VK_RETURN, SCI_NORM, SCI_NEWLINE},
{VK_ADD, SCI_CTRL, SCI_ZOOMIN},
{VK_SUBTRACT, SCI_CTRL, SCI_ZOOMOUT},
{VK_DIVIDE, SCI_CTRL, SCI_SETZOOM},
{SCK_TAB, SCI_NORM, SCI_TAB},
{SCK_TAB, SCI_SHIFT, SCI_BACKTAB},
{SCK_RETURN, SCI_NORM, SCI_NEWLINE},
{SCK_ADD, SCI_CTRL, SCI_ZOOMIN},
{SCK_SUBTRACT, SCI_CTRL, SCI_ZOOMOUT},
{SCK_DIVIDE, SCI_CTRL, SCI_SETZOOM},
//'L', SCI_CTRL, SCI_FORMFEED,
{'L', SCI_CTRL, SCI_LINECUT},
{'L', SCI_CSHIFT, SCI_LINEDELETE},

View File

@@ -7,9 +7,9 @@
#define KEYTOCOMMAND_H
#define SCI_NORM 0
#define SCI_SHIFT SHIFT_PRESSED
#define SCI_CTRL LEFT_CTRL_PRESSED
#define SCI_ALT LEFT_ALT_PRESSED
#define SCI_SHIFT SCMOD_SHIFT
#define SCI_CTRL SCMOD_CTRL
#define SCI_ALT SCMOD_ALT
#define SCI_CSHIFT (SCI_CTRL | SCI_SHIFT)
#define SCI_ASHIFT (SCI_ALT | SCI_SHIFT)
@@ -17,7 +17,7 @@ class KeyToCommand {
public:
int key;
int modifiers;
UINT msg;
unsigned int msg;
};
class KeyMap {
@@ -29,8 +29,8 @@ public:
KeyMap();
~KeyMap();
void Clear();
void AssignCmdKey(int key, int modifiers, UINT msg);
UINT Find(int key, int modifiers); // 0 returned on failure
void AssignCmdKey(int key, int modifiers, unsigned int msg);
unsigned int Find(int key, int modifiers); // 0 returned on failure
};
#endif

View File

@@ -19,14 +19,13 @@
static bool classifyWordCpp(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
char s[100];
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
bool wordIsUUID = false;
for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
s[i] = styler[start + i];
s[i + 1] = '\0';
}
bool wordIsUUID = false;
char chAttr = SCE_C_IDENTIFIER;
if (wordIsNumber)
if (isdigit(s[0]) || (s[0] == '.'))
chAttr = SCE_C_NUMBER;
else {
if (keywords.InList(s)) {
@@ -46,6 +45,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
styler.StartAt(startPos);
bool fold = styler.GetPropertyInt("fold");
bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor");
int lineCurrent = styler.GetLine(startPos);
int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
int levelCurrent = levelPrev;
@@ -56,7 +56,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
char chPrev = ' ';
char chNext = styler[startPos];
unsigned int lengthDoc = startPos + length;
int visChars = 0;
int visibleChars = 0;
styler.StartSegment(startPos);
bool lastWordWasUUID = false;
for (unsigned int i = startPos; i < lengthDoc; i++) {
@@ -64,6 +64,8 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
chNext = styler.SafeGetCharAt(i + 1);
if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
// Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
// Avoid triggering two times on Dos/Win
// End of line
if (state == SCE_C_STRINGEOL) {
styler.ColourTo(i, state);
@@ -71,18 +73,18 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
}
if (fold) {
int lev = levelPrev;
if (visChars == 0)
if (visibleChars == 0)
lev |= SC_FOLDLEVELWHITEFLAG;
if ((levelCurrent > levelPrev) && (visChars > 0))
if ((levelCurrent > levelPrev) && (visibleChars > 0))
lev |= SC_FOLDLEVELHEADERFLAG;
styler.SetLevel(lineCurrent, lev);
lineCurrent++;
visChars = 0;
levelPrev = levelCurrent;
}
visibleChars = 0;
}
if (!isspace(ch))
visChars++;
visibleChars++;
if (styler.IsLeadByte(ch)) {
chNext = styler.SafeGetCharAt(i + 2);
@@ -92,13 +94,19 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
}
if (state == SCE_C_DEFAULT) {
if (iswordstart(ch)) {
if (ch == '@' && chNext == '\"') {
styler.ColourTo(i-1, state);
state = SCE_C_VERBATIM;
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} else if (iswordstart(ch) || (ch == '@')) {
styler.ColourTo(i-1, state);
if (lastWordWasUUID) {
state = SCE_C_UUID;
lastWordWasUUID = false;
} else {
state = SCE_C_WORD;
state = SCE_C_IDENTIFIER;
}
} else if (ch == '/' && chNext == '*') {
styler.ColourTo(i-1, state);
@@ -115,9 +123,16 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
} else if (ch == '\'') {
styler.ColourTo(i-1, state);
state = SCE_C_CHARACTER;
} else if (ch == '#') {
} else if (ch == '#' && visibleChars == 1) {
// Preprocessor commands are alone on their line
styler.ColourTo(i-1, state);
state = SCE_C_PREPROCESSOR;
// Skip whitespace between # and preprocessor word
do {
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} while (isspace(ch) && (i < lengthDoc));
} else if (isoperator(ch)) {
styler.ColourTo(i-1, state);
styler.ColourTo(i, SCE_C_OPERATOR);
@@ -125,7 +140,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
levelCurrent += (ch == '{') ? 1 : -1;
}
}
} else if (state == SCE_C_WORD) {
} else if (state == SCE_C_IDENTIFIER) {
if (!iswordchar(ch)) {
lastWordWasUUID = classifyWordCpp(styler.GetStartSegment(), i - 1, keywords, styler);
state = SCE_C_DEFAULT;
@@ -140,8 +155,6 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
state = SCE_C_STRING;
} else if (ch == '\'') {
state = SCE_C_CHARACTER;
} else if (ch == '#') {
state = SCE_C_PREPROCESSOR;
} else if (isoperator(ch)) {
styler.ColourTo(i, SCE_C_OPERATOR);
if ((ch == '{') || (ch == '}')) {
@@ -151,9 +164,16 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
}
} else {
if (state == SCE_C_PREPROCESSOR) {
if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
styler.ColourTo(i-1, state);
state = SCE_C_DEFAULT;
if (stylingWithinPreprocessor) {
if (isspace(ch)) {
styler.ColourTo(i-1, state);
state = SCE_C_DEFAULT;
}
} else {
if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
styler.ColourTo(i-1, state);
state = SCE_C_DEFAULT;
}
}
} else if (state == SCE_C_COMMENT) {
if (ch == '/' && chPrev == '*') {
@@ -188,13 +208,10 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
} else if (ch == '\"') {
styler.ColourTo(i, state);
state = SCE_C_DEFAULT;
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} else if (chNext == '\r' || chNext == '\n') {
} else if (chNext == '\r' || chNext == '\n') {
styler.ColourTo(i-1, SCE_C_STRINGEOL);
state = SCE_C_STRINGEOL;
}
}
} else if (state == SCE_C_CHARACTER) {
if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) {
styler.ColourTo(i-1, SCE_C_STRINGEOL);
@@ -208,39 +225,26 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
} else if (ch == '\'') {
styler.ColourTo(i, state);
state = SCE_C_DEFAULT;
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (state == SCE_C_VERBATIM) {
if (ch == '\"') {
if (chNext == '\"') {
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} else {
styler.ColourTo(i, state);
state = SCE_C_DEFAULT;
}
}
} else if (state == SCE_C_UUID) {
if (ch == '\r' || ch == '\n' || ch == ')') {
styler.ColourTo(i-1, state);
if (ch == ')')
styler.ColourTo(i, SCE_C_OPERATOR);
state = SCE_C_DEFAULT;
}
}
if (state == SCE_C_DEFAULT) { // One of the above succeeded
if (ch == '/' && chNext == '*') {
if (styler.SafeGetCharAt(i + 2) == '*')
state = SCE_C_COMMENTDOC;
else
state = SCE_C_COMMENT;
} else if (ch == '/' && chNext == '/') {
state = SCE_C_COMMENTLINE;
} else if (ch == '\"') {
state = SCE_C_STRING;
} else if (ch == '\'') {
state = SCE_C_CHARACTER;
} else if (ch == '#') {
state = SCE_C_PREPROCESSOR;
} else if (iswordstart(ch)) {
state = SCE_C_WORD;
} else if (isoperator(ch)) {
styler.ColourTo(i, SCE_C_OPERATOR);
if ((ch == '{') || (ch == '}')) {
levelCurrent += (ch == '{') ? 1 : -1;
}
}
}
}
chPrev = ch;
}

File diff suppressed because it is too large Load Diff

View File

@@ -49,6 +49,46 @@ static void ColouriseBatchDoc(unsigned int startPos, int length, int, WordList *
ColouriseBatchLine(lineBuffer, startPos + length, styler);
}
static void ColouriseDiffLine(char *lineBuffer, int endLine, Accessor &styler) {
// It is needed to remember the current state to recognize starting
// comment lines before the first "diff " or "--- ". If a real
// difference starts then each line starting with ' ' is a whitespace
// otherwise it is considered a comment (Only in..., Binary file...)
if (0 == strncmp(lineBuffer, "diff ", 3)) {
styler.ColourTo(endLine, 2);
} else if (0 == strncmp(lineBuffer, "--- ", 3)) {
styler.ColourTo(endLine, 3);
} else if (0 == strncmp(lineBuffer, "+++ ", 3)) {
styler.ColourTo(endLine, 3);
} else if (lineBuffer[0] == '@') {
styler.ColourTo(endLine, 4);
} else if (lineBuffer[0] == '-') {
styler.ColourTo(endLine, 5);
} else if (lineBuffer[0] == '+') {
styler.ColourTo(endLine, 6);
} else if (lineBuffer[0] != ' ') {
styler.ColourTo(endLine, 1);
} else {
styler.ColourTo(endLine, 0);
}
}
static void ColouriseDiffDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
char lineBuffer[1024];
styler.StartAt(startPos);
styler.StartSegment(startPos);
unsigned int linePos = 0;
for (unsigned int i = startPos; i < startPos + length; i++) {
lineBuffer[linePos++] = styler[i];
if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) {
ColouriseDiffLine(lineBuffer, i, styler);
linePos = 0;
}
}
if (linePos > 0)
ColouriseDiffLine(lineBuffer, startPos + length, styler);
}
static void ColourisePropsLine(char *lineBuffer, int lengthLine, int startLine, int endPos, Accessor &styler) {
int i = 0;
while (isspace(lineBuffer[i]) && (i < lengthLine)) // Skip initial spaces
@@ -126,15 +166,21 @@ static void ColouriseMakeDoc(unsigned int startPos, int length, int, WordList *[
static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, int endPos, Accessor &styler) {
if (lineBuffer[0] == '>') {
// Command or return status
styler.ColourTo(endPos, 4);
styler.ColourTo(endPos, SCE_ERR_CMD);
} else if (strstr(lineBuffer, "File \"") && strstr(lineBuffer, ", line ")) {
styler.ColourTo(endPos, 1);
styler.ColourTo(endPos, SCE_ERR_PYTHON);
} else if (0 == strncmp(lineBuffer, "Error ", strlen("Error "))) {
// Borland error message
styler.ColourTo(endPos, 5);
styler.ColourTo(endPos, SCE_ERR_BORLAND);
} else if (0 == strncmp(lineBuffer, "Warning ", strlen("Warning "))) {
// Borland warning message
styler.ColourTo(endPos, 5);
styler.ColourTo(endPos, SCE_ERR_BORLAND);
} else if (strstr(lineBuffer, " at " ) &&
strstr(lineBuffer, " at " ) < lineBuffer+lengthLine &&
strstr(lineBuffer, " line ") &&
strstr(lineBuffer, " line ") < lineBuffer+lengthLine) {
// perl error message
styler.ColourTo(endPos, SCE_ERR_PERL);
} else {
// Look for <filename>:<line>:message
// Look for <filename>(line)message
@@ -168,11 +214,11 @@ static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, int endPos,
}
}
if (state == 3) {
styler.ColourTo(endPos, 2);
styler.ColourTo(endPos, SCE_ERR_GCC);
} else if ((state == 13) || (state == 14) || (state == 15)) {
styler.ColourTo(endPos, 3);
styler.ColourTo(endPos, SCE_ERR_MS);
} else {
styler.ColourTo(endPos, 0);
styler.ColourTo(endPos, SCE_ERR_DEFAULT);
}
}
}
@@ -297,8 +343,9 @@ static void ColouriseLatexDoc(unsigned int startPos, int length, int initStyle,
styler.ColourTo(lengthDoc, state);
}
LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc);
LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc);
LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc);
LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc);
LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc);
LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc);
LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc);
LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc);
LexerModule lmLatex(SCLEX_LATEX, ColouriseLatexDoc);

View File

@@ -107,7 +107,7 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
state = SCE_PL_DEFAULT;
}
styler.StartAt(startPos);
char chPrev = ' ';
char chPrev = styler.SafeGetCharAt(startPos - 1);
char chNext = styler[startPos];
styler.StartSegment(startPos);
for (int i = startPos; i < lengthDoc; i++) {
@@ -230,7 +230,7 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
quotes = 0;
sookedpos = 0;
sooked[sookedpos] = '\0';
} else if (ch == '=' && isalpha(chNext)) {
} else if (ch == '=' && (chPrev == '\r' || chPrev == '\n') && isalpha(chNext)) {
styler.ColourTo(i - 1, state);
state = SCE_PL_POD;
quotes = 0;
@@ -284,7 +284,7 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
state = SCE_PL_DEFAULT;
}
} else if (state == SCE_PL_HERE) {
if (isalnum(ch) && quotes < 2) {
if ((isalnum(ch) || ch == '_') && quotes < 2) {
sooked[sookedpos++] = ch;
sooked[sookedpos] = '\0';
if (quotes == 0)
@@ -292,14 +292,17 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
} else {
quotes++;
}
if (quotes > 1 && isMatch(styler, lengthDoc, i, sooked) && (chPrev == '\n' || chPrev == '\r') ) {
styler.ColourTo(i + sookedpos - 1, SCE_PL_HERE);
if ((quotes > 1) &&
(chPrev == '\n' || chPrev == '\r') &&
isMatch(styler, lengthDoc, i, sooked)) {
i += sookedpos;
chNext = styler.SafeGetCharAt(i);
if (chNext == '\n' || chNext == '\r') {
styler.ColourTo(i - 1, SCE_PL_HERE);
state = SCE_PL_DEFAULT;
}
chNext = ' ';
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (state == SCE_PL_STRING) {
if (ch == '\\') {
@@ -338,13 +341,13 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (state == SCE_PL_POD) {
if (ch == '=') {
if (ch == '=' && (chPrev == '\r' || chPrev == '\n')) {
if (isMatch(styler, lengthDoc, i, "=cut")) {
styler.ColourTo(i - 1 + 4, state);
i += 4;
state = SCE_PL_DEFAULT;
chNext = ' ';
ch = ' ';
ch = styler.SafeGetCharAt(i);
chNext = styler.SafeGetCharAt(i + 1);
}
}
} else if (state == SCE_PL_SCALAR) {
@@ -409,7 +412,32 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
quoteDown = opposite(ch);
quotes++;
} else {
if (ch == quoteDown && chPrev != '\\') {
if (quotes == 0 && quoteRep == 1) {
/* We matched something like s(...) or tr{...}
* and are looking for the next matcher characters,
* which could be either bracketed ({...}) or non-bracketed
* (/.../).
*
* Number-signs are problematic. If they occur after
* the close of the first part, treat them like
* a quoteUp char, even if they actually start comments.
*
* If we find an alnum, we end the regsubst, and punt.
*
* Eric Promislow ericp@activestate.com Aug 9,2000
*/
if (isspace(ch)) {
// Keep going
} else if (isalnum(ch)) {
styler.ColourTo(i, state);
state = SCE_PL_DEFAULT;
ch = ' ';
} else {
quoteUp = ch;
quoteDown = opposite(ch);
quotes++;
}
} else if (ch == quoteDown && chPrev != '\\') {
quotes--;
if (quotes == 0) {
quoteRep--;

View File

@@ -33,6 +33,13 @@ static void ClassifyWordPy(unsigned int start, unsigned int end, WordList &keywo
chAttr = SCE_P_NUMBER;
else if (keywords.InList(s))
chAttr = SCE_P_WORD;
// make sure that dot-qualifiers inside the word are lexed correct
else for (unsigned int i = 0; i < end - start + 1; i++) {
if (styler[start + i] == '.') {
styler.ColourTo(start + i - 1, chAttr);
styler.ColourTo(start + i, SCE_P_OPERATOR);
}
}
styler.ColourTo(end, chAttr);
strcpy(prevWord, s);
}

View File

@@ -20,20 +20,21 @@
static int classifyWordVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
char s[100];
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.') ||
(styler[start] == '&' && tolower(styler[start+1]) == 'h');
unsigned int i;
for (i = 0; i < end - start + 1 && i < 30; i++) {
s[i] = static_cast<char>(tolower(styler[start + i]));
s[i + 1] = '\0';
}
s[i] = '\0';
char chAttr = SCE_C_DEFAULT;
if (wordIsNumber)
chAttr = SCE_C_NUMBER;
else {
if (keywords.InList(s)) {
if (strcmp(s, "rem") == 0)
chAttr = SCE_C_COMMENTLINE;
else if (keywords.InList(s))
chAttr = SCE_C_WORD;
if (strcmp(s, "rem") == 0)
chAttr = SCE_C_COMMENTLINE;
}
}
styler.ColourTo(end, chAttr);
if (chAttr == SCE_C_COMMENTLINE)
@@ -49,6 +50,7 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
styler.StartAt(startPos);
int visibleChars = 0;
int state = initStyle;
char chNext = styler[startPos];
styler.StartSegment(startPos);
@@ -63,6 +65,17 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
continue;
}
if (ch == '\r' || ch == '\n') {
// End of line
if (state == SCE_C_COMMENTLINE || state == SCE_C_PREPROCESSOR) {
styler.ColourTo(i - 1, state);
state = SCE_C_DEFAULT;
}
visibleChars = 0;
}
if (!isspace(ch))
visibleChars++;
if (state == SCE_C_DEFAULT) {
if (iswordstart(ch)) {
styler.ColourTo(i - 1, state);
@@ -73,6 +86,16 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
} else if (ch == '\"') {
styler.ColourTo(i - 1, state);
state = SCE_C_STRING;
} else if (ch == '#' && visibleChars == 1) {
// Preprocessor commands are alone on their line
styler.ColourTo(i - 1, state);
state = SCE_C_PREPROCESSOR;
} else if (ch == '&' && tolower(chNext) == 'h') {
styler.ColourTo(i - 1, state);
state = SCE_C_WORD;
} else if (isoperator(ch)) {
styler.ColourTo(i - 1, state);
styler.ColourTo(i, SCE_C_OPERATOR);
}
} else if (state == SCE_C_WORD) {
if (!iswordchar(ch)) {
@@ -82,16 +105,14 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
state = SCE_C_COMMENTLINE;
} else if (ch == '\"') {
state = SCE_C_STRING;
} else if (isoperator(ch)) {
styler.ColourTo(i - 1, state);
styler.ColourTo(i, SCE_C_OPERATOR);
}
}
}
} else {
if (state == SCE_C_COMMENTLINE) {
if (ch == '\r' || ch == '\n') {
styler.ColourTo(i - 1, state);
state = SCE_C_DEFAULT;
}
} else if (state == SCE_C_STRING) {
if (state == SCE_C_STRING) {
// VB doubles quotes to preserve them
if (ch == '\"') {
styler.ColourTo(i, state);

View File

@@ -24,6 +24,18 @@ bool EqualCaseInsensitive(const char *a, const char *b) {
#endif
}
SString::size_type SString::npos = -1;
inline unsigned int HashString(const char *s) {
unsigned int ret = 0;
while (*s) {
ret <<= 4;
ret ^= *s;
s++;
}
return ret;
}
// Get a line of input. If end of line escaped with '\\' then continue reading.
static bool GetFullLine(const char *&fpc, int &lenData, char *s, int len) {
bool continuation = true;
@@ -56,47 +68,39 @@ static bool GetFullLine(const char *&fpc, int &lenData, char *s, int len) {
PropSet::PropSet() {
superPS = 0;
size = 10;
used = 0;
vals = new char * [size];
for (int root=0; root < hashRoots; root++)
props[root] = 0;
}
PropSet::~PropSet() {
superPS = 0;
Clear();
delete []vals;
}
void PropSet::EnsureCanAddEntry() {
if (used >= size - 2) {
int newsize = size + 10;
char **newvals = new char * [newsize];
for (int i = 0; i < used; i++) {
newvals[i] = vals[i];
}
delete []vals;
vals = newvals;
size = newsize;
}
}
void PropSet::Set(const char *key, const char *val) {
EnsureCanAddEntry();
for (int i = 0; i < used; i += 2) {
if (EqualCaseInsensitive(vals[i], key)) {
unsigned int hash = HashString(key);
for (Property *p=props[hash % hashRoots]; p; p=p->next) {
if ((hash == p->hash) && (0 == strcmp(p->key, key))) {
// Replace current value
delete [](vals[i + 1]);
vals[i + 1] = StringDup(val);
delete [](p->val);
p->val = StringDup(val);
return;
}
}
// Not found
vals[used++] = StringDup(key);
vals[used++] = StringDup(val);
Property *pNew = new Property;
if (pNew) {
pNew->hash = HashString(key);
pNew->key = StringDup(key);
pNew->val = StringDup(val);
pNew->next = props[hash % hashRoots];
props[hash % hashRoots] = pNew;
}
}
void PropSet::Set(char *keyval) {
while (isspace(*keyval))
keyval++;
char *eqat = strchr(keyval, '=');
if (eqat) {
*eqat = '\0';
@@ -106,11 +110,12 @@ void PropSet::Set(char *keyval) {
}
SString PropSet::Get(const char *key) {
for (int i = 0; i < used; i += 2) {
if (EqualCaseInsensitive(vals[i], key)) {
return vals[i + 1];
}
}
unsigned int hash = HashString(key);
for (Property *p=props[hash % hashRoots]; p; p=p->next) {
if ((hash == p->hash) && (0 == strcmp(p->key, key))) {
return p->val;
}
}
if (superPS) {
// Failed here, so try in base property set
return superPS->Get(key);
@@ -119,6 +124,36 @@ SString PropSet::Get(const char *key) {
}
}
SString PropSet::GetExpanded(const char *key) {
SString val = Get(key);
return Expand(val.c_str());
}
SString PropSet::Expand(const char *withvars) {
char *base = StringDup(withvars);
char *cpvar = strstr(base, "$(");
while (cpvar) {
char *cpendvar = strchr(cpvar, ')');
if (cpendvar) {
int lenvar = cpendvar - cpvar - 2; // Subtract the $()
char *var = StringDup(cpvar+2, lenvar);
SString val = GetExpanded(var);
int newlenbase = strlen(base) + val.length() - lenvar;
char *newbase = new char[newlenbase];
strncpy(newbase, base, cpvar - base);
strcpy(newbase + (cpvar - base), val.c_str());
strcpy(newbase + (cpvar - base) + val.length(), cpendvar + 1);
delete []var;
delete []base;
base = newbase;
}
cpvar = strstr(base, "$(");
}
SString sret = base;
delete []base;
return sret;
}
int PropSet::GetInt(const char *key, int defaultValue) {
SString val = Get(key);
if (val.length())
@@ -127,9 +162,9 @@ int PropSet::GetInt(const char *key, int defaultValue) {
return defaultValue;
}
bool isprefix(const char *target, const char *prefix) {
inline bool isprefix(const char *target, const char *prefix) {
while (*target && *prefix) {
if (toupper(*target) != toupper(*prefix))
if (*target != *prefix)
return false;
target++;
prefix++;
@@ -146,64 +181,63 @@ bool issuffix(const char *target, const char *suffix) {
if (lensuffix > lentarget)
return false;
for (int i = lensuffix - 1; i >= 0; i--) {
if (toupper(target[i + lentarget - lensuffix]) != toupper(suffix[i]))
if (target[i + lentarget - lensuffix] != suffix[i])
return false;
}
return true;
}
SString PropSet::GetWild(const char *keybase, const char *filename) {
for (int i = 0; i < used; i += 2) {
if (isprefix(vals[i], keybase)) {
char *orgkeyfile = vals[i] + strlen(keybase);
char *keyfile = NULL;
for (int root=0; root < hashRoots; root++) {
for (Property *p=props[root]; p; p=p->next) {
if (isprefix(p->key, keybase)) {
char *orgkeyfile = p->key + strlen(keybase);
char *keyfile = NULL;
if (strstr(orgkeyfile, "$(") == orgkeyfile) {
char *cpendvar = strchr(orgkeyfile, ')');
if (cpendvar) {
int lenvar = cpendvar - orgkeyfile - 2; // Subtract the $()
char *var = static_cast<char *>(malloc(lenvar + 1));
strncpy(var, orgkeyfile + 2, lenvar);
var[lenvar] = '\0';
SString s = Get(var);
free(var);
keyfile = strdup(s.c_str());
}
}
char *keyptr = keyfile;
if (strstr(orgkeyfile, "$(") == orgkeyfile) {
char *cpendvar = strchr(orgkeyfile, ')');
if (cpendvar) {
*cpendvar = '\0';
SString s = Get(orgkeyfile + 2);
*cpendvar= ')';
keyfile = strdup(s.c_str());
}
}
char *keyptr = keyfile;
if (keyfile == NULL)
keyfile = orgkeyfile;
if (keyfile == NULL)
keyfile = orgkeyfile;
for (; ; ) {
char *del = strchr(keyfile, ';');
if (del == NULL)
del = keyfile + strlen(keyfile);
char delchr = *del;
*del = '\0';
if (*keyfile == '*') {
if (issuffix(filename, keyfile + 1)) {
*del = delchr;
free(keyptr);
return vals[i + 1];
}
} else if (EqualCaseInsensitive(keyfile, filename)) {
*del = delchr;
free(keyptr);
return vals[i + 1];
}
if (delchr == '\0')
break;
*del = delchr;
keyfile = del + 1;
}
free(keyptr);
for (; ; ) {
char *del = strchr(keyfile, ';');
if (del == NULL)
del = keyfile + strlen(keyfile);
char delchr = *del;
*del = '\0';
if (*keyfile == '*') {
if (issuffix(filename, keyfile + 1)) {
*del = delchr;
free(keyptr);
return p->val;
}
} else if (0 == strcmp(keyfile, filename)) {
*del = delchr;
free(keyptr);
return p->val;
}
if (delchr == '\0')
break;
*del = delchr;
keyfile = del + 1;
}
free(keyptr);
if (EqualCaseInsensitive(vals[i], keybase)) {
return vals[i + 1];
}
}
}
if (0 == strcmp(p->key, keybase)) {
return p->val;
}
}
}
}
if (superPS) {
// Failed here, so try in base property set
return superPS->GetWild(keybase, filename);
@@ -219,9 +253,7 @@ SString PropSet::GetNewExpand(const char *keybase, const char *filename) {
char *cpendvar = strchr(cpvar, ')');
if (cpendvar) {
int lenvar = cpendvar - cpvar - 2; // Subtract the $()
char *var = new char[lenvar + 1];
strncpy(var, cpvar + 2, lenvar);
var[lenvar] = '\0';
char *var = StringDup(cpvar+2, lenvar);
SString val = GetWild(var, filename);
int newlenbase = strlen(base) + val.length() - lenvar;
char *newbase = new char[newlenbase];
@@ -240,36 +272,54 @@ SString PropSet::GetNewExpand(const char *keybase, const char *filename) {
}
void PropSet::Clear() {
for (int i = 0; i < used; i++) {
delete [](vals[i]);
vals[i] = 0;
}
used = 0;
for (int root=0; root < hashRoots; root++) {
Property *p=props[root];
while (p) {
Property *pNext=p->next;
p->hash = 0;
delete p->key;
p->key = 0;
delete p->val;
p->val = 0;
delete p;
p = pNext;
}
props[root] = 0;
}
}
void PropSet::ReadFromMemory(const char *data, int len) {
if (len > 0) {
const char *pd = data;
char linebuf[60000];
while (GetFullLine(pd, len, linebuf, sizeof(linebuf))) {
if (isalpha(linebuf[0]))
Set(linebuf);
}
// If there is a final line:
if (isalpha(linebuf[0]))
void PropSet::ReadFromMemory(const char *data, int len, const char *directoryForImports) {
const char *pd = data;
char linebuf[60000];
bool ifIsTrue = true;
while (len > 0) {
GetFullLine(pd, len, linebuf, sizeof(linebuf));
if (isalpha(linebuf[0])) // If clause ends with first non-indented line
ifIsTrue = true;
if (isprefix(linebuf, "if ")) {
const char *expr = linebuf + strlen("if") + 1;
ifIsTrue = GetInt(expr);
} else if (isprefix(linebuf, "import ") && directoryForImports) {
char importPath[1024];
strcpy(importPath, directoryForImports);
strcat(importPath, linebuf + strlen("import") + 1);
strcat(importPath, ".properties");
Read(importPath,directoryForImports);
} else if (isalpha(linebuf[0])) {
Set(linebuf);
} else if (isspace(linebuf[0]) && ifIsTrue) {
Set(linebuf);
}
}
}
void PropSet::Read(const char *filename) {
//printf("Opening properties <%s>\n", filename);
Clear();
void PropSet::Read(const char *filename, const char *directoryForImports) {
char propsData[60000];
FILE *rcfile = fopen(filename, "rb");
if (rcfile) {
int lenFile = fread(propsData, 1, sizeof(propsData), rcfile);
fclose(rcfile);
ReadFromMemory(propsData, lenFile);
ReadFromMemory(propsData, lenFile, directoryForImports);
} else {
//printf("Could not open <%s>\n", filename);
}
@@ -285,7 +335,8 @@ static bool iswordsep(char ch, bool onlyLineEnds) {
// Creates an array that points into each word in the string and puts \0 terminators
// after each word.
static char **ArrayFromWordList(char *wordlist, bool onlyLineEnds = false) {
static char **ArrayFromWordList(char *wordlist, int *len, bool onlyLineEnds = false) {
#if 1
char prev = '\n';
int words = 0;
for (int j = 0; wordlist[j]; j++) {
@@ -297,8 +348,8 @@ static char **ArrayFromWordList(char *wordlist, bool onlyLineEnds = false) {
if (keywords) {
words = 0;
prev = '\0';
int len = strlen(wordlist);
for (int k = 0; k < len; k++) {
int slen = strlen(wordlist);
for (int k = 0; k < slen; k++) {
if (!iswordsep(wordlist[k], onlyLineEnds)) {
if (!prev) {
keywords[words] = &wordlist[k];
@@ -309,25 +360,69 @@ static char **ArrayFromWordList(char *wordlist, bool onlyLineEnds = false) {
}
prev = wordlist[k];
}
keywords[words] = &wordlist[len];
keywords[words] = &wordlist[slen];
*len = words;
} else {
*len = 0;
}
#else
int words = 0; // length of the returned buffer of pointers
#undef APICHUNK // how many pointers will be pre-allocated (to avoid buffer reallocation on each new pointer)
#define APICHUNK 256
int size = APICHUNK; // real size of the returned buffer of pointers
char **keywords; // buffer for the pointers returned
int slen = strlen(wordlist); //length of the buffer with api file
keywords = (char**) malloc((size + 1) * sizeof (*keywords));
words = 0;
for (int k = 0;;) {
while (iswordsep(wordlist[k], onlyLineEnds))
wordlist[k++] = '\0';
if (k >= slen)
break;
if (words >= size) {
do
size += APICHUNK;
while (size <= words);
keywords = (char**) realloc(keywords, (size + 1) * sizeof (*keywords));
}
keywords[words++] = wordlist + k;
do
if (k < slen)
k++;
else
goto out;
while (!iswordsep(wordlist[k], onlyLineEnds));
}
out:
keywords[words] = wordlist + slen;
*len = words;
#endif
return keywords;
}
void WordList::Clear() {
if (words) {
delete []words;
delete []list;
#if 1
delete []words;
#else
free(words);
#endif
free(wordsNoCase);
}
words = 0;
wordsNoCase = 0;
list = 0;
len = 0;
sorted = false;
}
void WordList::Set(const char *s) {
len = 0;
list = StringDup(s);
words = ArrayFromWordList(list, onlyLineEnds);
sorted = false;
words = ArrayFromWordList(list, &len, onlyLineEnds);
wordsNoCase = (char**) malloc ((len + 1) * sizeof (*wordsNoCase));
memcpy(wordsNoCase, words, (len + 1) * sizeof (*words));
}
char *WordList::Allocate(int size) {
@@ -337,45 +432,35 @@ char *WordList::Allocate(int size) {
}
void WordList::SetFromAllocated() {
len = 0;
words = ArrayFromWordList(list, onlyLineEnds);
sorted = false;
words = ArrayFromWordList(list, &len, onlyLineEnds);
wordsNoCase = (char**) malloc ((len + 1) * sizeof (*wordsNoCase));
memcpy(wordsNoCase, words, (len + 1) * sizeof (*words));
}
// Shell sort based upon public domain C implementation by Raymond Gardner 1991
// Used here because of problems with mingw qsort.
static void SortWordList(char **words, unsigned int len) {
unsigned int gap = len / 2;
while (gap > 0) {
unsigned int i = gap;
while (i < len) {
unsigned int j = i;
char **a = words + j;
do {
j -= gap;
char **b = a;
a -= gap;
if (strcmp(*a, *b) > 0) {
char *tmp = *a;
*a = *b;
*b = tmp;
} else {
break;
}
} while (j >= gap);
i++;
}
gap = gap / 2;
}
int cmpString(const void *a1, const void *a2) {
// Can't work out the correct incantation to use modern casts here
return strcmp(*(char**)(a1), *(char**)(a2));
}
int cmpStringNoCase(const void *a1, const void *a2) {
// Can't work out the correct incantation to use modern casts here
return strcasecmp(*(char**)(a1), *(char**)(a2));
}
static void SortWordList(char **words, char **wordsNoCase, unsigned int len) {
qsort(reinterpret_cast<void*>(words), len, sizeof(*words),
cmpString);
qsort(reinterpret_cast<void*>(wordsNoCase), len, sizeof(*wordsNoCase),
cmpStringNoCase);
}
bool WordList::InList(const char *s) {
if (0 == words)
return false;
if (len == 0) {
for (int i = 0; words[i][0]; i++)
len++;
SortWordList(words, len);
if (!sorted) {
sorted = true;
SortWordList(words, wordsNoCase, len);
for (unsigned int k = 0; k < (sizeof(starts) / sizeof(starts[0])); k++)
starts[k] = -1;
for (int l = len - 1; l >= 0; l--) {
@@ -402,3 +487,256 @@ bool WordList::InList(const char *s) {
}
return false;
}
/**
* Returns an element (complete) of the wordlist array which has the beginning
* the same as the passed string. The length of the word to compare is passed
* too. Letter case can be ignored or preserved (default).
*/
const char *WordList::GetNearestWord(const char *wordStart, int searchLen /*= -1*/, bool ignoreCase /*= false*/) {
int start = 0; // lower bound of the api array block to search
int end = len - 1; // upper bound of the api array block to search
int pivot; // index of api array element just being compared
int cond; // comparison result (in the sense of strcmp() result)
const char *word; // api array element just being compared
if (0 == words)
return NULL;
if (!sorted) {
sorted = true;
SortWordList(words, wordsNoCase, len);
}
if (ignoreCase)
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = wordsNoCase[pivot];
cond = strncasecmp(wordStart, word, searchLen);
if (!cond && nonFuncChar(word[searchLen])) // maybe there should be a "non-word character" test here?
return word; // result must not be freed with free()
else if (cond < 0)
end = pivot - 1;
else if (cond > 0)
start = pivot + 1;
}
else // preserve the letter case
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = words[pivot];
cond = strncmp(wordStart, word, searchLen);
if (!cond && nonFuncChar(word[searchLen])) // maybe there should be a "non-word character" test here?
return word; // result must not be freed with free()
else if (cond >= 0)
start = pivot + 1;
else if (cond < 0)
end = pivot - 1;
}
return NULL;
}
/**
* Returns elements (first words of them) of the wordlist array which have
* the beginning the same as the passed string. The length of the word to
* compare is passed too. Letter case can be ignored or preserved (default).
* If there are more words meeting the condition they are returned all of
* them in the ascending order separated with spaces.
*
* NOTE: returned buffer has to be freed with a free() call.
*/
char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, bool ignoreCase /*= false*/) {
int wordlen; // length of the word part (before the '(' brace) of the api array element
int length = 0; // length of the returned buffer of words (string)
int newlength; // length of the new buffer before the reallocating itself
#undef WORDCHUNK // how many characters will be pre-allocated (to avoid buffer reallocation on each new word)
#define WORDCHUNK 100
int size = WORDCHUNK; // real size of the returned buffer of words
char *buffer; // buffer for the words returned
int start = 0; // lower bound of the api array block to search
int end = len - 1; // upper bound of the api array block to search
int pivot; // index of api array element just being compared
int cond; // comparison result (in the sense of strcmp() result)
int oldpivot; // pivot storage to be able to browse the api array upwards and then downwards
const char *word; // api array element just being compared
const char *brace; // position of the opening brace in the api array element just being compared
if (0 == words)
return NULL;
if (!sorted) {
sorted = true;
SortWordList(words, wordsNoCase, len);
}
buffer = (char*) malloc(size);
*buffer = '\0';
if (ignoreCase)
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = wordsNoCase[pivot];
cond = strncasecmp(wordStart, word, searchLen);
if (!cond) {
oldpivot = pivot;
do { // browse sequentially the rest after the hit
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size) {
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
if (++pivot > end)
break;
word = wordsNoCase[pivot];
} while (!strncasecmp(wordStart, word, searchLen));
pivot = oldpivot;
for (;;) { // browse sequentially the rest before the hit
if (--pivot < start)
break;
word = wordsNoCase[pivot];
if (strncasecmp(wordStart, word, searchLen))
break;
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size)
{
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
}
return buffer; // result has to be freed with free()
}
else if (cond < 0)
end = pivot - 1;
else if (cond > 0)
start = pivot + 1;
}
else // preserve the letter case
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = words[pivot];
cond = strncmp(wordStart, word, searchLen);
if (!cond) {
oldpivot = pivot;
do { // browse sequentially the rest after the hit
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size)
{
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
if (++pivot > end)
break;
word = words[pivot];
} while (!strncmp(wordStart, word, searchLen));
pivot = oldpivot;
for (;;) { // browse sequentially the rest before the hit
if (--pivot < start)
break;
word = words[pivot];
if (strncmp(wordStart, word, searchLen))
break;
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size)
{
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
}
return buffer; // result has to be freed with free()
}
else if (cond < 0)
end = pivot - 1;
else if (cond > 0)
start = pivot + 1;
}
free(buffer);
return NULL;
}

View File

@@ -6,13 +6,12 @@
#ifndef SVECTOR_H
#define SVECTOR_H
// A simple expandable vector.
// T must support assignment.
// A simple expandable integer vector.
// Storage not allocated for elements until an element is used.
// This makes it very lightweight unless used so is a good match for optional features.
template<class T, int sizeIncrement>
class SVector {
T *v;
int *v;
unsigned int size; // Number of elements allocated
unsigned int len; // Number of elements in vector
bool allocFailure; // A memory allocation call has failed
@@ -20,19 +19,23 @@ class SVector {
// Internally allocate more elements than the user wants to avoid
// thrashng the memory allocator
void SizeTo(int newSize) {
if (newSize < sizeIncrement)
newSize += sizeIncrement;
if (newSize < 4000)
newSize += 4000;
else
newSize = (newSize * 3) / 2;
T* newv = new T[newSize];
int* newv = new int[newSize];
if (!newv) {
allocFailure = true;
return;
}
size = newSize;
for (unsigned int i=0; i<len; i++) {
unsigned int i=0;
for (; i<len; i++) {
newv[i] = v[i];
}
for (; i<size; i++) {
newv[i] = 0;
}
delete []v;
v = newv;
}
@@ -79,7 +82,7 @@ public:
}
return *this;
}
T &operator[](unsigned int i) {
int &operator[](unsigned int i) {
if (i >= len) {
if (i >= size) {
SizeTo(i);

View File

@@ -11,9 +11,9 @@
#include "Platform.h"
#include "Scintilla.h"
#include "PropSet.h"
#ifdef SCI_LEXER
#include "SciLexer.h"
#include "PropSet.h"
#include "Accessor.h"
#include "WindowAccessor.h"
#include "DocumentAccessor.h"
@@ -41,9 +41,15 @@ ScintillaBase::ScintillaBase() {
#endif
}
ScintillaBase::~ScintillaBase() {}
ScintillaBase::~ScintillaBase() {
#ifdef SCI_LEXER
for (int wl=0;wl<numWordLists;wl++)
delete keyWordLists[wl];
#endif
}
void ScintillaBase::Finalise() {
Editor::Finalise();
popup.Destroy();
}
@@ -54,7 +60,8 @@ void ScintillaBase::RefreshColourPalette(Palette &pal, bool want) {
void ScintillaBase::AddCharUTF(char *s, unsigned int len) {
bool acActiveBeforeCharAdded = ac.Active();
Editor::AddCharUTF(s, len);
if (!acActiveBeforeCharAdded || !ac.IsFillUpChar(*s))
Editor::AddCharUTF(s, len);
if (acActiveBeforeCharAdded)
AutoCompleteChanged(s[0]);
}
@@ -70,7 +77,7 @@ void ScintillaBase::Command(int cmdId) {
break;
case idcmdUndo:
WndProc(WM_UNDO, 0, 0);
WndProc(SCI_UNDO, 0, 0);
break;
case idcmdRedo:
@@ -78,19 +85,19 @@ void ScintillaBase::Command(int cmdId) {
break;
case idcmdCut:
WndProc(WM_CUT, 0, 0);
WndProc(SCI_CUT, 0, 0);
break;
case idcmdCopy:
WndProc(WM_COPY, 0, 0);
WndProc(SCI_COPY, 0, 0);
break;
case idcmdPaste:
WndProc(WM_PASTE, 0, 0);
WndProc(SCI_PASTE, 0, 0);
break;
case idcmdDelete:
WndProc(WM_CLEAR, 0, 0);
WndProc(SCI_CLEAR, 0, 0);
break;
case idcmdSelectAll:
@@ -99,7 +106,7 @@ void ScintillaBase::Command(int cmdId) {
}
}
int ScintillaBase::KeyCommand(UINT iMessage) {
int ScintillaBase::KeyCommand(unsigned int iMessage) {
// Most key commands cancel autocompletion mode
if (ac.Active()) {
switch (iMessage) {
@@ -130,6 +137,9 @@ int ScintillaBase::KeyCommand(UINT iMessage) {
case SCI_TAB:
AutoCompleteCompleted();
return 0;
case SCI_NEWLINE:
AutoCompleteCompleted();
return 0;
default:
ac.Cancel();
@@ -157,15 +167,30 @@ int ScintillaBase::KeyCommand(UINT iMessage) {
}
void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
//Platform::DebugPrintf("AutoCOmplete %s\n", list);
//Platform::DebugPrintf("AutoComplete %s\n", list);
ct.CallTipCancel();
if (ac.chooseSingle) {
if (list && !strchr(list, ac.GetSeparator())) {
if (ac.ignoreCase) {
SetEmptySelection(currentPos - lenEntered);
pdoc->DeleteChars(currentPos, lenEntered);
SetEmptySelection(currentPos);
pdoc->InsertString(currentPos, list);
SetEmptySelection(currentPos + strlen(list));
} else {
SetEmptySelection(currentPos);
pdoc->InsertString(currentPos, list + lenEntered);
SetEmptySelection(currentPos + strlen(list + lenEntered));
}
return;
}
}
ac.Start(wDraw, idAutoComplete, currentPos, lenEntered);
PRectangle rcClient = GetClientRectangle();
Point pt = LocationFromPosition(currentPos-lenEntered);
//Platform::DebugPrintf("Auto complete %x\n", lbAutoComplete);
int heightLB = 100;
int widthLB = 100;
if (pt.x >= rcClient.right - widthLB) {
@@ -188,16 +213,18 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
rcac.right = rcac.left + widthLB;
rcac.bottom = Platform::Minimum(rcac.top + heightLB, rcClient.bottom);
ac.lb.SetPositionRelative(rcac, wMain);
ac.lb.SetFont(vs.styles[0].font);
ac.lb.SetFont(vs.styles[STYLE_DEFAULT].font);
ac.lb.SetAverageCharWidth(vs.styles[STYLE_DEFAULT].aveCharWidth);
int maxStrLen = ac.SetList(list);
ac.SetList(list);
// Fiddle the position of the list so it is right next to the target and wide enough for all its strings
PRectangle rcList = ac.lb.GetPosition();
PRectangle rcList = ac.lb.GetDesiredRect();
int heightAlloced = rcList.bottom - rcList.top;
widthLB = Platform::Maximum(widthLB, rcList.right - rcList.left);
// Make an allowance for large strings in list
rcList.left = pt.x - 5;
rcList.right = rcList.left + Platform::Maximum(widthLB, maxStrLen * 8 + 16);
rcList.right = rcList.left + widthLB;
if (pt.y >= rcClient.bottom - heightLB && // Wont fit below.
pt.y >= (rcClient.bottom + rcClient.top) / 2) { // and there is more room above.
rcList.top = pt.y - heightAlloced;
@@ -206,8 +233,10 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
}
rcList.bottom = rcList.top + heightAlloced;
ac.lb.SetPositionRelative(rcList, wMain);
//lbAutoComplete.SetPosition(rcList);
ac.Show();
if (lenEntered != 0) {
AutoCompleteMoveToCurrentWord();
}
}
void ScintillaBase::AutoCompleteCancel() {
@@ -218,36 +247,63 @@ void ScintillaBase::AutoCompleteMove(int delta) {
ac.Move(delta);
}
void ScintillaBase::AutoCompleteMoveToCurrentWord() {
char wordCurrent[1000];
int i;
int startWord = ac.posStart - ac.startLen;
for (i = startWord; i < currentPos; i++)
wordCurrent[i - startWord] = pdoc->CharAt(i);
wordCurrent[i - startWord] = '\0';
ac.Select(wordCurrent);
}
void ScintillaBase::AutoCompleteChanged(char ch) {
if (currentPos <= ac.posStart) {
if (ac.IsFillUpChar(ch)) {
AutoCompleteCompleted(ch);
} else if (currentPos <= ac.posStart - ac.startLen) {
ac.Cancel();
} else if (ac.cancelAtStartPos && currentPos <= ac.posStart) {
ac.Cancel();
} else if (ac.IsStopChar(ch)) {
ac.Cancel();
} else {
char wordCurrent[1000];
int i;
int startWord = ac.posStart - ac.startLen;
for (i = startWord; i < currentPos; i++)
wordCurrent[i - startWord] = pdoc->CharAt(i);
wordCurrent[i - startWord] = '\0';
ac.Select(wordCurrent);
AutoCompleteMoveToCurrentWord();
}
}
void ScintillaBase::AutoCompleteCompleted() {
void ScintillaBase::AutoCompleteCompleted(char fillUp/*='\0'*/) {
int item = ac.lb.GetSelection();
char selected[200];
char selected[1000];
if (item != -1) {
ac.lb.GetValue(item, selected, sizeof(selected));
}
ac.Cancel();
if (currentPos != ac.posStart) {
pdoc->DeleteChars(ac.posStart, currentPos - ac.posStart);
}
SetEmptySelection(ac.posStart);
if (item != -1) {
pdoc->InsertString(currentPos, selected + ac.startLen);
SetEmptySelection(currentPos + strlen(selected + ac.startLen));
if (ac.ignoreCase) {
if (currentPos != ac.posStart) {
pdoc->DeleteChars(ac.posStart, currentPos - ac.posStart);
}
SetEmptySelection(ac.posStart - ac.startLen);
pdoc->DeleteChars(ac.posStart - ac.startLen, ac.startLen);
if (item != -1) {
SString piece = selected;
if (fillUp)
piece += fillUp;
pdoc->InsertString(currentPos, piece.c_str());
SetEmptySelection(currentPos + piece.length());
}
} else {
if (currentPos != ac.posStart) {
pdoc->DeleteChars(ac.posStart, currentPos - ac.posStart);
}
SetEmptySelection(ac.posStart);
if (item != -1) {
SString piece = selected + ac.startLen;
if (fillUp)
piece += fillUp;
pdoc->InsertString(currentPos, piece.c_str());
SetEmptySelection(currentPos + piece.length());
}
}
}
@@ -258,16 +314,21 @@ void ScintillaBase::ContextMenu(Point pt) {
AddToPopUp("");
AddToPopUp("Cut", idcmdCut, currentPos != anchor);
AddToPopUp("Copy", idcmdCopy, currentPos != anchor);
AddToPopUp("Paste", idcmdPaste, WndProc(EM_CANPASTE, 0, 0));
AddToPopUp("Paste", idcmdPaste, WndProc(SCI_CANPASTE, 0, 0));
AddToPopUp("Delete", idcmdDelete, currentPos != anchor);
AddToPopUp("");
AddToPopUp("Select All", idcmdSelectAll);
popup.Show(pt, wMain);
}
void ScintillaBase::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) {
void ScintillaBase::CancelModes() {
AutoCompleteCancel();
ct.CallTipCancel();
Editor::CancelModes();
}
void ScintillaBase::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) {
CancelModes();
Editor::ButtonDown(pt, curTime, shift, ctrl, alt);
}
@@ -295,8 +356,8 @@ void ScintillaBase::NotifyStyleToNeeded(int endStyleNeeded) {
#ifdef SCI_LEXER
if (lexLanguage != SCLEX_CONTAINER) {
int endStyled = Platform::SendScintilla(wMain.GetID(), SCI_GETENDSTYLED, 0, 0);
int lineEndStyled = Platform::SendScintilla(wMain.GetID(), EM_LINEFROMCHAR, endStyled, 0);
endStyled = Platform::SendScintilla(wMain.GetID(), EM_LINEINDEX, lineEndStyled, 0);
int lineEndStyled = Platform::SendScintilla(wMain.GetID(), SCI_LINEFROMPOSITION, endStyled, 0);
endStyled = Platform::SendScintilla(wMain.GetID(), SCI_POSITIONFROMLINE, lineEndStyled, 0);
Colourise(endStyled, endStyleNeeded);
return;
}
@@ -304,7 +365,7 @@ void ScintillaBase::NotifyStyleToNeeded(int endStyleNeeded) {
Editor::NotifyStyleToNeeded(endStyleNeeded);
}
LRESULT ScintillaBase::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
long ScintillaBase::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) {
switch (iMessage) {
case SCI_AUTOCSHOW:
AutoCompleteStart(wParam, reinterpret_cast<const char *>(lParam));
@@ -325,7 +386,7 @@ LRESULT ScintillaBase::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
break;
case SCI_AUTOCSETSEPARATOR:
ac.SetSeparator(wParam);
ac.SetSeparator(static_cast<char>(wParam));
break;
case SCI_AUTOCGETSEPARATOR:
@@ -338,13 +399,38 @@ LRESULT ScintillaBase::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
case SCI_AUTOCSELECT:
ac.Select(reinterpret_cast<char *>(lParam));
break;
case SCI_AUTOCSETCANCELATSTART:
ac.cancelAtStartPos = wParam;
break;
case SCI_AUTOCGETCANCELATSTART:
return ac.cancelAtStartPos;
case SCI_AUTOCSETFILLUPS:
ac.SetFillUpChars(reinterpret_cast<char *>(lParam));
break;
case SCI_AUTOCSETCHOOSESINGLE:
ac.chooseSingle = wParam;
break;
case SCI_AUTOCGETCHOOSESINGLE:
return ac.chooseSingle;
case SCI_AUTOCSETIGNORECASE:
ac.ignoreCase = wParam;
break;
case SCI_AUTOCGETIGNORECASE:
return ac.ignoreCase;
case SCI_CALLTIPSHOW: {
AutoCompleteCancel();
if (!ct.wCallTip.Created()) {
PRectangle rc = ct.CallTipStart(currentPos, LocationFromPosition(wParam),
reinterpret_cast<char *>(lParam),
vs.styles[0].fontName, vs.styles[0].size);
vs.styles[STYLE_DEFAULT].fontName, vs.styles[STYLE_DEFAULT].size);
// If the call-tip window would be out of the client
// space, adjust so it displays above the text.
PRectangle rcClient = GetClientRectangle();

View File

@@ -47,13 +47,15 @@ protected:
virtual void AddCharUTF(char *s, unsigned int len);
void Command(int cmdId);
virtual int KeyCommand(UINT iMessage);
virtual void CancelModes();
virtual int KeyCommand(unsigned int iMessage);
void AutoCompleteStart(int lenEntered, const char *list);
void AutoCompleteCancel();
void AutoCompleteMove(int delta);
void AutoCompleteChanged(char ch=0);
void AutoCompleteCompleted();
void AutoCompleteCompleted(char fillUp='\0');
void AutoCompleteMoveToCurrentWord();
virtual void CreateCallTipWindow(PRectangle rc) = 0;
@@ -65,7 +67,7 @@ protected:
virtual void NotifyStyleToNeeded(int endStyleNeeded);
public:
// Public so scintilla_send_message can use it
virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual long WndProc(unsigned int iMessage, unsigned long wParam, long lParam);
};
#endif

View File

@@ -14,13 +14,13 @@ Style::Style() {
aliasOfDefaultFont = true;
Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
Platform::DefaultFontSize(), 0, SC_CHARSET_DEFAULT,
false, false, false, false);
false, false, false, false, true);
}
Style::Style(const Style &source) {
Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
0, 0, 0,
false, false, false, false);
false, false, false, false, true);
fore.desired = source.fore.desired;
back.desired = source.back.desired;
characterSet = source.characterSet;
@@ -29,6 +29,7 @@ Style::Style(const Style &source) {
size = source.size;
eolFilled = source.eolFilled;
underline = source.underline;
visible = source.visible;
}
Style::~Style() {
@@ -44,7 +45,7 @@ Style &Style::operator=(const Style &source) {
return *this;
Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
0, 0, SC_CHARSET_DEFAULT,
false, false, false, false);
false, false, false, false, true);
fore.desired = source.fore.desired;
back.desired = source.back.desired;
characterSet = source.characterSet;
@@ -53,12 +54,13 @@ Style &Style::operator=(const Style &source) {
size = source.size;
eolFilled = source.eolFilled;
underline = source.underline;
visible = source.visible;
return *this;
}
void Style::Clear(Colour fore_, Colour back_, int size_,
const char *fontName_, int characterSet_,
bool bold_, bool italic_, bool eolFilled_, bool underline_) {
bool bold_, bool italic_, bool eolFilled_, bool underline_, bool visible_) {
fore.desired = fore_;
back.desired = back_;
characterSet = characterSet_;
@@ -68,6 +70,7 @@ void Style::Clear(Colour fore_, Colour back_, int size_,
fontName = fontName_;
eolFilled = eolFilled_;
underline = underline_;
visible = visible_;
if (aliasOfDefaultFont)
font.SetID(0);
else

View File

@@ -18,6 +18,7 @@ public:
int characterSet;
bool eolFilled;
bool underline;
bool visible;
Font font;
unsigned int lineHeight;
@@ -34,7 +35,7 @@ public:
void Clear(Colour fore_, Colour back_,
int size_,
const char *fontName_, int characterSet_,
bool bold_, bool italic_, bool eolFilled_, bool underline_);
bool bold_, bool italic_, bool eolFilled_, bool underline_, bool visible_);
bool EquivalentFontTo(const Style *other) const;
void Realise(Surface &surface, int zoomLevel, Style *defaultStyle=0);
};

View File

@@ -69,10 +69,12 @@ ViewStyle::ViewStyle(const ViewStyle &source) {
selforeground.desired = source.selforeground.desired;
selbackset = source.selbackset;
selbackground.desired = source.selbackground.desired;
selbackground2.desired = source.selbackground2.desired;
selbar.desired = source.selbar.desired;
selbarlight.desired = source.selbarlight.desired;
caretcolour.desired = source.caretcolour.desired;
edgecolour.desired = source.edgecolour.desired;
edgeState = source.edgeState;
leftMarginWidth = source.leftMarginWidth;
rightMarginWidth = source.rightMarginWidth;
for (int i=0;i < margins; i++) {
@@ -83,6 +85,7 @@ ViewStyle::ViewStyle(const ViewStyle &source) {
fixedColumnWidth = source.fixedColumnWidth;
zoomLevel = source.zoomLevel;
viewWhitespace = source.viewWhitespace;
viewIndentationGuides = source.viewIndentationGuides;
viewEOL = source.viewEOL;
showMarkedLines = source.showMarkedLines;
}
@@ -111,6 +114,7 @@ void ViewStyle::Init() {
selforeground.desired = Colour(0xff, 0, 0);
selbackset = true;
selbackground.desired = Colour(0xc0, 0xc0, 0xc0);
selbackground2.desired = Colour(0xb0, 0xb0, 0xb0);
selbar.desired = Platform::Chrome();
selbarlight.desired = Platform::ChromeHighlight();
styles[STYLE_LINENUMBER].fore.desired = Colour(0, 0, 0);
@@ -118,6 +122,7 @@ void ViewStyle::Init() {
//caretcolour.desired = Colour(0xff, 0, 0);
caretcolour.desired = Colour(0, 0, 0);
edgecolour.desired = Colour(0xc0, 0xc0, 0xc0);
edgeState = EDGE_NONE;
leftMarginWidth = 1;
rightMarginWidth = 1;
@@ -142,7 +147,8 @@ void ViewStyle::Init() {
maskInLine &= ~ms[margin].mask;
}
zoomLevel = 0;
viewWhitespace = false;
viewWhitespace = wsInvisible;
viewIndentationGuides = false;
viewEOL = false;
showMarkedLines = true;
}
@@ -162,6 +168,7 @@ void ViewStyle::RefreshColourPalette(Palette &pal, bool want) {
}
pal.WantFind(selforeground, want);
pal.WantFind(selbackground, want);
pal.WantFind(selbackground2, want);
pal.WantFind(selbar, want);
pal.WantFind(selbarlight, want);
pal.WantFind(caretcolour, want);
@@ -203,7 +210,7 @@ void ViewStyle::ResetDefaultStyle() {
styles[STYLE_DEFAULT].Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
Platform::DefaultFontSize(), fontNames.Save(Platform::DefaultFont()),
SC_CHARSET_DEFAULT,
false, false, false, false);
false, false, false, false, true);
}
void ViewStyle::ClearStyles() {
@@ -219,7 +226,8 @@ void ViewStyle::ClearStyles() {
styles[STYLE_DEFAULT].bold,
styles[STYLE_DEFAULT].italic,
styles[STYLE_DEFAULT].eolFilled,
styles[STYLE_DEFAULT].underline);
styles[STYLE_DEFAULT].underline,
styles[STYLE_DEFAULT].visible);
}
}
styles[STYLE_LINENUMBER].back.desired = Platform::Chrome();

View File

@@ -26,6 +26,7 @@ public:
const char *Save(const char *name);
};
enum WhiteSpaceVisibility {wsInvisible=0, wsVisibleAlways=1, wsVisibleAfterIndent=2};
class ViewStyle {
public:
FontNames fontNames;
@@ -41,6 +42,7 @@ public:
ColourPair selforeground;
bool selbackset;
ColourPair selbackground;
ColourPair selbackground2;
ColourPair selbar;
ColourPair selbarlight;
// Margins are ordered: Line Numbers, Selection Margin, Spacing Margin
@@ -52,11 +54,13 @@ public:
MarginStyle ms[margins];
int fixedColumnWidth;
int zoomLevel;
bool viewWhitespace;
WhiteSpaceVisibility viewWhitespace;
bool viewIndentationGuides;
bool viewEOL;
bool showMarkedLines;
ColourPair caretcolour;
ColourPair edgecolour;
int edgeState;
ViewStyle();
ViewStyle(const ViewStyle &source);

View File

@@ -4,6 +4,7 @@
// The License.txt file describes the conditions under which this software may be distributed.
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
@@ -17,25 +18,26 @@
WindowAccessor::~WindowAccessor() {
}
#if PLAT_WIN
bool WindowAccessor::InternalIsLeadByte(char ch) {
#if PLAT_GTK
// TODO: support DBCS under GTK+
return false;
#elif PLAT_WIN
if (SC_CP_UTF8 == codePage)
// For lexing, all characters >= 0x80 are treated the
// same so none is considered a lead byte.
return false;
else
return IsDBCSLeadByteEx(codePage, ch);
#elif PLAT_WX
return false;
#endif
}
#else
// PLAT_GTK or PLAT_WX
// TODO: support DBCS under GTK+ and WX
bool WindowAccessor::InternalIsLeadByte(char) {
return false;
}
#endif
void WindowAccessor::Fill(int position) {
if (lenDoc == -1)
lenDoc = Platform::SendScintilla(id, WM_GETTEXTLENGTH, 0, 0);
lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
startPos = position - slopSize;
if (startPos + bufferSize > lenDoc)
startPos = lenDoc - bufferSize;
@@ -45,8 +47,8 @@ void WindowAccessor::Fill(int position) {
if (endPos > lenDoc)
endPos = lenDoc;
TEXTRANGE tr = {{startPos, endPos}, buf};
Platform::SendScintilla(id, EM_GETTEXTRANGE, 0, reinterpret_cast<LPARAM>(&tr));
TextRange tr = {{startPos, endPos}, buf};
Platform::SendScintilla(id, SCI_GETTEXTRANGE, 0, reinterpret_cast<long>(&tr));
}
char WindowAccessor::StyleAt(int position) {
@@ -55,11 +57,11 @@ char WindowAccessor::StyleAt(int position) {
}
int WindowAccessor::GetLine(int position) {
return Platform::SendScintilla(id, EM_LINEFROMCHAR, position, 0);
return Platform::SendScintilla(id, SCI_LINEFROMPOSITION, position, 0);
}
int WindowAccessor::LineStart(int line) {
return Platform::SendScintilla(id, EM_LINEINDEX, line, 0);
return Platform::SendScintilla(id, SCI_POSITIONFROMLINE, line, 0);
}
int WindowAccessor::LevelAt(int line) {
@@ -68,7 +70,7 @@ int WindowAccessor::LevelAt(int line) {
int WindowAccessor::Length() {
if (lenDoc == -1)
lenDoc = Platform::SendScintilla(id, WM_GETTEXTLENGTH, 0, 0);
lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
return lenDoc;
}
@@ -121,7 +123,7 @@ void WindowAccessor::Flush() {
lenDoc = -1;
if (validLen > 0) {
Platform::SendScintilla(id, SCI_SETSTYLINGEX, validLen,
reinterpret_cast<LPARAM>(styleBuf));
reinterpret_cast<long>(styleBuf));
validLen = 0;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,181 +0,0 @@
// Scintilla source code edit control
// SciLexer - interface to the added lexer functions in the SciLexer version of the edit control
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#ifndef SCILEXER_H
#define SCILEXER_H
// SciLexer features - not in standard Scintilla
#define SCLEX_CONTAINER 0
#define SCLEX_NULL 1
#define SCLEX_PYTHON 2
#define SCLEX_CPP 3
#define SCLEX_HTML 4
#define SCLEX_XML 5
#define SCLEX_PERL 6
#define SCLEX_SQL 7
#define SCLEX_VB 8
#define SCLEX_PROPERTIES 9
#define SCLEX_ERRORLIST 10
#define SCLEX_MAKEFILE 11
#define SCLEX_BATCH 12
#define SCLEX_XCODE 13
#define SCLEX_LATEX 14
// Lexical states for SCLEX_PYTHON
#define SCE_P_DEFAULT 0
#define SCE_P_COMMENTLINE 1
#define SCE_P_NUMBER 2
#define SCE_P_STRING 3
#define SCE_P_CHARACTER 4
#define SCE_P_WORD 5
#define SCE_P_TRIPLE 6
#define SCE_P_TRIPLEDOUBLE 7
#define SCE_P_CLASSNAME 8
#define SCE_P_DEFNAME 9
#define SCE_P_OPERATOR 10
#define SCE_P_IDENTIFIER 11
#define SCE_P_COMMENTBLOCK 12
#define SCE_P_STRINGEOL 13
// Lexical states for SCLEX_CPP, SCLEX_VB
#define SCE_C_DEFAULT 0
#define SCE_C_COMMENT 1
#define SCE_C_COMMENTLINE 2
#define SCE_C_COMMENTDOC 3
#define SCE_C_NUMBER 4
#define SCE_C_WORD 5
#define SCE_C_STRING 6
#define SCE_C_CHARACTER 7
#define SCE_C_UUID 8
#define SCE_C_PREPROCESSOR 9
#define SCE_C_OPERATOR 10
#define SCE_C_IDENTIFIER 11
#define SCE_C_STRINGEOL 12
// Lexical states for SCLEX_HTML, SCLEX_xML
#define SCE_H_DEFAULT 0
#define SCE_H_TAG 1
#define SCE_H_TAGUNKNOWN 2
#define SCE_H_ATTRIBUTE 3
#define SCE_H_ATTRIBUTEUNKNOWN 4
#define SCE_H_NUMBER 5
#define SCE_H_DOUBLESTRING 6
#define SCE_H_SINGLESTRING 7
#define SCE_H_OTHER 8
#define SCE_H_COMMENT 9
#define SCE_H_ENTITY 10
// XML and ASP
#define SCE_H_TAGEND 11
#define SCE_H_XMLSTART 12
#define SCE_H_XMLEND 13
#define SCE_H_SCRIPT 14
#define SCE_H_ASP 15
#define SCE_H_ASPAT 16
// Embedded Javascript
#define SCE_HJ_START 40
#define SCE_HJ_DEFAULT 41
#define SCE_HJ_COMMENT 42
#define SCE_HJ_COMMENTLINE 43
#define SCE_HJ_COMMENTDOC 44
#define SCE_HJ_NUMBER 45
#define SCE_HJ_WORD 46
#define SCE_HJ_KEYWORD 47
#define SCE_HJ_DOUBLESTRING 48
#define SCE_HJ_SINGLESTRING 49
#define SCE_HJ_SYMBOLS 50
#define SCE_HJ_STRINGEOL 51
// ASP Javascript
#define SCE_HJA_START 55
#define SCE_HJA_DEFAULT 56
#define SCE_HJA_COMMENT 57
#define SCE_HJA_COMMENTLINE 58
#define SCE_HJA_COMMENTDOC 59
#define SCE_HJA_NUMBER 60
#define SCE_HJA_WORD 61
#define SCE_HJA_KEYWORD 62
#define SCE_HJA_DOUBLESTRING 63
#define SCE_HJA_SINGLESTRING 64
#define SCE_HJA_SYMBOLS 65
#define SCE_HJA_STRINGEOL 66
// Embedded VBScript
#define SCE_HB_START 70
#define SCE_HB_DEFAULT 71
#define SCE_HB_COMMENTLINE 72
#define SCE_HB_NUMBER 73
#define SCE_HB_WORD 74
#define SCE_HB_STRING 75
#define SCE_HB_IDENTIFIER 76
#define SCE_HB_STRINGEOL 77
// ASP VBScript
#define SCE_HBA_START 80
#define SCE_HBA_DEFAULT 81
#define SCE_HBA_COMMENTLINE 82
#define SCE_HBA_NUMBER 83
#define SCE_HBA_WORD 84
#define SCE_HBA_STRING 85
#define SCE_HBA_IDENTIFIER 86
#define SCE_HBA_STRINGEOL 87
// Embedded Python
#define SCE_HP_START 90
#define SCE_HP_DEFAULT 91
#define SCE_HP_COMMENTLINE 92
#define SCE_HP_NUMBER 93
#define SCE_HP_STRING 94
#define SCE_HP_CHARACTER 95
#define SCE_HP_WORD 96
#define SCE_HP_TRIPLE 97
#define SCE_HP_TRIPLEDOUBLE 98
#define SCE_HP_CLASSNAME 99
#define SCE_HP_DEFNAME 100
#define SCE_HP_OPERATOR 101
#define SCE_HP_IDENTIFIER 102
// ASP Python
#define SCE_HPA_START 105
#define SCE_HPA_DEFAULT 106
#define SCE_HPA_COMMENTLINE 107
#define SCE_HPA_NUMBER 108
#define SCE_HPA_STRING 109
#define SCE_HPA_CHARACTER 110
#define SCE_HPA_WORD 111
#define SCE_HPA_TRIPLE 112
#define SCE_HPA_TRIPLEDOUBLE 113
#define SCE_HPA_CLASSNAME 114
#define SCE_HPA_DEFNAME 115
#define SCE_HPA_OPERATOR 116
#define SCE_HPA_IDENTIFIER 117
// Lexical states for SCLEX_PERL
#define SCE_PL_DEFAULT 0
#define SCE_PL_HERE 1
#define SCE_PL_COMMENTLINE 2
#define SCE_PL_POD 3
#define SCE_PL_NUMBER 4
#define SCE_PL_WORD 5
#define SCE_PL_STRING 6
#define SCE_PL_CHARACTER 7
#define SCE_PL_PUNCTUATION 8
#define SCE_PL_PREPROCESSOR 9
#define SCE_PL_OPERATOR 10
#define SCE_PL_IDENTIFIER 11
#define SCE_PL_SCALAR 12
#define SCE_PL_ARRAY 13
#define SCE_PL_HASH 14
#define SCE_PL_SYMBOLTABLE 15
#define SCE_PL_REF 16
#define SCE_PL_REGEX 17
#define SCE_PL_REGSUBST 18
#define SCE_PL_LONGQUOTE 19
#define SCE_PL_BACKTICKS 20
#define SCE_PL_DATASECTION 21
// Lexical states for SCLEX_LATEX
#define SCE_L_DEFAULT 0
#define SCE_L_COMMAND 1
#define SCE_L_TAG 2
#define SCE_L_MATH 3
#define SCE_L_COMMENT 4
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -26,6 +26,7 @@ OBJECTS=PlatWX.o ScintillaWX.o stc.o \
DocumentAccessor.o \
LexCPP.o \
LexHTML.o \
LexLua.o \
LexOthers.o \
LexPerl.o \
LexPython.o \
@@ -47,6 +48,7 @@ OBJECTS=PlatWX.o ScintillaWX.o stc.o \
ScintillaBase.o \
Style.o \
ViewStyle.o \
PosRegExp.o \
APPEXTRADEFS=-D__WX__ -DSCI_LEXER -I$(scintilla_dir)/src -I$(scintilla_dir)/include -I$(top_srcdir)/contrib/include

View File

@@ -456,7 +456,25 @@ ListBox::~ListBox() {
void ListBox::Create(Window &parent, int ctrlID) {
id = new wxListBox(parent.id, ctrlID, wxDefaultPosition, wxDefaultSize,
0, NULL, wxLB_SINGLE | wxLB_SORT);
((wxListBox*)id)->Show(FALSE);
}
PRectangle ListBox::GetDesiredRect() {
wxSize sz = ((wxListBox*)id)->GetBestSize();
PRectangle rc;
rc.top = 0;
rc.left = 0;
rc.right = sz.x;
rc.bottom = sz.y;
return rc;
}
void ListBox::SetAverageCharWidth(int width) {
aveCharWidth = width;
}
void ListBox::SetFont(Font &font) {
Window::SetFont(font);
}
void ListBox::Clear() {

View File

@@ -273,8 +273,6 @@ void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) {
if (!enabled)
popup.GetID()->Enable(cmd, enabled);
// TODO: need to create event handler mappings for the cmd ID
}
@@ -283,18 +281,18 @@ void ScintillaWX::ClaimSelection() {
}
LRESULT ScintillaWX::DefWndProc(UINT /*iMessage*/, WPARAM /*wParam*/, LPARAM /*lParam*/) {
long ScintillaWX::DefWndProc(unsigned int /*iMessage*/, unsigned long /*wParam*/, long /*lParam*/) {
return 0;
}
LRESULT ScintillaWX::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
switch (iMessage) {
case EM_CANPASTE:
return CanPaste();
default:
long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) {
// switch (iMessage) {
// case EM_CANPASTE:
// return CanPaste();
// default:
return ScintillaBase::WndProc(iMessage, wParam, lParam);
}
return 0;
// }
// return 0;
}
@@ -415,6 +413,29 @@ void ScintillaWX::DoAddChar(char ch) {
}
int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt) {
switch (key) {
case WXK_DOWN: key = SCK_DOWN; break;
case WXK_UP: key = SCK_UP; break;
case WXK_LEFT: key = SCK_LEFT; break;
case WXK_RIGHT: key = SCK_RIGHT; break;
case WXK_HOME: key = SCK_HOME; break;
case WXK_END: key = SCK_END; break;
case WXK_PRIOR: key = SCK_PRIOR; break;
case WXK_NEXT: key = SCK_NEXT; break;
case WXK_DELETE: key = SCK_DELETE; break;
case WXK_INSERT: key = SCK_INSERT; break;
case WXK_ESCAPE: key = SCK_ESCAPE; break;
case WXK_BACK: key = SCK_BACK; break;
case WXK_TAB: key = SCK_TAB; break;
case WXK_RETURN: key = SCK_RETURN; break;
case WXK_ADD: key = SCK_ADD; break;
case WXK_SUBTRACT: key = SCK_SUBTRACT; break;
case WXK_DIVIDE: key = SCK_DIVIDE; break;
case WXK_CONTROL: key = 0; break;
case WXK_ALT: key = 0; break;
case WXK_SHIFT: key = 0; break;
}
return KeyDown(key, shift, ctrl, alt);
}

View File

@@ -97,8 +97,12 @@ public:
virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
virtual void ClaimSelection();
virtual LRESULT DefWndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual long DefWndProc(unsigned int iMessage,
unsigned long wParam,
long lParam);
virtual long WndProc(unsigned int iMessage,
unsigned long wParam,
long lParam);
virtual void NotifyChange();
virtual void NotifyParent(SCNotification scn);

View File

@@ -34,6 +34,7 @@ OBJECTS = \
KeyWords.obj \
LexCPP.obj \
LexHTML.obj \
LexLua.obj \
LexOthers.obj \
LexPerl.obj \
LexPython.obj \
@@ -41,6 +42,7 @@ OBJECTS = \
LexVB.obj \
LineMarker.obj \
PropSet.obj \
PosRegExp.obj \
ScintillaBase.obj \
Style.obj \
UniConversion.obj \

View File

@@ -27,6 +27,7 @@ OBJECTS = \
$(S)/ViewStyle.$(OBJSUFF) \
$(S)/LexCPP.$(OBJSUFF) \
$(S)/LexHTML.$(OBJSUFF) \
$(S)/LexLua.$(OBJSUFF) \
$(S)/LexOthers.$(OBJSUFF) \
$(S)/LexPerl.$(OBJSUFF) \
$(S)/LexPython.$(OBJSUFF) \
@@ -35,6 +36,7 @@ OBJECTS = \
$(S)/DocumentAccessor.$(OBJSUFF)\
$(S)/UniConversion.$(OBJSUFF) \
$(S)/WindowAccessor.$(OBJSUFF) \
$(S)/PosRegExp.$(OBJSUFF) \
PlatWX.$(OBJSUFF) \
ScintillaWX.$(OBJSUFF) \
stc.$(OBJSUFF)

View File

@@ -27,12 +27,14 @@ OBJECTS = \
$(D)\KeyWords.obj \
$(D)\LexCPP.obj \
$(D)\LexHTML.obj \
$(D)\LexLua.obj \
$(D)\LexOthers.obj \
$(D)\LexPerl.obj \
$(D)\LexPython.obj \
$(D)\LexSQL.obj \
$(D)\LexVB.obj \
$(D)\LineMarker.obj \
$(D)\PosRegExp.obj \
$(D)\PropSet.obj \
$(D)\ScintillaBase.obj \
$(D)\Style.obj \

View File

@@ -3,6 +3,5 @@ scintilla/include directories from the Scintilla/SCiTE source
distribution. All other code needed to implement Scintilla on top of
wxWindows is located in the directory above this one.
The current version of the Scintilla code is 1.25+ (from their CVS on
5-19-2000).
The current version of the Scintilla code is 1.32

View File

@@ -80,12 +80,6 @@ typedef wxWindow* WindowID;
typedef wxMenu* MenuID;
#endif
#if PLAT_GTK || PLAT_WX
#define SHIFT_PRESSED 1
#define LEFT_CTRL_PRESSED 2
#define LEFT_ALT_PRESSED 4
#endif
// Point is exactly the same as the Win32 POINT and GTK+ GdkPoint so can be used interchangeably
class Point {
@@ -199,6 +193,7 @@ public:
};
class Font {
protected:
FontID id;
#if PLAT_WX
int ascent;
@@ -208,10 +203,10 @@ class Font {
Font &operator=(const Font &) { id=0; return *this; }
public:
Font();
~Font();
virtual ~Font();
void Create(const char *faceName, int characterSet, int size, bool bold, bool italic);
void Release();
virtual void Create(const char *faceName, int characterSet, int size, bool bold, bool italic);
virtual void Release();
FontID GetID() { return id; }
// Alias another font - caller guarantees not to Release
@@ -327,7 +322,7 @@ public:
void Show(bool show=true);
void InvalidateAll();
void InvalidateRectangle(PRectangle rc);
void SetFont(Font &font);
virtual void SetFont(Font &font);
enum Cursor { cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow };
void SetCursor(Cursor curs);
void SetTitle(const char *s);
@@ -344,14 +339,17 @@ class ListBox : public Window {
WindowID scroller;
int current;
#endif
int desiredVisibleRows;
unsigned int maxItemCharacters;
unsigned int aveCharWidth;
public:
ListBox();
virtual ~ListBox();
ListBox &operator=(WindowID id_) {
id = id_;
return *this;
}
void Create(Window &parent, int ctrlID);
virtual void SetFont(Font &font);
void SetAverageCharWidth(int width);
void SetVisibleRows(int rows);
PRectangle GetDesiredRect();
void Clear();
void Append(char *s);
int Length();
@@ -396,6 +394,16 @@ public:
// These are utility functions not really tied to a platform
static int Minimum(int a, int b);
static int Maximum(int a, int b);
// Next three assume 16 bit shorts and 32 bit longs
static long LongFromTwoShorts(short a,short b) {
return (a) | ((b) << 16);
}
static short HighShortFromLong(long x) {
return static_cast<short>(x >> 16);
}
static short LowShortFromLong(long x) {
return static_cast<short>(x & 0xffff);
}
static void DebugPrintf(const char *format, ...);
static int Clamp(int val, int minVal, int maxVal);
};

View File

@@ -8,44 +8,92 @@
bool EqualCaseInsensitive(const char *a, const char *b);
#if PLAT_WIN
#define strcasecmp stricmp
#define strncasecmp strnicmp
#endif
#ifdef __WXMSW__
#define strcasecmp stricmp
#define strncasecmp strnicmp
#endif
// Define another string class.
// While it would be 'better' to use std::string, that doubles the executable size.
inline char *StringDup(const char *s) {
inline char *StringDup(const char *s, int len=-1) {
if (!s)
return 0;
char *sNew = new char[strlen(s) + 1];
if (sNew)
strcpy(sNew, s);
if (len == -1)
len = strlen(s);
char *sNew = new char[len + 1];
if (sNew) {
strncpy(sNew, s, len);
sNew[len] = '\0';
}
return sNew;
}
class SString {
char *s;
int ssize;
public:
typedef const char* const_iterator;
typedef int size_type;
static size_type npos;
const char* begin(void) const {
return s;
}
const char* end(void) const {
return &s[ssize];
}
size_type size(void) const {
if (s)
return ssize;
else
return 0;
}
SString &assign(const char* sother, int size_ = -1) {
char *t = s;
s = StringDup(sother,size_);
ssize = (s) ? strlen(s) : 0;
delete []t;
return *this;
}
SString &assign(const SString& sother, int size_ = -1) {
return assign(sother.s,size_);
}
SString &assign(const_iterator ibeg, const_iterator iend) {
return assign(ibeg,iend - ibeg);
}
SString() {
s = 0;
ssize = 0;
}
SString(const SString &source) {
s = StringDup(source.s);
ssize = (s) ? strlen(s) : 0;
}
SString(const char *s_) {
s = StringDup(s_);
ssize = (s) ? strlen(s) : 0;
}
SString(int i) {
char number[100];
sprintf(number, "%0d", i);
//itoa(i, number, 10);
s = StringDup(number);
ssize = (s) ? strlen(s) : 0;
}
~SString() {
delete []s;
s = 0;
ssize = 0;
}
SString &operator=(const SString &source) {
if (this != &source) {
delete []s;
s = StringDup(source.s);
ssize = (s) ? strlen(s) : 0;
}
return *this;
}
@@ -56,6 +104,9 @@ public:
return false;
return strcmp(s, other.s) == 0;
}
bool operator!=(const SString &other) const {
return !operator==(other);
}
bool operator==(const char *sother) const {
if ((s == 0) && (sother == 0))
return true;
@@ -63,6 +114,9 @@ public:
return false;
return strcmp(s, sother) == 0;
}
bool operator!=(const char *sother) const {
return !operator==(sother);
}
const char *c_str() const {
if (s)
return s;
@@ -82,99 +136,109 @@ public:
return '\0';
}
SString &operator +=(const char *sother) {
return append(sother,-1);
}
SString &operator +=(const SString &sother) {
return append(sother.s,sother.ssize);
}
SString &operator +=(char ch) {
return append(&ch,1);
}
SString &append(const char* sother, int lenOther) {
int len = length();
int lenOther = strlen(sother);
if(lenOther < 0)
lenOther = strlen(sother);
char *sNew = new char[len + lenOther + 1];
if (sNew) {
if (s)
memcpy(sNew, s, len);
memcpy(sNew + len, sother, lenOther);
strncpy(&sNew[len], sother, lenOther);
sNew[len + lenOther] = '\0';
delete []s;
s = sNew;
ssize = (s) ? strlen(s) : 0;
}
return *this;
}
int value() const {
if (s)
return atoi(s);
else
else
return 0;
}
void substitute(char find, char replace) {
char *t = s;
while (t) {
t = strchr(t, find);
if (t)
*t = replace;
}
}
// I don't think this really belongs here -- Neil
void correctPath() {
#ifdef unix
substitute('\\', '/');
#else
substitute('/', '\\');
#endif
}
};
struct Property {
unsigned int hash;
char *key;
char *val;
Property *next;
Property() : hash(0), key(0), val(0), next(0) {}
};
class PropSet {
private:
char **vals;
int size;
int used;
enum { hashRoots=31 };
Property *props[hashRoots];
public:
PropSet *superPS;
PropSet();
~PropSet();
void EnsureCanAddEntry();
void Set(const char *key, const char *val);
void Set(char *keyval);
SString Get(const char *key);
SString GetExpanded(const char *key);
SString Expand(const char *withvars);
int GetInt(const char *key, int defaultValue=0);
SString GetWild(const char *keybase, const char *filename);
SString GetNewExpand(const char *keybase, const char *filename);
void Clear();
void ReadFromMemory(const char *data, int len);
void Read(const char *filename);
};
// This is a fixed length list of strings suitable for display in combo boxes
// as a memory of user entries
template<int sz>
class EntryMemory {
SString entries[sz];
public:
void Insert(SString s) {
for (int i=0;i<sz;i++) {
if (entries[i] == s) {
for (int j=i;j>0;j--) {
entries[j] = entries[j-1];
}
entries[0] = s;
return;
}
}
for (int k=sz-1;k>0;k--) {
entries[k] = entries[k-1];
}
entries[0] = s;
}
int Length() const {
int len = 0;
for (int i=0;i<sz;i++)
if (entries[i].length())
len++;
return len;
}
SString At(int n) const {
return entries[n];
}
void ReadFromMemory(const char *data, int len, const char *directoryForImports=0);
void Read(const char *filename, const char *directoryForImports);
};
class WordList {
public:
// Each word contains at least one character - a empty word acts as sentinal at the end.
char **words;
char **wordsNoCase;
char *list;
int len;
bool onlyLineEnds; // Delimited by any white space or only line ends
bool sorted;
int starts[256];
WordList(bool onlyLineEnds_ = false) :
words(0), list(0), len(0), onlyLineEnds(onlyLineEnds_) {}
WordList(bool onlyLineEnds_ = false) :
words(0), wordsNoCase(0), list(0), len(0), onlyLineEnds(onlyLineEnds_), sorted(false) {}
~WordList() { Clear(); }
operator bool() { return list ? true : false; }
operator bool() { return words ? true : false; }
const char *operator[](int ind) { return words[ind]; }
void Clear();
void Set(const char *s);
char *Allocate(int size);
void SetFromAllocated();
bool InList(const char *s);
const char *GetNearestWord(const char *wordStart, int searchLen = -1, bool ignoreCase = false);
char *GetNearestWords(const char *wordStart, int searchLen = -1, bool ignoreCase = false);
};
inline bool nonFuncChar(char ch) {
return strchr("\t\n\r !\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~", ch) != NULL;
}
#endif

View File

@@ -3,11 +3,15 @@
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
// Most of this file is automatically generated from the Scintilla.iface interface definition
// file which contains any comments about the definitions. HFacer.py does the generation.
#ifndef SCILEXER_H
#define SCILEXER_H
// SciLexer features - not in standard Scintilla
//++Autogenerated -- start of section automatically generated from Scintilla.iface
#define SCLEX_CONTAINER 0
#define SCLEX_NULL 1
#define SCLEX_PYTHON 2
@@ -23,8 +27,8 @@
#define SCLEX_BATCH 12
#define SCLEX_XCODE 13
#define SCLEX_LATEX 14
// Lexical states for SCLEX_PYTHON
#define SCLEX_LUA 15
#define SCLEX_DIFF 16
#define SCE_P_DEFAULT 0
#define SCE_P_COMMENTLINE 1
#define SCE_P_NUMBER 2
@@ -39,8 +43,6 @@
#define SCE_P_IDENTIFIER 11
#define SCE_P_COMMENTBLOCK 12
#define SCE_P_STRINGEOL 13
// Lexical states for SCLEX_CPP, SCLEX_VB
#define SCE_C_DEFAULT 0
#define SCE_C_COMMENT 1
#define SCE_C_COMMENTLINE 2
@@ -54,8 +56,7 @@
#define SCE_C_OPERATOR 10
#define SCE_C_IDENTIFIER 11
#define SCE_C_STRINGEOL 12
// Lexical states for SCLEX_HTML, SCLEX_xML
#define SCE_C_VERBATIM 13
#define SCE_H_DEFAULT 0
#define SCE_H_TAG 1
#define SCE_H_TAGUNKNOWN 2
@@ -67,14 +68,15 @@
#define SCE_H_OTHER 8
#define SCE_H_COMMENT 9
#define SCE_H_ENTITY 10
// XML and ASP
#define SCE_H_TAGEND 11
#define SCE_H_XMLSTART 12
#define SCE_H_XMLEND 13
#define SCE_H_SCRIPT 14
#define SCE_H_ASP 15
#define SCE_H_ASPAT 16
// Embedded Javascript
#define SCE_H_CDATA 17
#define SCE_H_QUESTION 18
#define SCE_H_VALUE 19
#define SCE_HJ_START 40
#define SCE_HJ_DEFAULT 41
#define SCE_HJ_COMMENT 42
@@ -87,7 +89,6 @@
#define SCE_HJ_SINGLESTRING 49
#define SCE_HJ_SYMBOLS 50
#define SCE_HJ_STRINGEOL 51
// ASP Javascript
#define SCE_HJA_START 55
#define SCE_HJA_DEFAULT 56
#define SCE_HJA_COMMENT 57
@@ -100,7 +101,6 @@
#define SCE_HJA_SINGLESTRING 64
#define SCE_HJA_SYMBOLS 65
#define SCE_HJA_STRINGEOL 66
// Embedded VBScript
#define SCE_HB_START 70
#define SCE_HB_DEFAULT 71
#define SCE_HB_COMMENTLINE 72
@@ -109,7 +109,6 @@
#define SCE_HB_STRING 75
#define SCE_HB_IDENTIFIER 76
#define SCE_HB_STRINGEOL 77
// ASP VBScript
#define SCE_HBA_START 80
#define SCE_HBA_DEFAULT 81
#define SCE_HBA_COMMENTLINE 82
@@ -118,7 +117,6 @@
#define SCE_HBA_STRING 85
#define SCE_HBA_IDENTIFIER 86
#define SCE_HBA_STRINGEOL 87
// Embedded Python
#define SCE_HP_START 90
#define SCE_HP_DEFAULT 91
#define SCE_HP_COMMENTLINE 92
@@ -132,7 +130,6 @@
#define SCE_HP_DEFNAME 100
#define SCE_HP_OPERATOR 101
#define SCE_HP_IDENTIFIER 102
// ASP Python
#define SCE_HPA_START 105
#define SCE_HPA_DEFAULT 106
#define SCE_HPA_COMMENTLINE 107
@@ -146,8 +143,15 @@
#define SCE_HPA_DEFNAME 115
#define SCE_HPA_OPERATOR 116
#define SCE_HPA_IDENTIFIER 117
// Lexical states for SCLEX_PERL
#define SCE_HPHP_DEFAULT 118
#define SCE_HPHP_HSTRING 119
#define SCE_HPHP_SIMPLESTRING 120
#define SCE_HPHP_WORD 121
#define SCE_HPHP_NUMBER 122
#define SCE_HPHP_VARIABLE 123
#define SCE_HPHP_COMMENT 124
#define SCE_HPHP_COMMENTLINE 125
#define SCE_HPHP_STRINGEOL 126
#define SCE_PL_DEFAULT 0
#define SCE_PL_HERE 1
#define SCE_PL_COMMENTLINE 2
@@ -170,12 +174,31 @@
#define SCE_PL_LONGQUOTE 19
#define SCE_PL_BACKTICKS 20
#define SCE_PL_DATASECTION 21
// Lexical states for SCLEX_LATEX
#define SCE_L_DEFAULT 0
#define SCE_L_COMMAND 1
#define SCE_L_TAG 2
#define SCE_L_MATH 3
#define SCE_L_COMMENT 4
#define SCE_LUA_DEFAULT 0
#define SCE_LUA_COMMENT 1
#define SCE_LUA_COMMENTLINE 2
#define SCE_LUA_COMMENTDOC 3
#define SCE_LUA_NUMBER 4
#define SCE_LUA_WORD 5
#define SCE_LUA_STRING 6
#define SCE_LUA_CHARACTER 7
#define SCE_LUA_LITERALSTRING 8
#define SCE_LUA_PREPROCESSOR 9
#define SCE_LUA_OPERATOR 10
#define SCE_LUA_IDENTIFIER 11
#define SCE_LUA_STRINGEOL 12
#define SCE_ERR_DEFAULT 0
#define SCE_ERR_PYTHON 1
#define SCE_ERR_GCC 2
#define SCE_ERR_MS 3
#define SCE_ERR_CMD 4
#define SCE_ERR_BORLAND 5
#define SCE_ERR_PERL 6
//--Autogenerated -- end of section automatically generated from Scintilla.iface
#endif

View File

@@ -3,119 +3,74 @@
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
// Most of this file is automatically generated from the Scintilla.iface interface definition
// file which contains any comments about the definitions. HFacer.py does the generation.
#ifndef SCINTILLA_H
#define SCINTILLA_H
// Compile-time configuration options
#define MACRO_SUPPORT 1 // Comment out to remove macro hooks
#if PLAT_GTK
#include <gdk/gdk.h>
#include <gtk/gtkvbox.h>
#ifdef __cplusplus
extern "C" {
#if PLAT_WIN
#ifdef STATIC_BUILD
void Scintilla_RegisterClasses(HINSTANCE hInstance);
#endif
#endif
#define SCINTILLA(obj) GTK_CHECK_CAST (obj, scintilla_get_type (), ScintillaObject)
#define SCINTILLA_CLASS(klass) GTK_CHECK_CLASS_CAS T (klass, scintilla_get_type (), ScintillaClass)
#define IS_SCINTILLA(obj) GTK_CHECK_TYPE (obj, scintilla_get_type ())
typedef long (*SciFnDirect)(long ptr, unsigned int iMessage, unsigned long wParam, long lParam);
typedef struct _ScintillaObject ScintillaObject;
typedef struct _ScintillaClass ScintillaClass;
struct _ScintillaObject
{
GtkFixed vbox;
void *pscin;
};
struct _ScintillaClass
{
GtkFixedClass parent_class;
void (* command) (ScintillaObject *ttt);
void (* notify) (ScintillaObject *ttt);
};
guint scintilla_get_type (void);
GtkWidget* scintilla_new (void);
void scintilla_set_id (ScintillaObject *sci,int id);
long scintilla_send_message (ScintillaObject *sci,int iMessage,int wParam,int lParam);
#include "WinDefs.h"
#ifdef __cplusplus
}
#endif
#endif
#if PLAT_WX
#include "WinDefs.h"
#endif
// Both GTK and Windows
#define INVALID_POSITION -1
// Define start of Scintilla messages to be greater than all edit (EM_*) messages
// as many EM_ messages can be used.
//++Autogenerated -- start of section automatically generated from Scintilla.iface
#define INVALID_POSITION -1
#define SCI_START 2000
#define SCI_OPTIONAL_START 3000
#define SCI_LEXER_START 4000
#define SCI_ADDTEXT SCI_START + 1
#define SCI_ADDSTYLEDTEXT SCI_START + 2
#define SCI_INSERTTEXT SCI_START + 3
#define SCI_CLEARALL SCI_START + 4
#define SCI_GETLENGTH SCI_START + 6
#define SCI_GETCHARAT SCI_START + 7
#define SCI_GETCURRENTPOS SCI_START + 8
#define SCI_GETANCHOR SCI_START + 9
#define SCI_GETSTYLEAT SCI_START + 10
#define SCI_REDO SCI_START + 11
#define SCI_SETUNDOCOLLECTION SCI_START + 12
#define SCI_SELECTALL SCI_START + 13
#define SCI_SETSAVEPOINT SCI_START + 14
#define SCI_GETSTYLEDTEXT SCI_START + 15
#define SCI_CANREDO SCI_START + 16
#define SCI_MARKERLINEFROMHANDLE SCI_START + 17
#define SCI_MARKERDELETEHANDLE SCI_START + 18
#define SC_UNDOCOLLECT_NONE 0
#define SC_UNDOCOLLECT_AUTOSTART 1
#define SCI_GETVIEWWS SCI_START + 20
#define SCI_SETVIEWWS SCI_START + 21
#define SCI_GOTOLINE SCI_START + 24
#define SCI_GOTOPOS SCI_START + 25
#define SCI_SETANCHOR SCI_START + 26
#define SCI_GETCURLINE SCI_START + 27
#define SCI_GETENDSTYLED SCI_START + 28
#define SCI_CONVERTEOLS SCI_START + 29
#define SCI_GETEOLMODE SCI_START + 30
#define SCI_SETEOLMODE SCI_START + 31
#define SCI_ADDTEXT 2001
#define SCI_ADDSTYLEDTEXT 2002
#define SCI_INSERTTEXT 2003
#define SCI_CLEARALL 2004
#define SCI_CLEARDOCUMENTSTYLE 2005
#define SCI_GETLENGTH 2006
#define SCI_GETCHARAT 2007
#define SCI_GETCURRENTPOS 2008
#define SCI_GETANCHOR 2009
#define SCI_GETSTYLEAT 2010
#define SCI_REDO 2011
#define SCI_SETUNDOCOLLECTION 2012
#define SCI_SELECTALL 2013
#define SCI_SETSAVEPOINT 2014
#define SCI_GETSTYLEDTEXT 2015
#define SCI_CANREDO 2016
#define SCI_MARKERLINEFROMHANDLE 2017
#define SCI_MARKERDELETEHANDLE 2018
#define SCI_GETUNDOCOLLECTION 2019
#define SCWS_INVISIBLE 0
#define SCWS_VISIBLEALWAYS 1
#define SCWS_VISIBLEAFTERINDENT 2
#define SCI_GETVIEWWS 2020
#define SCI_SETVIEWWS 2021
#define SCI_POSITIONFROMPOINT 2022
#define SCI_GOTOLINE 2024
#define SCI_GOTOPOS 2025
#define SCI_SETANCHOR 2026
#define SCI_GETCURLINE 2027
#define SCI_GETENDSTYLED 2028
#define SCI_CONVERTEOLS 2029
#define SC_EOL_CRLF 0
#define SC_EOL_CR 1
#define SC_EOL_LF 2
#define SCI_STARTSTYLING SCI_START + 32
#define SCI_SETSTYLING SCI_START + 33
// This is the same value as CP_UTF8 in Windows
#define SCI_GETEOLMODE 2030
#define SCI_SETEOLMODE 2031
#define SCI_STARTSTYLING 2032
#define SCI_SETSTYLING 2033
#define SCI_GETBUFFEREDDRAW 2034
#define SCI_SETBUFFEREDDRAW 2035
#define SCI_SETTABWIDTH 2036
#define SCI_GETTABWIDTH 2121
#define SC_CP_UTF8 65001
#define SCI_SETBUFFEREDDRAW SCI_START + 35
#define SCI_SETTABWIDTH SCI_START + 36
#define SCI_SETCODEPAGE SCI_START + 37
#define SCI_SETUSEPALETTE SCI_START + 39
#define SCI_SETCODEPAGE 2037
#define SCI_SETUSEPALETTE 2039
#define MARKER_MAX 31
#define SC_MARK_CIRCLE 0
#define SC_MARK_ROUNDRECT 1
#define SC_MARK_ARROW 2
@@ -125,255 +80,296 @@ extern "C" {
#define SC_MARK_ARROWDOWN 6
#define SC_MARK_MINUS 7
#define SC_MARK_PLUS 8
#define SCI_MARKERDEFINE SCI_START + 40
#define SCI_MARKERSETFORE SCI_START + 41
#define SCI_MARKERSETBACK SCI_START + 42
#define SCI_MARKERADD SCI_START + 43
#define SCI_MARKERDELETE SCI_START + 44
#define SCI_MARKERDELETEALL SCI_START + 45
#define SCI_MARKERGET SCI_START + 46
#define SCI_MARKERNEXT SCI_START + 47
#define SCI_MARKERPREVIOUS SCI_START + 48
#define SC_MARKNUM_FOLDER 30
#define SC_MARKNUM_FOLDEROPEN 31
#define SC_MASK_FOLDERS ((1<<SC_MARKNUM_FOLDER) | (1<<SC_MARKNUM_FOLDEROPEN))
#define SCI_MARKERDEFINE 2040
#define SCI_MARKERSETFORE 2041
#define SCI_MARKERSETBACK 2042
#define SCI_MARKERADD 2043
#define SCI_MARKERDELETE 2044
#define SCI_MARKERDELETEALL 2045
#define SCI_MARKERGET 2046
#define SCI_MARKERNEXT 2047
#define SCI_MARKERPREVIOUS 2048
#define SC_MARGIN_SYMBOL 0
#define SC_MARGIN_NUMBER 1
#define SCI_SETMARGINTYPEN SCI_START + 240
#define SCI_GETMARGINTYPEN SCI_START + 241
#define SCI_SETMARGINWIDTHN SCI_START + 242
#define SCI_GETMARGINWIDTHN SCI_START + 243
#define SCI_SETMARGINMASKN SCI_START + 244
#define SCI_GETMARGINMASKN SCI_START + 245
#define SCI_SETMARGINSENSITIVEN SCI_START + 246
#define SCI_GETMARGINSENSITIVEN SCI_START + 247
#define SCI_SETMARGINTYPEN 2240
#define SCI_GETMARGINTYPEN 2241
#define SCI_SETMARGINWIDTHN 2242
#define SCI_GETMARGINWIDTHN 2243
#define SCI_SETMARGINMASKN 2244
#define SCI_GETMARGINMASKN 2245
#define SCI_SETMARGINSENSITIVEN 2246
#define SCI_GETMARGINSENSITIVEN 2247
#define STYLE_DEFAULT 32
#define STYLE_LINENUMBER 33
#define STYLE_BRACELIGHT 34
#define STYLE_BRACEBAD 35
#define STYLE_CONTROLCHAR 36
#define STYLE_INDENTGUIDE 37
#define STYLE_MAX 127
#define SC_CHARSET_ANSI 0
#define SC_CHARSET_DEFAULT 1
#define SC_CHARSET_BALTIC 186
#define SC_CHARSET_CHINESEBIG5 136
#define SC_CHARSET_EASTEUROPE 238
#define SC_CHARSET_GB2312 134
#define SC_CHARSET_GREEK 161
#define SC_CHARSET_HANGUL 129
#define SC_CHARSET_MAC 77
#define SC_CHARSET_OEM 255
#define SC_CHARSET_RUSSIAN 204
#define SCI_STYLECLEARALL SCI_START + 50
#define SCI_STYLESETFORE SCI_START + 51
#define SCI_STYLESETBACK SCI_START + 52
#define SCI_STYLESETBOLD SCI_START + 53
#define SCI_STYLESETITALIC SCI_START + 54
#define SCI_STYLESETSIZE SCI_START + 55
#define SCI_STYLESETFONT SCI_START + 56
#define SCI_STYLESETEOLFILLED SCI_START + 57
#define SCI_STYLERESETDEFAULT SCI_START + 58
#define SCI_STYLESETUNDERLINE SCI_START + 59
#define SCI_STYLESETCHARACTERSET SCI_START + 66
#define SCI_SETSELFORE SCI_START + 67
#define SCI_SETSELBACK SCI_START + 68
#define SCI_SETCARETFORE SCI_START + 69
#define SCI_ASSIGNCMDKEY SCI_START + 70
#define SCI_CLEARCMDKEY SCI_START + 71
#define SCI_CLEARALLCMDKEYS SCI_START + 72
#define SCI_SETSTYLINGEX SCI_START + 73
#define SCI_GETCARETPERIOD SCI_START + 75
#define SCI_SETCARETPERIOD SCI_START + 76
#define SCI_SETWORDCHARS SCI_START + 77
#define SCI_BEGINUNDOACTION SCI_START + 78
#define SCI_ENDUNDOACTION SCI_START + 79
#define SC_CHARSET_SHIFTJIS 128
#define SC_CHARSET_SYMBOL 2
#define SC_CHARSET_TURKISH 162
#define SC_CHARSET_JOHAB 130
#define SC_CHARSET_HEBREW 177
#define SC_CHARSET_ARABIC 178
#define SC_CHARSET_VIETNAMESE 163
#define SC_CHARSET_THAI 222
#define SCI_STYLECLEARALL 2050
#define SCI_STYLESETFORE 2051
#define SCI_STYLESETBACK 2052
#define SCI_STYLESETBOLD 2053
#define SCI_STYLESETITALIC 2054
#define SCI_STYLESETSIZE 2055
#define SCI_STYLESETFONT 2056
#define SCI_STYLESETEOLFILLED 2057
#define SCI_STYLERESETDEFAULT 2058
#define SCI_STYLESETUNDERLINE 2059
#define SCI_STYLESETCHARACTERSET 2066
#define SCI_SETSELFORE 2067
#define SCI_SETSELBACK 2068
#define SCI_SETCARETFORE 2069
#define SCI_ASSIGNCMDKEY 2070
#define SCI_CLEARCMDKEY 2071
#define SCI_CLEARALLCMDKEYS 2072
#define SCI_SETSTYLINGEX 2073
#define SCI_STYLESETVISIBLE 2074
#define SCI_GETCARETPERIOD 2075
#define SCI_SETCARETPERIOD 2076
#define SCI_SETWORDCHARS 2077
#define SCI_BEGINUNDOACTION 2078
#define SCI_ENDUNDOACTION 2079
#define INDIC_MAX 7
#define INDIC_PLAIN 0
#define INDIC_SQUIGGLE 1
#define INDIC_TT 2
#define INDIC_DIAGONAL 3
#define INDIC_STRIKE 4
#define INDIC0_MASK 32
#define INDIC1_MASK 64
#define INDIC2_MASK 128
#define INDICS_MASK (INDIC0_MASK | INDIC1_MASK | INDIC2_MASK)
#define SCI_INDICSETSTYLE SCI_START + 80
#define SCI_INDICGETSTYLE SCI_START + 81
#define SCI_INDICSETFORE SCI_START + 82
#define SCI_INDICGETFORE SCI_START + 83
#define SCI_SETSTYLEBITS SCI_START + 90
#define SCI_GETSTYLEBITS SCI_START + 91
#define SCI_SETLINESTATE SCI_START + 92
#define SCI_GETLINESTATE SCI_START + 93
#define SCI_GETMAXLINESTATE SCI_START + 94
#define SCI_AUTOCSHOW SCI_START + 100
#define SCI_AUTOCCANCEL SCI_START + 101
#define SCI_AUTOCACTIVE SCI_START + 102
#define SCI_AUTOCPOSSTART SCI_START + 103
#define SCI_AUTOCCOMPLETE SCI_START + 104
#define SCI_AUTOCSTOPS SCI_START + 105
#define SCI_AUTOCSETSEPARATOR SCI_START + 106
#define SCI_AUTOCGETSEPARATOR SCI_START + 107
#define SCI_AUTOCSELECT SCI_START + 108
#define SCI_GETTABWIDTH SCI_START + 121
#define SCI_SETINDENT SCI_START + 122
#define SCI_GETINDENT SCI_START + 123
#define SCI_SETUSETABS SCI_START + 124
#define SCI_GETUSETABS SCI_START + 125
#define SCI_SETLINEINDENTATION SCI_START + 126
#define SCI_GETLINEINDENTATION SCI_START + 127
#define SCI_GETLINEINDENTPOSITION SCI_START + 128
#define SCI_SETHSCROLLBAR SCI_START + 130
#define SCI_GETHSCROLLBAR SCI_START + 131
#define SCI_CALLTIPSHOW SCI_START + 200
#define SCI_CALLTIPCANCEL SCI_START + 201
#define SCI_CALLTIPACTIVE SCI_START + 202
#define SCI_CALLTIPPOSSTART SCI_START + 203
#define SCI_CALLTIPSETHLT SCI_START + 204
#define SCI_CALLTIPSETBACK SCI_START + 205
#define INDICS_MASK INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
#define SCI_INDICSETSTYLE 2080
#define SCI_INDICGETSTYLE 2081
#define SCI_INDICSETFORE 2082
#define SCI_INDICGETFORE 2083
#define SCI_SETSTYLEBITS 2090
#define SCI_GETSTYLEBITS 2091
#define SCI_SETLINESTATE 2092
#define SCI_GETLINESTATE 2093
#define SCI_GETMAXLINESTATE 2094
#define SCI_AUTOCSHOW 2100
#define SCI_AUTOCCANCEL 2101
#define SCI_AUTOCACTIVE 2102
#define SCI_AUTOCPOSSTART 2103
#define SCI_AUTOCCOMPLETE 2104
#define SCI_AUTOCSTOPS 2105
#define SCI_AUTOCSETSEPARATOR 2106
#define SCI_AUTOCGETSEPARATOR 2107
#define SCI_AUTOCSELECT 2108
#define SCI_AUTOCSETCANCELATSTART 2110
#define SCI_AUTOCGETCANCELATSTART 2111
#define SCI_AUTOCSETFILLUPS 2112
#define SCI_AUTOCSETCHOOSESINGLE 2113
#define SCI_AUTOCGETCHOOSESINGLE 2114
#define SCI_AUTOCSETIGNORECASE 2115
#define SCI_AUTOCGETIGNORECASE 2116
#define SCI_SETINDENT 2122
#define SCI_GETINDENT 2123
#define SCI_SETUSETABS 2124
#define SCI_GETUSETABS 2125
#define SCI_SETLINEINDENTATION 2126
#define SCI_GETLINEINDENTATION 2127
#define SCI_GETLINEINDENTPOSITION 2128
#define SCI_GETCOLUMN 2129
#define SCI_SETHSCROLLBAR 2130
#define SCI_GETHSCROLLBAR 2131
#define SCI_SETINDENTATIONGUIDES 2132
#define SCI_GETINDENTATIONGUIDES 2133
#define SCI_SETHIGHLIGHTGUIDE 2134
#define SCI_GETHIGHLIGHTGUIDE 2135
#define SCI_GETLINEENDPOSITION 2136
#define SCI_GETCODEPAGE 2137
#define SCI_GETCARETFORE 2138
#define SCI_GETUSEPALETTE 2139
#define SCI_GETREADONLY 2140
#define SCI_SETCURRENTPOS 2141
#define SCI_SETSELECTIONSTART 2142
#define SCI_GETSELECTIONSTART 2143
#define SCI_SETSELECTIONEND 2144
#define SCI_GETSELECTIONEND 2145
#define SCI_SETPRINTMAGNIFICATION 2146
#define SCI_GETPRINTMAGNIFICATION 2147
#define SC_PRINT_NORMAL 0
#define SC_PRINT_INVERTLIGHT 1
#define SC_PRINT_BLACKONWHITE 2
#define SCI_SETPRINTCOLOURMODE 2148
#define SCI_GETPRINTCOLOURMODE 2149
#define SCFIND_DOWN 1
#define SCFIND_WHOLEWORD 2
#define SCFIND_MATCHCASE 4
#define SCFIND_WORDSTART 0x00100000
#define SCFIND_REGEXP 0x00200000
#define SCI_FINDTEXT 2150
#define SCI_FORMATRANGE 2151
#define SCI_GETFIRSTVISIBLELINE 2152
#define SCI_GETLINE 2153
#define SCI_GETLINECOUNT 2154
#define SCI_SETMARGINLEFT 2155
#define SCI_GETMARGINLEFT 2156
#define SCI_SETMARGINRIGHT 2157
#define SCI_GETMARGINRIGHT 2158
#define SCI_GETMODIFY 2159
#define SCI_SETSEL 2160
#define SCI_GETSELTEXT 2161
#define SCI_GETTEXTRANGE 2162
#define SCI_HIDESELECTION 2163
#define SCI_POINTXFROMPOSITION 2164
#define SCI_POINTYFROMPOSITION 2165
#define SCI_LINEFROMPOSITION 2166
#define SCI_POSITIONFROMLINE 2167
#define SCI_LINESCROLL 2168
#define SCI_SCROLLCARET 2169
#define SCI_REPLACESEL 2170
#define SCI_SETREADONLY 2171
#define SCI_NULL 2172
#define SCI_CANPASTE 2173
#define SCI_CANUNDO 2174
#define SCI_EMPTYUNDOBUFFER 2175
#define SCI_UNDO 2176
#define SCI_CUT 2177
#define SCI_COPY 2178
#define SCI_PASTE 2179
#define SCI_CLEAR 2180
#define SCI_SETTEXT 2181
#define SCI_GETTEXT 2182
#define SCI_GETTEXTLENGTH 2183
#define SCI_GETDIRECTFUNCTION 2184
#define SCI_GETDIRECTPOINTER 2185
#define SCI_SETOVERTYPE 2186
#define SCI_GETOVERTYPE 2187
#define SCI_CALLTIPSHOW 2200
#define SCI_CALLTIPCANCEL 2201
#define SCI_CALLTIPACTIVE 2202
#define SCI_CALLTIPPOSSTART 2203
#define SCI_CALLTIPSETHLT 2204
#define SCI_CALLTIPSETBACK 2205
#define SCI_VISIBLEFROMDOCLINE 2220
#define SCI_DOCLINEFROMVISIBLE 2221
#define SC_FOLDLEVELBASE 0x400
#define SC_FOLDLEVELWHITEFLAG 0x1000
#define SC_FOLDLEVELHEADERFLAG 0x2000
#define SC_FOLDLEVELNUMBERMASK 0x0FFF
#define SCI_VISIBLEFROMDOCLINE SCI_START + 220
#define SCI_DOCLINEFROMVISIBLE SCI_START + 221
#define SCI_SETFOLDLEVEL SCI_START + 222
#define SCI_GETFOLDLEVEL SCI_START + 223
#define SCI_GETLASTCHILD SCI_START + 224
#define SCI_GETFOLDPARENT SCI_START + 225
#define SCI_SHOWLINES SCI_START + 226
#define SCI_HIDELINES SCI_START + 227
#define SCI_GETLINEVISIBLE SCI_START + 228
#define SCI_SETFOLDEXPANDED SCI_START + 229
#define SCI_GETFOLDEXPANDED SCI_START + 230
#define SCI_TOGGLEFOLD SCI_START + 231
#define SCI_ENSUREVISIBLE SCI_START + 232
#define SCI_SETFOLDFLAGS SCI_START + 233
// Key messages
#define SCI_LINEDOWN SCI_START + 300
#define SCI_LINEDOWNEXTEND SCI_START + 301
#define SCI_LINEUP SCI_START + 302
#define SCI_LINEUPEXTEND SCI_START + 303
#define SCI_CHARLEFT SCI_START + 304
#define SCI_CHARLEFTEXTEND SCI_START + 305
#define SCI_CHARRIGHT SCI_START + 306
#define SCI_CHARRIGHTEXTEND SCI_START + 307
#define SCI_WORDLEFT SCI_START + 308
#define SCI_WORDLEFTEXTEND SCI_START + 309
#define SCI_WORDRIGHT SCI_START + 310
#define SCI_WORDRIGHTEXTEND SCI_START + 311
#define SCI_HOME SCI_START + 312
#define SCI_HOMEEXTEND SCI_START + 313
#define SCI_LINEEND SCI_START + 314
#define SCI_LINEENDEXTEND SCI_START + 315
#define SCI_DOCUMENTSTART SCI_START + 316
#define SCI_DOCUMENTSTARTEXTEND SCI_START + 317
#define SCI_DOCUMENTEND SCI_START + 318
#define SCI_DOCUMENTENDEXTEND SCI_START + 319
#define SCI_PAGEUP SCI_START + 320
#define SCI_PAGEUPEXTEND SCI_START + 321
#define SCI_PAGEDOWN SCI_START + 322
#define SCI_PAGEDOWNEXTEND SCI_START + 323
#define SCI_EDITTOGGLEOVERTYPE SCI_START + 324
#define SCI_CANCEL SCI_START + 325
#define SCI_DELETEBACK SCI_START + 326
#define SCI_TAB SCI_START + 327
#define SCI_BACKTAB SCI_START + 328
#define SCI_NEWLINE SCI_START + 329
#define SCI_FORMFEED SCI_START + 330
#define SCI_VCHOME SCI_START + 331
#define SCI_VCHOMEEXTEND SCI_START + 332
#define SCI_ZOOMIN SCI_START + 333
#define SCI_ZOOMOUT SCI_START + 334
#define SCI_DELWORDLEFT SCI_START + 335
#define SCI_DELWORDRIGHT SCI_START + 336
#define SCI_LINECUT SCI_START + 337
#define SCI_LINEDELETE SCI_START + 338
#define SCI_LINETRANSPOSE SCI_START + 339
#define SCI_LOWERCASE SCI_START + 340
#define SCI_UPPERCASE SCI_START + 341
#define SCI_LINESCROLLDOWN SCI_START + 342
#define SCI_LINESCROLLUP SCI_START + 343
#define SCI_LINELENGTH SCI_START + 350
#define SCI_BRACEHIGHLIGHT SCI_START + 351
#define SCI_BRACEBADLIGHT SCI_START + 352
#define SCI_BRACEMATCH SCI_START + 353
#define SCI_GETVIEWEOL SCI_START + 355
#define SCI_SETVIEWEOL SCI_START + 356
#define SCI_GETDOCPOINTER SCI_START + 357
#define SCI_SETDOCPOINTER SCI_START + 358
#define SCI_SETMODEVENTMASK SCI_START + 359
#define SCI_SETFOLDLEVEL 2222
#define SCI_GETFOLDLEVEL 2223
#define SCI_GETLASTCHILD 2224
#define SCI_GETFOLDPARENT 2225
#define SCI_SHOWLINES 2226
#define SCI_HIDELINES 2227
#define SCI_GETLINEVISIBLE 2228
#define SCI_SETFOLDEXPANDED 2229
#define SCI_GETFOLDEXPANDED 2230
#define SCI_TOGGLEFOLD 2231
#define SCI_ENSUREVISIBLE 2232
#define SCI_SETFOLDFLAGS 2233
#define SCI_LINEDOWN 2300
#define SCI_LINEDOWNEXTEND 2301
#define SCI_LINEUP 2302
#define SCI_LINEUPEXTEND 2303
#define SCI_CHARLEFT 2304
#define SCI_CHARLEFTEXTEND 2305
#define SCI_CHARRIGHT 2306
#define SCI_CHARRIGHTEXTEND 2307
#define SCI_WORDLEFT 2308
#define SCI_WORDLEFTEXTEND 2309
#define SCI_WORDRIGHT 2310
#define SCI_WORDRIGHTEXTEND 2311
#define SCI_HOME 2312
#define SCI_HOMEEXTEND 2313
#define SCI_LINEEND 2314
#define SCI_LINEENDEXTEND 2315
#define SCI_DOCUMENTSTART 2316
#define SCI_DOCUMENTSTARTEXTEND 2317
#define SCI_DOCUMENTEND 2318
#define SCI_DOCUMENTENDEXTEND 2319
#define SCI_PAGEUP 2320
#define SCI_PAGEUPEXTEND 2321
#define SCI_PAGEDOWN 2322
#define SCI_PAGEDOWNEXTEND 2323
#define SCI_EDITTOGGLEOVERTYPE 2324
#define SCI_CANCEL 2325
#define SCI_DELETEBACK 2326
#define SCI_TAB 2327
#define SCI_BACKTAB 2328
#define SCI_NEWLINE 2329
#define SCI_FORMFEED 2330
#define SCI_VCHOME 2331
#define SCI_VCHOMEEXTEND 2332
#define SCI_ZOOMIN 2333
#define SCI_ZOOMOUT 2334
#define SCI_DELWORDLEFT 2335
#define SCI_DELWORDRIGHT 2336
#define SCI_LINECUT 2337
#define SCI_LINEDELETE 2338
#define SCI_LINETRANSPOSE 2339
#define SCI_LOWERCASE 2340
#define SCI_UPPERCASE 2341
#define SCI_LINESCROLLDOWN 2342
#define SCI_LINESCROLLUP 2343
#define SCI_LINELENGTH 2350
#define SCI_BRACEHIGHLIGHT 2351
#define SCI_BRACEBADLIGHT 2352
#define SCI_BRACEMATCH 2353
#define SCI_GETVIEWEOL 2355
#define SCI_SETVIEWEOL 2356
#define SCI_GETDOCPOINTER 2357
#define SCI_SETDOCPOINTER 2358
#define SCI_SETMODEVENTMASK 2359
#define EDGE_NONE 0
#define EDGE_LINE 1
#define EDGE_BACKGROUND 2
#define SCI_GETEDGECOLUMN SCI_START + 360
#define SCI_SETEDGECOLUMN SCI_START + 361
#define SCI_GETEDGEMODE SCI_START + 362
#define SCI_SETEDGEMODE SCI_START + 363
#define SCI_GETEDGECOLOUR SCI_START + 364
#define SCI_SETEDGECOLOUR SCI_START + 365
#define SCI_SEARCHANCHOR SCI_START + 366
#define SCI_SEARCHNEXT SCI_START + 367
#define SCI_SEARCHPREV SCI_START + 368
#define CARET_SLOP 0x01 // Show caret within N lines of edge when it's scrolled to view
#define CARET_CENTER 0x02 // Center caret on screen when it's scrolled to view
#define CARET_STRICT 0x04 // OR this with CARET_CENTER to reposition even when visible, or
// OR this with CARET_SLOP to reposition whenever outside slop border
#define SCI_SETCARETPOLICY SCI_START + 369
#define SCI_LINESONSCREEN SCI_START + 370
#define SCI_USEPOPUP SCI_START + 371
#define SCI_SELECTIONISRECTANGLE SCI_START + 372
#define SCI_SETZOOM SCI_START + 373
#define SCI_GETZOOM SCI_START + 374
#define SCI_ADDREFDOC SCI_START + 375
#define SCI_RELEASEDOC SCI_START + 376
// GTK+ Specific
#define SCI_GRABFOCUS SCI_START + 400
// Optional module for macro recording
#ifdef MACRO_SUPPORT
typedef void (tMacroRecorder)(UINT iMessage, WPARAM wParam, LPARAM lParam,
void *userData);
#define SCI_STARTRECORD SCI_OPTIONAL_START + 1
#define SCI_STOPRECORD SCI_OPTIONAL_START + 2
#endif
#define SCI_SETLEXER SCI_LEXER_START + 1
#define SCI_GETLEXER SCI_LEXER_START + 2
#define SCI_COLOURISE SCI_LEXER_START + 3
#define SCI_SETPROPERTY SCI_LEXER_START + 4
#define SCI_SETKEYWORDS SCI_LEXER_START + 5
// Notifications
// Type of modification and the action which caused the modification
// These are defined as a bit mask to make it easy to specify which notifications are wanted.
// One bit is set from each of SC_MOD_* and SC_PERFORMED_*.
#define SCI_GETEDGECOLUMN 2360
#define SCI_SETEDGECOLUMN 2361
#define SCI_GETEDGEMODE 2362
#define SCI_SETEDGEMODE 2363
#define SCI_GETEDGECOLOUR 2364
#define SCI_SETEDGECOLOUR 2365
#define SCI_SEARCHANCHOR 2366
#define SCI_SEARCHNEXT 2367
#define SCI_SEARCHPREV 2368
#define CARET_SLOP 0x01
#define CARET_CENTER 0x02
#define CARET_STRICT 0x04
#define SCI_SETCARETPOLICY 2369
#define SCI_LINESONSCREEN 2370
#define SCI_USEPOPUP 2371
#define SCI_SELECTIONISRECTANGLE 2372
#define SCI_SETZOOM 2373
#define SCI_GETZOOM 2374
#define SCI_CREATEDOCUMENT 2375
#define SCI_ADDREFDOCUMENT 2376
#define SCI_RELEASEDOCUMENT 2377
#define SCI_GETMODEVENTMASK 2378
#define SCI_GRABFOCUS 2400
#define SCI_STARTRECORD 3001
#define SCI_STOPRECORD 3002
#define SCI_SETLEXER 4001
#define SCI_GETLEXER 4002
#define SCI_COLOURISE 4003
#define SCI_SETPROPERTY 4004
#define SCI_SETKEYWORDS 4005
#define SC_MOD_INSERTTEXT 0x1
#define SC_MOD_DELETETEXT 0x2
#define SC_MOD_CHANGESTYLE 0x4
@@ -385,11 +381,98 @@ typedef void (tMacroRecorder)(UINT iMessage, WPARAM wParam, LPARAM lParam,
#define SC_MOD_CHANGEMARKER 0x200
#define SC_MOD_BEFOREINSERT 0x400
#define SC_MOD_BEFOREDELETE 0x800
#define SC_MODEVENTMASKALL 0xF77
#define SCEN_CHANGE 768
#define SCEN_SETFOCUS 512
#define SCEN_KILLFOCUS 256
#define SCK_DOWN 300
#define SCK_UP 301
#define SCK_LEFT 302
#define SCK_RIGHT 303
#define SCK_HOME 304
#define SCK_END 305
#define SCK_PRIOR 306
#define SCK_NEXT 307
#define SCK_DELETE 308
#define SCK_INSERT 309
#define SCK_ESCAPE 7
#define SCK_BACK 8
#define SCK_TAB 9
#define SCK_RETURN 13
#define SCK_ADD 310
#define SCK_SUBTRACT 311
#define SCK_DIVIDE 312
#define SCMOD_SHIFT 1
#define SCMOD_CTRL 2
#define SCMOD_ALT 4
#define SCN_STYLENEEDED 2000
#define SCN_CHARADDED 2001
#define SCN_SAVEPOINTREACHED 2002
#define SCN_SAVEPOINTLEFT 2003
#define SCN_MODIFYATTEMPTRO 2004
#define SCN_KEY 2005
#define SCN_DOUBLECLICK 2006
#define SCN_UPDATEUI 2007
#define SCN_CHECKBRACE 2007
#define SCN_MODIFIED 2008
#define SCN_MACRORECORD 2009
#define SCN_MARGINCLICK 2010
#define SCN_NEEDSHOWN 2011
#define SCN_POSCHANGED 2012
//--Autogenerated -- end of section automatically generated from Scintilla.iface
// Optional module for macro recording
#ifdef MACRO_SUPPORT
typedef void (tMacroRecorder)(unsigned int iMessage, unsigned long wParam,
long lParam, void *userData);
#endif
// These structures are defined to be exactly the same shape as the Win32
// CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs.
// So older code that treats Scintilla as a RichEdit will work.
struct CharacterRange {
long cpMin;
long cpMax;
};
struct TextRange {
CharacterRange chrg;
char *lpstrText;
};
struct TextToFind {
CharacterRange chrg;
char *lpstrText;
CharacterRange chrgText;
};
#ifdef PLATFORM_H
// This structure is used in printing and requires some of the graphics types
// from Platform.h. Not needed by most client code.
struct RangeToFormat {
SurfaceID hdc;
SurfaceID hdcTarget;
PRectangle rc;
PRectangle rcPage;
CharacterRange chrg;
};
#endif
struct NotifyHeader {
// hwndFrom is really an environment specifc window handle or pointer
// but most clients of Scintilla.h do not have this type visible.
//WindowID hwndFrom;
void *hwndFrom;
unsigned int idFrom;
unsigned int code;
};
struct SCNotification {
NMHDR nmhdr;
NotifyHeader nmhdr;
int position; // SCN_STYLENEEDED, SCN_MODIFIED
int ch; // SCN_CHARADDED, SCN_KEY
int modifiers; // SCN_KEY
@@ -408,28 +491,7 @@ struct SCNotification {
int margin; // SCN_MARGINCLICK
};
#define SCN_STYLENEEDED 2000
#define SCN_CHARADDED 2001
#define SCN_SAVEPOINTREACHED 2002
#define SCN_SAVEPOINTLEFT 2003
#define SCN_MODIFYATTEMPTRO 2004
// GTK+ Specific to work around focus and accelerator problems:
#define SCN_KEY 2005
#define SCN_DOUBLECLICK 2006
#define SCN_UPDATEUI 2007
// The old name for SCN_UPDATEUI:
#define SCN_CHECKBRACE 2007
#define SCN_MODIFIED 2008
// Optional module for macro recording
#ifdef MACRO_SUPPORT
#define SCN_MACRORECORD 2009
#endif
#define SCN_MARGINCLICK 2010
#define SCN_NEEDSHOWN 2011
#ifdef STATIC_BUILD
void Scintilla_RegisterClasses(HINSTANCE hInstance);
#endif
#define SC_MASK_FOLDERS ((1<<SC_MARKNUM_FOLDER) | (1<<SC_MARKNUM_FOLDEROPEN))
// Deprecation section listing all API features that are deprecated and will
// will be removed completely in a future version.
@@ -437,23 +499,9 @@ void Scintilla_RegisterClasses(HINSTANCE hInstance);
#ifdef INCLUDE_DEPRECATED_FEATURES
#define SCI_CHANGEPOSITION SCI_START + 22
// Default style settings. These are deprecated and will be removed in a future version.
#define SCI_SETFORE SCI_START + 60
#define SCI_SETBACK SCI_START + 61
#define SCI_SETBOLD SCI_START + 62
#define SCI_SETITALIC SCI_START + 63
#define SCI_SETSIZE SCI_START + 64
#define SCI_SETFONT SCI_START + 65
#define SCI_APPENDUNDOSTARTACTION SCI_START + 74
#define SC_UNDOCOLLECT_MANUALSTART 2
// Deprecated in release 1.22
#define SCI_SETMARGINWIDTH SCI_START + 34
#define SCI_SETLINENUMBERWIDTH SCI_START + 38
// Deprecated in 1.27
#define SC_UNDOCOLLECT_NONE 0
#define SC_UNDOCOLLECT_AUTOSTART 1
#endif

View File

@@ -3,16 +3,17 @@
## This file defines the interface to Scintilla
## A line starting with ## is a pure comment and should be stripped by readers.
## A line starting with #!! is for future shbang use
## A line starting with # followed by a space is a documentation comment and refers
## A line starting with #! is for future shbang use
## A line starting with # followed by a space is a documentation comment and refers
## to the next feature definition.
## Each feature is defined by a line starting with fun, get, set or val.
## Each feature is defined by a line starting with fun, get, set, val or evt.
## cat -> start a category
## fun -> a function
## get -> a property get function
## get -> a property set function
## set -> a property set function
## val -> definition of a constant
## evt -> an event
## All other feature names should be ignored. They may be defined in the future.
## A property may have a set function, a get function or both. Each will have
## "Get" or "Set" in their names and the corresponding name will have the obvious switch.
@@ -21,6 +22,7 @@
## <featureType><ws><returnType><ws><name>[=<number](<param>,<param>)
## param is <paramType><ws><paramName>[=<value>]
## Additional white space is allowed between elements.
## The syntax for evt is <featureType><ws><returnType><ws><name>[=<number]([<param>[,<param>]*])
## Feature names that contain an underscore are defined by Windows, so in these
## cases, using the Windows definition is preferred where available.
@@ -33,20 +35,27 @@
## string -> pointer to const character
## stringresult -> pointer to character
## cells -> pointer to array of cells, each cell containing a style byte and character byte
## textrange -> complex structure
## charrange -> range of a min and a max position
## charrangeresult -> like charrange, but output param
## textrange -> charrange + output string
## findtext -> searchrange, text -> foundposition
## findtextex -> searchrange
## keymod -> integer containing key in low half and modifiers in high half
## countedstring
## formatrange
## point -> x,y
## Client code should ignore definitions containing types it does not understand, except
## pointresult -> like point, but output param
## rectangle -> left,top,right,bottom
## Client code should ignore definitions containing types it does not understand, except
## for possibly #defining the constants
cat Basics
cat Basics
################################################
## From Scintilla.h
## For Scintilla.h
val INVALID_POSITION=-1
## Define start of Scintilla messages to be greater than all edit (EM_*) messages
## as many EM_ messages can be used although that use is deprecated.
val SCI_START=2000
val SCI_OPTIONAL_START=3000
val SCI_LEXER_START=4000
@@ -63,6 +72,9 @@ fun void InsertText=2003(position pos, string text)
# Delete all text in the document
fun void ClearAll=2004(,)
# Set all style bytes to 0, remove all folding information
fun void ClearDocumentStyle=2005(,)
# The number of characters in the document
get int GetLength=2006(,)
@@ -81,17 +93,14 @@ get int GetStyleAt=2010(position pos,)
# Redoes the next action on the undo history
fun void Redo=2011(,)
val SC_UNDOCOLLECT_NONE=0
val SC_UNDOCOLLECT_AUTOSTART=1
# Choose between collecting actions into the undo
# Choose between collecting actions into the undo
# history and discarding them.
set void SetUndoCollection=2012(int collectUndo,)
set void SetUndoCollection=2012(bool collectUndo,)
# Select all the text in the document.
fun void SelectAll=2013(,)
# Remember the current position in the undo history as the position
# Remember the current position in the undo history as the position
# at which the document was saved.
fun void SetSavePoint=2014(,)
@@ -108,11 +117,22 @@ fun int MarkerLineFromHandle=2017(int handle,)
# Delete a marker.
fun void MarkerDeleteHandle=2018(int handle,)
# Are white space characters currently visible?
get bool GetViewWS=2020(,)
# Is undo history being collected?
get bool GetUndoCollection=2019(,)
# Make white space characters visible or invisible.
set void SetViewWS=2021(bool viewWS,)
val SCWS_INVISIBLE=0
val SCWS_VISIBLEALWAYS=1
val SCWS_VISIBLEAFTERINDENT=2
# Are white space characters currently visible?
# Returns one of SCWS_* constants.
get int GetViewWS=2020(,)
# Make white space characters invisible, always visible or visible outside indentation.
set void SetViewWS=2021(int viewWS,)
# Find the position from a point within the window.
fun int PositionFromPoint=2022(int x, int y)
# Set caret to start of a line and ensure it is visible.
fun void GotoLine=2024(int line,)
@@ -145,7 +165,7 @@ get int GetEOLMode=2030(,)
set void SetEOLMode=2031(int eolMode,)
# Set the current styling position to pos and the styling mask to mask.
# The styling mask can be used to protect some bits in each styling byte from
# The styling mask can be used to protect some bits in each styling byte from
# modification.
fun void StartStyling=2032(position pos, int mask)
@@ -153,17 +173,22 @@ fun void StartStyling=2032(position pos, int mask)
# and move the current styling position to after this newly styled segment.
fun void SetStyling=2033(int length, int style)
# Is drawing done first into a buffer or direct to the screen.
get bool GetBufferedDraw=2034(,)
# If drawing is buffered then each line of text is drawn into a bitmap buffer
# before drawing it to the screen to avoid flicker.
set void SetBufferedDraw=2035(bool buffered,)
# Change the visible size of a tab to be a multiple of the width of a space
# Change the visible size of a tab to be a multiple of the width of a space
# character.
set void SetTabWidth=2036(int tabWidth,)
# Retrieve the visible size of a tab.
# Retrieve the visible size of a tab.
get int GetTabWidth=2121(,)
# The SC_CP_UTF8 value can be used to enter Unicode mode.
# This is the same value as CP_UTF8 in Windows
val SC_CP_UTF8=65001
# Set the code page used to interpret the bytes of the document as characters.
@@ -187,7 +212,6 @@ val SC_MARK_PLUS=8
val SC_MARKNUM_FOLDER=30
val SC_MARKNUM_FOLDEROPEN=31
##val SC_MASK_FOLDERS=1<<SC_MARKNUM_FOLDER | 1<<SC_MARKNUM_FOLDEROPEN
# Set the symbol used for a particular marker number.
fun void MarkerDefine=2040(int markerNumber, int markerSymbol)
@@ -248,8 +272,31 @@ val STYLE_LINENUMBER=33
val STYLE_BRACELIGHT=34
val STYLE_BRACEBAD=35
val STYLE_CONTROLCHAR=36
val STYLE_INDENTGUIDE=37
val STYLE_MAX=127
# Character set identifiers are used in StyleSetCharacterSet.
# The values are the same as the Windows *_CHARSET values.
val SC_CHARSET_ANSI=0
val SC_CHARSET_DEFAULT=1
val SC_CHARSET_BALTIC=186
val SC_CHARSET_CHINESEBIG5=136
val SC_CHARSET_EASTEUROPE=238
val SC_CHARSET_GB2312=134
val SC_CHARSET_GREEK=161
val SC_CHARSET_HANGUL=129
val SC_CHARSET_MAC=77
val SC_CHARSET_OEM=255
val SC_CHARSET_RUSSIAN=204
val SC_CHARSET_SHIFTJIS=128
val SC_CHARSET_SYMBOL=2
val SC_CHARSET_TURKISH=162
val SC_CHARSET_JOHAB=130
val SC_CHARSET_HEBREW=177
val SC_CHARSET_ARABIC=178
val SC_CHARSET_VIETNAMESE=163
val SC_CHARSET_THAI=222
# Clear all the styles and make equivalent to the global default style.
set void StyleClearAll=2050(,)
@@ -290,7 +337,7 @@ fun void SetSelFore=2067(bool useSetting, colour fore)
fun void SetSelBack=2068(bool useSetting, colour back)
# Set the foreground colour of the caret.
fun void SetCaretFore=2069(colour fore,)
set void SetCaretFore=2069(colour fore,)
# When key+modifier combination km is pressed perform msg.
fun void AssignCmdKey=2070(keymod km, int msg)
@@ -304,13 +351,16 @@ fun void ClearAllCmdKeys=2072(,)
# Set the styles for a segment of the document.
fun void SetStylingEx=2073(int length, string styles)
# Get the time in milliseconds that the caret is on and off.
# Set a style to be visible or not.
set void StyleSetVisible=2074(int style, bool visible)
# Get the time in milliseconds that the caret is on and off.
get int GetCaretPeriod=2075(,)
# Get the time in milliseconds that the caret is on and off. 0 = steady on.
set void SetCaretPeriod=2076(int periodMilliseconds,)
# Set the set of characters making up words for when moving or selecting
# Set the set of characters making up words for when moving or selecting
# by word.
set void SetWordChars=2077(, string characters)
@@ -330,7 +380,8 @@ val INDIC_STRIKE=4
val INDIC0_MASK=32
val INDIC1_MASK=64
val INDIC2_MASK=128
val INDICS_MASK=INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
##val INDICS_MASK=INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
val INDICS_MASK=32 | 64 | 128
# Set an indicator to plain, squiggle or TT.
set void IndicSetStyle=2080(int indic, int style)
@@ -358,7 +409,7 @@ set void SetLineState=2092(int line, int state)
# Retrieve the extra styling information for a line.
get int GetLineState=2093(int line,)
# Retrieve the last line number that has line state.
# Retrieve the last line number that has line state.
get int GetMaxLineState=2094(,)
# Display a auto-completion list.
@@ -372,7 +423,7 @@ fun void AutoCCancel=2101(,)
# Is there an auto-completion list visible?
fun bool AutoCActive=2102(,)
# Retrieve the position of the caret when the auto-completion list was
# Retrieve the position of the caret when the auto-completion list was
# displayed.
fun position AutoCPosStart=2103(,)
@@ -382,7 +433,7 @@ fun void AutoCComplete=2104(,)
# Define a set of character that when typed cancel the auto-completion list.
fun void AutoCStops=2105(, string characterSet)
# Change the separator character in the string setting up an auto-completion
# Change the separator character in the string setting up an auto-completion
# list. Default is space but can be changed if items contain space.
set void AutoCSetSeparator=2106(int separatorCharacter,)
@@ -392,6 +443,28 @@ get int AutoCGetSeparator=2107(,)
# Select the item in the auto-completion list that starts with a string.
fun void AutoCSelect=2108(, string text)
# Should the auto-completion list be cancelled if the user backspaces to a
# position before where the box was created.
set void AutoCSetCancelAtStart=2110(bool cancel,)
# Retrieve whether auto-completion cancelled by backspacing before start.
get bool AutoCGetCancelAtStart=2111(,)
# Define a set of character that when typed fills up the selected word.
set void AutoCSetFillUps=2112(, string characterSet)
# Should a single item auto-completion list automatically choose the item.
set void AutoCSetChooseSingle=2113(bool chooseSingle,)
# Retrieve whether a single item auto-completion list automatically choose the item.
get bool AutoCGetChooseSingle=2114(,)
# Set whether case is significant when performing auto-completion searches.
set void AutoCSetIgnoreCase=2115(bool ignoreCase,)
# Retrieve state of ignore case flag.
get bool AutoCGetIgnoreCase=2116(,)
# Set the number of spaces used for one level of indentation.
set void SetIndent=2122(int indentSize,)
@@ -414,12 +487,203 @@ get int GetLineIndentation=2127(int line,)
# Retrieve the position before the first non indentation character on a line.
get position GetLineIndentPosition=2128(int line,)
# Show or hide the horizontal scroll bar
# Retrieve the column number of a position, taking tab width into account.
get int GetColumn=2129(position pos,)
# Show or hide the horizontal scroll bar.
set void SetHScrollBar=2130(bool show,)
# Is the horizontal scroll bar visible.
# Is the horizontal scroll bar visible?
get bool GetHScrollBar=2131(,)
# Show or hide indentation guides.
set void SetIndentationGuides=2132(bool show,)
# Are the indentation guides visible?
get bool GetIndentationGuides=2133(,)
# Set the highlighted indentation guide column.
# 0 = no highlighted guide.
set void SetHighlightGuide=2134(int column,)
# Get the highlighted indentation guide column.
get int GetHighlightGuide=2135(,)
# Get the position after the last visible characters on a line.
get int GetLineEndPosition=2136(int line,)
# Get the code page used to interpret the bytes of the document as characters.
get int GetCodePage=2137(,)
# Get the foreground colour of the caret.
get colour GetCaretFore=2138(,)
# In palette mode?
get bool GetUsePalette=2139(,)
# In read-only mode?
get bool GetReadOnly=2140(,)
# Sets the position of the caret.
set void SetCurrentPos=2141(position pos,)
# Sets the position that starts the selection - this becomes the anchor.
set void SetSelectionStart=2142(position pos,)
# Returns the position at the start of the selection.
get position GetSelectionStart=2143(,)
# Sets the position that ends the selection - this becomes the currentPosition.
set void SetSelectionEnd=2144(position pos,)
# Returns the position at the end of the selection.
get position GetSelectionEnd=2145(,)
# Sets the print magnification added to the point size of each style for printing.
set void SetPrintMagnification=2146(int magnification,)
# Returns the print magnification.
get int GetPrintMagnification=2147(,)
# PrintColourMode - use same colours as screen.
val SC_PRINT_NORMAL=0
# PrintColourMode - invert the light value of each style for printing.
val SC_PRINT_INVERTLIGHT=1
# PrintColourMode - force black text on white background for printing.
val SC_PRINT_BLACKONWHITE=2
# Modify colours when printing for clearer printed text.
set void SetPrintColourMode=2148(int mode,)
# Returns the print colour mode.
get int GetPrintColourMode=2149(,)
val SCFIND_DOWN=1
val SCFIND_WHOLEWORD=2
val SCFIND_MATCHCASE=4
val SCFIND_WORDSTART=0x00100000
# SCFIND_REGEXP is not yet implemented.
val SCFIND_REGEXP=0x00200000
# Find some text in the document.
fun position FindText=2150(int flags, findtext ft)
# On Windows will draw the document into a display context such as a printer.
fun void FormatRange=2151(bool draw, formatrange fr)
# Retrieve the line at the top of the display.
get int GetFirstVisibleLine=2152(,)
# Retrieve the contents of a line.
# Returns the length of the line.
fun int GetLine=2153(int line, stringresult text)
# Returns the number of lines in the document. There is always at least one.
get int GetLineCount=2154(,)
# Sets the size in pixels of the left margin.
set void SetMarginLeft=2155(, int width)
# Returns the size in pixels of the left margin.
get int GetMarginLeft=2156(,)
# Sets the size in pixels of the right margin.
set void SetMarginRight=2157(, int width)
# Returns the size in pixels of the right margin.
get int GetMarginRight=2158(,)
# Is the document different from when it was last saved?
get bool GetModify=2159(,)
# Select a range of text.
fun void SetSel=2160(position start, position end)
# Retrieve the selected text.
# Return the length of the text.
fun int GetSelText=2161(,stringresult text)
# Retrieve a range of text.
# Return the length of the text.
fun int GetTextRange=2162(, textrange tr)
# Draw the selection in normal style or with selection highlighted.
fun void HideSelection=2163(bool normal,)
# Retrieve the x value of the point in the window where a position is displayed.
fun int PointXFromPosition=2164(, position pos)
# Retrieve the y value of the point in the window where a position is displayed.
fun int PointYFromPosition=2165(, position pos)
# Retrieve the line containing a position.
fun int LineFromPosition=2166(position pos,)
# Retrieve the position at the start of a line.
fun int PositionFromLine=2167(int line,)
# Scroll horizontally and vertically.
fun void LineScroll=2168(int columns, int lines)
# Ensure the caret is visible.
fun void ScrollCaret=2169(,)
# Replace the selected text with the argument text.
fun void ReplaceSel=2170(, string text)
# Set to read only or read write.
set void SetReadOnly=2171(bool readOnly,)
# Null operation.
fun void Null=2172(,)
# Will a paste succeed?
fun bool CanPaste=2173(,)
# Are there any undoable actions in the undo history.
fun bool CanUndo=2174(,)
# Delete the undo history.
fun void EmptyUndoBuffer=2175(,)
# Undo one action in the undo history.
fun void Undo=2176(,)
# Cut the selection to the clipboard.
fun void Cut=2177(,)
# Copy the selection to the clipboard.
fun void Copy=2178(,)
# Paste the contents of the clipboard into the document replacing the selection.
fun void Paste=2179(,)
# Clear the selection.
fun void Clear=2180(,)
# Replace the contents of the document with the argument text.
fun void SetText=2181(, string text)
# Retrieve all the text in the document.
# Returns number of characters retrieved.
fun int GetText=2182(int length, stringresult text)
# Retrieve the number of characters in the document.
get int GetTextLength=2183(,)
# Retrieve a pointer to a function that processes messages for this Scintilla.
get int GetDirectFunction=2184(,)
# Retrieve a pointer value to use as the first argument when calling
# the function returned by GetDirectFunction.
get int GetDirectPointer=2185(,)
# Set to overtype (true) or insert mode
set void SetOvertype=2186(bool overtype,)
# Returns true if overtype mode is active otherwise false is returned.
get bool GetOvertype=2187(,)
# Show a call tip containing a definition near position pos.
fun void CallTipShow=2200(position pos, string definition)
@@ -458,7 +722,7 @@ set void SetFoldLevel=2222(int line, int level)
get int GetFoldLevel=2223(int line,)
# Find the last child line of a header line.
get int GetLastChild=2224(int line,)
get int GetLastChild=2224(int line, int level)
# Find the parent line of a child line.
get int GetFoldParent=2225(int line,)
@@ -487,6 +751,7 @@ fun void EnsureVisible=2232(int line,)
# Set some debugging options for folding
fun void SetFoldFlags=2233(int flags,)
## Start of key messages
# Move caret down one line.
fun void LineDown=2300(,)
@@ -568,7 +833,7 @@ fun void Cancel=2325(,)
# Delete the selection or if no selection, the character before the caret.
fun void DeleteBack=2326(,)
# If selection is empty or all on one line replace the selection with a tab
# If selection is empty or all on one line replace the selection with a tab
# character.
# If more than one line selected, indent the lines.
fun void Tab=2327(,)
@@ -582,7 +847,7 @@ fun void NewLine=2329(,)
# Insert a Form Feed character.
fun void FormFeed=2330(,)
# Move caret to before first visible character on line.
# Move caret to before first visible character on line.
# If already there move to first character on line.
fun void VCHome=2331(,)
@@ -656,8 +921,8 @@ val EDGE_BACKGROUND=2
# Retrieve the column number which text should be kept within.
get int GetEdgeColumn=2360(,)
# Set the column number of the edge.
# If text goes past the edge then it is highlighted.
# Set the column number of the edge.
# If text goes past the edge then it is highlighted.
set void SetEdgeColumn=2361(int column,)
# Retrieve the edge highlight mode.
@@ -682,8 +947,12 @@ fun int SearchNext=2367(int flags, string text)
# Find some text starting at the search anchor and moving backwards.
fun int SearchPrev=2368(int flags, string text)
# Show caret within N lines of edge when it's scrolled to view
val CARET_SLOP=0x01
# Center caret on screen when it's scrolled to view
val CARET_CENTER=0x02
# OR this with CARET_CENTER to reposition even when visible, or
# OR this with CARET_SLOP to reposition whenever outside slop border
val CARET_STRICT=0x04
# Set the way the line the caret is on is kept visible.
fun void SetCaretPolicy=2369(int caretPolicy, int caretSlop)
@@ -698,18 +967,25 @@ fun void UsePopUp=2371(bool allowPopUp,)
# Is the selection a rectangular. The alternative is the more common stream selection.
get bool SelectionIsRectangle=2372(,)
# Set the zoom level. This number of points is added to the size of all fonts.
# Set the zoom level. This number of points is added to the size of all fonts.
# It may be positive to magnify or negative to reduce.
set void SetZoom=2373(int zoom,)
# Retrieve the zoom level.
get int GetZoom=2374(,)
# Create a new document object.
# Starts with reference count of 1 and not selected into editor.
fun int CreateDocument=2375(,)
# Extend life of document.
fun void AddRefDoc=2375(, int doc)
fun void AddRefDocument=2376(, int doc)
# Release a reference to the document, deleting document if it fades to black.
fun void ReleaseDoc=2376(, int doc)
fun void ReleaseDocument=2377(, int doc)
# Get which document modification events are sent to the container.
get int GetModEventMask=2378(,)
# Set the focus to this Scintilla widget.
# GTK+ Specific
fun void GrabFocus=2400(,)
# Start notifying the container of all key presses and commands.
@@ -718,10 +994,10 @@ fun void StartRecord=3001(,)
# Stop notifying the container of all key presses and commands.
fun void StopRecord=3002(,)
# Set the lexing language of the document.
# Set the lexing language of the document.
set void SetLexer=4001(int lexer,)
# Retrieve the lexing language of the document.
# Retrieve the lexing language of the document.
get int GetLexer=4002(,)
# Colourise a segment of the document using the current lexing language.
@@ -733,6 +1009,10 @@ set void SetProperty=4004(string key, string value)
# Set up the key words used by the lexer.
set void SetKeyWords=4005(int keywordSet, string keyWords)
# Notifications
# Type of modification and the action which caused the modification
# These are defined as a bit mask to make it easy to specify which notifications are wanted.
# One bit is set from each of SC_MOD_* and SC_PERFORMED_*.
val SC_MOD_INSERTTEXT=0x1
val SC_MOD_DELETETEXT=0x2
val SC_MOD_CHANGESTYLE=0x4
@@ -745,22 +1025,41 @@ val SC_MOD_CHANGEMARKER=0x200
val SC_MOD_BEFOREINSERT=0x400
val SC_MOD_BEFOREDELETE=0x800
val SC_MODEVENTMASKALL=0xF77
val SCN_STYLENEEDED=2000
val SCN_CHARADDED=2001
val SCN_SAVEPOINTREACHED=2002
val SCN_SAVEPOINTLEFT=2003
val SCN_MODIFYATTEMPTRO=2004
val SCN_KEY=2005
val SCN_DOUBLECLICK=2006
val SCN_UPDATEUI=2007
val SCN_CHECKBRACE=2007
val SCN_MODIFIED=2008
val SCN_MACRORECORD=2009
val SCN_MARGINCLICK=2010
val SCN_NEEDSHOWN=2011
# For compatibility, these go through the COMMAND notification rather than NOTIFY
# and have exactly the same values as the EN_* constants.
val SCEN_CHANGE=768
val SCEN_SETFOCUS=512
val SCEN_KILLFOCUS=256
# Symbolic key codes and modifier flags
# ASCII and other printable characters below 256
# Extended keys above 300
val SCK_DOWN=300
val SCK_UP=301
val SCK_LEFT=302
val SCK_RIGHT=303
val SCK_HOME=304
val SCK_END=305
val SCK_PRIOR=306
val SCK_NEXT=307
val SCK_DELETE=308
val SCK_INSERT=309
val SCK_ESCAPE=7
val SCK_BACK=8
val SCK_TAB=9
val SCK_RETURN=13
val SCK_ADD=310
val SCK_SUBTRACT=311
val SCK_DIVIDE=312
val SCMOD_SHIFT=1
val SCMOD_CTRL=2
val SCMOD_ALT=4
################################################
# From SciLexer.h
# For SciLexer.h
val SCLEX_CONTAINER=0
val SCLEX_NULL=1
val SCLEX_PYTHON=2
@@ -776,6 +1075,9 @@ val SCLEX_MAKEFILE=11
val SCLEX_BATCH=12
val SCLEX_XCODE=13
val SCLEX_LATEX=14
val SCLEX_LUA=15
val SCLEX_DIFF=16
# Lexical states for SCLEX_PYTHON
val SCE_P_DEFAULT=0
val SCE_P_COMMENTLINE=1
val SCE_P_NUMBER=2
@@ -790,6 +1092,7 @@ val SCE_P_OPERATOR=10
val SCE_P_IDENTIFIER=11
val SCE_P_COMMENTBLOCK=12
val SCE_P_STRINGEOL=13
# Lexical states for SCLEX_CPP, SCLEX_VB
val SCE_C_DEFAULT=0
val SCE_C_COMMENT=1
val SCE_C_COMMENTLINE=2
@@ -803,6 +1106,8 @@ val SCE_C_PREPROCESSOR=9
val SCE_C_OPERATOR=10
val SCE_C_IDENTIFIER=11
val SCE_C_STRINGEOL=12
val SCE_C_VERBATIM=13
# Lexical states for SCLEX_HTML, SCLEX_XML
val SCE_H_DEFAULT=0
val SCE_H_TAG=1
val SCE_H_TAGUNKNOWN=2
@@ -814,12 +1119,18 @@ val SCE_H_SINGLESTRING=7
val SCE_H_OTHER=8
val SCE_H_COMMENT=9
val SCE_H_ENTITY=10
# XML and ASP
val SCE_H_TAGEND=11
val SCE_H_XMLSTART=12
val SCE_H_XMLEND=13
val SCE_H_SCRIPT=14
val SCE_H_ASP=15
val SCE_H_ASPAT=16
val SCE_H_CDATA=17
val SCE_H_QUESTION=18
# More HTML
val SCE_H_VALUE=19
# Embedded Javascript
val SCE_HJ_START=40
val SCE_HJ_DEFAULT=41
val SCE_HJ_COMMENT=42
@@ -832,6 +1143,7 @@ val SCE_HJ_DOUBLESTRING=48
val SCE_HJ_SINGLESTRING=49
val SCE_HJ_SYMBOLS=50
val SCE_HJ_STRINGEOL=51
# ASP Javascript
val SCE_HJA_START=55
val SCE_HJA_DEFAULT=56
val SCE_HJA_COMMENT=57
@@ -844,6 +1156,7 @@ val SCE_HJA_DOUBLESTRING=63
val SCE_HJA_SINGLESTRING=64
val SCE_HJA_SYMBOLS=65
val SCE_HJA_STRINGEOL=66
# Embedded VBScript
val SCE_HB_START=70
val SCE_HB_DEFAULT=71
val SCE_HB_COMMENTLINE=72
@@ -852,6 +1165,7 @@ val SCE_HB_WORD=74
val SCE_HB_STRING=75
val SCE_HB_IDENTIFIER=76
val SCE_HB_STRINGEOL=77
# ASP VBScript
val SCE_HBA_START=80
val SCE_HBA_DEFAULT=81
val SCE_HBA_COMMENTLINE=82
@@ -860,6 +1174,7 @@ val SCE_HBA_WORD=84
val SCE_HBA_STRING=85
val SCE_HBA_IDENTIFIER=86
val SCE_HBA_STRINGEOL=87
# Embedded Python
val SCE_HP_START=90
val SCE_HP_DEFAULT=91
val SCE_HP_COMMENTLINE=92
@@ -873,6 +1188,7 @@ val SCE_HP_CLASSNAME=99
val SCE_HP_DEFNAME=100
val SCE_HP_OPERATOR=101
val SCE_HP_IDENTIFIER=102
# ASP Python
val SCE_HPA_START=105
val SCE_HPA_DEFAULT=106
val SCE_HPA_COMMENTLINE=107
@@ -886,6 +1202,17 @@ val SCE_HPA_CLASSNAME=114
val SCE_HPA_DEFNAME=115
val SCE_HPA_OPERATOR=116
val SCE_HPA_IDENTIFIER=117
# PHP
val SCE_HPHP_DEFAULT=118
val SCE_HPHP_HSTRING=119
val SCE_HPHP_SIMPLESTRING=120
val SCE_HPHP_WORD=121
val SCE_HPHP_NUMBER=122
val SCE_HPHP_VARIABLE=123
val SCE_HPHP_COMMENT=124
val SCE_HPHP_COMMENTLINE=125
val SCE_HPHP_STRINGEOL=126
# Lexical states for SCLEX_PERL
val SCE_PL_DEFAULT=0
val SCE_PL_HERE=1
val SCE_PL_COMMENTLINE=2
@@ -908,15 +1235,61 @@ val SCE_PL_REGSUBST=18
val SCE_PL_LONGQUOTE=19
val SCE_PL_BACKTICKS=20
val SCE_PL_DATASECTION=21
# Lexical states for SCLEX_LATEX
val SCE_L_DEFAULT=0
val SCE_L_COMMAND=1
val SCE_L_TAG=2
val SCE_L_MATH=3
val SCE_L_COMMENT=4
# Lexical states for SCLEX_LUA
val SCE_LUA_DEFAULT=0
val SCE_LUA_COMMENT=1
val SCE_LUA_COMMENTLINE=2
val SCE_LUA_COMMENTDOC=3
val SCE_LUA_NUMBER=4
val SCE_LUA_WORD=5
val SCE_LUA_STRING=6
val SCE_LUA_CHARACTER=7
val SCE_LUA_LITERALSTRING=8
val SCE_LUA_PREPROCESSOR=9
val SCE_LUA_OPERATOR=10
val SCE_LUA_IDENTIFIER=11
val SCE_LUA_STRINGEOL=12
val SCE_ERR_DEFAULT=0
val SCE_ERR_PYTHON=1
val SCE_ERR_GCC=2
val SCE_ERR_MS=3
val SCE_ERR_CMD=4
val SCE_ERR_BORLAND=5
val SCE_ERR_PERL=6
# Events
evt void StyleNeeded=2000(int position)
evt void CharAdded=2001(int ch)
evt void SavePointReached=2002(void)
evt void SavePointLeft=2003(void)
evt void ModifyAttemptRO=2004(void)
# GTK+ Specific to work around focus and accelerator problems:
evt void Key=2005(int ch, int modifiers)
evt void DoubleClick=2006(void)
evt void UpdateUI=2007(void)
# The old name for SCN_UPDATEUI
val SCN_CHECKBRACE=2007
evt void Modified=2008(int position, int modificationType, string text, int length, int linesAdded, int line, int foldLevelNow, int foldLevelPrev)
# Optional module for macro recording
evt void MacroRecord=2009(int message, int wParam, int lParam)
evt void MarginClick=2010(int modifiers, int position, int margin)
evt void NeedShown=2011(int position, int length)
evt void PosChanged=2012(int position)
cat Deprecated
################################################
# From WinDefs.h
# ***** DEPRECATED from here to end of file ******
# Will a paste succeed?
fun bool EM_CanPaste=1074(,)
@@ -930,7 +1303,7 @@ fun int EM_CharFromPos=215(,point pt)
fun void EM_EmptyUndoBuffer=205(,)
# Retrieve the selection range.
fun void EM_ExGetSel=1076(,charrange cr)
fun void EM_ExGetSel=1076(,charrangeresult cr)
# Retrieve the line number of a position in the document.
get int EM_ExLineFromChar=1078(,position pos)
@@ -942,7 +1315,7 @@ fun void EM_ExSetSel=1079(,charrange cr)
fun position EM_FindText=1080(int flags, findtext ft)
# Find some text in the document. Returns range of found text in ft argument.
fun position EM_FindTextEx=1103(int flags, findtext ft)
fun position EM_FindTextEx=1103(int flags, findtextex ft)
# On Windows will draw the document into a display context such as a printer.
fun void EM_FormatRange=1081(bool draw, formatrange fr)
@@ -995,7 +1368,7 @@ fun int EM_LineLength=193(int line,)
fun void EM_LineScroll=182(int columns, int lines)
# Retrieve the point in the window where a position is displayed.
fun void EM_PosFromChar=214(point pt, position pos)
fun void EM_PosFromChar=214(pointresult pt, position pos)
# Replace the selected text with the argument text.
fun void EM_ReplaceSel=194(, string text)
@@ -1052,9 +1425,9 @@ fun void WM_SetText=12(, string text)
fun void WM_Undo=772(,)
# Notification codes
val EN_CHANGE=768
val EN_KILLFOCUS=512
val EN_SETFOCUS=256
val EN_CHANGE=768
val EN_KILLFOCUS=512
val EN_SETFOCUS=256
# Flags for setting margins.
val EC_LEFTMARGIN=1
@@ -1062,16 +1435,18 @@ val EC_RIGHTMARGIN=2
val EC_USEFONTINFO=0xffff
# Selection type.
val SEL_EMPTY=0
val SEL_TEXT=1
val SEL_EMPTY=0
val SEL_TEXT=1
# Find replace mask constants
val FR_MATCHCASE=0x4
val FR_WHOLEWORD=0x2
val FR_DOWN=0x1
val FR_MATCHCASE=0x4
val FR_WHOLEWORD=0x2
val FR_DOWN=0x1
# Key modifier flag.
val SHIFT_PRESSED=1
val LEFT_CTRL_PRESSED=2
val LEFT_ALT_PRESSED=4
#events
evt void EN_Change=768(void)

View File

@@ -16,6 +16,7 @@
#define LPSTR char *
#define LONG long
//#if 0
/* RTF control */
#define EM_CANPASTE (1074)
#define EM_CANUNDO (198)
@@ -52,12 +53,10 @@
#define WM_NULL (0)
#define WM_CLEAR (771)
#define WM_COMMAND (273)
#define WM_COPY (769)
#define WM_CUT (768)
#define WM_GETTEXT (13)
#define WM_GETTEXTLENGTH (14)
#define WM_NOTIFY (78)
#define WM_PASTE (770)
#define WM_SETTEXT (12)
#define WM_UNDO (772)
@@ -70,6 +69,9 @@
#define EC_RIGHTMARGIN 2
#define EC_USEFONTINFO 0xffff
//#endif
#if 0
#if PLAT_GTK
#define VK_DOWN GDK_Down
#define VK_UP GDK_Up
@@ -109,12 +111,16 @@
#define VK_SUBTRACT WXK_SUBTRACT
//TODO:
#define VK_DIVIDE WXK_DIVIDE
#endif
#define SHIFT_PRESSED 1
#define LEFT_CTRL_PRESSED 2
#define LEFT_ALT_PRESSED 4
// Are these needed any more
#define LPSTR char *
#define LONG long
#define LPDWORD (long *)
#endif
/* SELCHANGE structure */
#define SEL_EMPTY (0)
@@ -123,15 +129,6 @@
#define SEL_MULTICHAR (4)
#define SEL_MULTIOBJECT (8)
/* FINDREPLACE structure */
#define FR_MATCHCASE (0x4)
#define FR_WHOLEWORD (0x2)
#define FR_DOWN (0x1)
#define SHIFT_PRESSED 1
#define LEFT_CTRL_PRESSED 2
#define LEFT_ALT_PRESSED 4
struct RECT {
LONG left;
LONG top;
@@ -139,6 +136,15 @@ struct RECT {
LONG bottom;
};
/* FINDREPLACE structure */
#define FR_MATCHCASE (0x4)
#define FR_WHOLEWORD (0x2)
#define FR_DOWN (0x1)
#endif
#if 0
struct CHARRANGE {
LONG cpMin;
LONG cpMax;
@@ -168,9 +174,10 @@ struct FORMATRANGE {
RECT rcPage;
CHARRANGE chrg;
};
#endif
#define MAKELONG(a, b) ((a) | ((b) << 16))
#define LOWORD(x) (x & 0xffff)
#define HIWORD(x) (x >> 16)
//#define MAKELONG(a, b) ((a) | ((b) << 16))
//#define LOWORD(x) (x & 0xffff)
//#define HIWORD(x) (x >> 16)
#endif

View File

@@ -22,7 +22,7 @@ protected:
public:
WindowAccessor(WindowID id_, PropSet &props_) :
Accessor(), id(id_), props(props_),
lenDoc(-1), validLen(0), chFlags(0) {
lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
}
~WindowAccessor();
char StyleAt(int position);

View File

@@ -10,12 +10,16 @@
#include "AutoComplete.h"
AutoComplete::AutoComplete() {
lb = 0;
active = false;
posStart = 0;
strcpy(stopChars, "");
separator = ' ';
AutoComplete::AutoComplete() :
active(false),
separator(' '),
ignoreCase(false),
chooseSingle(false),
posStart(0),
startLen(0),
cancelAtStartPos(true) {
stopChars[0] = '\0';
fillUpChars[0] = '\0';
}
AutoComplete::~AutoComplete() {
@@ -45,6 +49,15 @@ bool AutoComplete::IsStopChar(char ch) {
return ch && strchr(stopChars, ch);
}
void AutoComplete::SetFillUpChars(const char *fillUpChars_) {
strncpy(fillUpChars, fillUpChars_, sizeof(fillUpChars));
fillUpChars[sizeof(fillUpChars) - 1] = '\0';
}
bool AutoComplete::IsFillUpChar(char ch) {
return ch && strchr(fillUpChars, ch);
}
void AutoComplete::SetSeparator(char separator_) {
separator = separator_;
}
@@ -53,8 +66,7 @@ char AutoComplete::GetSeparator() {
return separator;
}
int AutoComplete::SetList(const char *list) {
int maxStrLen = 12;
void AutoComplete::SetList(const char *list) {
lb.Clear();
char *words = new char[strlen(list) + 1];
if (words) {
@@ -65,18 +77,15 @@ int AutoComplete::SetList(const char *list) {
if (words[i] == separator) {
words[i] = '\0';
lb.Append(startword);
maxStrLen = Platform::Maximum(maxStrLen, strlen(startword));
startword = words + i + 1;
}
}
if (startword) {
lb.Append(startword);
maxStrLen = Platform::Maximum(maxStrLen, strlen(startword));
}
delete []words;
}
lb.Sort();
return maxStrLen;
}
void AutoComplete::Show() {
@@ -87,7 +96,6 @@ void AutoComplete::Show() {
void AutoComplete::Cancel() {
if (lb.Created()) {
lb.Destroy();
lb = 0;
active = false;
}
}

View File

@@ -9,11 +9,16 @@
class AutoComplete {
bool active;
char stopChars[256];
char fillUpChars[256];
char separator;
public:
bool ignoreCase;
bool chooseSingle;
ListBox lb;
int posStart;
int startLen;
// Should autocompletion be canceled if editor's currentPos <= startPos?
bool cancelAtStartPos;
AutoComplete();
~AutoComplete();
@@ -28,12 +33,16 @@ public:
void SetStopChars(const char *stopChars_);
bool IsStopChar(char ch);
// The fillup chars are characters which, when typed, fill up the selected word
void SetFillUpChars(const char *fillUpChars_);
bool IsFillUpChar(char ch);
// The separator character is used when interpreting the list in SetList
void SetSeparator(char separator_);
char GetSeparator();
// The list string contains a sequence of words separated by the separator character
int SetList(const char *list);
void SetList(const char *list);
void Show();
void Cancel();

View File

@@ -88,7 +88,7 @@ void MarkerHandleSet::RemoveHandle(int handle) {
if (mhn->handle == handle) {
*pmhn = mhn->next;
delete mhn;
return;
return ;
}
pmhn = &((*pmhn)->next);
}
@@ -101,7 +101,7 @@ void MarkerHandleSet::RemoveNumber(int markerNum) {
if (mhn->number == markerNum) {
*pmhn = mhn->next;
delete mhn;
return;
return ;
}
pmhn = &((*pmhn)->next);
}
@@ -119,7 +119,11 @@ void MarkerHandleSet::CombineWith(MarkerHandleSet *other) {
LineVector::LineVector() {
linesData = 0;
lines = 0;
size = 0;
levels = 0;
sizeLevels = 0;
handleCurrent = 1;
Init();
}
@@ -161,6 +165,7 @@ void LineVector::Expand(int sizeNew) {
Platform::DebugPrintf("No memory available\n");
// TODO: Blow up
}
}
void LineVector::ExpandLevels(int sizeNew) {
@@ -180,6 +185,13 @@ void LineVector::ExpandLevels(int sizeNew) {
Platform::DebugPrintf("No memory available\n");
// TODO: Blow up
}
}
void LineVector::ClearLevels() {
delete []levels;
levels = 0;
sizeLevels = 0;
}
void LineVector::InsertValue(int pos, int value) {
@@ -202,10 +214,10 @@ void LineVector::InsertValue(int pos, int value) {
}
if (pos == 0) {
levels[pos] = SC_FOLDLEVELBASE;
} else if (pos == (lines-1)) { // Last line will not be a folder
} else if (pos == (lines - 1)) { // Last line will not be a folder
levels[pos] = SC_FOLDLEVELBASE;
} else {
levels[pos] = levels[pos-1];
levels[pos] = levels[pos - 1];
}
}
}
@@ -234,10 +246,10 @@ void LineVector::Remove(int pos) {
linesData[i] = linesData[i + 1];
}
if (levels) {
// Level information merges back onto previous line
int posAbove = pos-1;
if (posAbove < 0)
posAbove = 0;
// Level information merges back onto previous line
int posAbove = pos - 1;
if (posAbove < 0)
posAbove = 0;
for (int j = posAbove; j < lines; j++) {
levels[j] = levels[j + 1];
}
@@ -280,11 +292,12 @@ int LineVector::AddMark(int line, int markerNum) {
}
void LineVector::MergeMarkers(int pos) {
if (linesData[pos].handleSet || linesData[pos + 1].handleSet) {
if (linesData[pos].handleSet && linesData[pos + 1].handleSet) {
linesData[pos].handleSet->CombineWith(linesData[pos].handleSet);
linesData[pos].handleSet = 0;
}
if (linesData[pos + 1].handleSet != NULL) {
if (linesData[pos].handleSet == NULL )
linesData[pos].handleSet = new MarkerHandleSet;
linesData[pos].handleSet->CombineWith(linesData[pos + 1].handleSet);
delete linesData[pos + 1].handleSet;
linesData[pos + 1].handleSet = NULL;
}
}
@@ -358,7 +371,7 @@ void Action::Grab(Action *source) {
data = source->data;
lenData = source->lenData;
mayCoalesce = source->mayCoalesce;
// Ownership of source data transferred to this
source->position = 0;
source->at = startAction;
@@ -367,21 +380,21 @@ void Action::Grab(Action *source) {
source->mayCoalesce = true;
}
// The undo history stores a sequence of user operations that represent the user's view of the
// commands executed on the text.
// The undo history stores a sequence of user operations that represent the user's view of the
// commands executed on the text.
// Each user operation contains a sequence of text insertion and text deletion actions.
// All the user operations are stored in a list of individual actions with 'start' actions used
// as delimiters between user operations.
// Initially there is one start action in the history.
// As each action is performed, it is recorded in the history. The action may either become
// Initially there is one start action in the history.
// As each action is performed, it is recorded in the history. The action may either become
// part of the current user operation or may start a new user operation. If it is to be part of the
// current operation, then it overwrites the current last action. If it is to be part of a new
// current operation, then it overwrites the current last action. If it is to be part of a new
// operation, it is appended after the current last action.
// After writing the new action, a new start action is appended at the end of the history.
// The decision of whether to start a new user operation is based upon two factors. If a
// The decision of whether to start a new user operation is based upon two factors. If a
// compound operation has been explicitly started by calling BeginUndoAction and no matching
// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current
// operation. If there is no outstanding BeginUndoAction call then a new operation is started
// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current
// operation. If there is no outstanding BeginUndoAction call then a new operation is started
// unless it looks as if the new action is caused by the user typing or deleting a stream of text.
// Sequences that look like typing or deletion are coalesced into a single user operation.
@@ -412,7 +425,7 @@ void UndoHistory::EnsureUndoRoom() {
int lenActionsNew = lenActions * 2;
Action *actionsNew = new Action[lenActionsNew];
if (!actionsNew)
return;
return ;
for (int act = 0; act <= currentAction; act++)
actionsNew[act].Grab(&actions[act]);
delete []actions;
@@ -425,11 +438,11 @@ void UndoHistory::EnsureUndoRoom() {
void UndoHistory::AppendAction(actionType at, int position, char *data, int lengthData) {
EnsureUndoRoom();
//Platform::DebugPrintf("%% %d action %d %d %d\n", at, position, lengthData, currentAction);
//Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at,
//Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at,
// actions[currentAction - 1].position, actions[currentAction - 1].lenData);
if (currentAction >= 1) {
if (0 == undoSequenceDepth) {
// Top level actions may not always be coalesced
// Top level actions may not always be coalesced
Action &actPrevious = actions[currentAction - 1];
// See if current action can be coalesced into previous action
// Will work if both are inserts or deletes and position is same
@@ -437,22 +450,23 @@ void UndoHistory::AppendAction(actionType at, int position, char *data, int leng
currentAction++;
} else if (currentAction == savePoint) {
currentAction++;
} else if ((at == removeAction) &&
((position + lengthData * 2) != actPrevious.position)) {
} else if ((at == removeAction) &&
((position + lengthData * 2) != actPrevious.position)) {
// Removals must be at same position to coalesce
currentAction++;
} else if ((at == insertAction) &&
(position != (actPrevious.position + actPrevious.lenData*2))) {
} else if ((at == insertAction) &&
(position != (actPrevious.position + actPrevious.lenData*2))) {
// Insertions must be immediately after to coalesce
currentAction++;
} else {
//Platform::DebugPrintf("action coalesced\n");
}
} else {
// Actions not at top level are always coalesced unless this is after return to top level
if (!actions[currentAction].mayCoalesce)
currentAction++;
}
}
} else {
currentAction++;
}
@@ -487,7 +501,7 @@ void UndoHistory::EndUndoAction() {
actions[currentAction].mayCoalesce = false;
}
}
void UndoHistory::DropUndoSequence() {
undoSequenceDepth = 0;
}
@@ -517,9 +531,9 @@ int UndoHistory::StartUndo() {
// Drop any trailing startAction
if (actions[currentAction].at == startAction && currentAction > 0)
currentAction--;
// Count the steps in this action
int act = currentAction;
int act = currentAction;
while (actions[act].at != startAction && act > 0) {
act--;
}
@@ -542,9 +556,9 @@ int UndoHistory::StartRedo() {
// Drop any leading startAction
if (actions[currentAction].at == startAction && currentAction < maxAction)
currentAction++;
// Count the steps in this action
int act = currentAction;
int act = currentAction;
while (actions[act].at != startAction && act < maxAction) {
act++;
}
@@ -563,11 +577,11 @@ CellBuffer::CellBuffer(int initialLength) {
body = new char[initialLength];
size = initialLength;
length = 0;
part1len = 0;
part1len = 0;
gaplen = initialLength;
part2body = body + gaplen;
readOnly = false;
collectingUndo = undoCollectAutoStart;
collectingUndo = true;
}
CellBuffer::~CellBuffer() {
@@ -577,7 +591,7 @@ CellBuffer::~CellBuffer() {
void CellBuffer::GapTo(int position) {
if (position == part1len)
return;
return ;
if (position < part1len) {
int diff = part1len - position;
//Platform::DebugPrintf("Move gap backwards to %d diff = %d part1len=%d length=%d \n", position,diff, part1len, length);
@@ -609,6 +623,7 @@ void CellBuffer::RoomFor(int insertionLength) {
size = newSize;
//Platform::DebugPrintf("end need room %d %d - size=%d length=%d\n", gaplen, insertionLength,size,length);
}
}
// To make it easier to write code that uses ByteAt, a position outside the range of the buffer
@@ -633,16 +648,16 @@ void CellBuffer::SetByteAt(int position, char ch) {
if (position < 0) {
//Platform::DebugPrintf("Bad position %d\n",position);
return;
return ;
}
if (position >= length + 11) {
Platform::DebugPrintf("Very Bad position %d of %d\n", position, length);
//exit(2);
return;
return ;
}
if (position >= length) {
//Platform::DebugPrintf("Bad position %d of %d\n",position,length);
return;
return ;
}
if (position < part1len) {
@@ -658,20 +673,20 @@ char CellBuffer::CharAt(int position) {
void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) {
if (lengthRetrieve < 0)
return;
return ;
if (position < 0)
return;
return ;
int bytePos = position * 2;
if ((bytePos + lengthRetrieve * 2) > length) {
Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n",bytePos,
lengthRetrieve, length);
return;
Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n", bytePos,
lengthRetrieve, length);
return ;
}
GapTo(0); // Move the buffer so its easy to subscript into it
char *pb = part2body + bytePos;
while (lengthRetrieve--) {
*buffer++ = *pb;
pb +=2;
pb += 2;
}
}
@@ -706,7 +721,7 @@ void CellBuffer::InsertCharStyle(int position, char ch, char style) {
}
bool CellBuffer::SetStyleAt(int position, char style, char mask) {
char curVal = ByteAt(position*2 + 1);
char curVal = ByteAt(position * 2 + 1);
if ((curVal & mask) != style) {
SetByteAt(position*2 + 1, static_cast<char>((curVal & ~mask) | style));
return true;
@@ -823,7 +838,7 @@ int CellBuffer::LineFromHandle(int markerHandle) {
void CellBuffer::BasicInsertString(int position, char *s, int insertLength) {
//Platform::DebugPrintf("Inserting at %d for %d\n", position, insertLength);
if (insertLength == 0)
return;
return ;
RoomFor(insertLength);
GapTo(position);
@@ -883,7 +898,7 @@ void CellBuffer::BasicInsertString(int position, char *s, int insertLength) {
void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
//Platform::DebugPrintf("Deleting at %d for %d\n", position, deleteLength);
if (deleteLength == 0)
return;
return ;
if ((position == 0) && (deleteLength == length)) {
// If whole buffer is being deleted, faster to reinitialise lines data
@@ -915,6 +930,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
ignoreNL = true; // First \n is not real deletion
}
char ch = chNext;
for (int i = 0; i < deleteLength; i += 2) {
chNext = ' ';
@@ -932,6 +948,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
ignoreNL = false; // Further \n are not real deletions
}
ch = chNext;
}
// May have to fix up end if last deletion causes cr to be next to lf
@@ -952,7 +969,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
part2body = body + gaplen;
}
undoCollectionType CellBuffer::SetUndoCollection(undoCollectionType collectUndo) {
bool CellBuffer::SetUndoCollection(bool collectUndo) {
collectingUndo = collectUndo;
uh.DropUndoSequence();
return collectingUndo;
@@ -994,12 +1011,12 @@ void CellBuffer::PerformUndoStep() {
char *styledData = new char[actionStep.lenData * 2];
for (int i = 0; i < actionStep.lenData; i++) {
styledData[i*2] = actionStep.data[i];
styledData[i*2+1] = 0;
styledData[i*2 + 1] = 0;
}
BasicInsertString(actionStep.position, styledData, actionStep.lenData*2);
delete []styledData;
}
uh.CompletedUndoStep();
uh.CompletedUndoStep();
}
bool CellBuffer::CanRedo() {
@@ -1020,14 +1037,14 @@ void CellBuffer::PerformRedoStep() {
char *styledData = new char[actionStep.lenData * 2];
for (int i = 0; i < actionStep.lenData; i++) {
styledData[i*2] = actionStep.data[i];
styledData[i*2+1] = 0;
styledData[i*2 + 1] = 0;
}
BasicInsertString(actionStep.position, styledData, actionStep.lenData*2);
delete []styledData;
} else if (actionStep.at == removeAction) {
BasicDeleteChars(actionStep.position, actionStep.lenData*2);
}
uh.CompletedRedoStep();
uh.CompletedRedoStep();
}
int CellBuffer::SetLineState(int line, int state) {
@@ -1043,7 +1060,7 @@ int CellBuffer::GetLineState(int line) {
int CellBuffer::GetMaxLineState() {
return lineStates.Length();
}
int CellBuffer::SetLevel(int line, int level) {
int prev = 0;
if ((line >= 0) && (line < lv.lines)) {
@@ -1066,3 +1083,6 @@ int CellBuffer::GetLevel(int line) {
}
}
void CellBuffer::ClearLevels() {
lv.ClearLevels();
}

View File

@@ -58,6 +58,7 @@ public:
void Expand(int sizeNew);
void ExpandLevels(int sizeNew=-1);
void ClearLevels();
void InsertValue(int pos, int value);
void SetValue(int pos, int value);
void Remove(int pos);
@@ -88,8 +89,6 @@ public:
void Grab(Action *source);
};
enum undoCollectionType { undoCollectNone, undoCollectAutoStart, undoCollectManualStart };
class UndoHistory {
Action *actions;
int lenActions;
@@ -141,12 +140,12 @@ private:
char *part2body;
bool readOnly;
undoCollectionType collectingUndo;
bool collectingUndo;
UndoHistory uh;
LineVector lv;
SVector<int, 4000> lineStates;
SVector lineStates;
void GapTo(int position);
void RoomFor(int insertionLength);
@@ -199,7 +198,7 @@ public:
void BasicInsertString(int position, char *s, int insertLength);
void BasicDeleteChars(int position, int deleteLength);
undoCollectionType SetUndoCollection(undoCollectionType collectUndo);
bool SetUndoCollection(bool collectUndo);
bool IsCollectingUndo();
void BeginUndoAction();
void EndUndoAction();
@@ -222,6 +221,7 @@ public:
int SetLevel(int line, int level);
int GetLevel(int line);
void ClearLevels();
};
#define CELL_SIZE 2

View File

@@ -171,12 +171,6 @@ bool ContractionState::SetVisible(int lineDocStart, int lineDocEnd, bool visible
delta += visible ? 1 : -1;
lines[line].visible = visible;
}
lines[line].displayLine += delta;
}
if (delta != 0) {
for (int line=lineDocEnd+1; line <= linesInDoc; line++) {
lines[line].displayLine += delta;
}
}
}
linesInDisplay += delta;
@@ -206,3 +200,9 @@ bool ContractionState::SetExpanded(int lineDoc, bool expanded) {
}
return false;
}
void ContractionState::ShowAll() {
delete []lines;
lines = 0;
size = 0;
}

View File

@@ -42,9 +42,11 @@ public:
bool GetVisible(int lineDoc) const;
bool SetVisible(int lineDocStart, int lineDocEnd, bool visible);
bool GetExpanded(int lineDoc) const;
bool SetExpanded(int lineDoc, bool expanded);
void ShowAll();
};
#endif

View File

@@ -54,7 +54,7 @@ int Document::AddRef() {
return refCount++;
}
// Decrease reference count and return its provius value.
// Decrease reference count and return its previous value.
// Delete the document if reference count reaches zero.
int Document::Release() {
int curRefCount = --refCount;
@@ -201,8 +201,8 @@ bool Document::IsCrLf(int pos) {
return (cb.CharAt(pos) == '\r') && (cb.CharAt(pos + 1) == '\n');
}
bool Document::IsDBCS(int pos) {
#if PLAT_WIN
bool Document::IsDBCS(int pos) {
if (dbcsCodePage) {
if (SC_CP_UTF8 == dbcsCodePage) {
unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos));
@@ -224,10 +224,14 @@ bool Document::IsDBCS(int pos) {
}
}
return false;
#else
return false;
#endif
}
#else
// PLAT_GTK or PLAT_WX
// TODO: support DBCS under GTK+ and WX
bool Document::IsDBCS(int) {
return false;
}
#endif
int Document::LenChar(int pos) {
if (IsCrLf(pos)) {
@@ -334,6 +338,8 @@ void Document::ModifiedAt(int pos) {
// Unlike Undo, Redo, and InsertStyledString, the pos argument is a cell number not a char number
void Document::DeleteChars(int pos, int len) {
if ((pos + len) > Length())
return;
if (cb.IsReadOnly() && enteredReadOnlyCount==0) {
enteredReadOnlyCount++;
NotifyModifyAttempt();
@@ -590,6 +596,8 @@ void Document::SetLineIndentation(int line, int indent) {
}
int Document::GetLineIndentPosition(int line) {
if (line < 0)
return 0;
int pos = LineStart(line);
int length = Length();
while ((pos < length) && isindentchar(cb.CharAt(pos))) {
@@ -598,6 +606,25 @@ int Document::GetLineIndentPosition(int line) {
return pos;
}
int Document::GetColumn(int pos) {
int column = 0;
int line = LineFromPosition(pos);
if ((line >= 0) && (line < LinesTotal())) {
for (int i=LineStart(line);i<pos;i++) {
char ch = cb.CharAt(i);
if (ch == '\t')
column = NextTab(column, tabInChars);
else if (ch == '\r')
return column;
else if (ch == '\n')
return column;
else
column++;
}
}
return column;
}
void Document::Indent(bool forwards, int lineBottom, int lineTop) {
// Dedent - suck white space off the front of the line to dedent by equivalent of a tab
for (int line = lineBottom; line >= lineTop; line--) {
@@ -690,25 +717,29 @@ int Document::NextWordStart(int pos, int delta) {
return pos;
}
bool Document::IsWordAt(int start, int end) {
int lengthDoc = Length();
if (start > 0) {
char ch = CharAt(start - 1);
if (IsWordChar(ch))
return false;
}
if (end < lengthDoc - 1) {
char ch = CharAt(end);
if (IsWordChar(ch))
return false;
bool Document::IsWordStartAt(int pos) {
if (pos > 0) {
return !IsWordChar(CharAt(pos - 1));
}
return true;
}
bool Document::IsWordEndAt(int pos) {
if (pos < Length() - 1) {
return !IsWordChar(CharAt(pos));
}
return true;
}
bool Document::IsWordAt(int start, int end) {
return IsWordStartAt(start) && IsWordEndAt(end);
}
// Find text in document, supporting both forward and backward
// searches (just pass minPos > maxPos to do a backward search)
// Has not been tested with backwards DBCS searches yet.
long Document::FindText(int minPos, int maxPos, const char *s, bool caseSensitive, bool word) {
long Document::FindText(int minPos, int maxPos, const char *s,
bool caseSensitive, bool word, bool wordStart) {
bool forward = minPos <= maxPos;
int increment = forward ? 1 : -1;
@@ -738,8 +769,10 @@ long Document::FindText(int minPos, int maxPos, const char *s, bool caseSensitiv
found = false;
}
if (found) {
if ((!word) || IsWordAt(pos, pos + lengthFind))
return pos;
if ((!word && !wordStart) ||
word && IsWordAt(pos, pos + lengthFind) ||
wordStart && IsWordStartAt(pos))
return pos;
}
}
} else {
@@ -751,8 +784,10 @@ long Document::FindText(int minPos, int maxPos, const char *s, bool caseSensitiv
found = false;
}
if (found) {
if ((!word) || IsWordAt(pos, pos + lengthFind))
return pos;
if (!(word && wordStart) ||
word && IsWordAt(pos, pos + lengthFind) ||
wordStart && IsWordStartAt(pos))
return pos;
}
}
}

View File

@@ -113,9 +113,10 @@ public:
bool CanUndo() { return cb.CanUndo(); }
bool CanRedo() { return cb.CanRedo(); }
void DeleteUndoHistory() { cb.DeleteUndoHistory(); }
undoCollectionType SetUndoCollection(undoCollectionType collectUndo) {
bool SetUndoCollection(bool collectUndo) {
return cb.SetUndoCollection(collectUndo);
}
bool IsCollectingUndo() { return cb.IsCollectingUndo(); }
void BeginUndoAction() { cb.BeginUndoAction(); }
void EndUndoAction() { cb.EndUndoAction(); }
void SetSavePoint();
@@ -124,9 +125,11 @@ public:
int GetLineIndentation(int line);
void SetLineIndentation(int line, int indent);
int GetLineIndentPosition(int line);
int GetColumn(int position);
void Indent(bool forwards, int lineBottom, int lineTop);
void ConvertLineEnds(int eolModeSet);
void SetReadOnly(bool set) { cb.SetReadOnly(set); }
bool IsReadOnly() { return cb.IsReadOnly(); }
void InsertChar(int pos, char ch);
void InsertString(int position, const char *s);
@@ -153,6 +156,7 @@ public:
int SetLevel(int line, int level);
int GetLevel(int line) { return cb.GetLevel(line); }
void ClearLevels() { cb.ClearLevels(); }
int GetLastChild(int lineParent, int level=-1);
int GetFoldParent(int line);
@@ -160,8 +164,9 @@ public:
int ExtendWordSelect(int pos, int delta);
int NextWordStart(int pos, int delta);
int Length() { return cb.Length(); }
long FindText(int minPos, int maxPos, const char *s, bool caseSensitive, bool word);
long FindText(WORD iMessage,WPARAM wParam,LPARAM lParam);
long FindText(int minPos, int maxPos, const char *s,
bool caseSensitive, bool word, bool wordStart);
long FindText(int iMessage, unsigned long wParam, long lParam);
int LinesTotal();
void ChangeCase(Range r, bool makeUpperCase);
@@ -186,6 +191,8 @@ public:
private:
bool IsDBCS(int pos);
bool IsWordChar(unsigned char ch);
bool IsWordStartAt(int pos);
bool IsWordEndAt(int pos);
bool IsWordAt(int start, int end);
void ModifiedAt(int pos);

View File

@@ -4,6 +4,7 @@
// The License.txt file describes the conditions under which this software may be distributed.
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
@@ -20,21 +21,22 @@
DocumentAccessor::~DocumentAccessor() {
}
#if PLAT_WIN
bool DocumentAccessor::InternalIsLeadByte(char ch) {
#if PLAT_GTK
// TODO: support DBCS under GTK+
return false;
#elif PLAT_WIN
if (SC_CP_UTF8 == codePage)
// For lexing, all characters >= 0x80 are treated the
// same so none is considered a lead byte.
return false;
else
return IsDBCSLeadByteEx(codePage, ch);
#elif PLAT_WX
return false;
#endif
}
#else
// PLAT_GTK or PLAT_WX
// TODO: support DBCS under GTK+ and WX
bool DocumentAccessor::InternalIsLeadByte(char) {
return false;
}
#endif
void DocumentAccessor::Fill(int position) {
if (lenDoc == -1)

View File

@@ -24,7 +24,7 @@ protected:
public:
DocumentAccessor(Document *pdoc_, PropSet &props_) :
Accessor(), pdoc(pdoc_), props(props_),
lenDoc(-1), validLen(0), chFlags(0) {
lenDoc(-1), validLen(0), chFlags(0), chWhile(0) {
}
~DocumentAccessor();
char StyleAt(int position);

File diff suppressed because it is too large Load Diff

View File

@@ -31,10 +31,15 @@ public:
// Drawing is only performed for maxLineLength characters on each line.
enum {maxLineLength = 4000};
int numCharsInLine;
char chars[maxLineLength];
char styles[maxLineLength];
char indicators[maxLineLength];
int positions[maxLineLength];
int xHighlightGuide;
bool highlightColumn;
int selStart;
int selEnd;
int edgeColumn;
char chars[maxLineLength+1];
char styles[maxLineLength+1];
char indicators[maxLineLength+1];
int positions[maxLineLength+1];
};
class Editor : public DocWatcher {
@@ -54,6 +59,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool stylesValid;
ViewStyle vs;
Palette palette;
int printMagnification;
int printColourMode;
bool hideSelection;
bool inOverstrike;
@@ -69,6 +76,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
Surface pixmapLine;
Surface pixmapSelMargin;
Surface pixmapSelPattern;
Surface pixmapIndentGuide;
Surface pixmapIndentGuideHighlight;
// Intellimouse support - currently only implemented for Windows
unsigned int ucWheelScrollLines;
int cWheelDelta; //wheel delta from roll
@@ -98,8 +107,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool needUpdateUI;
Position braces[2];
int bracesMatchStyle;
int highlightGuideColumn;
int edgeState;
int theEdge;
enum { notPainting, painting, paintAbandoned } paintState;
@@ -114,6 +123,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
enum { selStream, selRectangle, selRectangleFixed } selType;
int xStartSelect;
int xEndSelect;
bool primarySelection;
int caretPolicy;
int caretSlop;
@@ -168,6 +178,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
void SetSelection(int currentPos_, int anchor_);
void SetSelection(int currentPos_);
void SetEmptySelection(int currentPos_);
int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true);
int MovePositionTo(int newPos, bool extend = false);
int MovePositionSoVisible(int pos, int moveDir);
void SetLastXChosen();
@@ -183,10 +194,10 @@ protected: // ScintillaBase subclass needs access to much of Editor
void PaintSelMargin(Surface *surface, PRectangle &rc);
void LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout &ll);
void DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int xStart,
void DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVisible, int xStart,
PRectangle rcLine, LineLayout &ll);
void Paint(Surface *surfaceWindow, PRectangle rcArea);
long FormatRange(bool draw, FORMATRANGE *pfr);
long FormatRange(bool draw, RangeToFormat *pfr);
virtual void SetVerticalScrollPos() = 0;
virtual void SetHorizontalScrollPos() = 0;
@@ -199,6 +210,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
virtual void AddCharUTF(char *s, unsigned int len);
void ClearSelection();
void ClearAll();
void ClearDocumentStyle();
void Cut();
void PasteRectangular(int pos, const char *ptr, int len);
virtual void Copy() = 0;
@@ -216,6 +228,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
virtual void NotifyParent(SCNotification scn) = 0;
virtual void NotifyStyleToNeeded(int endStyleNeeded);
void NotifyChar(char ch);
void NotifyMove(int position);
void NotifySavePoint(bool isSavePoint);
void NotifyModifyAttempt();
virtual void NotifyDoubleClick(Point pt, bool shift);
@@ -231,24 +244,25 @@ protected: // ScintillaBase subclass needs access to much of Editor
#ifdef MACRO_SUPPORT
void NotifyMacroRecord(UINT iMessage, WPARAM wParam, LPARAM lParam);
void NotifyMacroRecord(unsigned int iMessage, unsigned long wParam, long lParam);
#endif
void PageMove(int direction, bool extend=false);
void ChangeCaseOfSelection(bool makeUpperCase);
void LineTranspose();
virtual int KeyCommand(UINT iMessage);
virtual void CancelModes();
virtual int KeyCommand(unsigned int iMessage);
virtual int KeyDefault(int /* key */, int /*modifiers*/);
int KeyDown(int key, bool shift, bool ctrl, bool alt);
bool GetWhitespaceVisible();
void SetWhitespaceVisible(bool view);
int GetWhitespaceVisible();
void SetWhitespaceVisible(int view);
void Indent(bool forwards);
long FindText(UINT iMessage,WPARAM wParam,LPARAM lParam);
long FindText(unsigned int iMessage, unsigned long wParam, long lParam);
void SearchAnchor();
long SearchText(UINT iMessage,WPARAM wParam,LPARAM lParam);
long SearchText(unsigned int iMessage, unsigned long wParam, long lParam);
void GoToLine(int lineNo);
char *CopyRange(int start, int end);
@@ -282,11 +296,11 @@ protected: // ScintillaBase subclass needs access to much of Editor
void ToggleContraction(int line);
void EnsureLineVisible(int line);
virtual LRESULT DefWndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) = 0;
virtual long DefWndProc(unsigned int iMessage, unsigned long wParam, long lParam) = 0;
public:
// Public so scintilla_send_message can use it
virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual long WndProc(unsigned int iMessage, unsigned long wParam, long lParam);
// Public so scintilla_set_id can use it
int ctrlID;
};

View File

@@ -28,7 +28,7 @@ void KeyMap::Clear() {
alloc = 0;
}
void KeyMap::AssignCmdKey(int key, int modifiers, UINT msg) {
void KeyMap::AssignCmdKey(int key, int modifiers, unsigned int msg) {
if ((len+1) >= alloc) {
KeyToCommand *ktcNew = new KeyToCommand[alloc + 5];
if (!ktcNew)
@@ -51,7 +51,7 @@ void KeyMap::AssignCmdKey(int key, int modifiers, UINT msg) {
len++;
}
UINT KeyMap::Find(int key, int modifiers) {
unsigned int KeyMap::Find(int key, int modifiers) {
for (int i=0; i < len; i++) {
if ((key == kmap[i].key) && (modifiers == kmap[i].modifiers)) {
return kmap[i].msg;
@@ -61,53 +61,55 @@ UINT KeyMap::Find(int key, int modifiers) {
}
KeyToCommand KeyMap::MapDefault[] = {
{VK_DOWN, SCI_NORM, SCI_LINEDOWN},
{VK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND},
{VK_DOWN, SCI_CTRL, SCI_LINESCROLLDOWN},
{VK_UP, SCI_NORM, SCI_LINEUP},
{VK_UP, SCI_SHIFT, SCI_LINEUPEXTEND},
{VK_UP, SCI_CTRL, SCI_LINESCROLLUP},
{VK_LEFT, SCI_NORM, SCI_CHARLEFT},
{VK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND},
{VK_LEFT, SCI_CTRL, SCI_WORDLEFT},
{VK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND},
{VK_RIGHT, SCI_NORM, SCI_CHARRIGHT},
{VK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND},
{VK_RIGHT, SCI_CTRL, SCI_WORDRIGHT},
{VK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND},
{VK_HOME, SCI_NORM, SCI_VCHOME},
{VK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND},
{VK_HOME, SCI_CTRL, SCI_DOCUMENTSTART},
{VK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND},
{VK_END, SCI_NORM, SCI_LINEEND},
{VK_END, SCI_SHIFT, SCI_LINEENDEXTEND},
{VK_END, SCI_CTRL, SCI_DOCUMENTEND},
{VK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND},
{VK_PRIOR, SCI_NORM, SCI_PAGEUP},
{VK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND},
{VK_NEXT, SCI_NORM, SCI_PAGEDOWN},
{VK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND},
{VK_DELETE, SCI_NORM, WM_CLEAR},
{VK_DELETE, SCI_SHIFT, WM_CUT},
{VK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT},
{VK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE},
{VK_INSERT, SCI_SHIFT, WM_PASTE},
{VK_INSERT, SCI_CTRL, WM_COPY},
{VK_ESCAPE, SCI_NORM, SCI_CANCEL},
{VK_BACK, SCI_NORM, SCI_DELETEBACK},
{VK_BACK, SCI_CTRL, SCI_DELWORDLEFT},
{'Z', SCI_CTRL, WM_UNDO},
{SCK_DOWN, SCI_NORM, SCI_LINEDOWN},
{SCK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND},
{SCK_DOWN, SCI_CTRL, SCI_LINESCROLLDOWN},
{SCK_UP, SCI_NORM, SCI_LINEUP},
{SCK_UP, SCI_SHIFT, SCI_LINEUPEXTEND},
{SCK_UP, SCI_CTRL, SCI_LINESCROLLUP},
{SCK_LEFT, SCI_NORM, SCI_CHARLEFT},
{SCK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND},
{SCK_LEFT, SCI_CTRL, SCI_WORDLEFT},
{SCK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND},
{SCK_RIGHT, SCI_NORM, SCI_CHARRIGHT},
{SCK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND},
{SCK_RIGHT, SCI_CTRL, SCI_WORDRIGHT},
{SCK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND},
{SCK_HOME, SCI_NORM, SCI_VCHOME},
{SCK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND},
{SCK_HOME, SCI_CTRL, SCI_DOCUMENTSTART},
{SCK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND},
{SCK_END, SCI_NORM, SCI_LINEEND},
{SCK_END, SCI_SHIFT, SCI_LINEENDEXTEND},
{SCK_END, SCI_CTRL, SCI_DOCUMENTEND},
{SCK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND},
{SCK_PRIOR, SCI_NORM, SCI_PAGEUP},
{SCK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND},
{SCK_NEXT, SCI_NORM, SCI_PAGEDOWN},
{SCK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND},
{SCK_DELETE, SCI_NORM, SCI_CLEAR},
{SCK_DELETE, SCI_SHIFT, SCI_CUT},
{SCK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT},
{SCK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE},
{SCK_INSERT, SCI_SHIFT, SCI_PASTE},
{SCK_INSERT, SCI_CTRL, SCI_COPY},
{SCK_ESCAPE, SCI_NORM, SCI_CANCEL},
{SCK_BACK, SCI_NORM, SCI_DELETEBACK},
{SCK_BACK, SCI_SHIFT, SCI_DELETEBACK},
{SCK_BACK, SCI_CTRL, SCI_DELWORDLEFT},
{SCK_BACK, SCI_ALT, SCI_UNDO},
{'Z', SCI_CTRL, SCI_UNDO},
{'Y', SCI_CTRL, SCI_REDO},
{'X', SCI_CTRL, WM_CUT},
{'C', SCI_CTRL, WM_COPY},
{'V', SCI_CTRL, WM_PASTE},
{'X', SCI_CTRL, SCI_CUT},
{'C', SCI_CTRL, SCI_COPY},
{'V', SCI_CTRL, SCI_PASTE},
{'A', SCI_CTRL, SCI_SELECTALL},
{VK_TAB, SCI_NORM, SCI_TAB},
{VK_TAB, SCI_SHIFT, SCI_BACKTAB},
{VK_RETURN, SCI_NORM, SCI_NEWLINE},
{VK_ADD, SCI_CTRL, SCI_ZOOMIN},
{VK_SUBTRACT, SCI_CTRL, SCI_ZOOMOUT},
{VK_DIVIDE, SCI_CTRL, SCI_SETZOOM},
{SCK_TAB, SCI_NORM, SCI_TAB},
{SCK_TAB, SCI_SHIFT, SCI_BACKTAB},
{SCK_RETURN, SCI_NORM, SCI_NEWLINE},
{SCK_ADD, SCI_CTRL, SCI_ZOOMIN},
{SCK_SUBTRACT, SCI_CTRL, SCI_ZOOMOUT},
{SCK_DIVIDE, SCI_CTRL, SCI_SETZOOM},
//'L', SCI_CTRL, SCI_FORMFEED,
{'L', SCI_CTRL, SCI_LINECUT},
{'L', SCI_CSHIFT, SCI_LINEDELETE},

View File

@@ -7,9 +7,9 @@
#define KEYTOCOMMAND_H
#define SCI_NORM 0
#define SCI_SHIFT SHIFT_PRESSED
#define SCI_CTRL LEFT_CTRL_PRESSED
#define SCI_ALT LEFT_ALT_PRESSED
#define SCI_SHIFT SCMOD_SHIFT
#define SCI_CTRL SCMOD_CTRL
#define SCI_ALT SCMOD_ALT
#define SCI_CSHIFT (SCI_CTRL | SCI_SHIFT)
#define SCI_ASHIFT (SCI_ALT | SCI_SHIFT)
@@ -17,7 +17,7 @@ class KeyToCommand {
public:
int key;
int modifiers;
UINT msg;
unsigned int msg;
};
class KeyMap {
@@ -29,8 +29,8 @@ public:
KeyMap();
~KeyMap();
void Clear();
void AssignCmdKey(int key, int modifiers, UINT msg);
UINT Find(int key, int modifiers); // 0 returned on failure
void AssignCmdKey(int key, int modifiers, unsigned int msg);
unsigned int Find(int key, int modifiers); // 0 returned on failure
};
#endif

View File

@@ -19,14 +19,13 @@
static bool classifyWordCpp(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
char s[100];
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
bool wordIsUUID = false;
for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
s[i] = styler[start + i];
s[i + 1] = '\0';
}
bool wordIsUUID = false;
char chAttr = SCE_C_IDENTIFIER;
if (wordIsNumber)
if (isdigit(s[0]) || (s[0] == '.'))
chAttr = SCE_C_NUMBER;
else {
if (keywords.InList(s)) {
@@ -46,6 +45,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
styler.StartAt(startPos);
bool fold = styler.GetPropertyInt("fold");
bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor");
int lineCurrent = styler.GetLine(startPos);
int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
int levelCurrent = levelPrev;
@@ -56,7 +56,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
char chPrev = ' ';
char chNext = styler[startPos];
unsigned int lengthDoc = startPos + length;
int visChars = 0;
int visibleChars = 0;
styler.StartSegment(startPos);
bool lastWordWasUUID = false;
for (unsigned int i = startPos; i < lengthDoc; i++) {
@@ -64,6 +64,8 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
chNext = styler.SafeGetCharAt(i + 1);
if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
// Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
// Avoid triggering two times on Dos/Win
// End of line
if (state == SCE_C_STRINGEOL) {
styler.ColourTo(i, state);
@@ -71,18 +73,18 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
}
if (fold) {
int lev = levelPrev;
if (visChars == 0)
if (visibleChars == 0)
lev |= SC_FOLDLEVELWHITEFLAG;
if ((levelCurrent > levelPrev) && (visChars > 0))
if ((levelCurrent > levelPrev) && (visibleChars > 0))
lev |= SC_FOLDLEVELHEADERFLAG;
styler.SetLevel(lineCurrent, lev);
lineCurrent++;
visChars = 0;
levelPrev = levelCurrent;
}
visibleChars = 0;
}
if (!isspace(ch))
visChars++;
visibleChars++;
if (styler.IsLeadByte(ch)) {
chNext = styler.SafeGetCharAt(i + 2);
@@ -92,13 +94,19 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
}
if (state == SCE_C_DEFAULT) {
if (iswordstart(ch)) {
if (ch == '@' && chNext == '\"') {
styler.ColourTo(i-1, state);
state = SCE_C_VERBATIM;
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} else if (iswordstart(ch) || (ch == '@')) {
styler.ColourTo(i-1, state);
if (lastWordWasUUID) {
state = SCE_C_UUID;
lastWordWasUUID = false;
} else {
state = SCE_C_WORD;
state = SCE_C_IDENTIFIER;
}
} else if (ch == '/' && chNext == '*') {
styler.ColourTo(i-1, state);
@@ -115,9 +123,16 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
} else if (ch == '\'') {
styler.ColourTo(i-1, state);
state = SCE_C_CHARACTER;
} else if (ch == '#') {
} else if (ch == '#' && visibleChars == 1) {
// Preprocessor commands are alone on their line
styler.ColourTo(i-1, state);
state = SCE_C_PREPROCESSOR;
// Skip whitespace between # and preprocessor word
do {
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} while (isspace(ch) && (i < lengthDoc));
} else if (isoperator(ch)) {
styler.ColourTo(i-1, state);
styler.ColourTo(i, SCE_C_OPERATOR);
@@ -125,7 +140,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
levelCurrent += (ch == '{') ? 1 : -1;
}
}
} else if (state == SCE_C_WORD) {
} else if (state == SCE_C_IDENTIFIER) {
if (!iswordchar(ch)) {
lastWordWasUUID = classifyWordCpp(styler.GetStartSegment(), i - 1, keywords, styler);
state = SCE_C_DEFAULT;
@@ -140,8 +155,6 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
state = SCE_C_STRING;
} else if (ch == '\'') {
state = SCE_C_CHARACTER;
} else if (ch == '#') {
state = SCE_C_PREPROCESSOR;
} else if (isoperator(ch)) {
styler.ColourTo(i, SCE_C_OPERATOR);
if ((ch == '{') || (ch == '}')) {
@@ -151,9 +164,16 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
}
} else {
if (state == SCE_C_PREPROCESSOR) {
if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
styler.ColourTo(i-1, state);
state = SCE_C_DEFAULT;
if (stylingWithinPreprocessor) {
if (isspace(ch)) {
styler.ColourTo(i-1, state);
state = SCE_C_DEFAULT;
}
} else {
if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
styler.ColourTo(i-1, state);
state = SCE_C_DEFAULT;
}
}
} else if (state == SCE_C_COMMENT) {
if (ch == '/' && chPrev == '*') {
@@ -188,13 +208,10 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
} else if (ch == '\"') {
styler.ColourTo(i, state);
state = SCE_C_DEFAULT;
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} else if (chNext == '\r' || chNext == '\n') {
} else if (chNext == '\r' || chNext == '\n') {
styler.ColourTo(i-1, SCE_C_STRINGEOL);
state = SCE_C_STRINGEOL;
}
}
} else if (state == SCE_C_CHARACTER) {
if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) {
styler.ColourTo(i-1, SCE_C_STRINGEOL);
@@ -208,39 +225,26 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
} else if (ch == '\'') {
styler.ColourTo(i, state);
state = SCE_C_DEFAULT;
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (state == SCE_C_VERBATIM) {
if (ch == '\"') {
if (chNext == '\"') {
i++;
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
} else {
styler.ColourTo(i, state);
state = SCE_C_DEFAULT;
}
}
} else if (state == SCE_C_UUID) {
if (ch == '\r' || ch == '\n' || ch == ')') {
styler.ColourTo(i-1, state);
if (ch == ')')
styler.ColourTo(i, SCE_C_OPERATOR);
state = SCE_C_DEFAULT;
}
}
if (state == SCE_C_DEFAULT) { // One of the above succeeded
if (ch == '/' && chNext == '*') {
if (styler.SafeGetCharAt(i + 2) == '*')
state = SCE_C_COMMENTDOC;
else
state = SCE_C_COMMENT;
} else if (ch == '/' && chNext == '/') {
state = SCE_C_COMMENTLINE;
} else if (ch == '\"') {
state = SCE_C_STRING;
} else if (ch == '\'') {
state = SCE_C_CHARACTER;
} else if (ch == '#') {
state = SCE_C_PREPROCESSOR;
} else if (iswordstart(ch)) {
state = SCE_C_WORD;
} else if (isoperator(ch)) {
styler.ColourTo(i, SCE_C_OPERATOR);
if ((ch == '{') || (ch == '}')) {
levelCurrent += (ch == '{') ? 1 : -1;
}
}
}
}
chPrev = ch;
}

File diff suppressed because it is too large Load Diff

View File

@@ -49,6 +49,46 @@ static void ColouriseBatchDoc(unsigned int startPos, int length, int, WordList *
ColouriseBatchLine(lineBuffer, startPos + length, styler);
}
static void ColouriseDiffLine(char *lineBuffer, int endLine, Accessor &styler) {
// It is needed to remember the current state to recognize starting
// comment lines before the first "diff " or "--- ". If a real
// difference starts then each line starting with ' ' is a whitespace
// otherwise it is considered a comment (Only in..., Binary file...)
if (0 == strncmp(lineBuffer, "diff ", 3)) {
styler.ColourTo(endLine, 2);
} else if (0 == strncmp(lineBuffer, "--- ", 3)) {
styler.ColourTo(endLine, 3);
} else if (0 == strncmp(lineBuffer, "+++ ", 3)) {
styler.ColourTo(endLine, 3);
} else if (lineBuffer[0] == '@') {
styler.ColourTo(endLine, 4);
} else if (lineBuffer[0] == '-') {
styler.ColourTo(endLine, 5);
} else if (lineBuffer[0] == '+') {
styler.ColourTo(endLine, 6);
} else if (lineBuffer[0] != ' ') {
styler.ColourTo(endLine, 1);
} else {
styler.ColourTo(endLine, 0);
}
}
static void ColouriseDiffDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
char lineBuffer[1024];
styler.StartAt(startPos);
styler.StartSegment(startPos);
unsigned int linePos = 0;
for (unsigned int i = startPos; i < startPos + length; i++) {
lineBuffer[linePos++] = styler[i];
if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) {
ColouriseDiffLine(lineBuffer, i, styler);
linePos = 0;
}
}
if (linePos > 0)
ColouriseDiffLine(lineBuffer, startPos + length, styler);
}
static void ColourisePropsLine(char *lineBuffer, int lengthLine, int startLine, int endPos, Accessor &styler) {
int i = 0;
while (isspace(lineBuffer[i]) && (i < lengthLine)) // Skip initial spaces
@@ -126,15 +166,21 @@ static void ColouriseMakeDoc(unsigned int startPos, int length, int, WordList *[
static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, int endPos, Accessor &styler) {
if (lineBuffer[0] == '>') {
// Command or return status
styler.ColourTo(endPos, 4);
styler.ColourTo(endPos, SCE_ERR_CMD);
} else if (strstr(lineBuffer, "File \"") && strstr(lineBuffer, ", line ")) {
styler.ColourTo(endPos, 1);
styler.ColourTo(endPos, SCE_ERR_PYTHON);
} else if (0 == strncmp(lineBuffer, "Error ", strlen("Error "))) {
// Borland error message
styler.ColourTo(endPos, 5);
styler.ColourTo(endPos, SCE_ERR_BORLAND);
} else if (0 == strncmp(lineBuffer, "Warning ", strlen("Warning "))) {
// Borland warning message
styler.ColourTo(endPos, 5);
styler.ColourTo(endPos, SCE_ERR_BORLAND);
} else if (strstr(lineBuffer, " at " ) &&
strstr(lineBuffer, " at " ) < lineBuffer+lengthLine &&
strstr(lineBuffer, " line ") &&
strstr(lineBuffer, " line ") < lineBuffer+lengthLine) {
// perl error message
styler.ColourTo(endPos, SCE_ERR_PERL);
} else {
// Look for <filename>:<line>:message
// Look for <filename>(line)message
@@ -168,11 +214,11 @@ static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, int endPos,
}
}
if (state == 3) {
styler.ColourTo(endPos, 2);
styler.ColourTo(endPos, SCE_ERR_GCC);
} else if ((state == 13) || (state == 14) || (state == 15)) {
styler.ColourTo(endPos, 3);
styler.ColourTo(endPos, SCE_ERR_MS);
} else {
styler.ColourTo(endPos, 0);
styler.ColourTo(endPos, SCE_ERR_DEFAULT);
}
}
}
@@ -297,8 +343,9 @@ static void ColouriseLatexDoc(unsigned int startPos, int length, int initStyle,
styler.ColourTo(lengthDoc, state);
}
LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc);
LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc);
LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc);
LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc);
LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc);
LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc);
LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc);
LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc);
LexerModule lmLatex(SCLEX_LATEX, ColouriseLatexDoc);

View File

@@ -107,7 +107,7 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
state = SCE_PL_DEFAULT;
}
styler.StartAt(startPos);
char chPrev = ' ';
char chPrev = styler.SafeGetCharAt(startPos - 1);
char chNext = styler[startPos];
styler.StartSegment(startPos);
for (int i = startPos; i < lengthDoc; i++) {
@@ -230,7 +230,7 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
quotes = 0;
sookedpos = 0;
sooked[sookedpos] = '\0';
} else if (ch == '=' && isalpha(chNext)) {
} else if (ch == '=' && (chPrev == '\r' || chPrev == '\n') && isalpha(chNext)) {
styler.ColourTo(i - 1, state);
state = SCE_PL_POD;
quotes = 0;
@@ -284,7 +284,7 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
state = SCE_PL_DEFAULT;
}
} else if (state == SCE_PL_HERE) {
if (isalnum(ch) && quotes < 2) {
if ((isalnum(ch) || ch == '_') && quotes < 2) {
sooked[sookedpos++] = ch;
sooked[sookedpos] = '\0';
if (quotes == 0)
@@ -292,14 +292,17 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
} else {
quotes++;
}
if (quotes > 1 && isMatch(styler, lengthDoc, i, sooked) && (chPrev == '\n' || chPrev == '\r') ) {
styler.ColourTo(i + sookedpos - 1, SCE_PL_HERE);
if ((quotes > 1) &&
(chPrev == '\n' || chPrev == '\r') &&
isMatch(styler, lengthDoc, i, sooked)) {
i += sookedpos;
chNext = styler.SafeGetCharAt(i);
if (chNext == '\n' || chNext == '\r') {
styler.ColourTo(i - 1, SCE_PL_HERE);
state = SCE_PL_DEFAULT;
}
chNext = ' ';
ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (state == SCE_PL_STRING) {
if (ch == '\\') {
@@ -338,13 +341,13 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (state == SCE_PL_POD) {
if (ch == '=') {
if (ch == '=' && (chPrev == '\r' || chPrev == '\n')) {
if (isMatch(styler, lengthDoc, i, "=cut")) {
styler.ColourTo(i - 1 + 4, state);
i += 4;
state = SCE_PL_DEFAULT;
chNext = ' ';
ch = ' ';
ch = styler.SafeGetCharAt(i);
chNext = styler.SafeGetCharAt(i + 1);
}
}
} else if (state == SCE_PL_SCALAR) {
@@ -409,7 +412,32 @@ static void ColourisePerlDoc(unsigned int startPos, int length, int initStyle,
quoteDown = opposite(ch);
quotes++;
} else {
if (ch == quoteDown && chPrev != '\\') {
if (quotes == 0 && quoteRep == 1) {
/* We matched something like s(...) or tr{...}
* and are looking for the next matcher characters,
* which could be either bracketed ({...}) or non-bracketed
* (/.../).
*
* Number-signs are problematic. If they occur after
* the close of the first part, treat them like
* a quoteUp char, even if they actually start comments.
*
* If we find an alnum, we end the regsubst, and punt.
*
* Eric Promislow ericp@activestate.com Aug 9,2000
*/
if (isspace(ch)) {
// Keep going
} else if (isalnum(ch)) {
styler.ColourTo(i, state);
state = SCE_PL_DEFAULT;
ch = ' ';
} else {
quoteUp = ch;
quoteDown = opposite(ch);
quotes++;
}
} else if (ch == quoteDown && chPrev != '\\') {
quotes--;
if (quotes == 0) {
quoteRep--;

View File

@@ -33,6 +33,13 @@ static void ClassifyWordPy(unsigned int start, unsigned int end, WordList &keywo
chAttr = SCE_P_NUMBER;
else if (keywords.InList(s))
chAttr = SCE_P_WORD;
// make sure that dot-qualifiers inside the word are lexed correct
else for (unsigned int i = 0; i < end - start + 1; i++) {
if (styler[start + i] == '.') {
styler.ColourTo(start + i - 1, chAttr);
styler.ColourTo(start + i, SCE_P_OPERATOR);
}
}
styler.ColourTo(end, chAttr);
strcpy(prevWord, s);
}

View File

@@ -20,20 +20,21 @@
static int classifyWordVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
char s[100];
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.') ||
(styler[start] == '&' && tolower(styler[start+1]) == 'h');
unsigned int i;
for (i = 0; i < end - start + 1 && i < 30; i++) {
s[i] = static_cast<char>(tolower(styler[start + i]));
s[i + 1] = '\0';
}
s[i] = '\0';
char chAttr = SCE_C_DEFAULT;
if (wordIsNumber)
chAttr = SCE_C_NUMBER;
else {
if (keywords.InList(s)) {
if (strcmp(s, "rem") == 0)
chAttr = SCE_C_COMMENTLINE;
else if (keywords.InList(s))
chAttr = SCE_C_WORD;
if (strcmp(s, "rem") == 0)
chAttr = SCE_C_COMMENTLINE;
}
}
styler.ColourTo(end, chAttr);
if (chAttr == SCE_C_COMMENTLINE)
@@ -49,6 +50,7 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
styler.StartAt(startPos);
int visibleChars = 0;
int state = initStyle;
char chNext = styler[startPos];
styler.StartSegment(startPos);
@@ -63,6 +65,17 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
continue;
}
if (ch == '\r' || ch == '\n') {
// End of line
if (state == SCE_C_COMMENTLINE || state == SCE_C_PREPROCESSOR) {
styler.ColourTo(i - 1, state);
state = SCE_C_DEFAULT;
}
visibleChars = 0;
}
if (!isspace(ch))
visibleChars++;
if (state == SCE_C_DEFAULT) {
if (iswordstart(ch)) {
styler.ColourTo(i - 1, state);
@@ -73,6 +86,16 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
} else if (ch == '\"') {
styler.ColourTo(i - 1, state);
state = SCE_C_STRING;
} else if (ch == '#' && visibleChars == 1) {
// Preprocessor commands are alone on their line
styler.ColourTo(i - 1, state);
state = SCE_C_PREPROCESSOR;
} else if (ch == '&' && tolower(chNext) == 'h') {
styler.ColourTo(i - 1, state);
state = SCE_C_WORD;
} else if (isoperator(ch)) {
styler.ColourTo(i - 1, state);
styler.ColourTo(i, SCE_C_OPERATOR);
}
} else if (state == SCE_C_WORD) {
if (!iswordchar(ch)) {
@@ -82,16 +105,14 @@ static void ColouriseVBDoc(unsigned int startPos, int length, int initStyle,
state = SCE_C_COMMENTLINE;
} else if (ch == '\"') {
state = SCE_C_STRING;
} else if (isoperator(ch)) {
styler.ColourTo(i - 1, state);
styler.ColourTo(i, SCE_C_OPERATOR);
}
}
}
} else {
if (state == SCE_C_COMMENTLINE) {
if (ch == '\r' || ch == '\n') {
styler.ColourTo(i - 1, state);
state = SCE_C_DEFAULT;
}
} else if (state == SCE_C_STRING) {
if (state == SCE_C_STRING) {
// VB doubles quotes to preserve them
if (ch == '\"') {
styler.ColourTo(i, state);

View File

@@ -24,6 +24,18 @@ bool EqualCaseInsensitive(const char *a, const char *b) {
#endif
}
SString::size_type SString::npos = -1;
inline unsigned int HashString(const char *s) {
unsigned int ret = 0;
while (*s) {
ret <<= 4;
ret ^= *s;
s++;
}
return ret;
}
// Get a line of input. If end of line escaped with '\\' then continue reading.
static bool GetFullLine(const char *&fpc, int &lenData, char *s, int len) {
bool continuation = true;
@@ -56,47 +68,39 @@ static bool GetFullLine(const char *&fpc, int &lenData, char *s, int len) {
PropSet::PropSet() {
superPS = 0;
size = 10;
used = 0;
vals = new char * [size];
for (int root=0; root < hashRoots; root++)
props[root] = 0;
}
PropSet::~PropSet() {
superPS = 0;
Clear();
delete []vals;
}
void PropSet::EnsureCanAddEntry() {
if (used >= size - 2) {
int newsize = size + 10;
char **newvals = new char * [newsize];
for (int i = 0; i < used; i++) {
newvals[i] = vals[i];
}
delete []vals;
vals = newvals;
size = newsize;
}
}
void PropSet::Set(const char *key, const char *val) {
EnsureCanAddEntry();
for (int i = 0; i < used; i += 2) {
if (EqualCaseInsensitive(vals[i], key)) {
unsigned int hash = HashString(key);
for (Property *p=props[hash % hashRoots]; p; p=p->next) {
if ((hash == p->hash) && (0 == strcmp(p->key, key))) {
// Replace current value
delete [](vals[i + 1]);
vals[i + 1] = StringDup(val);
delete [](p->val);
p->val = StringDup(val);
return;
}
}
// Not found
vals[used++] = StringDup(key);
vals[used++] = StringDup(val);
Property *pNew = new Property;
if (pNew) {
pNew->hash = HashString(key);
pNew->key = StringDup(key);
pNew->val = StringDup(val);
pNew->next = props[hash % hashRoots];
props[hash % hashRoots] = pNew;
}
}
void PropSet::Set(char *keyval) {
while (isspace(*keyval))
keyval++;
char *eqat = strchr(keyval, '=');
if (eqat) {
*eqat = '\0';
@@ -106,11 +110,12 @@ void PropSet::Set(char *keyval) {
}
SString PropSet::Get(const char *key) {
for (int i = 0; i < used; i += 2) {
if (EqualCaseInsensitive(vals[i], key)) {
return vals[i + 1];
}
}
unsigned int hash = HashString(key);
for (Property *p=props[hash % hashRoots]; p; p=p->next) {
if ((hash == p->hash) && (0 == strcmp(p->key, key))) {
return p->val;
}
}
if (superPS) {
// Failed here, so try in base property set
return superPS->Get(key);
@@ -119,6 +124,36 @@ SString PropSet::Get(const char *key) {
}
}
SString PropSet::GetExpanded(const char *key) {
SString val = Get(key);
return Expand(val.c_str());
}
SString PropSet::Expand(const char *withvars) {
char *base = StringDup(withvars);
char *cpvar = strstr(base, "$(");
while (cpvar) {
char *cpendvar = strchr(cpvar, ')');
if (cpendvar) {
int lenvar = cpendvar - cpvar - 2; // Subtract the $()
char *var = StringDup(cpvar+2, lenvar);
SString val = GetExpanded(var);
int newlenbase = strlen(base) + val.length() - lenvar;
char *newbase = new char[newlenbase];
strncpy(newbase, base, cpvar - base);
strcpy(newbase + (cpvar - base), val.c_str());
strcpy(newbase + (cpvar - base) + val.length(), cpendvar + 1);
delete []var;
delete []base;
base = newbase;
}
cpvar = strstr(base, "$(");
}
SString sret = base;
delete []base;
return sret;
}
int PropSet::GetInt(const char *key, int defaultValue) {
SString val = Get(key);
if (val.length())
@@ -127,9 +162,9 @@ int PropSet::GetInt(const char *key, int defaultValue) {
return defaultValue;
}
bool isprefix(const char *target, const char *prefix) {
inline bool isprefix(const char *target, const char *prefix) {
while (*target && *prefix) {
if (toupper(*target) != toupper(*prefix))
if (*target != *prefix)
return false;
target++;
prefix++;
@@ -146,64 +181,63 @@ bool issuffix(const char *target, const char *suffix) {
if (lensuffix > lentarget)
return false;
for (int i = lensuffix - 1; i >= 0; i--) {
if (toupper(target[i + lentarget - lensuffix]) != toupper(suffix[i]))
if (target[i + lentarget - lensuffix] != suffix[i])
return false;
}
return true;
}
SString PropSet::GetWild(const char *keybase, const char *filename) {
for (int i = 0; i < used; i += 2) {
if (isprefix(vals[i], keybase)) {
char *orgkeyfile = vals[i] + strlen(keybase);
char *keyfile = NULL;
for (int root=0; root < hashRoots; root++) {
for (Property *p=props[root]; p; p=p->next) {
if (isprefix(p->key, keybase)) {
char *orgkeyfile = p->key + strlen(keybase);
char *keyfile = NULL;
if (strstr(orgkeyfile, "$(") == orgkeyfile) {
char *cpendvar = strchr(orgkeyfile, ')');
if (cpendvar) {
int lenvar = cpendvar - orgkeyfile - 2; // Subtract the $()
char *var = static_cast<char *>(malloc(lenvar + 1));
strncpy(var, orgkeyfile + 2, lenvar);
var[lenvar] = '\0';
SString s = Get(var);
free(var);
keyfile = strdup(s.c_str());
}
}
char *keyptr = keyfile;
if (strstr(orgkeyfile, "$(") == orgkeyfile) {
char *cpendvar = strchr(orgkeyfile, ')');
if (cpendvar) {
*cpendvar = '\0';
SString s = Get(orgkeyfile + 2);
*cpendvar= ')';
keyfile = strdup(s.c_str());
}
}
char *keyptr = keyfile;
if (keyfile == NULL)
keyfile = orgkeyfile;
if (keyfile == NULL)
keyfile = orgkeyfile;
for (; ; ) {
char *del = strchr(keyfile, ';');
if (del == NULL)
del = keyfile + strlen(keyfile);
char delchr = *del;
*del = '\0';
if (*keyfile == '*') {
if (issuffix(filename, keyfile + 1)) {
*del = delchr;
free(keyptr);
return vals[i + 1];
}
} else if (EqualCaseInsensitive(keyfile, filename)) {
*del = delchr;
free(keyptr);
return vals[i + 1];
}
if (delchr == '\0')
break;
*del = delchr;
keyfile = del + 1;
}
free(keyptr);
for (; ; ) {
char *del = strchr(keyfile, ';');
if (del == NULL)
del = keyfile + strlen(keyfile);
char delchr = *del;
*del = '\0';
if (*keyfile == '*') {
if (issuffix(filename, keyfile + 1)) {
*del = delchr;
free(keyptr);
return p->val;
}
} else if (0 == strcmp(keyfile, filename)) {
*del = delchr;
free(keyptr);
return p->val;
}
if (delchr == '\0')
break;
*del = delchr;
keyfile = del + 1;
}
free(keyptr);
if (EqualCaseInsensitive(vals[i], keybase)) {
return vals[i + 1];
}
}
}
if (0 == strcmp(p->key, keybase)) {
return p->val;
}
}
}
}
if (superPS) {
// Failed here, so try in base property set
return superPS->GetWild(keybase, filename);
@@ -219,9 +253,7 @@ SString PropSet::GetNewExpand(const char *keybase, const char *filename) {
char *cpendvar = strchr(cpvar, ')');
if (cpendvar) {
int lenvar = cpendvar - cpvar - 2; // Subtract the $()
char *var = new char[lenvar + 1];
strncpy(var, cpvar + 2, lenvar);
var[lenvar] = '\0';
char *var = StringDup(cpvar+2, lenvar);
SString val = GetWild(var, filename);
int newlenbase = strlen(base) + val.length() - lenvar;
char *newbase = new char[newlenbase];
@@ -240,36 +272,54 @@ SString PropSet::GetNewExpand(const char *keybase, const char *filename) {
}
void PropSet::Clear() {
for (int i = 0; i < used; i++) {
delete [](vals[i]);
vals[i] = 0;
}
used = 0;
for (int root=0; root < hashRoots; root++) {
Property *p=props[root];
while (p) {
Property *pNext=p->next;
p->hash = 0;
delete p->key;
p->key = 0;
delete p->val;
p->val = 0;
delete p;
p = pNext;
}
props[root] = 0;
}
}
void PropSet::ReadFromMemory(const char *data, int len) {
if (len > 0) {
const char *pd = data;
char linebuf[60000];
while (GetFullLine(pd, len, linebuf, sizeof(linebuf))) {
if (isalpha(linebuf[0]))
Set(linebuf);
}
// If there is a final line:
if (isalpha(linebuf[0]))
void PropSet::ReadFromMemory(const char *data, int len, const char *directoryForImports) {
const char *pd = data;
char linebuf[60000];
bool ifIsTrue = true;
while (len > 0) {
GetFullLine(pd, len, linebuf, sizeof(linebuf));
if (isalpha(linebuf[0])) // If clause ends with first non-indented line
ifIsTrue = true;
if (isprefix(linebuf, "if ")) {
const char *expr = linebuf + strlen("if") + 1;
ifIsTrue = GetInt(expr);
} else if (isprefix(linebuf, "import ") && directoryForImports) {
char importPath[1024];
strcpy(importPath, directoryForImports);
strcat(importPath, linebuf + strlen("import") + 1);
strcat(importPath, ".properties");
Read(importPath,directoryForImports);
} else if (isalpha(linebuf[0])) {
Set(linebuf);
} else if (isspace(linebuf[0]) && ifIsTrue) {
Set(linebuf);
}
}
}
void PropSet::Read(const char *filename) {
//printf("Opening properties <%s>\n", filename);
Clear();
void PropSet::Read(const char *filename, const char *directoryForImports) {
char propsData[60000];
FILE *rcfile = fopen(filename, "rb");
if (rcfile) {
int lenFile = fread(propsData, 1, sizeof(propsData), rcfile);
fclose(rcfile);
ReadFromMemory(propsData, lenFile);
ReadFromMemory(propsData, lenFile, directoryForImports);
} else {
//printf("Could not open <%s>\n", filename);
}
@@ -285,7 +335,8 @@ static bool iswordsep(char ch, bool onlyLineEnds) {
// Creates an array that points into each word in the string and puts \0 terminators
// after each word.
static char **ArrayFromWordList(char *wordlist, bool onlyLineEnds = false) {
static char **ArrayFromWordList(char *wordlist, int *len, bool onlyLineEnds = false) {
#if 1
char prev = '\n';
int words = 0;
for (int j = 0; wordlist[j]; j++) {
@@ -297,8 +348,8 @@ static char **ArrayFromWordList(char *wordlist, bool onlyLineEnds = false) {
if (keywords) {
words = 0;
prev = '\0';
int len = strlen(wordlist);
for (int k = 0; k < len; k++) {
int slen = strlen(wordlist);
for (int k = 0; k < slen; k++) {
if (!iswordsep(wordlist[k], onlyLineEnds)) {
if (!prev) {
keywords[words] = &wordlist[k];
@@ -309,25 +360,69 @@ static char **ArrayFromWordList(char *wordlist, bool onlyLineEnds = false) {
}
prev = wordlist[k];
}
keywords[words] = &wordlist[len];
keywords[words] = &wordlist[slen];
*len = words;
} else {
*len = 0;
}
#else
int words = 0; // length of the returned buffer of pointers
#undef APICHUNK // how many pointers will be pre-allocated (to avoid buffer reallocation on each new pointer)
#define APICHUNK 256
int size = APICHUNK; // real size of the returned buffer of pointers
char **keywords; // buffer for the pointers returned
int slen = strlen(wordlist); //length of the buffer with api file
keywords = (char**) malloc((size + 1) * sizeof (*keywords));
words = 0;
for (int k = 0;;) {
while (iswordsep(wordlist[k], onlyLineEnds))
wordlist[k++] = '\0';
if (k >= slen)
break;
if (words >= size) {
do
size += APICHUNK;
while (size <= words);
keywords = (char**) realloc(keywords, (size + 1) * sizeof (*keywords));
}
keywords[words++] = wordlist + k;
do
if (k < slen)
k++;
else
goto out;
while (!iswordsep(wordlist[k], onlyLineEnds));
}
out:
keywords[words] = wordlist + slen;
*len = words;
#endif
return keywords;
}
void WordList::Clear() {
if (words) {
delete []words;
delete []list;
#if 1
delete []words;
#else
free(words);
#endif
free(wordsNoCase);
}
words = 0;
wordsNoCase = 0;
list = 0;
len = 0;
sorted = false;
}
void WordList::Set(const char *s) {
len = 0;
list = StringDup(s);
words = ArrayFromWordList(list, onlyLineEnds);
sorted = false;
words = ArrayFromWordList(list, &len, onlyLineEnds);
wordsNoCase = (char**) malloc ((len + 1) * sizeof (*wordsNoCase));
memcpy(wordsNoCase, words, (len + 1) * sizeof (*words));
}
char *WordList::Allocate(int size) {
@@ -337,45 +432,35 @@ char *WordList::Allocate(int size) {
}
void WordList::SetFromAllocated() {
len = 0;
words = ArrayFromWordList(list, onlyLineEnds);
sorted = false;
words = ArrayFromWordList(list, &len, onlyLineEnds);
wordsNoCase = (char**) malloc ((len + 1) * sizeof (*wordsNoCase));
memcpy(wordsNoCase, words, (len + 1) * sizeof (*words));
}
// Shell sort based upon public domain C implementation by Raymond Gardner 1991
// Used here because of problems with mingw qsort.
static void SortWordList(char **words, unsigned int len) {
unsigned int gap = len / 2;
while (gap > 0) {
unsigned int i = gap;
while (i < len) {
unsigned int j = i;
char **a = words + j;
do {
j -= gap;
char **b = a;
a -= gap;
if (strcmp(*a, *b) > 0) {
char *tmp = *a;
*a = *b;
*b = tmp;
} else {
break;
}
} while (j >= gap);
i++;
}
gap = gap / 2;
}
int cmpString(const void *a1, const void *a2) {
// Can't work out the correct incantation to use modern casts here
return strcmp(*(char**)(a1), *(char**)(a2));
}
int cmpStringNoCase(const void *a1, const void *a2) {
// Can't work out the correct incantation to use modern casts here
return strcasecmp(*(char**)(a1), *(char**)(a2));
}
static void SortWordList(char **words, char **wordsNoCase, unsigned int len) {
qsort(reinterpret_cast<void*>(words), len, sizeof(*words),
cmpString);
qsort(reinterpret_cast<void*>(wordsNoCase), len, sizeof(*wordsNoCase),
cmpStringNoCase);
}
bool WordList::InList(const char *s) {
if (0 == words)
return false;
if (len == 0) {
for (int i = 0; words[i][0]; i++)
len++;
SortWordList(words, len);
if (!sorted) {
sorted = true;
SortWordList(words, wordsNoCase, len);
for (unsigned int k = 0; k < (sizeof(starts) / sizeof(starts[0])); k++)
starts[k] = -1;
for (int l = len - 1; l >= 0; l--) {
@@ -402,3 +487,256 @@ bool WordList::InList(const char *s) {
}
return false;
}
/**
* Returns an element (complete) of the wordlist array which has the beginning
* the same as the passed string. The length of the word to compare is passed
* too. Letter case can be ignored or preserved (default).
*/
const char *WordList::GetNearestWord(const char *wordStart, int searchLen /*= -1*/, bool ignoreCase /*= false*/) {
int start = 0; // lower bound of the api array block to search
int end = len - 1; // upper bound of the api array block to search
int pivot; // index of api array element just being compared
int cond; // comparison result (in the sense of strcmp() result)
const char *word; // api array element just being compared
if (0 == words)
return NULL;
if (!sorted) {
sorted = true;
SortWordList(words, wordsNoCase, len);
}
if (ignoreCase)
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = wordsNoCase[pivot];
cond = strncasecmp(wordStart, word, searchLen);
if (!cond && nonFuncChar(word[searchLen])) // maybe there should be a "non-word character" test here?
return word; // result must not be freed with free()
else if (cond < 0)
end = pivot - 1;
else if (cond > 0)
start = pivot + 1;
}
else // preserve the letter case
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = words[pivot];
cond = strncmp(wordStart, word, searchLen);
if (!cond && nonFuncChar(word[searchLen])) // maybe there should be a "non-word character" test here?
return word; // result must not be freed with free()
else if (cond >= 0)
start = pivot + 1;
else if (cond < 0)
end = pivot - 1;
}
return NULL;
}
/**
* Returns elements (first words of them) of the wordlist array which have
* the beginning the same as the passed string. The length of the word to
* compare is passed too. Letter case can be ignored or preserved (default).
* If there are more words meeting the condition they are returned all of
* them in the ascending order separated with spaces.
*
* NOTE: returned buffer has to be freed with a free() call.
*/
char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, bool ignoreCase /*= false*/) {
int wordlen; // length of the word part (before the '(' brace) of the api array element
int length = 0; // length of the returned buffer of words (string)
int newlength; // length of the new buffer before the reallocating itself
#undef WORDCHUNK // how many characters will be pre-allocated (to avoid buffer reallocation on each new word)
#define WORDCHUNK 100
int size = WORDCHUNK; // real size of the returned buffer of words
char *buffer; // buffer for the words returned
int start = 0; // lower bound of the api array block to search
int end = len - 1; // upper bound of the api array block to search
int pivot; // index of api array element just being compared
int cond; // comparison result (in the sense of strcmp() result)
int oldpivot; // pivot storage to be able to browse the api array upwards and then downwards
const char *word; // api array element just being compared
const char *brace; // position of the opening brace in the api array element just being compared
if (0 == words)
return NULL;
if (!sorted) {
sorted = true;
SortWordList(words, wordsNoCase, len);
}
buffer = (char*) malloc(size);
*buffer = '\0';
if (ignoreCase)
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = wordsNoCase[pivot];
cond = strncasecmp(wordStart, word, searchLen);
if (!cond) {
oldpivot = pivot;
do { // browse sequentially the rest after the hit
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size) {
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
if (++pivot > end)
break;
word = wordsNoCase[pivot];
} while (!strncasecmp(wordStart, word, searchLen));
pivot = oldpivot;
for (;;) { // browse sequentially the rest before the hit
if (--pivot < start)
break;
word = wordsNoCase[pivot];
if (strncasecmp(wordStart, word, searchLen))
break;
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size)
{
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
}
return buffer; // result has to be freed with free()
}
else if (cond < 0)
end = pivot - 1;
else if (cond > 0)
start = pivot + 1;
}
else // preserve the letter case
while (start <= end) { // binary searching loop
pivot = (start + end) >> 1;
word = words[pivot];
cond = strncmp(wordStart, word, searchLen);
if (!cond) {
oldpivot = pivot;
do { // browse sequentially the rest after the hit
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size)
{
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
if (++pivot > end)
break;
word = words[pivot];
} while (!strncmp(wordStart, word, searchLen));
pivot = oldpivot;
for (;;) { // browse sequentially the rest before the hit
if (--pivot < start)
break;
word = words[pivot];
if (strncmp(wordStart, word, searchLen))
break;
brace = strchr(word, '(');
if (brace)
do
if (--brace < word)
break;
while (isspace(*brace));
else {
brace = word + strlen(word);
do
if (--brace < word)
break;
while (isspace(*brace));
}
wordlen = brace - word + 1;
newlength = length + wordlen; // stretch the buffer
if (length)
newlength++;
if (newlength >= size)
{
do
size += WORDCHUNK;
while (size <= newlength);
buffer = (char*) realloc(buffer, size);
}
if (length) // append a new entry
buffer[length++] = ' ';
memcpy(buffer + length, word, wordlen);
length = newlength;
buffer[length] = '\0';
}
return buffer; // result has to be freed with free()
}
else if (cond < 0)
end = pivot - 1;
else if (cond > 0)
start = pivot + 1;
}
free(buffer);
return NULL;
}

View File

@@ -6,13 +6,12 @@
#ifndef SVECTOR_H
#define SVECTOR_H
// A simple expandable vector.
// T must support assignment.
// A simple expandable integer vector.
// Storage not allocated for elements until an element is used.
// This makes it very lightweight unless used so is a good match for optional features.
template<class T, int sizeIncrement>
class SVector {
T *v;
int *v;
unsigned int size; // Number of elements allocated
unsigned int len; // Number of elements in vector
bool allocFailure; // A memory allocation call has failed
@@ -20,19 +19,23 @@ class SVector {
// Internally allocate more elements than the user wants to avoid
// thrashng the memory allocator
void SizeTo(int newSize) {
if (newSize < sizeIncrement)
newSize += sizeIncrement;
if (newSize < 4000)
newSize += 4000;
else
newSize = (newSize * 3) / 2;
T* newv = new T[newSize];
int* newv = new int[newSize];
if (!newv) {
allocFailure = true;
return;
}
size = newSize;
for (unsigned int i=0; i<len; i++) {
unsigned int i=0;
for (; i<len; i++) {
newv[i] = v[i];
}
for (; i<size; i++) {
newv[i] = 0;
}
delete []v;
v = newv;
}
@@ -79,7 +82,7 @@ public:
}
return *this;
}
T &operator[](unsigned int i) {
int &operator[](unsigned int i) {
if (i >= len) {
if (i >= size) {
SizeTo(i);

View File

@@ -11,9 +11,9 @@
#include "Platform.h"
#include "Scintilla.h"
#include "PropSet.h"
#ifdef SCI_LEXER
#include "SciLexer.h"
#include "PropSet.h"
#include "Accessor.h"
#include "WindowAccessor.h"
#include "DocumentAccessor.h"
@@ -41,9 +41,15 @@ ScintillaBase::ScintillaBase() {
#endif
}
ScintillaBase::~ScintillaBase() {}
ScintillaBase::~ScintillaBase() {
#ifdef SCI_LEXER
for (int wl=0;wl<numWordLists;wl++)
delete keyWordLists[wl];
#endif
}
void ScintillaBase::Finalise() {
Editor::Finalise();
popup.Destroy();
}
@@ -54,7 +60,8 @@ void ScintillaBase::RefreshColourPalette(Palette &pal, bool want) {
void ScintillaBase::AddCharUTF(char *s, unsigned int len) {
bool acActiveBeforeCharAdded = ac.Active();
Editor::AddCharUTF(s, len);
if (!acActiveBeforeCharAdded || !ac.IsFillUpChar(*s))
Editor::AddCharUTF(s, len);
if (acActiveBeforeCharAdded)
AutoCompleteChanged(s[0]);
}
@@ -70,7 +77,7 @@ void ScintillaBase::Command(int cmdId) {
break;
case idcmdUndo:
WndProc(WM_UNDO, 0, 0);
WndProc(SCI_UNDO, 0, 0);
break;
case idcmdRedo:
@@ -78,19 +85,19 @@ void ScintillaBase::Command(int cmdId) {
break;
case idcmdCut:
WndProc(WM_CUT, 0, 0);
WndProc(SCI_CUT, 0, 0);
break;
case idcmdCopy:
WndProc(WM_COPY, 0, 0);
WndProc(SCI_COPY, 0, 0);
break;
case idcmdPaste:
WndProc(WM_PASTE, 0, 0);
WndProc(SCI_PASTE, 0, 0);
break;
case idcmdDelete:
WndProc(WM_CLEAR, 0, 0);
WndProc(SCI_CLEAR, 0, 0);
break;
case idcmdSelectAll:
@@ -99,7 +106,7 @@ void ScintillaBase::Command(int cmdId) {
}
}
int ScintillaBase::KeyCommand(UINT iMessage) {
int ScintillaBase::KeyCommand(unsigned int iMessage) {
// Most key commands cancel autocompletion mode
if (ac.Active()) {
switch (iMessage) {
@@ -130,6 +137,9 @@ int ScintillaBase::KeyCommand(UINT iMessage) {
case SCI_TAB:
AutoCompleteCompleted();
return 0;
case SCI_NEWLINE:
AutoCompleteCompleted();
return 0;
default:
ac.Cancel();
@@ -157,15 +167,30 @@ int ScintillaBase::KeyCommand(UINT iMessage) {
}
void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
//Platform::DebugPrintf("AutoCOmplete %s\n", list);
//Platform::DebugPrintf("AutoComplete %s\n", list);
ct.CallTipCancel();
if (ac.chooseSingle) {
if (list && !strchr(list, ac.GetSeparator())) {
if (ac.ignoreCase) {
SetEmptySelection(currentPos - lenEntered);
pdoc->DeleteChars(currentPos, lenEntered);
SetEmptySelection(currentPos);
pdoc->InsertString(currentPos, list);
SetEmptySelection(currentPos + strlen(list));
} else {
SetEmptySelection(currentPos);
pdoc->InsertString(currentPos, list + lenEntered);
SetEmptySelection(currentPos + strlen(list + lenEntered));
}
return;
}
}
ac.Start(wDraw, idAutoComplete, currentPos, lenEntered);
PRectangle rcClient = GetClientRectangle();
Point pt = LocationFromPosition(currentPos-lenEntered);
//Platform::DebugPrintf("Auto complete %x\n", lbAutoComplete);
int heightLB = 100;
int widthLB = 100;
if (pt.x >= rcClient.right - widthLB) {
@@ -188,16 +213,18 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
rcac.right = rcac.left + widthLB;
rcac.bottom = Platform::Minimum(rcac.top + heightLB, rcClient.bottom);
ac.lb.SetPositionRelative(rcac, wMain);
ac.lb.SetFont(vs.styles[0].font);
ac.lb.SetFont(vs.styles[STYLE_DEFAULT].font);
ac.lb.SetAverageCharWidth(vs.styles[STYLE_DEFAULT].aveCharWidth);
int maxStrLen = ac.SetList(list);
ac.SetList(list);
// Fiddle the position of the list so it is right next to the target and wide enough for all its strings
PRectangle rcList = ac.lb.GetPosition();
PRectangle rcList = ac.lb.GetDesiredRect();
int heightAlloced = rcList.bottom - rcList.top;
widthLB = Platform::Maximum(widthLB, rcList.right - rcList.left);
// Make an allowance for large strings in list
rcList.left = pt.x - 5;
rcList.right = rcList.left + Platform::Maximum(widthLB, maxStrLen * 8 + 16);
rcList.right = rcList.left + widthLB;
if (pt.y >= rcClient.bottom - heightLB && // Wont fit below.
pt.y >= (rcClient.bottom + rcClient.top) / 2) { // and there is more room above.
rcList.top = pt.y - heightAlloced;
@@ -206,8 +233,10 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
}
rcList.bottom = rcList.top + heightAlloced;
ac.lb.SetPositionRelative(rcList, wMain);
//lbAutoComplete.SetPosition(rcList);
ac.Show();
if (lenEntered != 0) {
AutoCompleteMoveToCurrentWord();
}
}
void ScintillaBase::AutoCompleteCancel() {
@@ -218,36 +247,63 @@ void ScintillaBase::AutoCompleteMove(int delta) {
ac.Move(delta);
}
void ScintillaBase::AutoCompleteMoveToCurrentWord() {
char wordCurrent[1000];
int i;
int startWord = ac.posStart - ac.startLen;
for (i = startWord; i < currentPos; i++)
wordCurrent[i - startWord] = pdoc->CharAt(i);
wordCurrent[i - startWord] = '\0';
ac.Select(wordCurrent);
}
void ScintillaBase::AutoCompleteChanged(char ch) {
if (currentPos <= ac.posStart) {
if (ac.IsFillUpChar(ch)) {
AutoCompleteCompleted(ch);
} else if (currentPos <= ac.posStart - ac.startLen) {
ac.Cancel();
} else if (ac.cancelAtStartPos && currentPos <= ac.posStart) {
ac.Cancel();
} else if (ac.IsStopChar(ch)) {
ac.Cancel();
} else {
char wordCurrent[1000];
int i;
int startWord = ac.posStart - ac.startLen;
for (i = startWord; i < currentPos; i++)
wordCurrent[i - startWord] = pdoc->CharAt(i);
wordCurrent[i - startWord] = '\0';
ac.Select(wordCurrent);
AutoCompleteMoveToCurrentWord();
}
}
void ScintillaBase::AutoCompleteCompleted() {
void ScintillaBase::AutoCompleteCompleted(char fillUp/*='\0'*/) {
int item = ac.lb.GetSelection();
char selected[200];
char selected[1000];
if (item != -1) {
ac.lb.GetValue(item, selected, sizeof(selected));
}
ac.Cancel();
if (currentPos != ac.posStart) {
pdoc->DeleteChars(ac.posStart, currentPos - ac.posStart);
}
SetEmptySelection(ac.posStart);
if (item != -1) {
pdoc->InsertString(currentPos, selected + ac.startLen);
SetEmptySelection(currentPos + strlen(selected + ac.startLen));
if (ac.ignoreCase) {
if (currentPos != ac.posStart) {
pdoc->DeleteChars(ac.posStart, currentPos - ac.posStart);
}
SetEmptySelection(ac.posStart - ac.startLen);
pdoc->DeleteChars(ac.posStart - ac.startLen, ac.startLen);
if (item != -1) {
SString piece = selected;
if (fillUp)
piece += fillUp;
pdoc->InsertString(currentPos, piece.c_str());
SetEmptySelection(currentPos + piece.length());
}
} else {
if (currentPos != ac.posStart) {
pdoc->DeleteChars(ac.posStart, currentPos - ac.posStart);
}
SetEmptySelection(ac.posStart);
if (item != -1) {
SString piece = selected + ac.startLen;
if (fillUp)
piece += fillUp;
pdoc->InsertString(currentPos, piece.c_str());
SetEmptySelection(currentPos + piece.length());
}
}
}
@@ -258,16 +314,21 @@ void ScintillaBase::ContextMenu(Point pt) {
AddToPopUp("");
AddToPopUp("Cut", idcmdCut, currentPos != anchor);
AddToPopUp("Copy", idcmdCopy, currentPos != anchor);
AddToPopUp("Paste", idcmdPaste, WndProc(EM_CANPASTE, 0, 0));
AddToPopUp("Paste", idcmdPaste, WndProc(SCI_CANPASTE, 0, 0));
AddToPopUp("Delete", idcmdDelete, currentPos != anchor);
AddToPopUp("");
AddToPopUp("Select All", idcmdSelectAll);
popup.Show(pt, wMain);
}
void ScintillaBase::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) {
void ScintillaBase::CancelModes() {
AutoCompleteCancel();
ct.CallTipCancel();
Editor::CancelModes();
}
void ScintillaBase::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) {
CancelModes();
Editor::ButtonDown(pt, curTime, shift, ctrl, alt);
}
@@ -295,8 +356,8 @@ void ScintillaBase::NotifyStyleToNeeded(int endStyleNeeded) {
#ifdef SCI_LEXER
if (lexLanguage != SCLEX_CONTAINER) {
int endStyled = Platform::SendScintilla(wMain.GetID(), SCI_GETENDSTYLED, 0, 0);
int lineEndStyled = Platform::SendScintilla(wMain.GetID(), EM_LINEFROMCHAR, endStyled, 0);
endStyled = Platform::SendScintilla(wMain.GetID(), EM_LINEINDEX, lineEndStyled, 0);
int lineEndStyled = Platform::SendScintilla(wMain.GetID(), SCI_LINEFROMPOSITION, endStyled, 0);
endStyled = Platform::SendScintilla(wMain.GetID(), SCI_POSITIONFROMLINE, lineEndStyled, 0);
Colourise(endStyled, endStyleNeeded);
return;
}
@@ -304,7 +365,7 @@ void ScintillaBase::NotifyStyleToNeeded(int endStyleNeeded) {
Editor::NotifyStyleToNeeded(endStyleNeeded);
}
LRESULT ScintillaBase::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
long ScintillaBase::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) {
switch (iMessage) {
case SCI_AUTOCSHOW:
AutoCompleteStart(wParam, reinterpret_cast<const char *>(lParam));
@@ -325,7 +386,7 @@ LRESULT ScintillaBase::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
break;
case SCI_AUTOCSETSEPARATOR:
ac.SetSeparator(wParam);
ac.SetSeparator(static_cast<char>(wParam));
break;
case SCI_AUTOCGETSEPARATOR:
@@ -338,13 +399,38 @@ LRESULT ScintillaBase::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
case SCI_AUTOCSELECT:
ac.Select(reinterpret_cast<char *>(lParam));
break;
case SCI_AUTOCSETCANCELATSTART:
ac.cancelAtStartPos = wParam;
break;
case SCI_AUTOCGETCANCELATSTART:
return ac.cancelAtStartPos;
case SCI_AUTOCSETFILLUPS:
ac.SetFillUpChars(reinterpret_cast<char *>(lParam));
break;
case SCI_AUTOCSETCHOOSESINGLE:
ac.chooseSingle = wParam;
break;
case SCI_AUTOCGETCHOOSESINGLE:
return ac.chooseSingle;
case SCI_AUTOCSETIGNORECASE:
ac.ignoreCase = wParam;
break;
case SCI_AUTOCGETIGNORECASE:
return ac.ignoreCase;
case SCI_CALLTIPSHOW: {
AutoCompleteCancel();
if (!ct.wCallTip.Created()) {
PRectangle rc = ct.CallTipStart(currentPos, LocationFromPosition(wParam),
reinterpret_cast<char *>(lParam),
vs.styles[0].fontName, vs.styles[0].size);
vs.styles[STYLE_DEFAULT].fontName, vs.styles[STYLE_DEFAULT].size);
// If the call-tip window would be out of the client
// space, adjust so it displays above the text.
PRectangle rcClient = GetClientRectangle();

View File

@@ -47,13 +47,15 @@ protected:
virtual void AddCharUTF(char *s, unsigned int len);
void Command(int cmdId);
virtual int KeyCommand(UINT iMessage);
virtual void CancelModes();
virtual int KeyCommand(unsigned int iMessage);
void AutoCompleteStart(int lenEntered, const char *list);
void AutoCompleteCancel();
void AutoCompleteMove(int delta);
void AutoCompleteChanged(char ch=0);
void AutoCompleteCompleted();
void AutoCompleteCompleted(char fillUp='\0');
void AutoCompleteMoveToCurrentWord();
virtual void CreateCallTipWindow(PRectangle rc) = 0;
@@ -65,7 +67,7 @@ protected:
virtual void NotifyStyleToNeeded(int endStyleNeeded);
public:
// Public so scintilla_send_message can use it
virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual long WndProc(unsigned int iMessage, unsigned long wParam, long lParam);
};
#endif

View File

@@ -14,13 +14,13 @@ Style::Style() {
aliasOfDefaultFont = true;
Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
Platform::DefaultFontSize(), 0, SC_CHARSET_DEFAULT,
false, false, false, false);
false, false, false, false, true);
}
Style::Style(const Style &source) {
Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
0, 0, 0,
false, false, false, false);
false, false, false, false, true);
fore.desired = source.fore.desired;
back.desired = source.back.desired;
characterSet = source.characterSet;
@@ -29,6 +29,7 @@ Style::Style(const Style &source) {
size = source.size;
eolFilled = source.eolFilled;
underline = source.underline;
visible = source.visible;
}
Style::~Style() {
@@ -44,7 +45,7 @@ Style &Style::operator=(const Style &source) {
return *this;
Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
0, 0, SC_CHARSET_DEFAULT,
false, false, false, false);
false, false, false, false, true);
fore.desired = source.fore.desired;
back.desired = source.back.desired;
characterSet = source.characterSet;
@@ -53,12 +54,13 @@ Style &Style::operator=(const Style &source) {
size = source.size;
eolFilled = source.eolFilled;
underline = source.underline;
visible = source.visible;
return *this;
}
void Style::Clear(Colour fore_, Colour back_, int size_,
const char *fontName_, int characterSet_,
bool bold_, bool italic_, bool eolFilled_, bool underline_) {
bool bold_, bool italic_, bool eolFilled_, bool underline_, bool visible_) {
fore.desired = fore_;
back.desired = back_;
characterSet = characterSet_;
@@ -68,6 +70,7 @@ void Style::Clear(Colour fore_, Colour back_, int size_,
fontName = fontName_;
eolFilled = eolFilled_;
underline = underline_;
visible = visible_;
if (aliasOfDefaultFont)
font.SetID(0);
else

View File

@@ -18,6 +18,7 @@ public:
int characterSet;
bool eolFilled;
bool underline;
bool visible;
Font font;
unsigned int lineHeight;
@@ -34,7 +35,7 @@ public:
void Clear(Colour fore_, Colour back_,
int size_,
const char *fontName_, int characterSet_,
bool bold_, bool italic_, bool eolFilled_, bool underline_);
bool bold_, bool italic_, bool eolFilled_, bool underline_, bool visible_);
bool EquivalentFontTo(const Style *other) const;
void Realise(Surface &surface, int zoomLevel, Style *defaultStyle=0);
};

View File

@@ -69,10 +69,12 @@ ViewStyle::ViewStyle(const ViewStyle &source) {
selforeground.desired = source.selforeground.desired;
selbackset = source.selbackset;
selbackground.desired = source.selbackground.desired;
selbackground2.desired = source.selbackground2.desired;
selbar.desired = source.selbar.desired;
selbarlight.desired = source.selbarlight.desired;
caretcolour.desired = source.caretcolour.desired;
edgecolour.desired = source.edgecolour.desired;
edgeState = source.edgeState;
leftMarginWidth = source.leftMarginWidth;
rightMarginWidth = source.rightMarginWidth;
for (int i=0;i < margins; i++) {
@@ -83,6 +85,7 @@ ViewStyle::ViewStyle(const ViewStyle &source) {
fixedColumnWidth = source.fixedColumnWidth;
zoomLevel = source.zoomLevel;
viewWhitespace = source.viewWhitespace;
viewIndentationGuides = source.viewIndentationGuides;
viewEOL = source.viewEOL;
showMarkedLines = source.showMarkedLines;
}
@@ -111,6 +114,7 @@ void ViewStyle::Init() {
selforeground.desired = Colour(0xff, 0, 0);
selbackset = true;
selbackground.desired = Colour(0xc0, 0xc0, 0xc0);
selbackground2.desired = Colour(0xb0, 0xb0, 0xb0);
selbar.desired = Platform::Chrome();
selbarlight.desired = Platform::ChromeHighlight();
styles[STYLE_LINENUMBER].fore.desired = Colour(0, 0, 0);
@@ -118,6 +122,7 @@ void ViewStyle::Init() {
//caretcolour.desired = Colour(0xff, 0, 0);
caretcolour.desired = Colour(0, 0, 0);
edgecolour.desired = Colour(0xc0, 0xc0, 0xc0);
edgeState = EDGE_NONE;
leftMarginWidth = 1;
rightMarginWidth = 1;
@@ -142,7 +147,8 @@ void ViewStyle::Init() {
maskInLine &= ~ms[margin].mask;
}
zoomLevel = 0;
viewWhitespace = false;
viewWhitespace = wsInvisible;
viewIndentationGuides = false;
viewEOL = false;
showMarkedLines = true;
}
@@ -162,6 +168,7 @@ void ViewStyle::RefreshColourPalette(Palette &pal, bool want) {
}
pal.WantFind(selforeground, want);
pal.WantFind(selbackground, want);
pal.WantFind(selbackground2, want);
pal.WantFind(selbar, want);
pal.WantFind(selbarlight, want);
pal.WantFind(caretcolour, want);
@@ -203,7 +210,7 @@ void ViewStyle::ResetDefaultStyle() {
styles[STYLE_DEFAULT].Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
Platform::DefaultFontSize(), fontNames.Save(Platform::DefaultFont()),
SC_CHARSET_DEFAULT,
false, false, false, false);
false, false, false, false, true);
}
void ViewStyle::ClearStyles() {
@@ -219,7 +226,8 @@ void ViewStyle::ClearStyles() {
styles[STYLE_DEFAULT].bold,
styles[STYLE_DEFAULT].italic,
styles[STYLE_DEFAULT].eolFilled,
styles[STYLE_DEFAULT].underline);
styles[STYLE_DEFAULT].underline,
styles[STYLE_DEFAULT].visible);
}
}
styles[STYLE_LINENUMBER].back.desired = Platform::Chrome();

View File

@@ -26,6 +26,7 @@ public:
const char *Save(const char *name);
};
enum WhiteSpaceVisibility {wsInvisible=0, wsVisibleAlways=1, wsVisibleAfterIndent=2};
class ViewStyle {
public:
FontNames fontNames;
@@ -41,6 +42,7 @@ public:
ColourPair selforeground;
bool selbackset;
ColourPair selbackground;
ColourPair selbackground2;
ColourPair selbar;
ColourPair selbarlight;
// Margins are ordered: Line Numbers, Selection Margin, Spacing Margin
@@ -52,11 +54,13 @@ public:
MarginStyle ms[margins];
int fixedColumnWidth;
int zoomLevel;
bool viewWhitespace;
WhiteSpaceVisibility viewWhitespace;
bool viewIndentationGuides;
bool viewEOL;
bool showMarkedLines;
ColourPair caretcolour;
ColourPair edgecolour;
int edgeState;
ViewStyle();
ViewStyle(const ViewStyle &source);

View File

@@ -4,6 +4,7 @@
// The License.txt file describes the conditions under which this software may be distributed.
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
@@ -17,25 +18,26 @@
WindowAccessor::~WindowAccessor() {
}
#if PLAT_WIN
bool WindowAccessor::InternalIsLeadByte(char ch) {
#if PLAT_GTK
// TODO: support DBCS under GTK+
return false;
#elif PLAT_WIN
if (SC_CP_UTF8 == codePage)
// For lexing, all characters >= 0x80 are treated the
// same so none is considered a lead byte.
return false;
else
return IsDBCSLeadByteEx(codePage, ch);
#elif PLAT_WX
return false;
#endif
}
#else
// PLAT_GTK or PLAT_WX
// TODO: support DBCS under GTK+ and WX
bool WindowAccessor::InternalIsLeadByte(char) {
return false;
}
#endif
void WindowAccessor::Fill(int position) {
if (lenDoc == -1)
lenDoc = Platform::SendScintilla(id, WM_GETTEXTLENGTH, 0, 0);
lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
startPos = position - slopSize;
if (startPos + bufferSize > lenDoc)
startPos = lenDoc - bufferSize;
@@ -45,8 +47,8 @@ void WindowAccessor::Fill(int position) {
if (endPos > lenDoc)
endPos = lenDoc;
TEXTRANGE tr = {{startPos, endPos}, buf};
Platform::SendScintilla(id, EM_GETTEXTRANGE, 0, reinterpret_cast<LPARAM>(&tr));
TextRange tr = {{startPos, endPos}, buf};
Platform::SendScintilla(id, SCI_GETTEXTRANGE, 0, reinterpret_cast<long>(&tr));
}
char WindowAccessor::StyleAt(int position) {
@@ -55,11 +57,11 @@ char WindowAccessor::StyleAt(int position) {
}
int WindowAccessor::GetLine(int position) {
return Platform::SendScintilla(id, EM_LINEFROMCHAR, position, 0);
return Platform::SendScintilla(id, SCI_LINEFROMPOSITION, position, 0);
}
int WindowAccessor::LineStart(int line) {
return Platform::SendScintilla(id, EM_LINEINDEX, line, 0);
return Platform::SendScintilla(id, SCI_POSITIONFROMLINE, line, 0);
}
int WindowAccessor::LevelAt(int line) {
@@ -68,7 +70,7 @@ int WindowAccessor::LevelAt(int line) {
int WindowAccessor::Length() {
if (lenDoc == -1)
lenDoc = Platform::SendScintilla(id, WM_GETTEXTLENGTH, 0, 0);
lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0);
return lenDoc;
}
@@ -121,7 +123,7 @@ void WindowAccessor::Flush() {
lenDoc = -1;
if (validLen > 0) {
Platform::SendScintilla(id, SCI_SETSTYLINGEX, validLen,
reinterpret_cast<LPARAM>(styleBuf));
reinterpret_cast<long>(styleBuf));
validLen = 0;
}
}

File diff suppressed because it is too large Load Diff