summaryrefslogtreecommitdiffstats
path: root/scintilla/src
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@gmail.com>2016-09-05 12:51:54 +0300
committerXhmikosR <xhmikosr@gmail.com>2016-09-05 12:51:54 +0300
commit7529a6b906f1739188dd31c60af8fd742a7acd20 (patch)
tree00417bcbfa3fceb1fc0eedf35345048a5ad569e8 /scintilla/src
parent2db3008b300b9b77425e61aea1e09919683c6d51 (diff)
downloadnotepad2-mod-7529a6b906f1739188dd31c60af8fd742a7acd20.zip
notepad2-mod-7529a6b906f1739188dd31c60af8fd742a7acd20.tar.gz
notepad2-mod-7529a6b906f1739188dd31c60af8fd742a7acd20.tar.bz2
Update Scintilla to v3.6.7.4.2.25.985
Diffstat (limited to 'scintilla/src')
-rw-r--r--scintilla/src/CharClassify.cxx2
-rw-r--r--scintilla/src/CharClassify.h2
-rw-r--r--scintilla/src/Document.cxx2
-rw-r--r--scintilla/src/Document.h2
-rw-r--r--scintilla/src/Editor.cxx47
-rw-r--r--scintilla/src/Editor.h3
-rw-r--r--scintilla/src/ScintillaBase.cxx2
-rw-r--r--scintilla/src/XPM.cxx4
8 files changed, 39 insertions, 25 deletions
diff --git a/scintilla/src/CharClassify.cxx b/scintilla/src/CharClassify.cxx
index 5eaba45..ddb6ca9 100644
--- a/scintilla/src/CharClassify.cxx
+++ b/scintilla/src/CharClassify.cxx
@@ -44,7 +44,7 @@ void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) {
}
}
-int CharClassify::GetCharsOfClass(cc characterClass, unsigned char *buffer) {
+int CharClassify::GetCharsOfClass(cc characterClass, unsigned char *buffer) const {
// Get characters belonging to the given char class; return the number
// of characters (if the buffer is NULL, don't write to it).
int count = 0;
diff --git a/scintilla/src/CharClassify.h b/scintilla/src/CharClassify.h
index 4b322a6..8d201da 100644
--- a/scintilla/src/CharClassify.h
+++ b/scintilla/src/CharClassify.h
@@ -19,7 +19,7 @@ public:
enum cc { ccSpace, ccNewLine, ccWord, ccPunctuation };
void SetDefaultCharClasses(bool includeWordClass);
void SetCharClasses(const unsigned char *chars, cc newCharClass);
- int GetCharsOfClass(cc charClass, unsigned char *buffer);
+ int GetCharsOfClass(cc charClass, unsigned char *buffer) const;
cc GetClass(unsigned char ch) const { return static_cast<cc>(charClass[ch]);}
bool IsWord(unsigned char ch) const { return static_cast<cc>(charClass[ch]) == ccWord;}
diff --git a/scintilla/src/Document.cxx b/scintilla/src/Document.cxx
index 6aa8697..c21ae8c 100644
--- a/scintilla/src/Document.cxx
+++ b/scintilla/src/Document.cxx
@@ -1823,7 +1823,7 @@ void Document::SetCharClasses(const unsigned char *chars, CharClassify::cc newCh
charClass.SetCharClasses(chars, newCharClass);
}
-int Document::GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer) {
+int Document::GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer) const {
return charClass.GetCharsOfClass(characterClass, buffer);
}
diff --git a/scintilla/src/Document.h b/scintilla/src/Document.h
index 12d37a0..6b24f2c 100644
--- a/scintilla/src/Document.h
+++ b/scintilla/src/Document.h
@@ -401,7 +401,7 @@ public:
void SetDefaultCharClasses(bool includeWordClass);
void SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass);
- int GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer);
+ int GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer) const;
void SCI_METHOD StartStyling(Sci_Position position, char mask);
bool SCI_METHOD SetStyleFor(Sci_Position length, char style);
bool SCI_METHOD SetStyles(Sci_Position length, const char *styles);
diff --git a/scintilla/src/Editor.cxx b/scintilla/src/Editor.cxx
index 15c2985..5c2f531 100644
--- a/scintilla/src/Editor.cxx
+++ b/scintilla/src/Editor.cxx
@@ -1837,15 +1837,26 @@ void Editor::ChangeSize() {
}
}
-int Editor::InsertSpace(int position, unsigned int spaces) {
- if (spaces > 0) {
- std::string spaceText(spaces, ' ');
- const int lengthInserted = pdoc->InsertString(position, spaceText.c_str(), spaces);
- position += lengthInserted;
+int Editor::RealizeVirtualSpace(int position, unsigned int virtualSpace) {
+ if (virtualSpace > 0) {
+ const int line = pdoc->LineFromPosition(position);
+ const int indent = pdoc->GetLineIndentPosition(line);
+ if (indent == position) {
+ return pdoc->SetLineIndentation(line, pdoc->GetLineIndentation(line) + virtualSpace);
+ } else {
+ std::string spaceText(virtualSpace, ' ');
+ const int lengthInserted = pdoc->InsertString(position, spaceText.c_str(), virtualSpace);
+ position += lengthInserted;
+ }
}
return position;
}
+SelectionPosition Editor::RealizeVirtualSpace(const SelectionPosition &position) {
+ // Return the new position with no virtual space
+ return SelectionPosition(RealizeVirtualSpace(position.Position(), position.VirtualSpace()));
+}
+
void Editor::AddChar(char ch) {
char s[2];
s[0] = ch;
@@ -1901,7 +1912,7 @@ void Editor::AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS) {
}
}
}
- positionInsert = InsertSpace(positionInsert, currentSel->caret.VirtualSpace());
+ positionInsert = RealizeVirtualSpace(positionInsert, currentSel->caret.VirtualSpace());
const int lengthInserted = pdoc->InsertString(positionInsert, s, len);
if (lengthInserted > 0) {
currentSel->caret.SetPosition(positionInsert + lengthInserted);
@@ -1975,7 +1986,7 @@ void Editor::ClearBeforeTentativeStart() {
sel.Range(r).MinimizeVirtualSpace();
}
}
- InsertSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
+ RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
sel.Range(r).ClearVirtualSpace();
}
}
@@ -1984,7 +1995,7 @@ void Editor::ClearBeforeTentativeStart() {
void Editor::InsertPaste(const char *text, int len) {
if (multiPasteMode == SC_MULTIPASTE_ONCE) {
SelectionPosition selStart = sel.Start();
- selStart = SelectionPosition(InsertSpace(selStart.Position(), selStart.VirtualSpace()));
+ selStart = RealizeVirtualSpace(selStart);
const int lengthInserted = pdoc->InsertString(selStart.Position(), text, len);
if (lengthInserted > 0) {
SetEmptySelection(selStart.Position() + lengthInserted);
@@ -2004,7 +2015,7 @@ void Editor::InsertPaste(const char *text, int len) {
sel.Range(r).MinimizeVirtualSpace();
}
}
- positionInsert = InsertSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
+ positionInsert = RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
const int lengthInserted = pdoc->InsertString(positionInsert, text, len);
if (lengthInserted > 0) {
sel.Range(r).caret.SetPosition(positionInsert + lengthInserted);
@@ -2126,8 +2137,7 @@ void Editor::PasteRectangular(SelectionPosition pos, const char *ptr, int len) {
sel.RangeMain() = SelectionRange(pos);
int line = pdoc->LineFromPosition(sel.MainCaret());
UndoGroup ug(pdoc);
- sel.RangeMain().caret = SelectionPosition(
- InsertSpace(sel.RangeMain().caret.Position(), sel.RangeMain().caret.VirtualSpace()));
+ sel.RangeMain().caret = RealizeVirtualSpace(sel.RangeMain().caret);
int xInsert = XFromPosition(sel.RangeMain().caret);
bool prevCr = false;
while ((len > 0) && IsEOLChar(ptr[len-1]))
@@ -2179,9 +2189,9 @@ void Editor::Clear() {
if (!RangeContainsProtected(sel.Range(r).caret.Position(), sel.Range(r).caret.Position() + 1)) {
if (sel.Range(r).Start().VirtualSpace()) {
if (sel.Range(r).anchor < sel.Range(r).caret)
- sel.Range(r) = SelectionRange(InsertSpace(sel.Range(r).anchor.Position(), sel.Range(r).anchor.VirtualSpace()));
+ sel.Range(r) = SelectionRange(RealizeVirtualSpace(sel.Range(r).anchor.Position(), sel.Range(r).anchor.VirtualSpace()));
else
- sel.Range(r) = SelectionRange(InsertSpace(sel.Range(r).caret.Position(), sel.Range(r).caret.VirtualSpace()));
+ sel.Range(r) = SelectionRange(RealizeVirtualSpace(sel.Range(r).caret.Position(), sel.Range(r).caret.VirtualSpace()));
}
if ((sel.Count() == 1) || !pdoc->IsPositionInLineEnd(sel.Range(r).caret.Position())) {
pdoc->DelChar(sel.Range(r).caret.Position());
@@ -3283,7 +3293,7 @@ int Editor::HorizontalMove(unsigned int iMessage) {
case SCI_CHARLEFTRECTEXTEND:
if (pdoc->IsLineEndPosition(spCaret.Position()) && spCaret.VirtualSpace()) {
spCaret.SetVirtualSpace(spCaret.VirtualSpace() - 1);
- } else {
+ } else if ((virtualSpaceOptions & SCVS_NOWRAPLINESTART) == 0 || pdoc->GetColumn(spCaret.Position()) > 0) {
spCaret = SelectionPosition(spCaret.Position() - 1);
}
break;
@@ -3328,7 +3338,7 @@ int Editor::HorizontalMove(unsigned int iMessage) {
case SCI_CHARLEFTEXTEND:
if (spCaret.VirtualSpace()) {
spCaret.SetVirtualSpace(spCaret.VirtualSpace() - 1);
- } else {
+ } else if ((virtualSpaceOptions & SCVS_NOWRAPLINESTART) == 0 || pdoc->GetColumn(spCaret.Position()) > 0) {
spCaret = SelectionPosition(spCaret.Position() - 1);
}
break;
@@ -3504,7 +3514,7 @@ int Editor::DelWordOrLine(unsigned int iMessage) {
} else {
// Delete to the right so first realise the virtual space.
sel.Range(r) = SelectionRange(
- InsertSpace(sel.Range(r).caret.Position(), sel.Range(r).caret.VirtualSpace()));
+ RealizeVirtualSpace(sel.Range(r).caret));
}
Range rangeDelete;
@@ -4224,7 +4234,7 @@ void Editor::DropAt(SelectionPosition position, const char *value, size_t length
SetEmptySelection(position);
} else {
position = MovePositionOutsideChar(position, sel.MainCaret() - position.Position());
- position = SelectionPosition(InsertSpace(position.Position(), position.VirtualSpace()));
+ position = RealizeVirtualSpace(position);
const int lengthInserted = pdoc->InsertString(
position.Position(), convertedText.c_str(), static_cast<int>(convertedText.length()));
if (lengthInserted > 0) {
@@ -5309,6 +5319,9 @@ void Editor::FoldExpand(int line, int action, int level) {
if (action == SC_FOLDACTION_TOGGLE) {
expanding = !cs.GetExpanded(line);
}
+ // Ensure child lines lexed and fold information extracted before
+ // flipping the state.
+ pdoc->GetLastChild(line, LevelNumber(level));
SetFoldExpanded(line, expanding);
if (expanding && (cs.HiddenLines() == 0))
// Nothing to do
diff --git a/scintilla/src/Editor.h b/scintilla/src/Editor.h
index 423406b..a779a84 100644
--- a/scintilla/src/Editor.h
+++ b/scintilla/src/Editor.h
@@ -390,7 +390,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
void ChangeSize();
void FilterSelections();
- int InsertSpace(int position, unsigned int spaces);
+ int RealizeVirtualSpace(int position, unsigned int virtualSpace);
+ SelectionPosition RealizeVirtualSpace(const SelectionPosition &position);
void AddChar(char ch);
virtual void AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS=false);
void ClearBeforeTentativeStart();
diff --git a/scintilla/src/ScintillaBase.cxx b/scintilla/src/ScintillaBase.cxx
index 22efb7f..ef9aeb0 100644
--- a/scintilla/src/ScintillaBase.cxx
+++ b/scintilla/src/ScintillaBase.cxx
@@ -218,7 +218,7 @@ void ScintillaBase::AutoCompleteInsert(Position startPos, int removeLen, const c
if (!RangeContainsProtected(sel.Range(r).Start().Position(),
sel.Range(r).End().Position())) {
int positionInsert = sel.Range(r).Start().Position();
- positionInsert = InsertSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
+ positionInsert = RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
if (positionInsert - removeLen >= 0) {
positionInsert -= removeLen;
pdoc->DeleteChars(positionInsert, removeLen);
diff --git a/scintilla/src/XPM.cxx b/scintilla/src/XPM.cxx
index 05fbc22..82535c9 100644
--- a/scintilla/src/XPM.cxx
+++ b/scintilla/src/XPM.cxx
@@ -22,13 +22,13 @@ using namespace Scintilla;
static const char *NextField(const char *s) {
// In case there are leading spaces in the string
- while (*s && *s == ' ') {
+ while (*s == ' ') {
s++;
}
while (*s && *s != ' ') {
s++;
}
- while (*s && *s == ' ') {
+ while (*s == ' ') {
s++;
}
return s;