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:
@@ -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
@@ -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
|
||||
|
@@ -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() {
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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 \
|
||||
|
@@ -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)
|
||||
|
@@ -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 \
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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);
|
||||
};
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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
@@ -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;
|
||||
};
|
||||
|
@@ -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},
|
||||
|
@@ -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
|
||||
|
@@ -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
@@ -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);
|
||||
|
@@ -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--;
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
};
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -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
@@ -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
|
1508
include/wx/stc/stc.h
1508
include/wx/stc/stc.h
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
@@ -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() {
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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 \
|
||||
|
@@ -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)
|
||||
|
@@ -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 \
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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);
|
||||
};
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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
@@ -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;
|
||||
};
|
||||
|
@@ -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},
|
||||
|
@@ -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
|
||||
|
@@ -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
@@ -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);
|
||||
|
@@ -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--;
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
};
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
2411
src/stc/stc.cpp
2411
src/stc/stc.cpp
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user