aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaHistory.html7
-rw-r--r--src/Editor.cxx40
-rw-r--r--src/Editor.h3
-rw-r--r--src/ScintillaBase.cxx2
4 files changed, 35 insertions, 17 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 67388952b..6a07b5ff5 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -496,6 +496,8 @@
<td>Tse Kit Yam</td>
<td>Morten Brørup</td>
<td>Alexey Denisov</td>
+ </tr><tr>
+ <td>jedailey</td>
</tr>
</table>
<p>
@@ -545,6 +547,11 @@
<a href="http://sourceforge.net/p/scintilla/bugs/1849/">Bug #1849</a>.
</li>
<li>
+ When inserting spaces for virtual space and the position is in indentation and tabs are enabled
+ for indentation then use tabs.
+ <a href="http://sourceforge.net/p/scintilla/bugs/1850/">Bug #1850</a>.
+ </li>
+ <li>
Fix fold expand when some child text not styled.
Caused by fixes for Bug #1799.
<a href="http://sourceforge.net/p/scintilla/bugs/1842/">Bug #1842</a>.
diff --git a/src/Editor.cxx b/src/Editor.cxx
index bcba9bdf4..f9ac97b45 100644
--- a/src/Editor.cxx
+++ b/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());
@@ -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;
@@ -4208,7 +4218,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) {
diff --git a/src/Editor.h b/src/Editor.h
index 93a86fa39..72d4719ed 100644
--- a/src/Editor.h
+++ b/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/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index b6e2fb333..92605d9b3 100644
--- a/src/ScintillaBase.cxx
+++ b/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);