diff options
Diffstat (limited to 'src/scintilla_backports/6153_a0f26eaf474d.patch')
-rw-r--r-- | src/scintilla_backports/6153_a0f26eaf474d.patch | 7832 |
1 files changed, 7832 insertions, 0 deletions
diff --git a/src/scintilla_backports/6153_a0f26eaf474d.patch b/src/scintilla_backports/6153_a0f26eaf474d.patch new file mode 100644 index 00000000..34c90ce7 --- /dev/null +++ b/src/scintilla_backports/6153_a0f26eaf474d.patch @@ -0,0 +1,7832 @@ +# HG changeset patch +# User Neil <nyamatongwe@gmail.com> +# Date 1490944778 -39600 +# Node ID a0f26eaf474d98cb999629f79a3d082c0028925b +# Parent 1788f6795302a077e98c9cea25100068eef8624b +Using Sci::Position and Sci::Line to mark variables that are document positions +and lines. + +diff -r 1788f6795302 -r a0f26eaf474d cocoa/ScintillaCocoa.h +--- a/cocoa/ScintillaCocoa.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/cocoa/ScintillaCocoa.h Fri Mar 31 18:19:38 2017 +1100 +@@ -158,10 +158,10 @@ + void SetMouseCapture(bool on) override; + bool HaveMouseCapture() override; + void WillDraw(NSRect rect); +- void ScrollText(int linesToMove) override; ++ void ScrollText(Sci::Line linesToMove) override; + void SetVerticalScrollPos() override; + void SetHorizontalScrollPos() override; +- bool ModifyScrollBars(int nMax, int nPage) override; ++ bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) override; + bool SetScrollingSize(void); + void Resize(); + void UpdateForScroll(); +@@ -197,7 +197,7 @@ + void ObserverAdd(); + void ObserverRemove(); + void IdleWork() override; +- void QueueIdleWork(WorkNeeded::workItems items, int upTo) override; ++ void QueueIdleWork(WorkNeeded::workItems items, Sci::Position upTo) override; + int InsertText(NSString* input); + NSRange PositionsFromCharacters(NSRange rangeCharacters) const; + NSRange CharactersFromPositions(NSRange rangePositions) const; +diff -r 1788f6795302 -r a0f26eaf474d cocoa/ScintillaCocoa.mm +--- a/cocoa/ScintillaCocoa.mm Thu Mar 30 09:11:48 2017 +1100 ++++ b/cocoa/ScintillaCocoa.mm Fri Mar 31 18:19:38 2017 +1100 +@@ -522,7 +522,7 @@ + + //-------------------------------------------------------------------------------------------------- + +-void ScintillaCocoa::QueueIdleWork(WorkNeeded::workItems items, int upTo) { ++void ScintillaCocoa::QueueIdleWork(WorkNeeded::workItems items, Sci::Position upTo) { + Editor::QueueIdleWork(items, upTo); + ObserverAdd(); + } +@@ -1236,7 +1236,7 @@ + */ + NSPoint ScintillaCocoa::GetCaretPosition() + { +- const int line = pdoc->LineFromPosition(sel.RangeMain().caret.Position()); ++ const Sci::Line line = pdoc->LineFromPosition(sel.RangeMain().caret.Position()); + NSPoint result; + + result.y = line; +@@ -1261,9 +1261,9 @@ + } + + // TODO: does not work for wrapped lines, fix it. +- int line = pdoc->LineFromPosition(posDrag.Position()); +- int currentVisibleLine = cs.DisplayFromDoc(line); +- int lastVisibleLine = Platform::Minimum(topLine + LinesOnScreen(), cs.LinesDisplayed()) - 2; ++ Sci::Line line = pdoc->LineFromPosition(posDrag.Position()); ++ Sci::Line currentVisibleLine = cs.DisplayFromDoc(line); ++ Sci::Line lastVisibleLine = Platform::Minimum(topLine + LinesOnScreen(), cs.LinesDisplayed()) - 2; + + if (currentVisibleLine <= topLine && topLine > 0) + ScrollTo(topLine - scrollSpeed); +@@ -1368,10 +1368,10 @@ + + // calculate the bounds of the selection + PRectangle client = GetTextRectangle(); +- int selStart = sel.RangeMain().Start().Position(); +- int selEnd = sel.RangeMain().End().Position(); +- int startLine = pdoc->LineFromPosition(selStart); +- int endLine = pdoc->LineFromPosition(selEnd); ++ Sci::Position selStart = sel.RangeMain().Start().Position(); ++ Sci::Position selEnd = sel.RangeMain().End().Position(); ++ Sci::Line startLine = pdoc->LineFromPosition(selStart); ++ Sci::Line endLine = pdoc->LineFromPosition(selEnd); + Point pt; + long startPos, endPos, ep; + PRectangle rcSel; +@@ -1561,7 +1561,7 @@ + void ScintillaCocoa::DraggingExited(id <NSDraggingInfo> info) + { + #pragma unused(info) +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + FineTickerCancel(tickPlatform); + inDragDrop = ddNone; + } +@@ -1914,7 +1914,7 @@ + /** + * ScrollText is empty because scrolling is handled by the NSScrollView. + */ +-void ScintillaCocoa::ScrollText(int) ++void ScintillaCocoa::ScrollText(Sci::Line) + { + } + +@@ -1968,7 +1968,7 @@ + * @param nPage Number of lines per scroll page. + * @return True if there was a change, otherwise false. + */ +-bool ScintillaCocoa::ModifyScrollBars(int nMax, int nPage) ++bool ScintillaCocoa::ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) + { + #pragma unused(nMax, nPage) + return SetScrollingSize(); +diff -r 1788f6795302 -r a0f26eaf474d gtk/ScintillaGTK.cxx +--- a/gtk/ScintillaGTK.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/gtk/ScintillaGTK.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -1029,7 +1029,7 @@ + return rc; + } + +-void ScintillaGTK::ScrollText(int linesToMove) { ++void ScintillaGTK::ScrollText(Sci::Line linesToMove) { + int diff = vs.lineHeight * -linesToMove; + //Platform::DebugPrintf("ScintillaGTK::ScrollText %d %d %0d,%0d %0d,%0d\n", linesToMove, diff, + // rc.left, rc.top, rc.right, rc.bottom); +@@ -1052,7 +1052,7 @@ + gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustmenth), xOffset); + } + +-bool ScintillaGTK::ModifyScrollBars(int nMax, int nPage) { ++bool ScintillaGTK::ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) { + bool modified = false; + int pageScroll = LinesToScroll(); + +@@ -2763,7 +2763,7 @@ + void ScintillaGTK::DragLeave(GtkWidget *widget, GdkDragContext * /*context*/, guint) { + ScintillaGTK *sciThis = FromWidget(widget); + try { +- sciThis->SetDragPosition(SelectionPosition(invalidPosition)); ++ sciThis->SetDragPosition(SelectionPosition(Sci::invalidPosition)); + //Platform::DebugPrintf("DragLeave %x\n", sciThis); + } catch (...) { + sciThis->errorStatus = SC_STATUS_FAILURE; +@@ -2776,7 +2776,7 @@ + // If drag did not result in drop here or elsewhere + if (!sciThis->dragWasDropped) + sciThis->SetEmptySelection(sciThis->posDrag); +- sciThis->SetDragPosition(SelectionPosition(invalidPosition)); ++ sciThis->SetDragPosition(SelectionPosition(Sci::invalidPosition)); + //Platform::DebugPrintf("DragEnd %x %d\n", sciThis, sciThis->dragWasDropped); + sciThis->inDragDrop = ddNone; + } catch (...) { +@@ -2789,7 +2789,7 @@ + ScintillaGTK *sciThis = FromWidget(widget); + try { + //Platform::DebugPrintf("Drop %x\n", sciThis); +- sciThis->SetDragPosition(SelectionPosition(invalidPosition)); ++ sciThis->SetDragPosition(SelectionPosition(Sci::invalidPosition)); + } catch (...) { + sciThis->errorStatus = SC_STATUS_FAILURE; + } +@@ -2801,7 +2801,7 @@ + ScintillaGTK *sciThis = FromWidget(widget); + try { + sciThis->ReceivedDrop(selection_data); +- sciThis->SetDragPosition(SelectionPosition(invalidPosition)); ++ sciThis->SetDragPosition(SelectionPosition(Sci::invalidPosition)); + } catch (...) { + sciThis->errorStatus = SC_STATUS_FAILURE; + } +@@ -2832,7 +2832,7 @@ + } + sciThis->ClearSelection(); + } +- sciThis->SetDragPosition(SelectionPosition(invalidPosition)); ++ sciThis->SetDragPosition(SelectionPosition(Sci::invalidPosition)); + } catch (...) { + sciThis->errorStatus = SC_STATUS_FAILURE; + } +@@ -2870,7 +2870,7 @@ + styleIdleID = 0; + } + +-void ScintillaGTK::QueueIdleWork(WorkNeeded::workItems items, int upTo) { ++void ScintillaGTK::QueueIdleWork(WorkNeeded::workItems items, Sci::Position upTo) { + Editor::QueueIdleWork(items, upTo); + if (!styleIdleID) { + // Only allow one style needed to be queued +diff -r 1788f6795302 -r a0f26eaf474d gtk/ScintillaGTK.h +--- a/gtk/ScintillaGTK.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/gtk/ScintillaGTK.h Fri Mar 31 18:19:38 2017 +1100 +@@ -111,10 +111,10 @@ + virtual bool PaintContains(PRectangle rc); + void FullPaint(); + virtual PRectangle GetClientRectangle() const; +- virtual void ScrollText(int linesToMove); ++ virtual void ScrollText(Sci::Line linesToMove); + virtual void SetVerticalScrollPos(); + virtual void SetHorizontalScrollPos(); +- virtual bool ModifyScrollBars(int nMax, int nPage); ++ virtual bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage); + void ReconfigureScrollBars(); + virtual void NotifyChange(); + virtual void NotifyFocus(bool focus); +@@ -231,7 +231,7 @@ + static gboolean IdleCallback(gpointer pSci); + static gboolean StyleIdle(gpointer pSci); + virtual void IdleWork(); +- virtual void QueueIdleWork(WorkNeeded::workItems items, int upTo); ++ virtual void QueueIdleWork(WorkNeeded::workItems items, Sci::Position upTo); + virtual void SetDocPointer(Document *document); + static void PopUpCB(GtkMenuItem *menuItem, ScintillaGTK *sciThis); + +diff -r 1788f6795302 -r a0f26eaf474d gtk/ScintillaGTKAccessible.cxx +--- a/gtk/ScintillaGTKAccessible.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/gtk/ScintillaGTKAccessible.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -168,7 +168,7 @@ + } + } + +-gchar *ScintillaGTKAccessible::GetTextRangeUTF8(Position startByte, Position endByte) { ++gchar *ScintillaGTKAccessible::GetTextRangeUTF8(Sci::Position startByte, Sci::Position endByte) { + g_return_val_if_fail(startByte >= 0, NULL); + // FIXME: should we swap start/end if necessary? + g_return_val_if_fail(endByte >= startByte, NULL); +@@ -196,7 +196,7 @@ + } + + gchar *ScintillaGTKAccessible::GetText(int startChar, int endChar) { +- Position startByte, endByte; ++ Sci::Position startByte, endByte; + if (endChar == -1) { + startByte = ByteOffsetFromCharacterOffset(startChar); + endByte = sci->pdoc->Length(); +@@ -210,8 +210,8 @@ + AtkTextBoundary boundaryType, int *startChar, int *endChar) { + g_return_val_if_fail(charOffset >= 0, NULL); + +- Position startByte, endByte; +- Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); ++ Sci::Position startByte, endByte; ++ Sci::Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); + + switch (boundaryType) { + case ATK_TEXT_BOUNDARY_CHAR: +@@ -261,8 +261,8 @@ + AtkTextBoundary boundaryType, int *startChar, int *endChar) { + g_return_val_if_fail(charOffset >= 0, NULL); + +- Position startByte, endByte; +- Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); ++ Sci::Position startByte, endByte; ++ Sci::Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); + + switch (boundaryType) { + case ATK_TEXT_BOUNDARY_CHAR: +@@ -323,8 +323,8 @@ + AtkTextBoundary boundaryType, int *startChar, int *endChar) { + g_return_val_if_fail(charOffset >= 0, NULL); + +- Position startByte, endByte; +- Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); ++ Sci::Position startByte, endByte; ++ Sci::Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); + + switch (boundaryType) { + case ATK_TEXT_BOUNDARY_CHAR: +@@ -386,8 +386,8 @@ + AtkTextGranularity granularity, int *startChar, int *endChar) { + g_return_val_if_fail(charOffset >= 0, NULL); + +- Position startByte, endByte; +- Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); ++ Sci::Position startByte, endByte; ++ Sci::Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); + + switch (granularity) { + case ATK_TEXT_GRANULARITY_CHAR: +@@ -417,8 +417,8 @@ + gunichar ScintillaGTKAccessible::GetCharacterAtOffset(int charOffset) { + g_return_val_if_fail(charOffset >= 0, 0); + +- Position startByte = ByteOffsetFromCharacterOffset(charOffset); +- Position endByte = PositionAfter(startByte); ++ Sci::Position startByte = ByteOffsetFromCharacterOffset(charOffset); ++ Sci::Position endByte = PositionAfter(startByte); + gchar *ch = GetTextRangeUTF8(startByte, endByte); + gunichar unichar = g_utf8_get_char_validated(ch, -1); + g_free(ch); +@@ -466,7 +466,7 @@ + gint *x, gint *y, gint *width, gint *height, AtkCoordType coords) { + *x = *y = *height = *width = 0; + +- Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); ++ Sci::Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); + + // FIXME: should we handle scrolling? + *x = sci->WndProc(SCI_POINTXFROMPOSITION, 0, byteOffset); +@@ -550,7 +550,7 @@ + AtkAttributeSet *ScintillaGTKAccessible::GetRunAttributes(int charOffset, int *startChar, int *endChar) { + g_return_val_if_fail(charOffset >= -1, NULL); + +- Position byteOffset; ++ Sci::Position byteOffset; + if (charOffset == -1) { + byteOffset = sci->WndProc(SCI_GETCURRENTPOS, 0, 0); + } else { +@@ -562,11 +562,11 @@ + + const char style = StyleAt(byteOffset, true); + // compute the range for this style +- Position startByte = byteOffset; ++ Sci::Position startByte = byteOffset; + // when going backwards, we know the style is already computed + while (startByte > 0 && sci->pdoc->StyleAt((startByte) - 1) == style) + (startByte)--; +- Position endByte = byteOffset + 1; ++ Sci::Position endByte = byteOffset + 1; + while (endByte < length && StyleAt(endByte, true) == style) + (endByte)++; + +@@ -586,8 +586,8 @@ + if (selection_num < 0 || (unsigned int) selection_num >= sci->sel.Count()) + return NULL; + +- Position startByte = sci->sel.Range(selection_num).Start().Position(); +- Position endByte = sci->sel.Range(selection_num).End().Position(); ++ Sci::Position startByte = sci->sel.Range(selection_num).Start().Position(); ++ Sci::Position endByte = sci->sel.Range(selection_num).End().Position(); + + CharacterRangeFromByteRange(startByte, endByte, startChar, endChar); + return GetTextRangeUTF8(startByte, endByte); +@@ -595,7 +595,7 @@ + + gboolean ScintillaGTKAccessible::AddSelection(int startChar, int endChar) { + size_t n_selections = sci->sel.Count(); +- Position startByte, endByte; ++ Sci::Position startByte, endByte; + ByteRangeFromCharacterRange(startChar, endChar, startByte, endByte); + // use WndProc() to set the selections so it notifies as needed + if (n_selections > 1 || ! sci->sel.Empty()) { +@@ -627,7 +627,7 @@ + if (selection_num < 0 || (unsigned int) selection_num >= sci->sel.Count()) + return FALSE; + +- Position startByte, endByte; ++ Sci::Position startByte, endByte; + ByteRangeFromCharacterRange(startChar, endChar, startByte, endByte); + + sci->WndProc(SCI_SETSELECTIONNSTART, selection_num, startByte); +@@ -668,7 +668,7 @@ + } + } + +-bool ScintillaGTKAccessible::InsertStringUTF8(Position bytePos, const gchar *utf8, int lengthBytes) { ++bool ScintillaGTKAccessible::InsertStringUTF8(Sci::Position bytePos, const gchar *utf8, Sci::Position lengthBytes) { + if (sci->pdoc->IsReadOnly()) { + return false; + } +@@ -688,7 +688,7 @@ + } + + void ScintillaGTKAccessible::InsertText(const gchar *text, int lengthBytes, int *charPosition) { +- Position bytePosition = ByteOffsetFromCharacterOffset(*charPosition); ++ Sci::Position bytePosition = ByteOffsetFromCharacterOffset(*charPosition); + + // FIXME: should we update the target? + if (InsertStringUTF8(bytePosition, text, lengthBytes)) { +@@ -697,7 +697,7 @@ + } + + void ScintillaGTKAccessible::CopyText(int startChar, int endChar) { +- Position startByte, endByte; ++ Sci::Position startByte, endByte; + ByteRangeFromCharacterRange(startChar, endChar, startByte, endByte); + sci->CopyRangeToClipboard(startByte, endByte); + } +@@ -716,7 +716,7 @@ + g_return_if_fail(endChar >= startChar); + + if (! sci->pdoc->IsReadOnly()) { +- Position startByte, endByte; ++ Sci::Position startByte, endByte; + ByteRangeFromCharacterRange(startChar, endChar, startByte, endByte); + + if (! sci->RangeContainsProtected(startByte, endByte)) { +@@ -735,13 +735,13 @@ + // has always done that without problems, so let's guess it's a fairly safe bet. + struct Helper : GObjectWatcher { + ScintillaGTKAccessible *scia; +- Position bytePosition; ++ Sci::Position bytePosition; + + virtual void Destroyed() { + scia = 0; + } + +- Helper(ScintillaGTKAccessible *scia_, Position bytePos_) : ++ Helper(ScintillaGTKAccessible *scia_, Sci::Position bytePos_) : + GObjectWatcher(G_OBJECT(scia_->sci->sci)), + scia(scia_), + bytePosition(bytePos_) { +@@ -757,7 +757,7 @@ + len = convertedText.length(); + text = convertedText.c_str(); + } +- scia->InsertStringUTF8(bytePosition, text, static_cast<int>(len)); ++ scia->InsertStringUTF8(bytePosition, text, static_cast<Sci::Position>(len)); + } + } + +@@ -795,7 +795,7 @@ + // Callbacks + + void ScintillaGTKAccessible::UpdateCursor() { +- Position pos = sci->WndProc(SCI_GETCURRENTPOS, 0, 0); ++ Sci::Position pos = sci->WndProc(SCI_GETCURRENTPOS, 0, 0); + if (old_pos != pos) { + int charPosition = CharacterOffsetFromByteOffset(pos); + g_signal_emit_by_name(accessible, "text-caret-moved", charPosition); +@@ -875,7 +875,7 @@ + case SCN_MODIFIED: { + if (nt->modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) { + // invalidate character offset cache if applicable +- const Position line = sci->pdoc->LineFromPosition(nt->position); ++ const Sci::Line line = sci->pdoc->LineFromPosition(nt->position); + if (character_offsets.size() > static_cast<size_t>(line + 1)) { + character_offsets.resize(line + 1); + } +diff -r 1788f6795302 -r a0f26eaf474d gtk/ScintillaGTKAccessible.h +--- a/gtk/ScintillaGTKAccessible.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/gtk/ScintillaGTKAccessible.h Fri Mar 31 18:19:38 2017 +1100 +@@ -21,12 +21,12 @@ + ScintillaGTK *sci; + + // cache holding character offset for each line start, see CharacterOffsetFromByteOffset() +- std::vector<Position> character_offsets; ++ std::vector<Sci::Position> character_offsets; + + // cached length of the deletion, in characters (see Notify()) + int deletionLengthChar; + // local state for comparing +- Position old_pos; ++ Sci::Position old_pos; + std::vector<SelectionRange> old_sels; + + bool Enabled() const; +@@ -38,8 +38,8 @@ + } catch (...) {} + } + +- Position ByteOffsetFromCharacterOffset(Position startByte, int characterOffset) { +- Position pos = sci->pdoc->GetRelativePosition(startByte, characterOffset); ++ Sci::Position ByteOffsetFromCharacterOffset(Sci::Position startByte, int characterOffset) { ++ Sci::Position pos = sci->pdoc->GetRelativePosition(startByte, characterOffset); + if (pos == INVALID_POSITION) { + // clamp invalid positions inside the document + if (characterOffset > 0) { +@@ -51,51 +51,51 @@ + return pos; + } + +- Position ByteOffsetFromCharacterOffset(int characterOffset) { ++ Sci::Position ByteOffsetFromCharacterOffset(Sci::Position characterOffset) { + return ByteOffsetFromCharacterOffset(0, characterOffset); + } + +- int CharacterOffsetFromByteOffset(Position byteOffset) { +- const Position line = sci->pdoc->LineFromPosition(byteOffset); ++ Sci::Position CharacterOffsetFromByteOffset(Sci::Position byteOffset) { ++ const Sci::Line line = sci->pdoc->LineFromPosition(byteOffset); + if (character_offsets.size() <= static_cast<size_t>(line)) { + if (character_offsets.empty()) + character_offsets.push_back(0); +- for (Position i = character_offsets.size(); i <= line; i++) { +- const Position start = sci->pdoc->LineStart(i - 1); +- const Position end = sci->pdoc->LineStart(i); ++ for (Sci::Position i = character_offsets.size(); i <= line; i++) { ++ const Sci::Position start = sci->pdoc->LineStart(i - 1); ++ const Sci::Position end = sci->pdoc->LineStart(i); + character_offsets.push_back(character_offsets[i - 1] + sci->pdoc->CountCharacters(start, end)); + } + } +- const Position lineStart = sci->pdoc->LineStart(line); ++ const Sci::Position lineStart = sci->pdoc->LineStart(line); + return character_offsets[line] + sci->pdoc->CountCharacters(lineStart, byteOffset); + } + +- void CharacterRangeFromByteRange(Position startByte, Position endByte, int *startChar, int *endChar) { ++ void CharacterRangeFromByteRange(Sci::Position startByte, Sci::Position endByte, int *startChar, int *endChar) { + *startChar = CharacterOffsetFromByteOffset(startByte); + *endChar = *startChar + sci->pdoc->CountCharacters(startByte, endByte); + } + +- void ByteRangeFromCharacterRange(int startChar, int endChar, Position& startByte, Position& endByte) { ++ void ByteRangeFromCharacterRange(int startChar, int endChar, Sci::Position& startByte, Sci::Position& endByte) { + startByte = ByteOffsetFromCharacterOffset(startChar); + endByte = ByteOffsetFromCharacterOffset(startByte, endChar - startChar); + } + +- Position PositionBefore(Position pos) { ++ Sci::Position PositionBefore(Sci::Position pos) { + return sci->pdoc->MovePositionOutsideChar(pos - 1, -1, true); + } + +- Position PositionAfter(Position pos) { ++ Sci::Position PositionAfter(Sci::Position pos) { + return sci->pdoc->MovePositionOutsideChar(pos + 1, 1, true); + } + +- int StyleAt(Position position, bool ensureStyle = false) { ++ int StyleAt(Sci::Position position, bool ensureStyle = false) { + if (ensureStyle) + sci->pdoc->EnsureStyledTo(position); + return sci->pdoc->StyleAt(position); + } + + // For AtkText +- gchar *GetTextRangeUTF8(Position startByte, Position endByte); ++ gchar *GetTextRangeUTF8(Sci::Position startByte, Sci::Position endByte); + gchar *GetText(int startChar, int endChar); + gchar *GetTextAfterOffset(int charOffset, AtkTextBoundary boundaryType, int *startChar, int *endChar); + gchar *GetTextBeforeOffset(int charOffset, AtkTextBoundary boundaryType, int *startChar, int *endChar); +@@ -118,7 +118,7 @@ + gboolean RemoveSelection(int selection_num); + gboolean SetSelection(gint selection_num, int startChar, int endChar); + // for AtkEditableText +- bool InsertStringUTF8(Position bytePos, const gchar *utf8, int lengthBytes); ++ bool InsertStringUTF8(Sci::Position bytePos, const gchar *utf8, Sci::Position lengthBytes); + void SetTextContents(const gchar *contents); + void InsertText(const gchar *contents, int lengthBytes, int *charPosition); + void CopyText(int startChar, int endChar); +diff -r 1788f6795302 -r a0f26eaf474d qt/ScintillaEdit/ScintillaDocument.cpp +--- a/qt/ScintillaEdit/ScintillaDocument.cpp Thu Mar 30 09:11:48 2017 +1100 ++++ b/qt/ScintillaEdit/ScintillaDocument.cpp Fri Mar 31 18:19:38 2017 +1100 +@@ -45,7 +45,7 @@ + void NotifySavePoint(Document *doc, void *userData, bool atSavePoint); + void NotifyModified(Document *doc, DocModification mh, void *userData); + void NotifyDeleted(Document *doc, void *userData); +- void NotifyStyleNeeded(Document *doc, void *userData, int endPos); ++ void NotifyStyleNeeded(Document *doc, void *userData, Sci::Position endPos); + void NotifyLexerChanged(Document *doc, void *userData); + void NotifyErrorOccurred(Document *doc, void *userData, int status); + }; +@@ -76,7 +76,7 @@ + void WatcherHelper::NotifyDeleted(Document *, void *) { + } + +-void WatcherHelper::NotifyStyleNeeded(Document *, void *, int endPos) { ++void WatcherHelper::NotifyStyleNeeded(Document *, void *, Sci::Position endPos) { + owner->emit_style_needed(endPos); + } + +diff -r 1788f6795302 -r a0f26eaf474d qt/ScintillaEditBase/ScintillaQt.cpp +--- a/qt/ScintillaEditBase/ScintillaQt.cpp Thu Mar 30 09:11:48 2017 +1100 ++++ b/qt/ScintillaEditBase/ScintillaQt.cpp Fri Mar 31 18:19:38 2017 +1100 +@@ -239,7 +239,7 @@ + } + + +-void ScintillaQt::ScrollText(int linesToMove) ++void ScintillaQt::ScrollText(Sci::Line linesToMove) + { + int dy = vs.lineHeight * (linesToMove); + scrollArea->viewport()->scroll(0, dy); +@@ -257,7 +257,7 @@ + emit horizontalScrolled(xOffset); + } + +-bool ScintillaQt::ModifyScrollBars(int nMax, int nPage) ++bool ScintillaQt::ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) + { + bool modified = false; + +@@ -613,7 +613,7 @@ + } + } + inDragDrop = ddNone; +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + } + + void ScintillaQt::CreateCallTipWindow(PRectangle rc) +@@ -740,7 +740,7 @@ + + void ScintillaQt::DragLeave() + { +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + } + + void ScintillaQt::Drop(const Point &point, const QMimeData *data, bool move) +diff -r 1788f6795302 -r a0f26eaf474d qt/ScintillaEditBase/ScintillaQt.h +--- a/qt/ScintillaEditBase/ScintillaQt.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/qt/ScintillaEditBase/ScintillaQt.h Fri Mar 31 18:19:38 2017 +1100 +@@ -107,7 +107,7 @@ + virtual void ScrollText(int linesToMove); + virtual void SetVerticalScrollPos(); + virtual void SetHorizontalScrollPos(); +- virtual bool ModifyScrollBars(int nMax, int nPage); ++ virtual bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage); + virtual void ReconfigureScrollBars(); + void CopyToModeClipboard(const SelectionText &selectedText, QClipboard::Mode clipboardMode_); + virtual void Copy(); +diff -r 1788f6795302 -r a0f26eaf474d src/AutoComplete.cxx +--- a/src/AutoComplete.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/AutoComplete.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -58,7 +58,7 @@ + } + + void AutoComplete::Start(Window &parent, int ctrlID, +- int position, Point location, int startLen_, ++ Sci::Position position, Point location, int startLen_, + int lineHeight, bool unicodeMode, int technology) { + if (active) { + Cancel(); +diff -r 1788f6795302 -r a0f26eaf474d src/AutoComplete.h +--- a/src/AutoComplete.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/AutoComplete.h Fri Mar 31 18:19:38 2017 +1100 +@@ -28,7 +28,7 @@ + bool ignoreCase; + bool chooseSingle; + ListBox *lb; +- int posStart; ++ Sci::Position posStart; + int startLen; + /// Should autocompletion be canceled if editor's currentPos <= startPos? + bool cancelAtStartPos; +@@ -50,7 +50,7 @@ + bool Active() const; + + /// Display the auto completion list positioned to be near a character position +- void Start(Window &parent, int ctrlID, int position, Point location, ++ void Start(Window &parent, int ctrlID, Sci::Position position, Point location, + int startLen_, int lineHeight, bool unicodeMode, int technology); + + /// The stop chars are characters which, when typed, cause the auto completion list to disappear +diff -r 1788f6795302 -r a0f26eaf474d src/CallTip.cxx +--- a/src/CallTip.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/CallTip.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -250,7 +250,7 @@ + clickPlace = 2; + } + +-PRectangle CallTip::CallTipStart(int pos, Point pt, int textHeight, const char *defn, ++PRectangle CallTip::CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn, + const char *faceName, int size, + int codePage_, int characterSet, + int technology, Window &wParent) { +diff -r 1788f6795302 -r a0f26eaf474d src/CallTip.h +--- a/src/CallTip.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/CallTip.h Fri Mar 31 18:19:38 2017 +1100 +@@ -41,7 +41,7 @@ + Window wCallTip; + Window wDraw; + bool inCallTipMode; +- int posStartCallTip; ++ Sci::Position posStartCallTip; + ColourDesired colourBG; + ColourDesired colourUnSel; + ColourDesired colourSel; +@@ -63,7 +63,7 @@ + void MouseClick(Point pt); + + /// Setup the calltip and return a rectangle of the area required. +- PRectangle CallTipStart(int pos, Point pt, int textHeight, const char *defn, ++ PRectangle CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn, + const char *faceName, int size, int codePage_, + int characterSet, int technology, Window &wParent); + +diff -r 1788f6795302 -r a0f26eaf474d src/CellBuffer.cxx +--- a/src/CellBuffer.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/CellBuffer.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -45,11 +45,11 @@ + perLine = pl; + } + +-void LineVector::InsertText(int line, int delta) { ++void LineVector::InsertText(Sci::Line line, Sci::Position delta) { + starts.InsertText(line, delta); + } + +-void LineVector::InsertLine(int line, int position, bool lineStart) { ++void LineVector::InsertLine(Sci::Line line, Sci::Position position, bool lineStart) { + starts.InsertPartition(line, position); + if (perLine) { + if ((line > 0) && lineStart) +@@ -58,18 +58,18 @@ + } + } + +-void LineVector::SetLineStart(int line, int position) { ++void LineVector::SetLineStart(Sci::Line line, Sci::Position position) { + starts.SetPartitionStartPosition(line, position); + } + +-void LineVector::RemoveLine(int line) { ++void LineVector::RemoveLine(Sci::Line line) { + starts.RemovePartition(line); + if (perLine) { + perLine->RemoveLine(line); + } + } + +-int LineVector::LineFromPosition(int pos) const { ++Sci::Line LineVector::LineFromPosition(Sci::Position pos) const { + return starts.PartitionFromPosition(pos); + } + +@@ -85,7 +85,7 @@ + Destroy(); + } + +-void Action::Create(actionType at_, int position_, const char *data_, int lenData_, bool mayCoalesce_) { ++void Action::Create(actionType at_, Sci::Position position_, const char *data_, Sci::Position lenData_, bool mayCoalesce_) { + delete []data; + data = NULL; + position = position_; +@@ -171,7 +171,7 @@ + } + } + +-const char *UndoHistory::AppendAction(actionType at, int position, const char *data, int lengthData, ++const char *UndoHistory::AppendAction(actionType at, Sci::Position position, const char *data, Sci::Position lengthData, + bool &startSequence, bool mayCoalesce) { + EnsureUndoRoom(); + //Platform::DebugPrintf("%% %d action %d %d %d\n", at, position, lengthData, currentAction); +@@ -375,11 +375,11 @@ + CellBuffer::~CellBuffer() { + } + +-char CellBuffer::CharAt(int position) const { ++char CellBuffer::CharAt(Sci::Position position) const { + return substance.ValueAt(position); + } + +-void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) const { ++void CellBuffer::GetCharRange(char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const { + if (lengthRetrieve <= 0) + return; + if (position < 0) +@@ -392,11 +392,11 @@ + substance.GetRange(buffer, position, lengthRetrieve); + } + +-char CellBuffer::StyleAt(int position) const { ++char CellBuffer::StyleAt(Sci::Position position) const { + return style.ValueAt(position); + } + +-void CellBuffer::GetStyleRange(unsigned char *buffer, int position, int lengthRetrieve) const { ++void CellBuffer::GetStyleRange(unsigned char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const { + if (lengthRetrieve < 0) + return; + if (position < 0) +@@ -413,16 +413,16 @@ + return substance.BufferPointer(); + } + +-const char *CellBuffer::RangePointer(int position, int rangeLength) { ++const char *CellBuffer::RangePointer(Sci::Position position, Sci::Position rangeLength) { + return substance.RangePointer(position, rangeLength); + } + +-int CellBuffer::GapPosition() const { ++Sci::Position CellBuffer::GapPosition() const { + return substance.GapPosition(); + } + + // The char* returned is to an allocation owned by the undo history +-const char *CellBuffer::InsertString(int position, const char *s, int insertLength, bool &startSequence) { ++const char *CellBuffer::InsertString(Sci::Position position, const char *s, Sci::Position insertLength, bool &startSequence) { + // InsertString and DeleteChars are the bottleneck though which all changes occur + const char *data = s; + if (!readOnly) { +@@ -437,7 +437,7 @@ + return data; + } + +-bool CellBuffer::SetStyleAt(int position, char styleValue) { ++bool CellBuffer::SetStyleAt(Sci::Position position, char styleValue) { + char curVal = style.ValueAt(position); + if (curVal != styleValue) { + style.SetValueAt(position, styleValue); +@@ -447,7 +447,7 @@ + } + } + +-bool CellBuffer::SetStyleFor(int position, int lengthStyle, char styleValue) { ++bool CellBuffer::SetStyleFor(Sci::Position position, Sci::Position lengthStyle, char styleValue) { + bool changed = false; + PLATFORM_ASSERT(lengthStyle == 0 || + (lengthStyle > 0 && lengthStyle + position <= style.Length())); +@@ -463,7 +463,7 @@ + } + + // The char* returned is to an allocation owned by the undo history +-const char *CellBuffer::DeleteChars(int position, int deleteLength, bool &startSequence) { ++const char *CellBuffer::DeleteChars(Sci::Position position, Sci::Position deleteLength, bool &startSequence) { + // InsertString and DeleteChars are the bottleneck though which all changes occur + PLATFORM_ASSERT(deleteLength > 0); + const char *data = 0; +@@ -480,11 +480,11 @@ + return data; + } + +-int CellBuffer::Length() const { ++Sci::Position CellBuffer::Length() const { + return substance.Length(); + } + +-void CellBuffer::Allocate(int newSize) { ++void CellBuffer::Allocate(Sci::Position newSize) { + substance.ReAllocate(newSize); + style.ReAllocate(newSize); + } +@@ -496,10 +496,10 @@ + } + } + +-bool CellBuffer::ContainsLineEnd(const char *s, int length) const { ++bool CellBuffer::ContainsLineEnd(const char *s, Sci::Position length) const { + unsigned char chBeforePrev = 0; + unsigned char chPrev = 0; +- for (int i = 0; i < length; i++) { ++ for (Sci::Position i = 0; i < length; i++) { + const unsigned char ch = s[i]; + if ((ch == '\r') || (ch == '\n')) { + return true; +@@ -519,11 +519,11 @@ + lv.SetPerLine(pl); + } + +-int CellBuffer::Lines() const { ++Sci::Line CellBuffer::Lines() const { + return lv.Lines(); + } + +-int CellBuffer::LineStart(int line) const { ++Sci::Position CellBuffer::LineStart(Sci::Line line) const { + if (line < 0) + return 0; + else if (line >= Lines()) +@@ -566,15 +566,15 @@ + + // Without undo + +-void CellBuffer::InsertLine(int line, int position, bool lineStart) { ++void CellBuffer::InsertLine(Sci::Line line, Sci::Position position, bool lineStart) { + lv.InsertLine(line, position, lineStart); + } + +-void CellBuffer::RemoveLine(int line) { ++void CellBuffer::RemoveLine(Sci::Line line) { + lv.RemoveLine(line); + } + +-bool CellBuffer::UTF8LineEndOverlaps(int position) const { ++bool CellBuffer::UTF8LineEndOverlaps(Sci::Position position) const { + unsigned char bytes[] = { + static_cast<unsigned char>(substance.ValueAt(position-2)), + static_cast<unsigned char>(substance.ValueAt(position-1)), +@@ -588,14 +588,14 @@ + // Reinitialize line data -- too much work to preserve + lv.Init(); + +- int position = 0; +- int length = Length(); +- int lineInsert = 1; ++ Sci::Position position = 0; ++ Sci::Position length = Length(); ++ Sci::Line lineInsert = 1; + bool atLineStart = true; + lv.InsertText(lineInsert-1, length); + unsigned char chBeforePrev = 0; + unsigned char chPrev = 0; +- for (int i = 0; i < length; i++) { ++ for (Sci::Position i = 0; i < length; i++) { + unsigned char ch = substance.ValueAt(position + i); + if (ch == '\r') { + InsertLine(lineInsert, (position + i) + 1, atLineStart); +@@ -620,7 +620,7 @@ + } + } + +-void CellBuffer::BasicInsertString(int position, const char *s, int insertLength) { ++void CellBuffer::BasicInsertString(Sci::Position position, const char *s, Sci::Position insertLength) { + if (insertLength == 0) + return; + PLATFORM_ASSERT(insertLength > 0); +@@ -634,7 +634,7 @@ + substance.InsertFromArray(position, s, 0, insertLength); + style.InsertValue(position, insertLength, 0); + +- int lineInsert = lv.LineFromPosition(position) + 1; ++ Sci::Line lineInsert = lv.LineFromPosition(position) + 1; + bool atLineStart = lv.LineStart(lineInsert-1) == position; + // Point all the lines after the insertion point further along in the buffer + lv.InsertText(lineInsert-1, insertLength); +@@ -649,7 +649,7 @@ + RemoveLine(lineInsert); + } + unsigned char ch = ' '; +- for (int i = 0; i < insertLength; i++) { ++ for (Sci::Position i = 0; i < insertLength; i++) { + ch = s[i]; + if (ch == '\r') { + InsertLine(lineInsert, (position + i) + 1, atLineStart); +@@ -697,7 +697,7 @@ + } + } + +-void CellBuffer::BasicDeleteChars(int position, int deleteLength) { ++void CellBuffer::BasicDeleteChars(Sci::Position position, Sci::Position deleteLength) { + if (deleteLength == 0) + return; + +@@ -709,7 +709,7 @@ + // Have to fix up line positions before doing deletion as looking at text in buffer + // to work out which lines have been removed + +- int lineRemove = lv.LineFromPosition(position) + 1; ++ Sci::Line lineRemove = lv.LineFromPosition(position) + 1; + lv.InsertText(lineRemove-1, - (deleteLength)); + unsigned char chPrev = substance.ValueAt(position - 1); + unsigned char chBefore = chPrev; +@@ -728,7 +728,7 @@ + } + + unsigned char ch = chNext; +- for (int i = 0; i < deleteLength; i++) { ++ for (Sci::Position i = 0; i < deleteLength; i++) { + chNext = substance.ValueAt(position + i + 1); + if (ch == '\r') { + if (chNext != '\n') { +@@ -783,7 +783,7 @@ + uh.EndUndoAction(); + } + +-void CellBuffer::AddUndoAction(int token, bool mayCoalesce) { ++void CellBuffer::AddUndoAction(Sci::Position token, bool mayCoalesce) { + bool startSequence; + uh.AppendAction(containerAction, token, 0, 0, startSequence, mayCoalesce); + } +diff -r 1788f6795302 -r a0f26eaf474d src/CellBuffer.h +--- a/src/CellBuffer.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/CellBuffer.h Fri Mar 31 18:19:38 2017 +1100 +@@ -17,8 +17,8 @@ + public: + virtual ~PerLine() {} + virtual void Init()=0; +- virtual void InsertLine(int line)=0; +- virtual void RemoveLine(int line)=0; ++ virtual void InsertLine(Sci::Line line)=0; ++ virtual void RemoveLine(Sci::Line line)=0; + }; + + /** +@@ -36,15 +36,15 @@ + void Init(); + void SetPerLine(PerLine *pl); + +- void InsertText(int line, int delta); +- void InsertLine(int line, int position, bool lineStart); +- void SetLineStart(int line, int position); +- void RemoveLine(int line); +- int Lines() const { ++ void InsertText(Sci::Line line, Sci::Position delta); ++ void InsertLine(Sci::Line line, Sci::Position position, bool lineStart); ++ void SetLineStart(Sci::Line line, Sci::Position position); ++ void RemoveLine(Sci::Line line); ++ Sci::Line Lines() const { + return starts.Partitions(); + } +- int LineFromPosition(int pos) const; +- int LineStart(int line) const { ++ Sci::Line LineFromPosition(Sci::Position pos) const; ++ Sci::Position LineStart(Sci::Line line) const { + return starts.PositionFromPartition(line); + } + }; +@@ -57,14 +57,14 @@ + class Action { + public: + actionType at; +- int position; ++ Sci::Position position; + char *data; +- int lenData; ++ Sci::Position lenData; + bool mayCoalesce; + + Action(); + ~Action(); +- void Create(actionType at_, int position_=0, const char *data_=0, int lenData_=0, bool mayCoalesce_=true); ++ void Create(actionType at_, Sci::Position position_=0, const char *data_=0, Sci::Position lenData_=0, bool mayCoalesce_=true); + void Destroy(); + void Grab(Action *source); + }; +@@ -90,7 +90,7 @@ + UndoHistory(); + ~UndoHistory(); + +- const char *AppendAction(actionType at, int position, const char *data, int length, bool &startSequence, bool mayCoalesce=true); ++ const char *AppendAction(actionType at, Sci::Position position, const char *data, Sci::Position length, bool &startSequence, bool mayCoalesce=true); + + void BeginUndoAction(); + void EndUndoAction(); +@@ -137,11 +137,11 @@ + + LineVector lv; + +- bool UTF8LineEndOverlaps(int position) const; ++ bool UTF8LineEndOverlaps(Sci::Position position) const; + void ResetLineEnds(); + /// Actions without undo +- void BasicInsertString(int position, const char *s, int insertLength); +- void BasicDeleteChars(int position, int deleteLength); ++ void BasicInsertString(Sci::Position position, const char *s, Sci::Position insertLength); ++ void BasicDeleteChars(Sci::Position position, Sci::Position deleteLength); + + public: + +@@ -149,33 +149,33 @@ + ~CellBuffer(); + + /// Retrieving positions outside the range of the buffer works and returns 0 +- char CharAt(int position) const; +- void GetCharRange(char *buffer, int position, int lengthRetrieve) const; +- char StyleAt(int position) const; +- void GetStyleRange(unsigned char *buffer, int position, int lengthRetrieve) const; ++ char CharAt(Sci::Position position) const; ++ void GetCharRange(char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const; ++ char StyleAt(Sci::Position position) const; ++ void GetStyleRange(unsigned char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const; + const char *BufferPointer(); +- const char *RangePointer(int position, int rangeLength); +- int GapPosition() const; ++ const char *RangePointer(Sci::Position position, Sci::Position rangeLength); ++ Sci::Position GapPosition() const; + +- int Length() const; +- void Allocate(int newSize); ++ Sci::Position Length() const; ++ void Allocate(Sci::Position newSize); + int GetLineEndTypes() const { return utf8LineEnds; } + void SetLineEndTypes(int utf8LineEnds_); +- bool ContainsLineEnd(const char *s, int length) const; ++ bool ContainsLineEnd(const char *s, Sci::Position length) const; + void SetPerLine(PerLine *pl); +- int Lines() const; +- int LineStart(int line) const; +- int LineFromPosition(int pos) const { return lv.LineFromPosition(pos); } +- void InsertLine(int line, int position, bool lineStart); +- void RemoveLine(int line); +- const char *InsertString(int position, const char *s, int insertLength, bool &startSequence); ++ Sci::Line Lines() const; ++ Sci::Position LineStart(Sci::Line line) const; ++ Sci::Line LineFromPosition(Sci::Position pos) const { return lv.LineFromPosition(pos); } ++ void InsertLine(Sci::Line line, Sci::Position position, bool lineStart); ++ void RemoveLine(Sci::Line line); ++ const char *InsertString(Sci::Position position, const char *s, Sci::Position insertLength, bool &startSequence); + + /// Setting styles for positions outside the range of the buffer is safe and has no effect. + /// @return true if the style of a character is changed. +- bool SetStyleAt(int position, char styleValue); +- bool SetStyleFor(int position, int length, char styleValue); ++ bool SetStyleAt(Sci::Position position, char styleValue); ++ bool SetStyleFor(Sci::Position position, Sci::Position length, char styleValue); + +- const char *DeleteChars(int position, int deleteLength, bool &startSequence); ++ const char *DeleteChars(Sci::Position position, Sci::Position deleteLength, bool &startSequence); + + bool IsReadOnly() const; + void SetReadOnly(bool set); +@@ -194,7 +194,7 @@ + bool IsCollectingUndo() const; + void BeginUndoAction(); + void EndUndoAction(); +- void AddUndoAction(int token, bool mayCoalesce); ++ void AddUndoAction(Sci::Position token, bool mayCoalesce); + void DeleteUndoHistory(); + + /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is +diff -r 1788f6795302 -r a0f26eaf474d src/ContractionState.cxx +--- a/src/ContractionState.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/ContractionState.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -57,7 +57,7 @@ + linesInDocument = 1; + } + +-int ContractionState::LinesInDoc() const { ++Sci::Line ContractionState::LinesInDoc() const { + if (OneToOne()) { + return linesInDocument; + } else { +@@ -65,7 +65,7 @@ + } + } + +-int ContractionState::LinesDisplayed() const { ++Sci::Line ContractionState::LinesDisplayed() const { + if (OneToOne()) { + return linesInDocument; + } else { +@@ -73,7 +73,7 @@ + } + } + +-int ContractionState::DisplayFromDoc(int lineDoc) const { ++Sci::Line ContractionState::DisplayFromDoc(Sci::Line lineDoc) const { + if (OneToOne()) { + return (lineDoc <= linesInDocument) ? lineDoc : linesInDocument; + } else { +@@ -83,11 +83,11 @@ + } + } + +-int ContractionState::DisplayLastFromDoc(int lineDoc) const { ++Sci::Line ContractionState::DisplayLastFromDoc(Sci::Line lineDoc) const { + return DisplayFromDoc(lineDoc) + GetHeight(lineDoc) - 1; + } + +-int ContractionState::DocFromDisplay(int lineDisplay) const { ++Sci::Line ContractionState::DocFromDisplay(Sci::Line lineDisplay) const { + if (OneToOne()) { + return lineDisplay; + } else { +@@ -97,13 +97,13 @@ + if (lineDisplay > LinesDisplayed()) { + return displayLines->PartitionFromPosition(LinesDisplayed()); + } +- int lineDoc = displayLines->PartitionFromPosition(lineDisplay); ++ Sci::Line lineDoc = displayLines->PartitionFromPosition(lineDisplay); + PLATFORM_ASSERT(GetVisible(lineDoc)); + return lineDoc; + } + } + +-void ContractionState::InsertLine(int lineDoc) { ++void ContractionState::InsertLine(Sci::Line lineDoc) { + if (OneToOne()) { + linesInDocument++; + } else { +@@ -115,20 +115,20 @@ + heights->SetValueAt(lineDoc, 1); + foldDisplayTexts->InsertSpace(lineDoc, 1); + foldDisplayTexts->SetValueAt(lineDoc, NULL); +- int lineDisplay = DisplayFromDoc(lineDoc); ++ Sci::Line lineDisplay = DisplayFromDoc(lineDoc); + displayLines->InsertPartition(lineDoc, lineDisplay); + displayLines->InsertText(lineDoc, 1); + } + } + +-void ContractionState::InsertLines(int lineDoc, int lineCount) { ++void ContractionState::InsertLines(Sci::Line lineDoc, Sci::Line lineCount) { + for (int l = 0; l < lineCount; l++) { + InsertLine(lineDoc + l); + } + Check(); + } + +-void ContractionState::DeleteLine(int lineDoc) { ++void ContractionState::DeleteLine(Sci::Line lineDoc) { + if (OneToOne()) { + linesInDocument--; + } else { +@@ -143,14 +143,14 @@ + } + } + +-void ContractionState::DeleteLines(int lineDoc, int lineCount) { +- for (int l = 0; l < lineCount; l++) { ++void ContractionState::DeleteLines(Sci::Line lineDoc, Sci::Line lineCount) { ++ for (Sci::Line l = 0; l < lineCount; l++) { + DeleteLine(lineDoc); + } + Check(); + } + +-bool ContractionState::GetVisible(int lineDoc) const { ++bool ContractionState::GetVisible(Sci::Line lineDoc) const { + if (OneToOne()) { + return true; + } else { +@@ -160,15 +160,15 @@ + } + } + +-bool ContractionState::SetVisible(int lineDocStart, int lineDocEnd, bool isVisible) { ++bool ContractionState::SetVisible(Sci::Line lineDocStart, Sci::Line lineDocEnd, bool isVisible) { + if (OneToOne() && isVisible) { + return false; + } else { + EnsureData(); +- int delta = 0; ++ Sci::Line delta = 0; + Check(); + if ((lineDocStart <= lineDocEnd) && (lineDocStart >= 0) && (lineDocEnd < LinesInDoc())) { +- for (int line = lineDocStart; line <= lineDocEnd; line++) { ++ for (Sci::Line line = lineDocStart; line <= lineDocEnd; line++) { + if (GetVisible(line) != isVisible) { + int difference = isVisible ? heights->ValueAt(line) : -heights->ValueAt(line); + visible->SetValueAt(line, isVisible ? 1 : 0); +@@ -192,12 +192,12 @@ + } + } + +-const char *ContractionState::GetFoldDisplayText(int lineDoc) const { ++const char *ContractionState::GetFoldDisplayText(Sci::Line lineDoc) const { + Check(); + return foldDisplayTexts->ValueAt(lineDoc); + } + +-bool ContractionState::SetFoldDisplayText(int lineDoc, const char *text) { ++bool ContractionState::SetFoldDisplayText(Sci::Line lineDoc, const char *text) { + EnsureData(); + const char *foldText = foldDisplayTexts->ValueAt(lineDoc); + if (!foldText || 0 != strcmp(text, foldText)) { +@@ -210,7 +210,7 @@ + } + } + +-bool ContractionState::GetExpanded(int lineDoc) const { ++bool ContractionState::GetExpanded(Sci::Line lineDoc) const { + if (OneToOne()) { + return true; + } else { +@@ -219,7 +219,7 @@ + } + } + +-bool ContractionState::SetExpanded(int lineDoc, bool isExpanded) { ++bool ContractionState::SetExpanded(Sci::Line lineDoc, bool isExpanded) { + if (OneToOne() && isExpanded) { + return false; + } else { +@@ -235,11 +235,11 @@ + } + } + +-bool ContractionState::GetFoldDisplayTextShown(int lineDoc) const { ++bool ContractionState::GetFoldDisplayTextShown(Sci::Line lineDoc) const { + return !GetExpanded(lineDoc) && GetFoldDisplayText(lineDoc); + } + +-int ContractionState::ContractedNext(int lineDocStart) const { ++Sci::Line ContractionState::ContractedNext(Sci::Line lineDocStart) const { + if (OneToOne()) { + return -1; + } else { +@@ -247,7 +247,7 @@ + if (!expanded->ValueAt(lineDocStart)) { + return lineDocStart; + } else { +- int lineDocNextChange = expanded->EndRun(lineDocStart); ++ Sci::Line lineDocNextChange = expanded->EndRun(lineDocStart); + if (lineDocNextChange < LinesInDoc()) + return lineDocNextChange; + else +@@ -256,7 +256,7 @@ + } + } + +-int ContractionState::GetHeight(int lineDoc) const { ++int ContractionState::GetHeight(Sci::Line lineDoc) const { + if (OneToOne()) { + return 1; + } else { +@@ -266,7 +266,7 @@ + + // Set the number of display lines needed for this line. + // Return true if this is a change. +-bool ContractionState::SetHeight(int lineDoc, int height) { ++bool ContractionState::SetHeight(Sci::Line lineDoc, int height) { + if (OneToOne() && (height == 1)) { + return false; + } else if (lineDoc < LinesInDoc()) { +@@ -288,7 +288,7 @@ + } + + void ContractionState::ShowAll() { +- int lines = LinesInDoc(); ++ Sci::Line lines = LinesInDoc(); + Clear(); + linesInDocument = lines; + } +@@ -297,14 +297,14 @@ + + void ContractionState::Check() const { + #ifdef CHECK_CORRECTNESS +- for (int vline = 0; vline < LinesDisplayed(); vline++) { +- const int lineDoc = DocFromDisplay(vline); ++ for (Sci::Line vline = 0; vline < LinesDisplayed(); vline++) { ++ const Sci::Line lineDoc = DocFromDisplay(vline); + PLATFORM_ASSERT(GetVisible(lineDoc)); + } +- for (int lineDoc = 0; lineDoc < LinesInDoc(); lineDoc++) { +- const int displayThis = DisplayFromDoc(lineDoc); +- const int displayNext = DisplayFromDoc(lineDoc + 1); +- const int height = displayNext - displayThis; ++ for (Sci::Line lineDoc = 0; lineDoc < LinesInDoc(); lineDoc++) { ++ const Sci::Line displayThis = DisplayFromDoc(lineDoc); ++ const Sci::Line displayNext = DisplayFromDoc(lineDoc + 1); ++ const Sci::Line height = displayNext - displayThis; + PLATFORM_ASSERT(height >= 0); + if (GetVisible(lineDoc)) { + PLATFORM_ASSERT(GetHeight(lineDoc) == height); +diff -r 1788f6795302 -r a0f26eaf474d src/ContractionState.h +--- a/src/ContractionState.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/ContractionState.h Fri Mar 31 18:19:38 2017 +1100 +@@ -24,7 +24,7 @@ + RunStyles *heights; + SparseVector<const char *> *foldDisplayTexts; + Partitioning *displayLines; +- int linesInDocument; ++ Sci::Line linesInDocument; + + void EnsureData(); + +@@ -40,31 +40,31 @@ + + void Clear(); + +- int LinesInDoc() const; +- int LinesDisplayed() const; +- int DisplayFromDoc(int lineDoc) const; +- int DisplayLastFromDoc(int lineDoc) const; +- int DocFromDisplay(int lineDisplay) const; ++ Sci::Line LinesInDoc() const; ++ Sci::Line LinesDisplayed() const; ++ Sci::Line DisplayFromDoc(Sci::Line lineDoc) const; ++ Sci::Line DisplayLastFromDoc(Sci::Line lineDoc) const; ++ Sci::Line DocFromDisplay(Sci::Line lineDisplay) const; + +- void InsertLine(int lineDoc); +- void InsertLines(int lineDoc, int lineCount); +- void DeleteLine(int lineDoc); +- void DeleteLines(int lineDoc, int lineCount); ++ void InsertLine(Sci::Line lineDoc); ++ void InsertLines(Sci::Line lineDoc, Sci::Line lineCount); ++ void DeleteLine(Sci::Line lineDoc); ++ void DeleteLines(Sci::Line lineDoc, Sci::Line lineCount); + +- bool GetVisible(int lineDoc) const; +- bool SetVisible(int lineDocStart, int lineDocEnd, bool isVisible); ++ bool GetVisible(Sci::Line lineDoc) const; ++ bool SetVisible(Sci::Line lineDocStart, Sci::Line lineDocEnd, bool isVisible); + bool HiddenLines() const; + +- const char *GetFoldDisplayText(int lineDoc) const; +- bool SetFoldDisplayText(int lineDoc, const char *text); ++ const char *GetFoldDisplayText(Sci::Line lineDoc) const; ++ bool SetFoldDisplayText(Sci::Line lineDoc, const char *text); + +- bool GetExpanded(int lineDoc) const; +- bool SetExpanded(int lineDoc, bool isExpanded); +- bool GetFoldDisplayTextShown(int lineDoc) const; +- int ContractedNext(int lineDocStart) const; ++ bool GetExpanded(Sci::Line lineDoc) const; ++ bool SetExpanded(Sci::Line lineDoc, bool isExpanded); ++ bool GetFoldDisplayTextShown(Sci::Line lineDoc) const; ++ Sci::Line ContractedNext(Sci::Line lineDocStart) const; + +- int GetHeight(int lineDoc) const; +- bool SetHeight(int lineDoc, int height); ++ int GetHeight(Sci::Line lineDoc) const; ++ bool SetHeight(Sci::Line lineDoc, int height); + + void ShowAll(); + void Check() const; +diff -r 1788f6795302 -r a0f26eaf474d src/Document.cxx +--- a/src/Document.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Document.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -54,17 +54,17 @@ + using namespace Scintilla; + #endif + +-void LexInterface::Colourise(int start, int end) { ++void LexInterface::Colourise(Sci::Position start, Sci::Position end) { + if (pdoc && instance && !performingStyle) { + // Protect against reentrance, which may occur, for example, when + // fold points are discovered while performing styling and the folding + // code looks for child lines which may trigger styling. + performingStyle = true; + +- int lengthDoc = pdoc->Length(); ++ Sci::Position lengthDoc = pdoc->Length(); + if (end == -1) + end = lengthDoc; +- int len = end - start; ++ Sci::Position len = end - start; + + PLATFORM_ASSERT(len >= 0); + PLATFORM_ASSERT(start + len <= lengthDoc); +@@ -189,14 +189,14 @@ + } + } + +-void Document::InsertLine(int line) { ++void Document::InsertLine(Sci::Line line) { + for (int j=0; j<ldSize; j++) { + if (perLineData[j]) + perLineData[j]->InsertLine(line); + } + } + +-void Document::RemoveLine(int line) { ++void Document::RemoveLine(Sci::Line line) { + for (int j=0; j<ldSize; j++) { + if (perLineData[j]) + perLineData[j]->RemoveLine(line); +@@ -234,7 +234,7 @@ + int steps = cb.TentativeSteps(); + //Platform::DebugPrintf("Steps=%d\n", steps); + for (int step = 0; step < steps; step++) { +- const int prevLinesTotal = LinesTotal(); ++ const Sci::Line prevLinesTotal = LinesTotal(); + const Action &action = cb.GetUndoStep(); + if (action.at == removeAction) { + NotifyModified(DocModification( +@@ -261,7 +261,7 @@ + } + if (steps > 1) + modFlags |= SC_MULTISTEPUNDOREDO; +- const int linesAdded = LinesTotal() - prevLinesTotal; ++ const Sci::Line linesAdded = LinesTotal() - prevLinesTotal; + if (linesAdded != 0) + multiLine = true; + if (step == steps - 1) { +@@ -283,15 +283,15 @@ + } + } + +-int Document::GetMark(int line) { ++int Document::GetMark(Sci::Line line) { + return static_cast<LineMarkers *>(perLineData[ldMarkers])->MarkValue(line); + } + +-int Document::MarkerNext(int lineStart, int mask) const { ++Sci::Line Document::MarkerNext(Sci::Line lineStart, int mask) const { + return static_cast<LineMarkers *>(perLineData[ldMarkers])->MarkerNext(lineStart, mask); + } + +-int Document::AddMark(int line, int markerNum) { ++int Document::AddMark(Sci::Line line, int markerNum) { + if (line >= 0 && line <= LinesTotal()) { + int prev = static_cast<LineMarkers *>(perLineData[ldMarkers])-> + AddMark(line, markerNum, LinesTotal()); +@@ -303,7 +303,7 @@ + } + } + +-void Document::AddMarkSet(int line, int valueSet) { ++void Document::AddMarkSet(Sci::Line line, int valueSet) { + if (line < 0 || line > LinesTotal()) { + return; + } +@@ -316,7 +316,7 @@ + NotifyModified(mh); + } + +-void Document::DeleteMark(int line, int markerNum) { ++void Document::DeleteMark(Sci::Line line, int markerNum) { + static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMark(line, markerNum, false); + DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); + NotifyModified(mh); +@@ -331,7 +331,7 @@ + + void Document::DeleteAllMarks(int markerNum) { + bool someChanges = false; +- for (int line = 0; line < LinesTotal(); line++) { ++ for (Sci::Line line = 0; line < LinesTotal(); line++) { + if (static_cast<LineMarkers *>(perLineData[ldMarkers])->DeleteMark(line, markerNum, true)) + someChanges = true; + } +@@ -342,7 +342,7 @@ + } + } + +-int Document::LineFromHandle(int markerHandle) { ++Sci::Line Document::LineFromHandle(int markerHandle) { + return static_cast<LineMarkers *>(perLineData[ldMarkers])->LineFromHandle(markerHandle); + } + +@@ -350,7 +350,7 @@ + return cb.LineStart(line); + } + +-bool Document::IsLineStartPosition(int position) const { ++bool Document::IsLineStartPosition(Sci::Position position) const { + return LineStart(LineFromPosition(position)) == position; + } + +@@ -358,7 +358,7 @@ + if (line >= LinesTotal() - 1) { + return LineStart(line + 1); + } else { +- int position = LineStart(line + 1); ++ Sci::Position position = LineStart(line + 1); + if (SC_CP_UTF8 == dbcsCodePage) { + unsigned char bytes[] = { + static_cast<unsigned char>(cb.CharAt(position-3)), +@@ -392,23 +392,23 @@ + return cb.LineFromPosition(pos); + } + +-int Document::LineEndPosition(int position) const { ++Sci::Position Document::LineEndPosition(Sci::Position position) const { + return LineEnd(LineFromPosition(position)); + } + +-bool Document::IsLineEndPosition(int position) const { ++bool Document::IsLineEndPosition(Sci::Position position) const { + return LineEnd(LineFromPosition(position)) == position; + } + +-bool Document::IsPositionInLineEnd(int position) const { ++bool Document::IsPositionInLineEnd(Sci::Position position) const { + return position >= LineEnd(LineFromPosition(position)); + } + +-int Document::VCHomePosition(int position) const { +- int line = LineFromPosition(position); +- int startPosition = LineStart(line); +- int endLine = LineEnd(line); +- int startText = startPosition; ++Sci::Position Document::VCHomePosition(Sci::Position position) const { ++ Sci::Line line = LineFromPosition(position); ++ Sci::Position startPosition = LineStart(line); ++ Sci::Position endLine = LineEnd(line); ++ Sci::Position startText = startPosition; + while (startText < endLine && (cb.CharAt(startText) == ' ' || cb.CharAt(startText) == '\t')) + startText++; + if (position == startText) +@@ -444,12 +444,12 @@ + return LevelNumber(levelStart) < LevelNumber(levelTry); + } + +-int Document::GetLastChild(int lineParent, int level, int lastLine) { ++Sci::Line Document::GetLastChild(Sci::Line lineParent, int level, Sci::Line lastLine) { + if (level == -1) + level = LevelNumber(GetLevel(lineParent)); +- int maxLine = LinesTotal(); +- int lookLastLine = (lastLine != -1) ? Platform::Minimum(LinesTotal() - 1, lastLine) : -1; +- int lineMaxSubord = lineParent; ++ Sci::Line maxLine = LinesTotal(); ++ Sci::Line lookLastLine = (lastLine != -1) ? Platform::Minimum(LinesTotal() - 1, lastLine) : -1; ++ Sci::Line lineMaxSubord = lineParent; + while (lineMaxSubord < maxLine - 1) { + EnsureStyledTo(LineStart(lineMaxSubord + 2)); + if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1))) +@@ -469,9 +469,9 @@ + return lineMaxSubord; + } + +-int Document::GetFoldParent(int line) const { ++Sci::Line Document::GetFoldParent(Sci::Line line) const { + int level = LevelNumber(GetLevel(line)); +- int lineLook = line - 1; ++ Sci::Line lineLook = line - 1; + while ((lineLook > 0) && ( + (!(GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG)) || + (LevelNumber(GetLevel(lineLook)) >= level)) +@@ -486,11 +486,11 @@ + } + } + +-void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, int line, int lastLine) { ++void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sci::Line line, Sci::Line lastLine) { + int level = GetLevel(line); +- int lookLastLine = Platform::Maximum(line, lastLine) + 1; ++ Sci::Line lookLastLine = Platform::Maximum(line, lastLine) + 1; + +- int lookLine = line; ++ Sci::Line lookLine = line; + int lookLineLevel = level; + int lookLineLevelNum = LevelNumber(lookLineLevel); + while ((lookLine > 0) && ((lookLineLevel & SC_FOLDLEVELWHITEFLAG) || +@@ -499,14 +499,14 @@ + lookLineLevelNum = LevelNumber(lookLineLevel); + } + +- int beginFoldBlock = (lookLineLevel & SC_FOLDLEVELHEADERFLAG) ? lookLine : GetFoldParent(lookLine); ++ Sci::Line beginFoldBlock = (lookLineLevel & SC_FOLDLEVELHEADERFLAG) ? lookLine : GetFoldParent(lookLine); + if (beginFoldBlock == -1) { + highlightDelimiter.Clear(); + return; + } + +- int endFoldBlock = GetLastChild(beginFoldBlock, -1, lookLastLine); +- int firstChangeableLineBefore = -1; ++ Sci::Line endFoldBlock = GetLastChild(beginFoldBlock, -1, lookLastLine); ++ Sci::Line firstChangeableLineBefore = -1; + if (endFoldBlock < line) { + lookLine = beginFoldBlock - 1; + lookLineLevel = GetLevel(lookLine); +@@ -538,7 +538,7 @@ + if (firstChangeableLineBefore == -1) + firstChangeableLineBefore = beginFoldBlock - 1; + +- int firstChangeableLineAfter = -1; ++ Sci::Line firstChangeableLineAfter = -1; + for (lookLine = line + 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = LevelNumber(lookLineLevel); + lookLine <= endFoldBlock; + lookLineLevel = GetLevel(++lookLine), lookLineLevelNum = LevelNumber(lookLineLevel)) { +@@ -556,11 +556,11 @@ + highlightDelimiter.firstChangeableLineAfter = firstChangeableLineAfter; + } + +-int Document::ClampPositionIntoDocument(int pos) const { ++Sci::Position Document::ClampPositionIntoDocument(Sci::Position pos) const { + return Platform::Clamp(pos, 0, Length()); + } + +-bool Document::IsCrLf(int pos) const { ++bool Document::IsCrLf(Sci::Position pos) const { + if (pos < 0) + return false; + if (pos >= (Length() - 1)) +@@ -568,7 +568,7 @@ + return (cb.CharAt(pos) == '\r') && (cb.CharAt(pos + 1) == '\n'); + } + +-int Document::LenChar(int pos) { ++int Document::LenChar(Sci::Position pos) { + if (pos < 0) { + return 1; + } else if (IsCrLf(pos)) { +@@ -576,7 +576,7 @@ + } else if (SC_CP_UTF8 == dbcsCodePage) { + const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(pos)); + const int widthCharBytes = UTF8BytesOfLead[leadByte]; +- int lengthDoc = Length(); ++ Sci::Position lengthDoc = Length(); + if ((pos + widthCharBytes) > lengthDoc) + return lengthDoc - pos; + else +@@ -588,8 +588,8 @@ + } + } + +-bool Document::InGoodUTF8(int pos, int &start, int &end) const { +- int trail = pos; ++bool Document::InGoodUTF8(Sci::Position pos, Sci::Position &start, Sci::Position &end) const { ++ Sci::Position trail = pos; + while ((trail>0) && (pos-trail < UTF8MaxBytes) && UTF8IsTrailByte(static_cast<unsigned char>(cb.CharAt(trail-1)))) + trail--; + start = (trail > 0) ? trail-1 : trail; +@@ -600,13 +600,13 @@ + return false; + } else { + int trailBytes = widthCharBytes - 1; +- int len = pos - start; ++ Sci::Position len = pos - start; + if (len > trailBytes) + // pos too far from lead + return false; + char charBytes[UTF8MaxBytes] = {static_cast<char>(leadByte),0,0,0}; + for (int b=1; b<widthCharBytes && ((start+b) < Length()); b++) +- charBytes[b] = cb.CharAt(static_cast<int>(start+b)); ++ charBytes[b] = cb.CharAt(static_cast<Sci::Position>(start+b)); + int utf8status = UTF8Classify(reinterpret_cast<const unsigned char *>(charBytes), widthCharBytes); + if (utf8status & UTF8MaskInvalid) + return false; +@@ -620,7 +620,7 @@ + // When lines are terminated with \r\n pairs which should be treated as one character. + // When displaying DBCS text such as Japanese. + // If moving, move the position in the indicated direction. +-int Document::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) const { ++Sci::Position Document::MovePositionOutsideChar(Sci::Position pos, Sci::Position moveDir, bool checkLineEnd) const { + //Platform::DebugPrintf("NoCRLF %d %d\n", pos, moveDir); + // If out of range, just return minimum/maximum value. + if (pos <= 0) +@@ -641,8 +641,8 @@ + unsigned char ch = static_cast<unsigned char>(cb.CharAt(pos)); + // If ch is not a trail byte then pos is valid intercharacter position + if (UTF8IsTrailByte(ch)) { +- int startUTF = pos; +- int endUTF = pos; ++ Sci::Position startUTF = pos; ++ Sci::Position endUTF = pos; + if (InGoodUTF8(pos, startUTF, endUTF)) { + // ch is a trail byte within a UTF-8 character + if (moveDir > 0) +@@ -655,12 +655,12 @@ + } else { + // Anchor DBCS calculations at start of line because start of line can + // not be a DBCS trail byte. +- int posStartLine = LineStart(LineFromPosition(pos)); ++ Sci::Position posStartLine = LineStart(LineFromPosition(pos)); + if (pos == posStartLine) + return pos; + + // Step back until a non-lead-byte is found. +- int posCheck = pos; ++ Sci::Position posCheck = pos; + while ((posCheck > posStartLine) && IsDBCSLeadByte(cb.CharAt(posCheck-1))) + posCheck--; + +@@ -687,7 +687,7 @@ + // NextPosition moves between valid positions - it can not handle a position in the middle of a + // multi-byte character. It is used to iterate through text more efficiently than MovePositionOutsideChar. + // A \r\n pair is treated as two characters. +-int Document::NextPosition(int pos, int moveDir) const { ++Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const { + // If out of range, just return minimum/maximum value. + int increment = (moveDir > 0) ? 1 : -1; + if (pos + increment <= 0) +@@ -721,8 +721,8 @@ + // If ch is not a trail byte then pos is valid intercharacter position + if (UTF8IsTrailByte(ch)) { + // If ch is a trail byte in a valid UTF-8 character then return start of character +- int startUTF = pos; +- int endUTF = pos; ++ Sci::Position startUTF = pos; ++ Sci::Position endUTF = pos; + if (InGoodUTF8(pos, startUTF, endUTF)) { + pos = startUTF; + } +@@ -738,7 +738,7 @@ + } else { + // Anchor DBCS calculations at start of line because start of line can + // not be a DBCS trail byte. +- int posStartLine = LineStart(LineFromPosition(pos)); ++ Sci::Position posStartLine = LineStart(LineFromPosition(pos)); + // See http://msdn.microsoft.com/en-us/library/cc194792%28v=MSDN.10%29.aspx + // http://msdn.microsoft.com/en-us/library/cc194790.aspx + if ((pos - 1) <= posStartLine) { +@@ -748,7 +748,7 @@ + return pos - 2; + } else { + // Otherwise, step back until a non-lead-byte is found. +- int posTemp = pos - 1; ++ Sci::Position posTemp = pos - 1; + while (posStartLine <= --posTemp && IsDBCSLeadByte(cb.CharAt(posTemp))) + ; + // Now posTemp+1 must point to the beginning of a character, +@@ -765,9 +765,9 @@ + return pos; + } + +-bool Document::NextCharacter(int &pos, int moveDir) const { ++bool Document::NextCharacter(Sci::Position &pos, int moveDir) const { + // Returns true if pos changed +- int posNext = NextPosition(pos, moveDir); ++ Sci::Position posNext = NextPosition(pos, moveDir); + if (posNext == pos) { + return false; + } else { +@@ -776,7 +776,7 @@ + } + } + +-Document::CharacterExtracted Document::CharacterAfter(int position) const { ++Document::CharacterExtracted Document::CharacterAfter(Sci::Position position) const { + if (position >= Length()) { + return CharacterExtracted(unicodeReplacementChar, 0); + } +@@ -806,7 +806,7 @@ + } + } + +-Document::CharacterExtracted Document::CharacterBefore(int position) const { ++Document::CharacterExtracted Document::CharacterBefore(Sci::Position position) const { + if (position <= 0) { + return CharacterExtracted(unicodeReplacementChar, 0); + } +@@ -822,8 +822,8 @@ + // If previousByte is not a trail byte then its invalid + if (UTF8IsTrailByte(previousByte)) { + // If previousByte is a trail byte in a valid UTF-8 character then find start of character +- int startUTF = position; +- int endUTF = position; ++ Sci::Position startUTF = position; ++ Sci::Position endUTF = position; + if (InGoodUTF8(position, startUTF, endUTF)) { + const int widthCharBytes = endUTF - startUTF; + unsigned char charBytes[UTF8MaxBytes] = { 0, 0, 0, 0 }; +@@ -842,18 +842,18 @@ + return CharacterExtracted(unicodeReplacementChar, 1); + } else { + // Moving backwards in DBCS is complex so use NextPosition +- const int posStartCharacter = NextPosition(position, -1); ++ const Sci::Position posStartCharacter = NextPosition(position, -1); + return CharacterAfter(posStartCharacter); + } + } + + // Return -1 on out-of-bounds + Sci_Position SCI_METHOD Document::GetRelativePosition(Sci_Position positionStart, Sci_Position characterOffset) const { +- int pos = positionStart; ++ Sci::Position pos = positionStart; + if (dbcsCodePage) { + const int increment = (characterOffset > 0) ? 1 : -1; + while (characterOffset != 0) { +- const int posNext = NextPosition(pos, increment); ++ const Sci::Position posNext = NextPosition(pos, increment); + if (posNext == pos) + return INVALID_POSITION; + pos = posNext; +@@ -867,12 +867,12 @@ + return pos; + } + +-int Document::GetRelativePositionUTF16(int positionStart, int characterOffset) const { +- int pos = positionStart; ++Sci::Position Document::GetRelativePositionUTF16(Sci::Position positionStart, Sci::Position characterOffset) const { ++ Sci::Position pos = positionStart; + if (dbcsCodePage) { + const int increment = (characterOffset > 0) ? 1 : -1; + while (characterOffset != 0) { +- const int posNext = NextPosition(pos, increment); ++ const Sci::Position posNext = NextPosition(pos, increment); + if (posNext == pos) + return INVALID_POSITION; + if (abs(pos-posNext) > 3) // 4 byte character = 2*UTF16. +@@ -1018,7 +1018,7 @@ + return efEightBit; + } + +-void Document::ModifiedAt(int pos) { ++void Document::ModifiedAt(Sci::Position pos) { + if (endStyled > pos) + endStyled = pos; + } +@@ -1034,7 +1034,7 @@ + // Document only modified by gateways DeleteChars, InsertString, Undo, Redo, and SetStyleAt. + // SetStyleAt does not change the persistent state of a document + +-bool Document::DeleteChars(int pos, int len) { ++bool Document::DeleteChars(Sci::Position pos, Sci::Position len) { + if (pos < 0) + return false; + if (len <= 0) +@@ -1052,7 +1052,7 @@ + SC_MOD_BEFOREDELETE | SC_PERFORMED_USER, + pos, len, + 0, 0)); +- int prevLinesTotal = LinesTotal(); ++ Sci::Line prevLinesTotal = LinesTotal(); + bool startSavePoint = cb.IsSavePoint(); + bool startSequence = false; + const char *text = cb.DeleteChars(pos, len, startSequence); +@@ -1076,7 +1076,7 @@ + /** + * Insert a string with a length. + */ +-int Document::InsertString(int position, const char *s, int insertLength) { ++Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci::Position insertLength) { + if (insertLength <= 0) { + return 0; + } +@@ -1104,7 +1104,7 @@ + SC_MOD_BEFOREINSERT | SC_PERFORMED_USER, + position, insertLength, + 0, s)); +- int prevLinesTotal = LinesTotal(); ++ Sci::Line prevLinesTotal = LinesTotal(); + bool startSavePoint = cb.IsSavePoint(); + bool startSequence = false; + const char *text = cb.InsertString(position, s, insertLength, startSequence); +@@ -1123,14 +1123,14 @@ + return insertLength; + } + +-void Document::ChangeInsertion(const char *s, int length) { ++void Document::ChangeInsertion(const char *s, Sci::Position length) { + insertionSet = true; + insertion.assign(s, length); + } + + int SCI_METHOD Document::AddData(char *data, Sci_Position length) { + try { +- int position = Length(); ++ Sci::Position position = Length(); + InsertString(position, data, length); + } catch (std::bad_alloc &) { + return SC_STATUS_BADALLOC; +@@ -1144,8 +1144,8 @@ + return this; + } + +-int Document::Undo() { +- int newPos = -1; ++Sci::Position Document::Undo() { ++ Sci::Position newPos = -1; + CheckReadOnly(); + if ((enteredModification == 0) && (cb.IsCollectingUndo())) { + enteredModification++; +@@ -1154,12 +1154,12 @@ + bool multiLine = false; + int steps = cb.StartUndo(); + //Platform::DebugPrintf("Steps=%d\n", steps); +- int coalescedRemovePos = -1; +- int coalescedRemoveLen = 0; +- int prevRemoveActionPos = -1; +- int prevRemoveActionLen = 0; ++ Sci::Position coalescedRemovePos = -1; ++ Sci::Position coalescedRemoveLen = 0; ++ Sci::Position prevRemoveActionPos = -1; ++ Sci::Position prevRemoveActionLen = 0; + for (int step = 0; step < steps; step++) { +- const int prevLinesTotal = LinesTotal(); ++ const Sci::Line prevLinesTotal = LinesTotal(); + const Action &action = cb.GetUndoStep(); + if (action.at == removeAction) { + NotifyModified(DocModification( +@@ -1208,7 +1208,7 @@ + } + if (steps > 1) + modFlags |= SC_MULTISTEPUNDOREDO; +- const int linesAdded = LinesTotal() - prevLinesTotal; ++ const Sci::Line linesAdded = LinesTotal() - prevLinesTotal; + if (linesAdded != 0) + multiLine = true; + if (step == steps - 1) { +@@ -1229,8 +1229,8 @@ + return newPos; + } + +-int Document::Redo() { +- int newPos = -1; ++Sci::Position Document::Redo() { ++ Sci::Position newPos = -1; + CheckReadOnly(); + if ((enteredModification == 0) && (cb.IsCollectingUndo())) { + enteredModification++; +@@ -1239,7 +1239,7 @@ + bool multiLine = false; + int steps = cb.StartRedo(); + for (int step = 0; step < steps; step++) { +- const int prevLinesTotal = LinesTotal(); ++ const Sci::Line prevLinesTotal = LinesTotal(); + const Action &action = cb.GetRedoStep(); + if (action.at == insertAction) { + NotifyModified(DocModification( +@@ -1267,7 +1267,7 @@ + } + if (steps > 1) + modFlags |= SC_MULTISTEPUNDOREDO; +- const int linesAdded = LinesTotal() - prevLinesTotal; ++ const Sci::Line linesAdded = LinesTotal() - prevLinesTotal; + if (linesAdded != 0) + multiLine = true; + if (step == steps - 1) { +@@ -1289,28 +1289,28 @@ + return newPos; + } + +-void Document::DelChar(int pos) { ++void Document::DelChar(Sci::Position pos) { + DeleteChars(pos, LenChar(pos)); + } + +-void Document::DelCharBack(int pos) { ++void Document::DelCharBack(Sci::Position pos) { + if (pos <= 0) { + return; + } else if (IsCrLf(pos - 2)) { + DeleteChars(pos - 2, 2); + } else if (dbcsCodePage) { +- int startChar = NextPosition(pos, -1); ++ Sci::Position startChar = NextPosition(pos, -1); + DeleteChars(startChar, pos - startChar); + } else { + DeleteChars(pos - 1, 1); + } + } + +-static int NextTab(int pos, int tabSize) { ++static Sci::Position NextTab(Sci::Position pos, Sci::Position tabSize) { + return ((pos / tabSize) + 1) * tabSize; + } + +-static std::string CreateIndentation(int indent, int tabSize, bool insertSpaces) { ++static std::string CreateIndentation(Sci::Position indent, int tabSize, bool insertSpaces) { + std::string indentation; + if (!insertSpaces) { + while (indent >= tabSize) { +@@ -1328,9 +1328,9 @@ + int SCI_METHOD Document::GetLineIndentation(Sci_Position line) { + int indent = 0; + if ((line >= 0) && (line < LinesTotal())) { +- int lineStart = LineStart(line); +- int length = Length(); +- for (int i = lineStart; i < length; i++) { ++ Sci::Position lineStart = LineStart(line); ++ Sci::Position length = Length(); ++ for (Sci::Position i = lineStart; i < length; i++) { + char ch = cb.CharAt(i); + if (ch == ' ') + indent++; +@@ -1343,39 +1343,39 @@ + return indent; + } + +-int Document::SetLineIndentation(int line, int indent) { ++Sci::Position Document::SetLineIndentation(Sci::Line line, Sci::Position indent) { + int indentOfLine = GetLineIndentation(line); + if (indent < 0) + indent = 0; + if (indent != indentOfLine) { + std::string linebuf = CreateIndentation(indent, tabInChars, !useTabs); +- int thisLineStart = LineStart(line); +- int indentPos = GetLineIndentPosition(line); ++ Sci::Position thisLineStart = LineStart(line); ++ Sci::Position indentPos = GetLineIndentPosition(line); + UndoGroup ug(this); + DeleteChars(thisLineStart, indentPos - thisLineStart); + return thisLineStart + InsertString(thisLineStart, linebuf.c_str(), +- static_cast<int>(linebuf.length())); ++ static_cast<Sci::Position>(linebuf.length())); + } else { + return GetLineIndentPosition(line); + } + } + +-int Document::GetLineIndentPosition(int line) const { ++Sci::Position Document::GetLineIndentPosition(Sci::Line line) const { + if (line < 0) + return 0; +- int pos = LineStart(line); +- int length = Length(); ++ Sci::Position pos = LineStart(line); ++ Sci::Position length = Length(); + while ((pos < length) && IsSpaceOrTab(cb.CharAt(pos))) { + pos++; + } + return pos; + } + +-int Document::GetColumn(int pos) { +- int column = 0; +- int line = LineFromPosition(pos); ++Sci::Position Document::GetColumn(Sci::Position pos) { ++ Sci::Position column = 0; ++ Sci::Line line = LineFromPosition(pos); + if ((line >= 0) && (line < LinesTotal())) { +- for (int i = LineStart(line); i < pos;) { ++ for (Sci::Position i = LineStart(line); i < pos;) { + char ch = cb.CharAt(i); + if (ch == '\t') { + column = NextTab(column, tabInChars); +@@ -1395,11 +1395,11 @@ + return column; + } + +-int Document::CountCharacters(int startPos, int endPos) const { ++Sci::Position Document::CountCharacters(Sci::Position startPos, Sci::Position endPos) const { + startPos = MovePositionOutsideChar(startPos, 1, false); + endPos = MovePositionOutsideChar(endPos, -1, false); +- int count = 0; +- int i = startPos; ++ Sci::Position count = 0; ++ Sci::Position i = startPos; + while (i < endPos) { + count++; + i = NextPosition(i, 1); +@@ -1407,14 +1407,14 @@ + return count; + } + +-int Document::CountUTF16(int startPos, int endPos) const { ++Sci::Position Document::CountUTF16(Sci::Position startPos, Sci::Position endPos) const { + startPos = MovePositionOutsideChar(startPos, 1, false); + endPos = MovePositionOutsideChar(endPos, -1, false); +- int count = 0; +- int i = startPos; ++ Sci::Position count = 0; ++ Sci::Position i = startPos; + while (i < endPos) { + count++; +- const int next = NextPosition(i, 1); ++ const Sci::Position next = NextPosition(i, 1); + if ((next - i) > 3) + count++; + i = next; +@@ -1422,10 +1422,10 @@ + return count; + } + +-int Document::FindColumn(int line, int column) { +- int position = LineStart(line); ++Sci::Position Document::FindColumn(Sci::Line line, Sci::Position column) { ++ Sci::Position position = LineStart(line); + if ((line >= 0) && (line < LinesTotal())) { +- int columnCurrent = 0; ++ Sci::Position columnCurrent = 0; + while ((columnCurrent < column) && (position < Length())) { + char ch = cb.CharAt(position); + if (ch == '\t') { +@@ -1446,10 +1446,10 @@ + return position; + } + +-void Document::Indent(bool forwards, int lineBottom, int lineTop) { ++void Document::Indent(bool forwards, Sci::Line lineBottom, Sci::Line 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--) { +- int indentOfLine = GetLineIndentation(line); ++ for (Sci::Line line = lineBottom; line >= lineTop; line--) { ++ Sci::Position indentOfLine = GetLineIndentation(line); + if (forwards) { + if (LineStart(line) < LineEnd(line)) { + SetLineIndentation(line, indentOfLine + IndentSize()); +@@ -1487,7 +1487,7 @@ + void Document::ConvertLineEnds(int eolModeSet) { + UndoGroup ug(this); + +- for (int pos = 0; pos < Length(); pos++) { ++ for (Sci::Position pos = 0; pos < Length(); pos++) { + if (cb.CharAt(pos) == '\r') { + if (cb.CharAt(pos + 1) == '\n') { + // CRLF +@@ -1522,9 +1522,9 @@ + + } + +-bool Document::IsWhiteLine(int line) const { +- int currentChar = LineStart(line); +- int endLine = LineEnd(line); ++bool Document::IsWhiteLine(Sci::Line line) const { ++ Sci::Position currentChar = LineStart(line); ++ Sci::Position endLine = LineEnd(line); + while (currentChar < endLine) { + if (cb.CharAt(currentChar) != ' ' && cb.CharAt(currentChar) != '\t') { + return false; +@@ -1534,8 +1534,8 @@ + return true; + } + +-int Document::ParaUp(int pos) const { +- int line = LineFromPosition(pos); ++Sci::Position Document::ParaUp(Sci::Position pos) const { ++ Sci::Line line = LineFromPosition(pos); + line--; + while (line >= 0 && IsWhiteLine(line)) { // skip empty lines + line--; +@@ -1547,8 +1547,8 @@ + return LineStart(line); + } + +-int Document::ParaDown(int pos) const { +- int line = LineFromPosition(pos); ++Sci::Position Document::ParaDown(Sci::Position pos) const { ++ Sci::Line line = LineFromPosition(pos); + while (line < LinesTotal() && !IsWhiteLine(line)) { // skip non-empty lines + line++; + } +@@ -1635,7 +1635,7 @@ + * Used by commmands that want to select whole words. + * Finds the start of word at pos when delta < 0 or the end of the word when delta >= 0. + */ +-int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) const { ++Sci::Position Document::ExtendWordSelect(Sci::Position pos, int delta, bool onlyWordCharacters) const { + CharClassify::cc ccStart = CharClassify::ccWord; + if (delta < 0) { + if (!onlyWordCharacters) { +@@ -1670,7 +1670,7 @@ + * additional movement to transit white space. + * Used by cursor movement by word commands. + */ +-int Document::NextWordStart(int pos, int delta) const { ++Sci::Position Document::NextWordStart(Sci::Position pos, int delta) const { + if (delta < 0) { + while (pos > 0) { + const CharacterExtracted ce = CharacterBefore(pos); +@@ -1714,7 +1714,7 @@ + * additional movement to transit white space. + * Used by cursor movement by word commands. + */ +-int Document::NextWordEnd(int pos, int delta) const { ++Sci::Position Document::NextWordEnd(Sci::Position pos, int delta) const { + if (delta < 0) { + if (pos > 0) { + CharacterExtracted ce = CharacterBefore(pos); +@@ -1759,7 +1759,7 @@ + * Check that the character at the given position is a word or punctuation character and that + * the previous character is of a different character class. + */ +-bool Document::IsWordStartAt(int pos) const { ++bool Document::IsWordStartAt(Sci::Position pos) const { + if (pos >= Length()) + return false; + if (pos > 0) { +@@ -1777,7 +1777,7 @@ + * Check that the character at the given position is a word or punctuation character and that + * the next character is of a different character class. + */ +-bool Document::IsWordEndAt(int pos) const { ++bool Document::IsWordEndAt(Sci::Position pos) const { + if (pos <= 0) + return false; + if (pos < Length()) { +@@ -1795,11 +1795,11 @@ + * Check that the given range is has transitions between character classes at both + * ends and where the characters on the inside are word or punctuation characters. + */ +-bool Document::IsWordAt(int start, int end) const { ++bool Document::IsWordAt(Sci::Position start, Sci::Position end) const { + return (start < end) && IsWordStartAt(start) && IsWordEndAt(end); + } + +-bool Document::MatchesWordOptions(bool word, bool wordStart, int pos, int length) const { ++bool Document::MatchesWordOptions(bool word, bool wordStart, Sci::Position pos, Sci::Position length) const { + return (!word && !wordStart) || + (word && IsWordAt(pos, pos + length)) || + (wordStart && IsWordStartAt(pos)); +@@ -1814,7 +1814,7 @@ + pcf = pcf_; + } + +-Document::CharacterExtracted Document::ExtractCharacter(int position) const { ++Document::CharacterExtracted Document::ExtractCharacter(Sci::Position position) const { + const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(position)); + if (UTF8IsAscii(leadByte)) { + // Common case: ASCII character +@@ -1838,8 +1838,8 @@ + * 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 *search, +- int flags, int *length) { ++long Document::FindText(Sci::Position minPos, Sci::Position maxPos, const char *search, ++ int flags, Sci::Position *length) { + if (*length <= 0) + return minPos; + const bool caseSensitive = (flags & SCFIND_MATCHCASE) != 0; +@@ -1856,21 +1856,21 @@ + const int increment = forward ? 1 : -1; + + // Range endpoints should not be inside DBCS characters, but just in case, move them. +- const int startPos = MovePositionOutsideChar(minPos, increment, false); +- const int endPos = MovePositionOutsideChar(maxPos, increment, false); ++ const Sci::Position startPos = MovePositionOutsideChar(minPos, increment, false); ++ const Sci::Position endPos = MovePositionOutsideChar(maxPos, increment, false); + + // Compute actual search ranges needed +- const int lengthFind = *length; ++ const Sci::Position lengthFind = *length; + + //Platform::DebugPrintf("Find %d %d %s %d\n", startPos, endPos, ft->lpstrText, lengthFind); +- const int limitPos = Platform::Maximum(startPos, endPos); +- int pos = startPos; ++ const Sci::Position limitPos = Platform::Maximum(startPos, endPos); ++ Sci::Position pos = startPos; + if (!forward) { + // Back all of a character + pos = NextPosition(pos, increment); + } + if (caseSensitive) { +- const int endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos; ++ const Sci::Position endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos; + const char charStartSearch = search[0]; + while (forward ? (pos < endSearch) : (pos >= endSearch)) { + if (CharAt(pos) == charStartSearch) { +@@ -1894,7 +1894,7 @@ + char folded[UTF8MaxBytes * maxFoldingExpansion + 1]; + while (forward ? (pos < endPos) : (pos >= endPos)) { + int widthFirstCharacter = 0; +- int posIndexDocument = pos; ++ Sci::Position posIndexDocument = pos; + int indexSearch = 0; + bool characterMatches = true; + for (;;) { +@@ -1978,7 +1978,7 @@ + break; + } + } else { +- const int endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos; ++ const Sci::Position endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos; + std::vector<char> searchThing(lengthFind + 1); + pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind); + while (forward ? (pos < endSearch) : (pos >= endSearch)) { +@@ -2001,14 +2001,14 @@ + return -1; + } + +-const char *Document::SubstituteByPosition(const char *text, int *length) { ++const char *Document::SubstituteByPosition(const char *text, Sci::Position *length) { + if (regex) + return regex->SubstituteByPosition(this, text, length); + else + return 0; + } + +-int Document::LinesTotal() const { ++Sci::Line Document::LinesTotal() const { + return cb.Lines(); + } + +@@ -2033,7 +2033,7 @@ + return false; + } else { + enteredStyling++; +- int prevEndStyled = endStyled; ++ Sci::Position prevEndStyled = endStyled; + if (cb.SetStyleFor(endStyled, length, style)) { + DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER, + prevEndStyled, length); +@@ -2051,8 +2051,8 @@ + } else { + enteredStyling++; + bool didChange = false; +- int startMod = 0; +- int endMod = 0; ++ Sci::Position startMod = 0; ++ Sci::Position endMod = 0; + for (int iPos = 0; iPos < length; iPos++, endStyled++) { + PLATFORM_ASSERT(endStyled < Length()); + if (cb.SetStyleAt(endStyled, styles[iPos])) { +@@ -2073,12 +2073,12 @@ + } + } + +-void Document::EnsureStyledTo(int pos) { ++void Document::EnsureStyledTo(Sci::Position pos) { + if ((enteredStyling == 0) && (pos > GetEndStyled())) { + IncrementStyleClock(); + if (pli && !pli->UseContainerLexing()) { +- int lineEndStyled = LineFromPosition(GetEndStyled()); +- int endStyledTo = LineStart(lineEndStyled); ++ Sci::Line lineEndStyled = LineFromPosition(GetEndStyled()); ++ Sci::Position endStyledTo = LineStart(lineEndStyled); + pli->Colourise(endStyledTo, pos); + } else { + // Ask the watchers to style, and stop as soon as one responds. +@@ -2090,7 +2090,7 @@ + } + } + +-void Document::StyleToAdjustingLineDuration(int pos) { ++void Document::StyleToAdjustingLineDuration(Sci::Position pos) { + // Place bounds on the duration used to avoid glitches spiking it + // and so causing slow styling or non-responsive scrolling + const double minDurationOneLine = 0.000001; +@@ -2100,11 +2100,11 @@ + // Most recent value contributes 25% to smoothed value. + const double alpha = 0.25; + +- const Sci_Position lineFirst = LineFromPosition(GetEndStyled()); ++ const Sci::Line lineFirst = LineFromPosition(GetEndStyled()); + ElapsedTime etStyling; + EnsureStyledTo(pos); + const double durationStyling = etStyling.Duration(); +- const Sci_Position lineLast = LineFromPosition(GetEndStyled()); ++ const Sci::Line lineLast = LineFromPosition(GetEndStyled()); + if (lineLast >= lineFirst + 8) { + // Only adjust for styling multiple lines to avoid instability + const double durationOneLine = durationStyling / (lineLast - lineFirst); +@@ -2137,7 +2137,7 @@ + return static_cast<LineState *>(perLineData[ldState])->GetLineState(line); + } + +-int Document::GetMaxLineState() { ++Sci::Line Document::GetMaxLineState() { + return static_cast<LineState *>(perLineData[ldState])->GetMaxLineState(); + } + +@@ -2146,45 +2146,45 @@ + NotifyModified(mh); + } + +-StyledText Document::MarginStyledText(int line) const { ++StyledText Document::MarginStyledText(Sci::Line line) const { + LineAnnotation *pla = static_cast<LineAnnotation *>(perLineData[ldMargin]); + return StyledText(pla->Length(line), pla->Text(line), + pla->MultipleStyles(line), pla->Style(line), pla->Styles(line)); + } + +-void Document::MarginSetText(int line, const char *text) { ++void Document::MarginSetText(Sci::Line line, const char *text) { + static_cast<LineAnnotation *>(perLineData[ldMargin])->SetText(line, text); + DocModification mh(SC_MOD_CHANGEMARGIN, LineStart(line), 0, 0, 0, line); + NotifyModified(mh); + } + +-void Document::MarginSetStyle(int line, int style) { ++void Document::MarginSetStyle(Sci::Line line, int style) { + static_cast<LineAnnotation *>(perLineData[ldMargin])->SetStyle(line, style); + NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line), 0, 0, 0, line)); + } + +-void Document::MarginSetStyles(int line, const unsigned char *styles) { ++void Document::MarginSetStyles(Sci::Line line, const unsigned char *styles) { + static_cast<LineAnnotation *>(perLineData[ldMargin])->SetStyles(line, styles); + NotifyModified(DocModification(SC_MOD_CHANGEMARGIN, LineStart(line), 0, 0, 0, line)); + } + + void Document::MarginClearAll() { +- int maxEditorLine = LinesTotal(); +- for (int l=0; l<maxEditorLine; l++) ++ Sci::Line maxEditorLine = LinesTotal(); ++ for (Sci::Line l=0; l<maxEditorLine; l++) + MarginSetText(l, 0); + // Free remaining data + static_cast<LineAnnotation *>(perLineData[ldMargin])->ClearAll(); + } + +-StyledText Document::AnnotationStyledText(int line) const { ++StyledText Document::AnnotationStyledText(Sci::Line line) const { + LineAnnotation *pla = static_cast<LineAnnotation *>(perLineData[ldAnnotation]); + return StyledText(pla->Length(line), pla->Text(line), + pla->MultipleStyles(line), pla->Style(line), pla->Styles(line)); + } + +-void Document::AnnotationSetText(int line, const char *text) { ++void Document::AnnotationSetText(Sci::Line line, const char *text) { + if (line >= 0 && line < LinesTotal()) { +- const int linesBefore = AnnotationLines(line); ++ const Sci::Line linesBefore = AnnotationLines(line); + static_cast<LineAnnotation *>(perLineData[ldAnnotation])->SetText(line, text); + const int linesAfter = AnnotationLines(line); + DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line), 0, 0, 0, line); +@@ -2193,25 +2193,25 @@ + } + } + +-void Document::AnnotationSetStyle(int line, int style) { ++void Document::AnnotationSetStyle(Sci::Line line, int style) { + static_cast<LineAnnotation *>(perLineData[ldAnnotation])->SetStyle(line, style); + DocModification mh(SC_MOD_CHANGEANNOTATION, LineStart(line), 0, 0, 0, line); + NotifyModified(mh); + } + +-void Document::AnnotationSetStyles(int line, const unsigned char *styles) { ++void Document::AnnotationSetStyles(Sci::Line line, const unsigned char *styles) { + if (line >= 0 && line < LinesTotal()) { + static_cast<LineAnnotation *>(perLineData[ldAnnotation])->SetStyles(line, styles); + } + } + +-int Document::AnnotationLines(int line) const { ++int Document::AnnotationLines(Sci::Line line) const { + return static_cast<LineAnnotation *>(perLineData[ldAnnotation])->Lines(line); + } + + void Document::AnnotationClearAll() { +- int maxEditorLine = LinesTotal(); +- for (int l=0; l<maxEditorLine; l++) ++ Sci::Line maxEditorLine = LinesTotal(); ++ for (Sci::Line l=0; l<maxEditorLine; l++) + AnnotationSetText(l, 0); + // Free remaining data + static_cast<LineAnnotation *>(perLineData[ldAnnotation])->ClearAll(); +@@ -2317,7 +2317,7 @@ + return (WordCharacterClass(ch) == CharClassify::ccWord) && IsASCIIPunctuationCharacter(ch); + } + +-int Document::WordPartLeft(int pos) const { ++Sci::Position Document::WordPartLeft(Sci::Position pos) const { + if (pos > 0) { + pos -= CharacterBefore(pos).widthBytes; + CharacterExtracted ceStart = CharacterAfter(pos); +@@ -2367,9 +2367,9 @@ + return pos; + } + +-int Document::WordPartRight(int pos) const { ++Sci::Position Document::WordPartRight(Sci::Position pos) const { + CharacterExtracted ceStart = CharacterAfter(pos); +- const int length = Length(); ++ const Sci::Position length = Length(); + if (IsWordPartSeparator(ceStart.character)) { + while (pos < length && IsWordPartSeparator(CharacterAfter(pos).character)) + pos += CharacterAfter(pos).widthBytes; +@@ -2411,7 +2411,7 @@ + return (c == '\n' || c == '\r'); + } + +-int Document::ExtendStyleRange(int pos, int delta, bool singleLine) { ++Sci::Position Document::ExtendStyleRange(Sci::Position pos, int delta, bool singleLine) { + int sStart = cb.StyleAt(pos); + if (delta < 0) { + while (pos > 0 && (cb.StyleAt(pos) == sStart) && (!singleLine || !IsLineEndChar(cb.CharAt(pos)))) +@@ -2448,7 +2448,7 @@ + } + + // TODO: should be able to extend styled region to find matching brace +-int Document::BraceMatch(int position, int /*maxReStyle*/) { ++Sci::Position Document::BraceMatch(Sci::Position position, Sci::Position /*maxReStyle*/) { + char chBrace = CharAt(position); + char chSeek = BraceOpposite(chBrace); + if (chSeek == '\0') +@@ -2470,7 +2470,7 @@ + if (depth == 0) + return position; + } +- int positionBeforeMove = position; ++ Sci::Position positionBeforeMove = position; + position = NextPosition(position, direction); + if (position == positionBeforeMove) + break; +@@ -2488,11 +2488,11 @@ + virtual ~BuiltinRegex() { + } + +- virtual long FindText(Document *doc, int minPos, int maxPos, const char *s, ++ virtual long FindText(Document *doc, Sci::Position minPos, Sci::Position maxPos, const char *s, + bool caseSensitive, bool word, bool wordStart, int flags, +- int *length); ++ Sci::Position *length); + +- virtual const char *SubstituteByPosition(Document *doc, const char *text, int *length); ++ virtual const char *SubstituteByPosition(Document *doc, const char *text, Sci::Position *length); + + private: + RESearch search; +@@ -2508,12 +2508,12 @@ + public: + const Document *doc; + int increment; +- int startPos; +- int endPos; +- int lineRangeStart; +- int lineRangeEnd; +- int lineRangeBreak; +- RESearchRange(const Document *doc_, int minPos, int maxPos) : doc(doc_) { ++ Sci::Position startPos; ++ Sci::Position endPos; ++ Sci::Line lineRangeStart; ++ Sci::Line lineRangeEnd; ++ Sci::Line lineRangeBreak; ++ RESearchRange(const Document *doc_, Sci::Position minPos, Sci::Position maxPos) : doc(doc_) { + increment = (minPos <= maxPos) ? 1 : -1; + + // Range endpoints should not be inside DBCS characters, but just in case, move them. +@@ -2537,7 +2537,7 @@ + } + lineRangeBreak = lineRangeEnd + increment; + } +- Range LineRange(int line) const { ++ Range LineRange(Sci::Line line) const { + Range range(doc->LineStart(line), doc->LineEnd(line)); + if (increment == 1) { + if (line == lineRangeStart) +@@ -2557,16 +2557,16 @@ + // Define a way for the Regular Expression code to access the document + class DocumentIndexer : public CharacterIndexer { + Document *pdoc; +- int end; ++ Sci::Position end; + public: +- DocumentIndexer(Document *pdoc_, int end_) : ++ DocumentIndexer(Document *pdoc_, Sci::Position end_) : + pdoc(pdoc_), end(end_) { + } + + virtual ~DocumentIndexer() { + } + +- virtual char CharAt(int index) { ++ virtual char CharAt(Sci::Position index) { + if (index < 0 || index >= end) + return 0; + else +@@ -2579,8 +2579,8 @@ + class ByteIterator : public std::iterator<std::bidirectional_iterator_tag, char> { + public: + const Document *doc; +- Position position; +- ByteIterator(const Document *doc_ = 0, Position position_ = 0) : doc(doc_), position(position_) { ++ Sci::Position position; ++ ByteIterator(const Document *doc_ = 0, Sci::Position position_ = 0) : doc(doc_), position(position_) { + } + ByteIterator(const ByteIterator &other) NOEXCEPT { + doc = other.doc; +@@ -2615,10 +2615,10 @@ + bool operator!=(const ByteIterator &other) const { + return doc != other.doc || position != other.position; + } +- int Pos() const { ++ Sci::Position Pos() const { + return position; + } +- int PosRoundUp() const { ++ Sci::Position PosRoundUp() const { + return position; + } + }; +@@ -2642,14 +2642,14 @@ + class UTF8Iterator : public std::iterator<std::bidirectional_iterator_tag, wchar_t> { + // These 3 fields determine the iterator position and are used for comparisons + const Document *doc; +- Position position; ++ Sci::Position position; + size_t characterIndex; + // Remaining fields are derived from the determining fields so are excluded in comparisons + unsigned int lenBytes; + size_t lenCharacters; + wchar_t buffered[2]; + public: +- UTF8Iterator(const Document *doc_ = 0, Position position_ = 0) : ++ UTF8Iterator(const Document *doc_ = 0, Sci::Position position_ = 0) : + doc(doc_), position(position_), characterIndex(0), lenBytes(0), lenCharacters(0) { + buffered[0] = 0; + buffered[1] = 0; +@@ -2725,10 +2725,10 @@ + position != other.position || + characterIndex != other.characterIndex; + } +- int Pos() const { ++ Sci::Position Pos() const { + return position; + } +- int PosRoundUp() const { ++ Sci::Position PosRoundUp() const { + if (characterIndex) + return position + lenBytes; // Force to end of character + else +@@ -2753,9 +2753,9 @@ + + class UTF8Iterator : public std::iterator<std::bidirectional_iterator_tag, wchar_t> { + const Document *doc; +- Position position; ++ Sci::Position position; + public: +- UTF8Iterator(const Document *doc_=0, Position position_=0) : doc(doc_), position(position_) { ++ UTF8Iterator(const Document *doc_=0, Sci::Position position_=0) : doc(doc_), position(position_) { + } + UTF8Iterator(const UTF8Iterator &other) NOEXCEPT { + doc = other.doc; +@@ -2791,17 +2791,17 @@ + bool operator!=(const UTF8Iterator &other) const { + return doc != other.doc || position != other.position; + } +- int Pos() const { ++ Sci::Position Pos() const { + return position; + } +- int PosRoundUp() const { ++ Sci::Position PosRoundUp() const { + return position; + } + }; + + #endif + +-std::regex_constants::match_flag_type MatchFlags(const Document *doc, int startPos, int endPos) { ++std::regex_constants::match_flag_type MatchFlags(const Document *doc, Sci::Position startPos, Sci::Position endPos) { + std::regex_constants::match_flag_type flagsMatch = std::regex_constants::match_default; + if (!doc->IsLineStartPosition(startPos)) + flagsMatch |= std::regex_constants::match_not_bol; +@@ -2824,7 +2824,7 @@ + // matched = std::regex_search(uiStart, uiEnd, match, regexp, flagsMatch); + + // Line by line. +- for (int line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) { ++ for (Sci::Line line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) { + const Range lineRange = resr.LineRange(line); + Iterator itStart(doc, lineRange.start); + Iterator itEnd(doc, lineRange.end); +@@ -2865,8 +2865,8 @@ + return matched; + } + +-long Cxx11RegexFindText(Document *doc, int minPos, int maxPos, const char *s, +- bool caseSensitive, int *length, RESearch &search) { ++Sci::Position Cxx11RegexFindText(Document *doc, Sci::Position minPos, Sci::Position maxPos, const char *s, ++ bool caseSensitive, Sci::Position *length, RESearch &search) { + const RESearchRange resr(doc, minPos, maxPos); + try { + //ElapsedTime et; +@@ -2906,7 +2906,7 @@ + matched = MatchOnLines<ByteIterator>(doc, regexp, resr, search); + } + +- int posMatch = -1; ++ Sci::Position posMatch = -1; + if (matched) { + posMatch = search.bopat[0]; + *length = search.eopat[0] - search.bopat[0]; +@@ -2930,9 +2930,9 @@ + + } + +-long BuiltinRegex::FindText(Document *doc, int minPos, int maxPos, const char *s, ++long BuiltinRegex::FindText(Document *doc, Sci::Position minPos, Sci::Position maxPos, const char *s, + bool caseSensitive, bool, bool, int flags, +- int *length) { ++ Sci::Position *length) { + + #ifndef NO_CXX11_REGEX + if (flags & SCFIND_CXX11REGEX) { +@@ -2953,13 +2953,13 @@ + // Replace first '.' with '-' in each property file variable reference: + // Search: \$(\([A-Za-z0-9_-]+\)\.\([A-Za-z0-9_.]+\)) + // Replace: $(\1-\2) +- int pos = -1; +- int lenRet = 0; ++ Sci::Position pos = -1; ++ Sci::Position lenRet = 0; + const char searchEnd = s[*length - 1]; + const char searchEndPrev = (*length > 1) ? s[*length - 2] : '\0'; +- for (int line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) { +- int startOfLine = doc->LineStart(line); +- int endOfLine = doc->LineEnd(line); ++ for (Sci::Line line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) { ++ Sci::Position startOfLine = doc->LineStart(line); ++ Sci::Position endOfLine = doc->LineEnd(line); + if (resr.increment == 1) { + if (line == resr.lineRangeStart) { + if ((resr.startPos != startOfLine) && (s[0] == '^')) +@@ -3014,7 +3014,7 @@ + return pos; + } + +-const char *BuiltinRegex::SubstituteByPosition(Document *doc, const char *text, int *length) { ++const char *BuiltinRegex::SubstituteByPosition(Document *doc, const char *text, Sci::Position *length) { + substituted.clear(); + DocumentIndexer di(doc, doc->Length()); + search.GrabMatches(di); +@@ -3022,7 +3022,7 @@ + if (text[j] == '\\') { + if (text[j + 1] >= '0' && text[j + 1] <= '9') { + unsigned int patNum = text[j + 1] - '0'; +- unsigned int len = search.eopat[patNum] - search.bopat[patNum]; ++ Sci::Position len = search.eopat[patNum] - search.bopat[patNum]; + if (!search.pat[patNum].empty()) // Will be null if try for a match that did not occur + substituted.append(search.pat[patNum].c_str(), len); + j++; +diff -r 1788f6795302 -r a0f26eaf474d src/Document.h +--- a/src/Document.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Document.h Fri Mar 31 18:19:38 2017 +1100 +@@ -12,13 +12,6 @@ + namespace Scintilla { + #endif + +-/** +- * A Position is a position within a document between two characters or at the beginning or end. +- * Sometimes used as a character index where it identifies the character after the position. +- */ +-typedef int Position; +-const Position invalidPosition = -1; +- + enum EncodingFamily { efEightBit, efUnicode, efDBCS }; + + /** +@@ -29,13 +22,13 @@ + */ + class Range { + public: +- Position start; +- Position end; ++ Sci::Position start; ++ Sci::Position end; + +- explicit Range(Position pos=0) : ++ explicit Range(Sci::Position pos=0) : + start(pos), end(pos) { + } +- Range(Position start_, Position end_) : ++ Range(Sci::Position start_, Sci::Position end_) : + start(start_), end(end_) { + } + +@@ -44,19 +37,19 @@ + } + + bool Valid() const { +- return (start != invalidPosition) && (end != invalidPosition); ++ return (start != Sci::invalidPosition) && (end != Sci::invalidPosition); + } + +- Position First() const { ++ Sci::Position First() const { + return (start <= end) ? start : end; + } + +- Position Last() const { ++ Sci::Position Last() const { + return (start > end) ? start : end; + } + + // Is the position within the range? +- bool Contains(Position pos) const { ++ bool Contains(Sci::Position pos) const { + if (start < end) { + return (pos >= start && pos <= end); + } else { +@@ -65,7 +58,7 @@ + } + + // Is the character after pos within the range? +- bool ContainsCharacter(Position pos) const { ++ bool ContainsCharacter(Sci::Position pos) const { + if (start < end) { + return (pos >= start && pos < end); + } else { +@@ -97,11 +90,11 @@ + public: + virtual ~RegexSearchBase() {} + +- virtual long FindText(Document *doc, int minPos, int maxPos, const char *s, +- bool caseSensitive, bool word, bool wordStart, int flags, int *length) = 0; ++ virtual long FindText(Document *doc, Sci::Position minPos, Sci::Position maxPos, const char *s, ++ bool caseSensitive, bool word, bool wordStart, int flags, Sci::Position *length) = 0; + + ///@return String with the substitutions, must remain valid until the next call or destruction +- virtual const char *SubstituteByPosition(Document *doc, const char *text, int *length) = 0; ++ virtual const char *SubstituteByPosition(Document *doc, const char *text, Sci::Position *length) = 0; + }; + + /// Factory function for RegexSearchBase +@@ -142,30 +135,30 @@ + firstChangeableLineAfter = -1; + } + +- bool NeedsDrawing(int line) const { ++ bool NeedsDrawing(Sci::Line line) const { + return isEnabled && (line <= firstChangeableLineBefore || line >= firstChangeableLineAfter); + } + +- bool IsFoldBlockHighlighted(int line) const { ++ bool IsFoldBlockHighlighted(Sci::Line line) const { + return isEnabled && beginFoldBlock != -1 && beginFoldBlock <= line && line <= endFoldBlock; + } + +- bool IsHeadOfFoldBlock(int line) const { ++ bool IsHeadOfFoldBlock(Sci::Line line) const { + return beginFoldBlock == line && line < endFoldBlock; + } + +- bool IsBodyOfFoldBlock(int line) const { ++ bool IsBodyOfFoldBlock(Sci::Line line) const { + return beginFoldBlock != -1 && beginFoldBlock < line && line < endFoldBlock; + } + +- bool IsTailOfFoldBlock(int line) const { ++ bool IsTailOfFoldBlock(Sci::Line line) const { + return beginFoldBlock != -1 && beginFoldBlock < line && line == endFoldBlock; + } + +- int beginFoldBlock; // Begin of current fold block +- int endFoldBlock; // End of current fold block +- int firstChangeableLineBefore; // First line that triggers repaint before starting line that determined current fold block +- int firstChangeableLineAfter; // First line that triggers repaint after starting line that determined current fold block ++ Sci::Line beginFoldBlock; // Begin of current fold block ++ Sci::Line endFoldBlock; // End of current fold block ++ Sci::Line firstChangeableLineBefore; // First line that triggers repaint before starting line that determined current fold block ++ Sci::Line firstChangeableLineAfter; // First line that triggers repaint after starting line that determined current fold block + bool isEnabled; + }; + +@@ -185,7 +178,7 @@ + } + virtual ~LexInterface() { + } +- void Colourise(int start, int end); ++ void Colourise(Sci::Position start, Sci::Position end); + int LineEndTypesSupported(); + bool UseContainerLexing() const { + return instance == 0; +@@ -218,7 +211,7 @@ + CellBuffer cb; + CharClassify charClass; + CaseFolder *pcf; +- int endStyled; ++ Sci::Position endStyled; + int styleClock; + int enteredModification; + int enteredStyling; +@@ -278,8 +271,8 @@ + int GetLineEndTypesAllowed() const { return cb.GetLineEndTypes(); } + bool SetLineEndTypesAllowed(int lineEndBitSet_); + int GetLineEndTypesActive() const { return cb.GetLineEndTypes(); } +- virtual void InsertLine(int line); +- virtual void RemoveLine(int line); ++ virtual void InsertLine(Sci::Line line); ++ virtual void RemoveLine(Sci::Line line); + + int SCI_METHOD Version() const { + return dvLineEnd; +@@ -288,18 +281,18 @@ + void SCI_METHOD SetErrorStatus(int status); + + Sci_Position SCI_METHOD LineFromPosition(Sci_Position pos) const; +- int ClampPositionIntoDocument(int pos) const; +- bool ContainsLineEnd(const char *s, int length) const { return cb.ContainsLineEnd(s, length); } +- bool IsCrLf(int pos) const; +- int LenChar(int pos); +- bool InGoodUTF8(int pos, int &start, int &end) const; +- int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true) const; +- int NextPosition(int pos, int moveDir) const; +- bool NextCharacter(int &pos, int moveDir) const; // Returns true if pos changed +- Document::CharacterExtracted CharacterAfter(int position) const; +- Document::CharacterExtracted CharacterBefore(int position) const; ++ Sci::Position ClampPositionIntoDocument(Sci::Position pos) const; ++ bool ContainsLineEnd(const char *s, Sci::Position length) const { return cb.ContainsLineEnd(s, length); } ++ bool IsCrLf(Sci::Position pos) const; ++ int LenChar(Sci::Position pos); ++ bool InGoodUTF8(Sci::Position pos, Sci::Position &start, Sci::Position &end) const; ++ Sci::Position MovePositionOutsideChar(Sci::Position pos, Sci::Position moveDir, bool checkLineEnd=true) const; ++ Sci::Position NextPosition(Sci::Position pos, int moveDir) const; ++ bool NextCharacter(Sci::Position &pos, int moveDir) const; // Returns true if pos changed ++ Document::CharacterExtracted CharacterAfter(Sci::Position position) const; ++ Document::CharacterExtracted CharacterBefore(Sci::Position position) const; + Sci_Position SCI_METHOD GetRelativePosition(Sci_Position positionStart, Sci_Position characterOffset) const; +- int GetRelativePositionUTF16(int positionStart, int characterOffset) const; ++ Sci::Position GetRelativePositionUTF16(Sci::Position positionStart, Sci::Position characterOffset) const; + int SCI_METHOD GetCharacterAndWidth(Sci_Position position, Sci_Position *pWidth) const; + int SCI_METHOD CodePage() const; + bool SCI_METHOD IsDBCSLeadByte(char ch) const; +@@ -307,15 +300,15 @@ + EncodingFamily CodePageFamily() const; + + // Gateways to modifying document +- void ModifiedAt(int pos); ++ void ModifiedAt(Sci::Position pos); + void CheckReadOnly(); +- bool DeleteChars(int pos, int len); +- int InsertString(int position, const char *s, int insertLength); +- void ChangeInsertion(const char *s, int length); ++ bool DeleteChars(Sci::Position pos, Sci::Position len); ++ Sci::Position InsertString(Sci::Position position, const char *s, Sci::Position insertLength); ++ void ChangeInsertion(const char *s, Sci::Position length); + int SCI_METHOD AddData(char *data, Sci_Position length); + void * SCI_METHOD ConvertToDocument(); +- int Undo(); +- int Redo(); ++ Sci::Position Undo(); ++ Sci::Position Redo(); + bool CanUndo() const { return cb.CanUndo(); } + bool CanRedo() const { return cb.CanRedo(); } + void DeleteUndoHistory() { cb.DeleteUndoHistory(); } +@@ -325,7 +318,7 @@ + bool IsCollectingUndo() const { return cb.IsCollectingUndo(); } + void BeginUndoAction() { cb.BeginUndoAction(); } + void EndUndoAction() { cb.EndUndoAction(); } +- void AddUndoAction(int token, bool mayCoalesce) { cb.AddUndoAction(token, mayCoalesce); } ++ void AddUndoAction(Sci::Position token, bool mayCoalesce) { cb.AddUndoAction(token, mayCoalesce); } + void SetSavePoint(); + bool IsSavePoint() const { return cb.IsSavePoint(); } + +@@ -335,76 +328,76 @@ + bool TentativeActive() const { return cb.TentativeActive(); } + + const char * SCI_METHOD BufferPointer() { return cb.BufferPointer(); } +- const char *RangePointer(int position, int rangeLength) { return cb.RangePointer(position, rangeLength); } +- int GapPosition() const { return cb.GapPosition(); } ++ const char *RangePointer(Sci::Position position, Sci::Position rangeLength) { return cb.RangePointer(position, rangeLength); } ++ Sci::Position GapPosition() const { return cb.GapPosition(); } + + int SCI_METHOD GetLineIndentation(Sci_Position line); +- int SetLineIndentation(int line, int indent); +- int GetLineIndentPosition(int line) const; +- int GetColumn(int position); +- int CountCharacters(int startPos, int endPos) const; +- int CountUTF16(int startPos, int endPos) const; +- int FindColumn(int line, int column); +- void Indent(bool forwards, int lineBottom, int lineTop); ++ Sci::Position SetLineIndentation(Sci::Line line, Sci::Position indent); ++ Sci::Position GetLineIndentPosition(Sci::Line line) const; ++ Sci::Position GetColumn(Sci::Position position); ++ Sci::Position CountCharacters(Sci::Position startPos, Sci::Position endPos) const; ++ Sci::Position CountUTF16(Sci::Position startPos, Sci::Position endPos) const; ++ Sci::Position FindColumn(Sci::Line line, Sci::Position column); ++ void Indent(bool forwards, Sci::Line lineBottom, Sci::Line lineTop); + static std::string TransformLineEnds(const char *s, size_t len, int eolModeWanted); + void ConvertLineEnds(int eolModeSet); + void SetReadOnly(bool set) { cb.SetReadOnly(set); } + bool IsReadOnly() const { return cb.IsReadOnly(); } + +- void DelChar(int pos); +- void DelCharBack(int pos); ++ void DelChar(Sci::Position pos); ++ void DelCharBack(Sci::Position pos); + +- char CharAt(int position) const { return cb.CharAt(position); } ++ char CharAt(Sci::Position position) const { return cb.CharAt(position); } + void SCI_METHOD GetCharRange(char *buffer, Sci_Position position, Sci_Position lengthRetrieve) const { + cb.GetCharRange(buffer, position, lengthRetrieve); + } + char SCI_METHOD StyleAt(Sci_Position position) const { return cb.StyleAt(position); } + int StyleIndexAt(Sci_Position position) const { return static_cast<unsigned char>(cb.StyleAt(position)); } +- void GetStyleRange(unsigned char *buffer, int position, int lengthRetrieve) const { ++ void GetStyleRange(unsigned char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const { + cb.GetStyleRange(buffer, position, lengthRetrieve); + } +- int GetMark(int line); +- int MarkerNext(int lineStart, int mask) const; +- int AddMark(int line, int markerNum); +- void AddMarkSet(int line, int valueSet); +- void DeleteMark(int line, int markerNum); ++ int GetMark(Sci::Line line); ++ Sci::Line MarkerNext(Sci::Line lineStart, int mask) const; ++ int AddMark(Sci::Line line, int markerNum); ++ void AddMarkSet(Sci::Line line, int valueSet); ++ void DeleteMark(Sci::Line line, int markerNum); + void DeleteMarkFromHandle(int markerHandle); + void DeleteAllMarks(int markerNum); +- int LineFromHandle(int markerHandle); ++ Sci::Line LineFromHandle(int markerHandle); + Sci_Position SCI_METHOD LineStart(Sci_Position line) const; +- bool IsLineStartPosition(int position) const; ++ bool IsLineStartPosition(Sci::Position position) const; + Sci_Position SCI_METHOD LineEnd(Sci_Position line) const; +- int LineEndPosition(int position) const; +- bool IsLineEndPosition(int position) const; +- bool IsPositionInLineEnd(int position) const; +- int VCHomePosition(int position) const; ++ Sci::Position LineEndPosition(Sci::Position position) const; ++ bool IsLineEndPosition(Sci::Position position) const; ++ bool IsPositionInLineEnd(Sci::Position position) const; ++ Sci::Position VCHomePosition(Sci::Position position) const; + + int SCI_METHOD SetLevel(Sci_Position line, int level); + int SCI_METHOD GetLevel(Sci_Position line) const; + void ClearLevels(); +- int GetLastChild(int lineParent, int level=-1, int lastLine=-1); +- int GetFoldParent(int line) const; +- void GetHighlightDelimiters(HighlightDelimiter &hDelimiter, int line, int lastLine); ++ Sci::Line GetLastChild(Sci::Line lineParent, int level=-1, Sci::Line lastLine=-1); ++ Sci::Line GetFoldParent(Sci::Line line) const; ++ void GetHighlightDelimiters(HighlightDelimiter &hDelimiter, Sci::Line line, Sci::Line lastLine); + + void Indent(bool forwards); +- int ExtendWordSelect(int pos, int delta, bool onlyWordCharacters=false) const; +- int NextWordStart(int pos, int delta) const; +- int NextWordEnd(int pos, int delta) const; ++ Sci::Position ExtendWordSelect(Sci::Position pos, int delta, bool onlyWordCharacters=false) const; ++ Sci::Position NextWordStart(Sci::Position pos, int delta) const; ++ Sci::Position NextWordEnd(Sci::Position pos, int delta) const; + Sci_Position SCI_METHOD Length() const { return cb.Length(); } +- void Allocate(int newSize) { cb.Allocate(newSize); } ++ void Allocate(Sci::Position newSize) { cb.Allocate(newSize); } + +- CharacterExtracted ExtractCharacter(int position) const; ++ CharacterExtracted ExtractCharacter(Sci::Position position) const; + +- bool IsWordStartAt(int pos) const; +- bool IsWordEndAt(int pos) const; +- bool IsWordAt(int start, int end) const; ++ bool IsWordStartAt(Sci::Position pos) const; ++ bool IsWordEndAt(Sci::Position pos) const; ++ bool IsWordAt(Sci::Position start, Sci::Position end) const; + +- bool MatchesWordOptions(bool word, bool wordStart, int pos, int length) const; ++ bool MatchesWordOptions(bool word, bool wordStart, Sci::Position pos, Sci::Position length) const; + bool HasCaseFolder() const; + void SetCaseFolder(CaseFolder *pcf_); +- long FindText(int minPos, int maxPos, const char *search, int flags, int *length); +- const char *SubstituteByPosition(const char *text, int *length); +- int LinesTotal() const; ++ long FindText(Sci::Position minPos, Sci::Position maxPos, const char *search, int flags, Sci::Position *length); ++ const char *SubstituteByPosition(const char *text, Sci::Position *length); ++ Sci::Line LinesTotal() const; + + void SetDefaultCharClasses(bool includeWordClass); + void SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass); +@@ -412,9 +405,9 @@ + 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); +- int GetEndStyled() const { return endStyled; } +- void EnsureStyledTo(int pos); +- void StyleToAdjustingLineDuration(int pos); ++ Sci::Position GetEndStyled() const { return endStyled; } ++ void EnsureStyledTo(Sci::Position pos); ++ void StyleToAdjustingLineDuration(Sci::Position pos); + void LexerChanged(); + int GetStyleClock() const { return styleClock; } + void IncrementStyleClock(); +@@ -425,20 +418,20 @@ + + int SCI_METHOD SetLineState(Sci_Position line, int state); + int SCI_METHOD GetLineState(Sci_Position line) const; +- int GetMaxLineState(); ++ Sci::Line GetMaxLineState(); + void SCI_METHOD ChangeLexerState(Sci_Position start, Sci_Position end); + +- StyledText MarginStyledText(int line) const; +- void MarginSetStyle(int line, int style); +- void MarginSetStyles(int line, const unsigned char *styles); +- void MarginSetText(int line, const char *text); ++ StyledText MarginStyledText(Sci::Line line) const; ++ void MarginSetStyle(Sci::Line line, int style); ++ void MarginSetStyles(Sci::Line line, const unsigned char *styles); ++ void MarginSetText(Sci::Line line, const char *text); + void MarginClearAll(); + +- StyledText AnnotationStyledText(int line) const; +- void AnnotationSetText(int line, const char *text); +- void AnnotationSetStyle(int line, int style); +- void AnnotationSetStyles(int line, const unsigned char *styles); +- int AnnotationLines(int line) const; ++ StyledText AnnotationStyledText(Sci::Line line) const; ++ void AnnotationSetText(Sci::Line line, const char *text); ++ void AnnotationSetStyle(Sci::Line line, int style); ++ void AnnotationSetStyles(Sci::Line line, const unsigned char *styles); ++ int AnnotationLines(Sci::Line line) const; + void AnnotationClearAll(); + + bool AddWatcher(DocWatcher *watcher, void *userData); +@@ -447,14 +440,14 @@ + bool IsASCIIWordByte(unsigned char ch) const; + CharClassify::cc WordCharacterClass(unsigned int ch) const; + bool IsWordPartSeparator(unsigned int ch) const; +- int WordPartLeft(int pos) const; +- int WordPartRight(int pos) const; +- int ExtendStyleRange(int pos, int delta, bool singleLine = false); +- bool IsWhiteLine(int line) const; +- int ParaUp(int pos) const; +- int ParaDown(int pos) const; ++ Sci::Position WordPartLeft(Sci::Position pos) const; ++ Sci::Position WordPartRight(Sci::Position pos) const; ++ Sci::Position ExtendStyleRange(Sci::Position pos, int delta, bool singleLine = false); ++ bool IsWhiteLine(Sci::Line line) const; ++ Sci::Position ParaUp(Sci::Position pos) const; ++ Sci::Position ParaDown(Sci::Position pos) const; + int IndentSize() const { return actualIndentInChars; } +- int BraceMatch(int position, int maxReStyle); ++ Sci::Position BraceMatch(Sci::Position position, Sci::Position maxReStyle); + + private: + void NotifyModifyAttempt(); +@@ -491,18 +484,18 @@ + class DocModification { + public: + int modificationType; +- int position; +- int length; +- int linesAdded; /**< Negative if lines deleted. */ ++ Sci::Position position; ++ Sci::Position length; ++ Sci::Line linesAdded; /**< Negative if lines deleted. */ + const char *text; /**< Only valid for changes to text, not for changes to style. */ +- int line; ++ Sci::Line line; + int foldLevelNow; + int foldLevelPrev; +- int annotationLinesAdded; +- int token; ++ Sci::Line annotationLinesAdded; ++ Sci::Position token; + +- DocModification(int modificationType_, int position_=0, int length_=0, +- int linesAdded_=0, const char *text_=0, int line_=0) : ++ DocModification(int modificationType_, Sci::Position position_=0, Sci::Position length_=0, ++ Sci::Line linesAdded_=0, const char *text_=0, Sci::Line line_=0) : + modificationType(modificationType_), + position(position_), + length(length_), +@@ -514,7 +507,7 @@ + annotationLinesAdded(0), + token(0) {} + +- DocModification(int modificationType_, const Action &act, int linesAdded_=0) : ++ DocModification(int modificationType_, const Action &act, Sci::Line linesAdded_=0) : + modificationType(modificationType_), + position(act.position), + length(act.lenData), +@@ -539,7 +532,7 @@ + virtual void NotifySavePoint(Document *doc, void *userData, bool atSavePoint) = 0; + virtual void NotifyModified(Document *doc, DocModification mh, void *userData) = 0; + virtual void NotifyDeleted(Document *doc, void *userData) = 0; +- virtual void NotifyStyleNeeded(Document *doc, void *userData, int endPos) = 0; ++ virtual void NotifyStyleNeeded(Document *doc, void *userData, Sci::Position endPos) = 0; + virtual void NotifyLexerChanged(Document *doc, void *userData) = 0; + virtual void NotifyErrorOccurred(Document *doc, void *userData, int status) = 0; + }; +diff -r 1788f6795302 -r a0f26eaf474d src/EditModel.cxx +--- a/src/EditModel.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/EditModel.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -57,17 +57,17 @@ + inOverstrike = false; + xOffset = 0; + trackLineWidth = false; +- posDrag = SelectionPosition(invalidPosition); +- braces[0] = invalidPosition; +- braces[1] = invalidPosition; ++ posDrag = SelectionPosition(Sci::invalidPosition); ++ braces[0] = Sci::invalidPosition; ++ braces[1] = Sci::invalidPosition; + bracesMatchStyle = STYLE_BRACEBAD; + highlightGuideColumn = 0; + primarySelection = true; + imeInteraction = imeWindowed; + foldFlags = 0; + foldDisplayTextStyle = SC_FOLDDISPLAYTEXT_HIDDEN; +- hotspot = Range(invalidPosition); +- hoverIndicatorPos = invalidPosition; ++ hotspot = Range(Sci::invalidPosition); ++ hoverIndicatorPos = Sci::invalidPosition; + wrapWidth = LineLayout::wrapWidthInfinite; + pdoc = new Document(); + pdoc->AddRef(); +diff -r 1788f6795302 -r a0f26eaf474d src/EditModel.h +--- a/src/EditModel.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/EditModel.h Fri Mar 31 18:19:38 2017 +1100 +@@ -36,7 +36,7 @@ + SpecialRepresentations reprs; + Caret caret; + SelectionPosition posDrag; +- Position braces[2]; ++ Sci::Position braces[2]; + int bracesMatchStyle; + int highlightGuideColumn; + Selection sel; +@@ -49,7 +49,7 @@ + ContractionState cs; + // Hotspot support + Range hotspot; +- int hoverIndicatorPos; ++ Sci::Position hoverIndicatorPos; + + // Wrapping support + int wrapWidth; +@@ -58,9 +58,9 @@ + + EditModel(); + virtual ~EditModel(); +- virtual int TopLineOfMain() const = 0; ++ virtual Sci::Line TopLineOfMain() const = 0; + virtual Point GetVisibleOriginInMain() const = 0; +- virtual int LinesOnScreen() const = 0; ++ virtual Sci::Line LinesOnScreen() const = 0; + virtual Range GetHotSpotRange() const = 0; + }; + +diff -r 1788f6795302 -r a0f26eaf474d src/EditView.cxx +--- a/src/EditView.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/EditView.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -222,19 +222,19 @@ + ldTabstops = 0; + } + +-XYPOSITION EditView::NextTabstopPos(int line, XYPOSITION x, XYPOSITION tabWidth) const { ++XYPOSITION EditView::NextTabstopPos(Sci::Line line, XYPOSITION x, XYPOSITION tabWidth) const { + int next = GetNextTabstop(line, static_cast<int>(x + tabWidthMinimumPixels)); + if (next > 0) + return static_cast<XYPOSITION>(next); + return (static_cast<int>((x + tabWidthMinimumPixels) / tabWidth) + 1) * tabWidth; + } + +-bool EditView::ClearTabstops(int line) { ++bool EditView::ClearTabstops(Sci::Line line) { + LineTabstops *lt = static_cast<LineTabstops *>(ldTabstops); + return lt && lt->ClearTabstops(line); + } + +-bool EditView::AddTabstop(int line, int x) { ++bool EditView::AddTabstop(Sci::Line line, int x) { + if (!ldTabstops) { + ldTabstops = new LineTabstops(); + } +@@ -242,7 +242,7 @@ + return lt && lt->AddTabstop(line, x); + } + +-int EditView::GetNextTabstop(int line, int x) const { ++int EditView::GetNextTabstop(Sci::Line line, int x) const { + LineTabstops *lt = static_cast<LineTabstops *>(ldTabstops); + if (lt) { + return lt->GetNextTabstop(line, x); +@@ -251,14 +251,14 @@ + } + } + +-void EditView::LinesAddedOrRemoved(int lineOfPos, int linesAdded) { ++void EditView::LinesAddedOrRemoved(Sci::Line lineOfPos, Sci::Line linesAdded) { + if (ldTabstops) { + if (linesAdded > 0) { +- for (int line = lineOfPos; line < lineOfPos + linesAdded; line++) { ++ for (Sci::Line line = lineOfPos; line < lineOfPos + linesAdded; line++) { + ldTabstops->InsertLine(line); + } + } else { +- for (int line = (lineOfPos + -linesAdded) - 1; line >= lineOfPos; line--) { ++ for (Sci::Line line = (lineOfPos + -linesAdded) - 1; line >= lineOfPos; line--) { + ldTabstops->RemoveLine(line); + } + } +@@ -345,11 +345,11 @@ + } + } + +-LineLayout *EditView::RetrieveLineLayout(int lineNumber, const EditModel &model) { +- int posLineStart = model.pdoc->LineStart(lineNumber); +- int posLineEnd = model.pdoc->LineStart(lineNumber + 1); ++LineLayout *EditView::RetrieveLineLayout(Sci::Line lineNumber, const EditModel &model) { ++ Sci::Position posLineStart = model.pdoc->LineStart(lineNumber); ++ Sci::Position posLineEnd = model.pdoc->LineStart(lineNumber + 1); + PLATFORM_ASSERT(posLineEnd >= posLineStart); +- int lineCaret = model.pdoc->LineFromPosition(model.sel.MainCaret()); ++ Sci::Line lineCaret = model.pdoc->LineFromPosition(model.sel.MainCaret()); + return llc.Retrieve(lineNumber, lineCaret, + posLineEnd - posLineStart, model.pdoc->GetStyleClock(), + model.LinesOnScreen() + 1, model.pdoc->LinesTotal()); +@@ -360,20 +360,20 @@ + * Copy the given @a line and its styles from the document into local arrays. + * Also determine the x position at which each character starts. + */ +-void EditView::LayoutLine(const EditModel &model, int line, Surface *surface, const ViewStyle &vstyle, LineLayout *ll, int width) { ++void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surface, const ViewStyle &vstyle, LineLayout *ll, int width) { + if (!ll) + return; + + PLATFORM_ASSERT(line < model.pdoc->LinesTotal()); + PLATFORM_ASSERT(ll->chars != NULL); +- int posLineStart = model.pdoc->LineStart(line); +- int posLineEnd = model.pdoc->LineStart(line + 1); ++ Sci::Position posLineStart = model.pdoc->LineStart(line); ++ Sci::Position posLineEnd = model.pdoc->LineStart(line + 1); + // If the line is very long, limit the treatment to a length that should fit in the viewport + if (posLineEnd >(posLineStart + ll->maxLineLength)) { + posLineEnd = posLineStart + ll->maxLineLength; + } + if (ll->validity == LineLayout::llCheckTextAndStyle) { +- int lineLength = posLineEnd - posLineStart; ++ Sci::Position lineLength = posLineEnd - posLineStart; + if (!vstyle.viewEOL) { + lineLength = model.pdoc->LineEnd(line) - posLineStart; + } +@@ -384,7 +384,7 @@ + int styleByte = 0; + int numCharsInLine = 0; + while (numCharsInLine < lineLength) { +- int charInDoc = numCharsInLine + posLineStart; ++ Sci::Position charInDoc = numCharsInLine + posLineStart; + char chDoc = model.pdoc->CharAt(charInDoc); + styleByte = model.pdoc->StyleIndexAt(charInDoc); + allSame = allSame && +@@ -436,7 +436,7 @@ + model.pdoc->GetStyleRange(ll->styles, posLineStart, lineLength); + int numCharsBeforeEOL = model.pdoc->LineEnd(line) - posLineStart; + const int numCharsInLine = (vstyle.viewEOL) ? lineLength : numCharsBeforeEOL; +- for (int styleInLine = 0; styleInLine < numCharsInLine; styleInLine++) { ++ for (Sci::Position styleInLine = 0; styleInLine < numCharsInLine; styleInLine++) { + const unsigned char styleByte = ll->styles[styleInLine]; + ll->styles[styleInLine] = styleByte; + } +@@ -503,7 +503,7 @@ + lastSegItalics = (!ts.representation) && ((ll->chars[ts.end() - 1] != ' ') && vstyle.styles[ll->styles[ts.start]].italic); + } + +- for (int posToIncrease = ts.start + 1; posToIncrease <= ts.end(); posToIncrease++) { ++ for (Sci::Position posToIncrease = ts.start + 1; posToIncrease <= ts.end(); posToIncrease++) { + ll->positions[posToIncrease] += ll->positions[ts.start]; + } + } +@@ -600,19 +600,19 @@ + } + } + +-Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, SelectionPosition pos, int topLine, ++Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, SelectionPosition pos, Sci::Line topLine, + const ViewStyle &vs, PointEnd pe) { + Point pt; + if (pos.Position() == INVALID_POSITION) + return pt; +- int lineDoc = model.pdoc->LineFromPosition(pos.Position()); +- int posLineStart = model.pdoc->LineStart(lineDoc); ++ Sci::Line lineDoc = model.pdoc->LineFromPosition(pos.Position()); ++ Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + if ((pe & peLineEnd) && (lineDoc > 0) && (pos.Position() == posLineStart)) { + // Want point at end of first line + lineDoc--; + posLineStart = model.pdoc->LineStart(lineDoc); + } +- const int lineVisible = model.cs.DisplayFromDoc(lineDoc); ++ const Sci::Line lineVisible = model.cs.DisplayFromDoc(lineDoc); + AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); + if (surface && ll) { + LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); +@@ -625,17 +625,17 @@ + return pt; + } + +-Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, int lineVisible, const ViewStyle &vs) { ++Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci::Line lineVisible, const ViewStyle &vs) { + Range rangeSubLine = Range(0,0); + if (lineVisible < 0) { + return rangeSubLine; + } +- const int lineDoc = model.cs.DocFromDisplay(lineVisible); +- const int positionLineStart = model.pdoc->LineStart(lineDoc); ++ const Sci::Line lineDoc = model.cs.DocFromDisplay(lineVisible); ++ const Sci::Position positionLineStart = model.pdoc->LineStart(lineDoc); + AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); + if (surface && ll) { + LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); +- const int lineStartSet = model.cs.DisplayFromDoc(lineDoc); ++ const Sci::Line lineStartSet = model.cs.DisplayFromDoc(lineDoc); + const int subLine = lineVisible - lineStartSet; + if (subLine < ll->lines) { + rangeSubLine = ll->SubLineRange(subLine); +@@ -652,26 +652,26 @@ + + SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditModel &model, PointDocument pt, bool canReturnInvalid, bool charPosition, bool virtualSpace, const ViewStyle &vs) { + pt.x = pt.x - vs.textStart; +- int visibleLine = static_cast<int>(floor(pt.y / vs.lineHeight)); ++ Sci::Line visibleLine = static_cast<int>(floor(pt.y / vs.lineHeight)); + if (!canReturnInvalid && (visibleLine < 0)) + visibleLine = 0; +- const int lineDoc = model.cs.DocFromDisplay(visibleLine); ++ const Sci::Line lineDoc = model.cs.DocFromDisplay(visibleLine); + if (canReturnInvalid && (lineDoc < 0)) + return SelectionPosition(INVALID_POSITION); + if (lineDoc >= model.pdoc->LinesTotal()) + return SelectionPosition(canReturnInvalid ? INVALID_POSITION : model.pdoc->Length()); +- const int posLineStart = model.pdoc->LineStart(lineDoc); ++ const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); + if (surface && ll) { + LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); +- const int lineStartSet = model.cs.DisplayFromDoc(lineDoc); ++ const Sci::Line lineStartSet = model.cs.DisplayFromDoc(lineDoc); + const int subLine = visibleLine - lineStartSet; + if (subLine < ll->lines) { + const Range rangeSubLine = ll->SubLineRange(subLine); + const XYPOSITION subLineStart = ll->positions[rangeSubLine.start]; + if (subLine > 0) // Wrapped + pt.x -= ll->wrapIndent; +- const int positionInLine = ll->FindPositionFromX(static_cast<XYPOSITION>(pt.x + subLineStart), ++ const Sci::Position positionInLine = ll->FindPositionFromX(static_cast<XYPOSITION>(pt.x + subLineStart), + rangeSubLine, charPosition); + if (positionInLine < rangeSubLine.end) { + return SelectionPosition(model.pdoc->MovePositionOutsideChar(positionInLine + posLineStart, 1)); +@@ -700,14 +700,14 @@ + * Ensure is between whole characters when document is in multi-byte or UTF-8 mode. + * This method is used for rectangular selections and does not work on wrapped lines. + */ +-SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel &model, int lineDoc, int x, const ViewStyle &vs) { ++SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel &model, Sci::Line lineDoc, int x, const ViewStyle &vs) { + AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); + if (surface && ll) { +- const int posLineStart = model.pdoc->LineStart(lineDoc); ++ const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); + const Range rangeSubLine = ll->SubLineRange(0); + const XYPOSITION subLineStart = ll->positions[rangeSubLine.start]; +- const int positionInLine = ll->FindPositionFromX(x + subLineStart, rangeSubLine, false); ++ const Sci::Position positionInLine = ll->FindPositionFromX(x + subLineStart, rangeSubLine, false); + if (positionInLine < rangeSubLine.end) { + return SelectionPosition(model.pdoc->MovePositionOutsideChar(positionInLine + posLineStart, 1)); + } +@@ -719,14 +719,14 @@ + return SelectionPosition(0); + } + +-int EditView::DisplayFromPosition(Surface *surface, const EditModel &model, int pos, const ViewStyle &vs) { +- int lineDoc = model.pdoc->LineFromPosition(pos); +- int lineDisplay = model.cs.DisplayFromDoc(lineDoc); ++Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model, int pos, const ViewStyle &vs) { ++ Sci::Line lineDoc = model.pdoc->LineFromPosition(pos); ++ Sci::Line lineDisplay = model.cs.DisplayFromDoc(lineDoc); + AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); + if (surface && ll) { + LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); +- unsigned int posLineStart = model.pdoc->LineStart(lineDoc); +- int posInLine = pos - posLineStart; ++ Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); ++ Sci::Position posInLine = pos - posLineStart; + lineDisplay--; // To make up for first increment ahead. + for (int subLine = 0; subLine < ll->lines; subLine++) { + if (posInLine >= ll->LineStart(subLine)) { +@@ -737,14 +737,14 @@ + return lineDisplay; + } + +-int EditView::StartEndDisplayLine(Surface *surface, const EditModel &model, int pos, bool start, const ViewStyle &vs) { +- int line = model.pdoc->LineFromPosition(pos); ++Sci::Position EditView::StartEndDisplayLine(Surface *surface, const EditModel &model, Sci::Position pos, bool start, const ViewStyle &vs) { ++ Sci::Line line = model.pdoc->LineFromPosition(pos); + AutoLineLayout ll(llc, RetrieveLineLayout(line, model)); +- int posRet = INVALID_POSITION; ++ Sci::Position posRet = INVALID_POSITION; + if (surface && ll) { +- unsigned int posLineStart = model.pdoc->LineStart(line); ++ Sci::Position posLineStart = model.pdoc->LineStart(line); + LayoutLine(model, line, surface, vs, ll, model.wrapWidth); +- int posInLine = pos - posLineStart; ++ Sci::Position posInLine = pos - posLineStart; + if (posInLine <= ll->maxLineLength) { + for (int subLine = 0; subLine < ll->lines; subLine++) { + if ((posInLine >= ll->LineStart(subLine)) && +@@ -772,7 +772,7 @@ + } + + static ColourDesired TextBackground(const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- ColourOptional background, int inSelection, bool inHotspot, int styleMain, int i) { ++ ColourOptional background, int inSelection, bool inHotspot, int styleMain, Sci::Position i) { + if (inSelection == 1) { + if (vsDraw.selColours.back.isSet && (vsDraw.selAlpha == SC_ALPHA_NOALPHA)) { + return SelectionBackground(vsDraw, true, model.primarySelection); +@@ -796,7 +796,7 @@ + } + } + +-void EditView::DrawIndentGuide(Surface *surface, int lineVisible, int lineHeight, int start, PRectangle rcSegment, bool highlight) { ++void EditView::DrawIndentGuide(Surface *surface, Sci::Line lineVisible, int lineHeight, Sci::Position start, PRectangle rcSegment, bool highlight) { + Point from = Point::FromInts(0, ((lineVisible & 1) && (lineHeight & 1)) ? 1 : 0); + PRectangle rcCopyArea = PRectangle::FromInts(start + 1, static_cast<int>(rcSegment.top), start + 2, static_cast<int>(rcSegment.bottom)); + surface->Copy(rcCopyArea, from, +@@ -836,10 +836,10 @@ + } + + void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- PRectangle rcLine, int line, int lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart, ++ PRectangle rcLine, Sci::Line line, Sci::Position lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart, + ColourOptional background) { + +- const int posLineStart = model.pdoc->LineStart(line); ++ const Sci::Position posLineStart = model.pdoc->LineStart(line); + PRectangle rcSegment = rcLine; + + const bool lastSubLine = subLine == (ll->lines - 1); +@@ -879,7 +879,7 @@ + int eolInSelection = 0; + int alpha = SC_ALPHA_NOALPHA; + if (!hideSelection) { +- int posAfterLineEnd = model.pdoc->LineStart(line + 1); ++ Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1); + eolInSelection = (lastSubLine == true) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0; + alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; + } +@@ -887,7 +887,7 @@ + // Draw the [CR], [LF], or [CR][LF] blobs if visible line ends are on + XYPOSITION blobsWidth = 0; + if (lastSubLine) { +- for (int eolPos = ll->numCharsBeforeEOL; eolPos<ll->numCharsInLine; eolPos++) { ++ for (Sci::Position eolPos = ll->numCharsBeforeEOL; eolPos<ll->numCharsInLine; eolPos++) { + rcSegment.left = xStart + ll->positions[eolPos] - static_cast<XYPOSITION>(subLineStart)+virtualSpace; + rcSegment.right = xStart + ll->positions[eolPos + 1] - static_cast<XYPOSITION>(subLineStart)+virtualSpace; + blobsWidth += rcSegment.Width(); +@@ -987,8 +987,8 @@ + } + } + +-static void DrawIndicator(int indicNum, int startPos, int endPos, Surface *surface, const ViewStyle &vsDraw, +- const LineLayout *ll, int xStart, PRectangle rcLine, int secondCharacter, int subLine, Indicator::DrawState drawState, int value) { ++static void DrawIndicator(int indicNum, Sci::Position startPos, Sci::Position endPos, Surface *surface, const ViewStyle &vsDraw, ++ const LineLayout *ll, int xStart, PRectangle rcLine, Sci::Position secondCharacter, int subLine, Indicator::DrawState drawState, int value) { + const XYPOSITION subLineStart = ll->positions[ll->LineStart(subLine)]; + PRectangle rcIndic( + ll->positions[startPos] + xStart - subLineStart, +@@ -1008,26 +1008,26 @@ + } + + static void DrawIndicators(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int xStart, PRectangle rcLine, int subLine, int lineEnd, bool under, int hoverIndicatorPos) { ++ Sci::Line line, int xStart, PRectangle rcLine, int subLine, Sci::Position lineEnd, bool under, Sci::Position hoverIndicatorPos) { + // Draw decorators +- const int posLineStart = model.pdoc->LineStart(line); +- const int lineStart = ll->LineStart(subLine); +- const int posLineEnd = posLineStart + lineEnd; ++ const Sci::Position posLineStart = model.pdoc->LineStart(line); ++ const Sci::Position lineStart = ll->LineStart(subLine); ++ const Sci::Position posLineEnd = posLineStart + lineEnd; + + for (Decoration *deco = model.pdoc->decorations.root; deco; deco = deco->next) { + if (under == vsDraw.indicators[deco->indicator].under) { +- int startPos = posLineStart + lineStart; ++ Sci::Position startPos = posLineStart + lineStart; + if (!deco->rs.ValueAt(startPos)) { + startPos = deco->rs.EndRun(startPos); + } + while ((startPos < posLineEnd) && (deco->rs.ValueAt(startPos))) { + const Range rangeRun(deco->rs.StartRun(startPos), deco->rs.EndRun(startPos)); +- const int endPos = std::min(rangeRun.end, posLineEnd); ++ const Sci::Position endPos = std::min(rangeRun.end, posLineEnd); + const bool hover = vsDraw.indicators[deco->indicator].IsDynamic() && + rangeRun.ContainsCharacter(hoverIndicatorPos); + const int value = deco->rs.ValueAt(startPos); + Indicator::DrawState drawState = hover ? Indicator::drawHover : Indicator::drawNormal; +- const int posSecond = model.pdoc->MovePositionOutsideChar(rangeRun.First() + 1, 1); ++ const Sci::Position posSecond = model.pdoc->MovePositionOutsideChar(rangeRun.First() + 1, 1); + DrawIndicator(deco->indicator, startPos - posLineStart, endPos - posLineStart, + surface, vsDraw, ll, xStart, rcLine, posSecond - posLineStart, subLine, drawState, value); + startPos = endPos; +@@ -1045,16 +1045,16 @@ + if (under == vsDraw.indicators[braceIndicator].under) { + Range rangeLine(posLineStart + lineStart, posLineEnd); + if (rangeLine.ContainsCharacter(model.braces[0])) { +- int braceOffset = model.braces[0] - posLineStart; ++ Sci::Position braceOffset = model.braces[0] - posLineStart; + if (braceOffset < ll->numCharsInLine) { +- const int secondOffset = model.pdoc->MovePositionOutsideChar(model.braces[0] + 1, 1) - posLineStart; ++ const Sci::Position secondOffset = model.pdoc->MovePositionOutsideChar(model.braces[0] + 1, 1) - posLineStart; + DrawIndicator(braceIndicator, braceOffset, braceOffset + 1, surface, vsDraw, ll, xStart, rcLine, secondOffset, subLine, Indicator::drawNormal, 1); + } + } + if (rangeLine.ContainsCharacter(model.braces[1])) { +- int braceOffset = model.braces[1] - posLineStart; ++ Sci::Position braceOffset = model.braces[1] - posLineStart; + if (braceOffset < ll->numCharsInLine) { +- const int secondOffset = model.pdoc->MovePositionOutsideChar(model.braces[1] + 1, 1) - posLineStart; ++ const Sci::Position secondOffset = model.pdoc->MovePositionOutsideChar(model.braces[1] + 1, 1) - posLineStart; + DrawIndicator(braceIndicator, braceOffset, braceOffset + 1, surface, vsDraw, ll, xStart, rcLine, secondOffset, subLine, Indicator::drawNormal, 1); + } + } +@@ -1063,7 +1063,7 @@ + } + + void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int xStart, PRectangle rcLine, int subLine, XYACCUMULATOR subLineStart, DrawPhase phase) { ++ Sci::Line line, int xStart, PRectangle rcLine, int subLine, XYACCUMULATOR subLineStart, DrawPhase phase) { + const bool lastSubLine = subLine == (ll->lines - 1); + if (!lastSubLine) + return; +@@ -1080,7 +1080,7 @@ + int eolInSelection = 0; + int alpha = SC_ALPHA_NOALPHA; + if (!hideSelection) { +- int posAfterLineEnd = model.pdoc->LineStart(line + 1); ++ Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1); + eolInSelection = (subLine == (ll->lines - 1)) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0; + alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; + } +@@ -1159,7 +1159,7 @@ + } + + void EditView::DrawAnnotation(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int xStart, PRectangle rcLine, int subLine, DrawPhase phase) { ++ Sci::Line line, int xStart, PRectangle rcLine, int subLine, DrawPhase phase) { + int indent = static_cast<int>(model.pdoc->GetLineIndentation(line) * vsDraw.spaceWidth); + PRectangle rcSegment = rcLine; + int annotationLine = subLine - ll->lines; +@@ -1216,18 +1216,18 @@ + } + + static void DrawBlockCaret(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int subLine, int xStart, int offset, int posCaret, PRectangle rcCaret, ColourDesired caretColour) { ++ int subLine, int xStart, Sci::Position offset, Sci::Position posCaret, PRectangle rcCaret, ColourDesired caretColour) { + +- int lineStart = ll->LineStart(subLine); +- int posBefore = posCaret; +- int posAfter = model.pdoc->MovePositionOutsideChar(posCaret + 1, 1); +- int numCharsToDraw = posAfter - posCaret; ++ Sci::Position lineStart = ll->LineStart(subLine); ++ Sci::Position posBefore = posCaret; ++ Sci::Position posAfter = model.pdoc->MovePositionOutsideChar(posCaret + 1, 1); ++ Sci::Position numCharsToDraw = posAfter - posCaret; + + // Work out where the starting and ending offsets are. We need to + // see if the previous character shares horizontal space, such as a + // glyph / combining character. If so we'll need to draw that too. +- int offsetFirstChar = offset; +- int offsetLastChar = offset + (posAfter - posCaret); ++ Sci::Position offsetFirstChar = offset; ++ Sci::Position offsetLastChar = offset + (posAfter - posCaret); + while ((posBefore > 0) && ((offsetLastChar - numCharsToDraw) >= lineStart)) { + if ((ll->positions[offsetLastChar] - ll->positions[offsetLastChar - numCharsToDraw]) > 0) { + // The char does not share horizontal space +@@ -1282,12 +1282,12 @@ + } + + void EditView::DrawCarets(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int lineDoc, int xStart, PRectangle rcLine, int subLine) const { ++ Sci::Line lineDoc, int xStart, PRectangle rcLine, int subLine) const { + // When drag is active it is the only caret drawn + bool drawDrag = model.posDrag.IsValid(); + if (hideSelection && !drawDrag) + return; +- const int posLineStart = model.pdoc->LineStart(lineDoc); ++ const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + // For each selection draw + for (size_t r = 0; (r<model.sel.Count()) || drawDrag; r++) { + const bool mainCaret = r == model.sel.Main(); +@@ -1304,7 +1304,7 @@ + if (ll->InLine(offset, subLine) && offset <= ll->numCharsBeforeEOL) { + XYPOSITION xposCaret = ll->positions[offset] + virtualOffset - ll->positions[ll->LineStart(subLine)]; + if (ll->wrapIndent != 0) { +- int lineStart = ll->LineStart(subLine); ++ Sci::Position lineStart = ll->LineStart(subLine); + if (lineStart != 0) // Wrapped + xposCaret += ll->wrapIndent; + } +@@ -1399,7 +1399,7 @@ + } + + void EditView::DrawBackground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- PRectangle rcLine, Range lineRange, int posLineStart, int xStart, ++ PRectangle rcLine, Range lineRange, Sci::Position posLineStart, int xStart, + int subLine, ColourOptional background) const { + + const bool selBackDrawn = vsDraw.SelectionBackgroundDrawn(); +@@ -1416,8 +1416,8 @@ + while (bfBack.More()) { + + const TextSegment ts = bfBack.Next(); +- const int i = ts.end() - 1; +- const int iDoc = i + posLineStart; ++ const Sci::Position i = ts.end() - 1; ++ const Sci::Position iDoc = i + posLineStart; + + PRectangle rcSegment = rcLine; + rcSegment.left = ll->positions[ts.start] + xStart - static_cast<XYPOSITION>(subLineStart); +@@ -1498,7 +1498,7 @@ + + // Draw underline mark as part of background if not transparent + static void DrawMarkUnderline(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, +- int line, PRectangle rcLine) { ++ Sci::Line line, PRectangle rcLine) { + int marks = model.pdoc->GetMark(line); + for (int markBit = 0; (markBit < 32) && marks; markBit++) { + if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_UNDERLINE) && +@@ -1511,12 +1511,12 @@ + } + } + static void DrawTranslucentSelection(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, PRectangle rcLine, int subLine, Range lineRange, int xStart) { ++ Sci::Line line, PRectangle rcLine, int subLine, Range lineRange, int xStart) { + if ((vsDraw.selAlpha != SC_ALPHA_NOALPHA) || (vsDraw.selAdditionalAlpha != SC_ALPHA_NOALPHA)) { +- const int posLineStart = model.pdoc->LineStart(line); ++ const Sci::Position posLineStart = model.pdoc->LineStart(line); + const XYACCUMULATOR subLineStart = ll->positions[lineRange.start]; + // For each selection draw +- int virtualSpaces = 0; ++ Sci::Position virtualSpaces = 0; + if (subLine == (ll->lines - 1)) { + virtualSpaces = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line)); + } +@@ -1550,7 +1550,7 @@ + + // Draw any translucent whole line states + static void DrawTranslucentLineState(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, PRectangle rcLine) { ++ Sci::Line line, PRectangle rcLine) { + if ((model.caret.active || vsDraw.alwaysShowCaretLineBackground) && vsDraw.showCaretLineBackground && ll->containsCaret) { + SimpleAlphaRectangle(surface, rcLine, vsDraw.caretLineBackground, vsDraw.caretLineAlpha); + } +@@ -1578,7 +1578,7 @@ + } + + void EditView::DrawForeground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int lineVisible, PRectangle rcLine, Range lineRange, int posLineStart, int xStart, ++ Sci::Line lineVisible, PRectangle rcLine, Range lineRange, Sci::Position posLineStart, int xStart, + int subLine, ColourOptional background) { + + const bool selBackDrawn = vsDraw.SelectionBackgroundDrawn(); +@@ -1598,8 +1598,8 @@ + while (bfFore.More()) { + + const TextSegment ts = bfFore.Next(); +- const int i = ts.end() - 1; +- const int iDoc = i + posLineStart; ++ const Sci::Position i = ts.end() - 1; ++ const Sci::Position iDoc = i + posLineStart; + + PRectangle rcSegment = rcLine; + rcSegment.left = ll->positions[ts.start] + xStart - static_cast<XYPOSITION>(subLineStart); +@@ -1770,16 +1770,16 @@ + } + + void EditView::DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int lineVisible, PRectangle rcLine, int xStart, int subLine) { ++ Sci::Line line, Sci::Line lineVisible, PRectangle rcLine, int xStart, int subLine) { + if ((vsDraw.viewIndentationGuides == ivLookForward || vsDraw.viewIndentationGuides == ivLookBoth) + && (subLine == 0)) { +- const int posLineStart = model.pdoc->LineStart(line); ++ const Sci::Position posLineStart = model.pdoc->LineStart(line); + int indentSpace = model.pdoc->GetLineIndentation(line); + int xStartText = static_cast<int>(ll->positions[model.pdoc->GetLineIndentPosition(line) - posLineStart]); + + // Find the most recent line with some text + +- int lineLastWithText = line; ++ Sci::Line lineLastWithText = line; + while (lineLastWithText > Platform::Maximum(line - 20, 0) && model.pdoc->IsWhiteLine(lineLastWithText)) { + lineLastWithText--; + } +@@ -1802,7 +1802,7 @@ + } + } + +- int lineNextWithText = line; ++ Sci::Line lineNextWithText = line; + while (lineNextWithText < Platform::Minimum(line + 20, model.pdoc->LinesTotal()) && model.pdoc->IsWhiteLine(lineNextWithText)) { + lineNextWithText++; + } +@@ -1824,7 +1824,7 @@ + } + + void EditView::DrawLine(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int lineVisible, int xStart, PRectangle rcLine, int subLine, DrawPhase phase) { ++ Sci::Line line, Sci::Line lineVisible, int xStart, PRectangle rcLine, int subLine, DrawPhase phase) { + + if (subLine >= ll->lines) { + DrawAnnotation(surface, model, vsDraw, ll, line, xStart, rcLine, subLine, phase); +@@ -1834,7 +1834,7 @@ + // See if something overrides the line background color. + const ColourOptional background = vsDraw.Background(model.pdoc->GetMark(line), model.caret.active, ll->containsCaret); + +- const int posLineStart = model.pdoc->LineStart(line); ++ const Sci::Position posLineStart = model.pdoc->LineStart(line); + + const Range lineRange = ll->SubLineRange(subLine); + const XYACCUMULATOR subLineStart = ll->positions[lineRange.start]; +@@ -1894,7 +1894,7 @@ + } + } + +-static void DrawFoldLines(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, int line, PRectangle rcLine) { ++static void DrawFoldLines(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, Sci::Line line, PRectangle rcLine) { + bool expanded = model.cs.GetExpanded(line); + const int level = model.pdoc->GetLevel(line); + const int levelNext = model.pdoc->GetLevel(line + 1); +@@ -1944,7 +1944,7 @@ + SelectionPosition posCaret = model.sel.RangeMain().caret; + if (model.posDrag.IsValid()) + posCaret = model.posDrag; +- const int lineCaret = model.pdoc->LineFromPosition(posCaret.Position()); ++ const Sci::Line lineCaret = model.pdoc->LineFromPosition(posCaret.Position()); + + PRectangle rcTextArea = rcClient; + if (vsDraw.marginInside) { +@@ -1971,7 +1971,7 @@ + const bool bracesIgnoreStyle = ((vsDraw.braceHighlightIndicatorSet && (model.bracesMatchStyle == STYLE_BRACELIGHT)) || + (vsDraw.braceBadLightIndicatorSet && (model.bracesMatchStyle == STYLE_BRACEBAD))); + +- int lineDocPrevious = -1; // Used to avoid laying out one document line multiple times ++ Sci::Line lineDocPrevious = -1; // Used to avoid laying out one document line multiple times + AutoLineLayout ll(llc, 0); + std::vector<DrawPhase> phases; + if ((phasesDraw == phasesMultiple) && !bufferedDraw) { +@@ -1986,13 +1986,13 @@ + if (!bufferedDraw) + ypos += screenLinePaintFirst * vsDraw.lineHeight; + int yposScreen = screenLinePaintFirst * vsDraw.lineHeight; +- int visibleLine = model.TopLineOfMain() + screenLinePaintFirst; ++ Sci::Line visibleLine = model.TopLineOfMain() + screenLinePaintFirst; + while (visibleLine < model.cs.LinesDisplayed() && yposScreen < rcArea.bottom) { + +- const int lineDoc = model.cs.DocFromDisplay(visibleLine); ++ const Sci::Line lineDoc = model.cs.DocFromDisplay(visibleLine); + // Only visible lines should be handled by the code within the loop + PLATFORM_ASSERT(model.cs.GetVisible(lineDoc)); +- const int lineStartSet = model.cs.DisplayFromDoc(lineDoc); ++ const Sci::Line lineStartSet = model.cs.DisplayFromDoc(lineDoc); + const int subLine = visibleLine - lineStartSet; + + // Copy this line and its styles from the document into local arrays +@@ -2099,11 +2099,11 @@ + } + + void EditView::FillLineRemainder(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, PRectangle rcArea, int subLine) const { ++ Sci::Line line, PRectangle rcArea, int subLine) const { + int eolInSelection = 0; + int alpha = SC_ALPHA_NOALPHA; + if (!hideSelection) { +- int posAfterLineEnd = model.pdoc->LineStart(line + 1); ++ Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1); + eolInSelection = (subLine == (ll->lines - 1)) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0; + alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; + } +@@ -2212,17 +2212,17 @@ + vsPrint.Refresh(*surfaceMeasure, model.pdoc->tabInChars); // Recalculate fixedColumnWidth + } + +- int linePrintStart = model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMin)); +- int linePrintLast = linePrintStart + (pfr->rc.bottom - pfr->rc.top) / vsPrint.lineHeight - 1; ++ Sci::Line linePrintStart = model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMin)); ++ Sci::Line linePrintLast = linePrintStart + (pfr->rc.bottom - pfr->rc.top) / vsPrint.lineHeight - 1; + if (linePrintLast < linePrintStart) + linePrintLast = linePrintStart; +- int linePrintMax = model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMax)); ++ Sci::Line linePrintMax = model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMax)); + if (linePrintLast > linePrintMax) + linePrintLast = linePrintMax; + //Platform::DebugPrintf("Formatting lines=[%0d,%0d,%0d] top=%0d bottom=%0d line=%0d %0d\n", + // linePrintStart, linePrintLast, linePrintMax, pfr->rc.top, pfr->rc.bottom, vsPrint.lineHeight, + // surfaceMeasure->Height(vsPrint.styles[STYLE_LINENUMBER].font)); +- int endPosPrint = model.pdoc->Length(); ++ Sci::Position endPosPrint = model.pdoc->Length(); + if (linePrintLast < model.pdoc->LinesTotal()) + endPosPrint = model.pdoc->LineStart(linePrintLast + 1); + +@@ -2232,9 +2232,9 @@ + int xStart = vsPrint.fixedColumnWidth + pfr->rc.left; + int ypos = pfr->rc.top; + +- int lineDoc = linePrintStart; ++ Sci::Line lineDoc = linePrintStart; + +- int nPrintPos = static_cast<int>(pfr->chrg.cpMin); ++ Sci::Position nPrintPos = static_cast<Sci::Position>(pfr->chrg.cpMin); + int visibleLine = 0; + int widthPrint = pfr->rc.right - pfr->rc.left - vsPrint.fixedColumnWidth; + if (printParameters.wrapState == eWrapNone) +@@ -2265,7 +2265,7 @@ + // to start printing from to ensure a particular position is on the first + // line of the page. + if (visibleLine == 0) { +- int startWithinLine = nPrintPos - model.pdoc->LineStart(lineDoc); ++ Sci::Position startWithinLine = nPrintPos - model.pdoc->LineStart(lineDoc); + for (int iwl = 0; iwl < ll.lines - 1; iwl++) { + if (ll.LineStart(iwl) <= startWithinLine && ll.LineStart(iwl + 1) >= startWithinLine) { + visibleLine = -iwl; +diff -r 1788f6795302 -r a0f26eaf474d src/EditView.h +--- a/src/EditView.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/EditView.h Fri Mar 31 18:19:38 2017 +1100 +@@ -97,53 +97,53 @@ + bool LinesOverlap() const; + + void ClearAllTabstops(); +- XYPOSITION NextTabstopPos(int line, XYPOSITION x, XYPOSITION tabWidth) const; +- bool ClearTabstops(int line); +- bool AddTabstop(int line, int x); +- int GetNextTabstop(int line, int x) const; +- void LinesAddedOrRemoved(int lineOfPos, int linesAdded); ++ XYPOSITION NextTabstopPos(Sci::Line line, XYPOSITION x, XYPOSITION tabWidth) const; ++ bool ClearTabstops(Sci::Line line); ++ bool AddTabstop(Sci::Line line, int x); ++ int GetNextTabstop(Sci::Line line, int x) const; ++ void LinesAddedOrRemoved(Sci::Line lineOfPos, Sci::Line linesAdded); + + void DropGraphics(bool freeObjects); + void AllocateGraphics(const ViewStyle &vsDraw); + void RefreshPixMaps(Surface *surfaceWindow, WindowID wid, const ViewStyle &vsDraw); + +- LineLayout *RetrieveLineLayout(int lineNumber, const EditModel &model); +- void LayoutLine(const EditModel &model, int line, Surface *surface, const ViewStyle &vstyle, ++ LineLayout *RetrieveLineLayout(Sci::Line lineNumber, const EditModel &model); ++ void LayoutLine(const EditModel &model, Sci::Line line, Surface *surface, const ViewStyle &vstyle, + LineLayout *ll, int width = LineLayout::wrapWidthInfinite); + +- Point LocationFromPosition(Surface *surface, const EditModel &model, SelectionPosition pos, int topLine, ++ Point LocationFromPosition(Surface *surface, const EditModel &model, SelectionPosition pos, Sci::Line topLine, + const ViewStyle &vs, PointEnd pe); +- Range RangeDisplayLine(Surface *surface, const EditModel &model, int lineVisible, const ViewStyle &vs); ++ Range RangeDisplayLine(Surface *surface, const EditModel &model, Sci::Line lineVisible, const ViewStyle &vs); + SelectionPosition SPositionFromLocation(Surface *surface, const EditModel &model, PointDocument pt, bool canReturnInvalid, + bool charPosition, bool virtualSpace, const ViewStyle &vs); +- SelectionPosition SPositionFromLineX(Surface *surface, const EditModel &model, int lineDoc, int x, const ViewStyle &vs); +- int DisplayFromPosition(Surface *surface, const EditModel &model, int pos, const ViewStyle &vs); +- int StartEndDisplayLine(Surface *surface, const EditModel &model, int pos, bool start, const ViewStyle &vs); ++ SelectionPosition SPositionFromLineX(Surface *surface, const EditModel &model, Sci::Line lineDoc, int x, const ViewStyle &vs); ++ Sci::Line DisplayFromPosition(Surface *surface, const EditModel &model, int pos, const ViewStyle &vs); ++ Sci::Position StartEndDisplayLine(Surface *surface, const EditModel &model, Sci::Position pos, bool start, const ViewStyle &vs); + +- void DrawIndentGuide(Surface *surface, int lineVisible, int lineHeight, int start, PRectangle rcSegment, bool highlight); ++ void DrawIndentGuide(Surface *surface, Sci::Line lineVisible, int lineHeight, Sci::Position start, PRectangle rcSegment, bool highlight); + void DrawEOL(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, PRectangle rcLine, +- int line, int lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart, ++ Sci::Line line, Sci::Position lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart, + ColourOptional background); + void DrawFoldDisplayText(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int xStart, PRectangle rcLine, int subLine, XYACCUMULATOR subLineStart, DrawPhase phase); ++ Sci::Line line, int xStart, PRectangle rcLine, int subLine, XYACCUMULATOR subLineStart, DrawPhase phase); + void DrawAnnotation(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int xStart, PRectangle rcLine, int subLine, DrawPhase phase); +- void DrawCarets(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line, ++ Sci::Line line, int xStart, PRectangle rcLine, int subLine, DrawPhase phase); ++ void DrawCarets(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, Sci::Line line, + int xStart, PRectangle rcLine, int subLine) const; + void DrawBackground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, PRectangle rcLine, +- Range lineRange, int posLineStart, int xStart, ++ Range lineRange, Sci::Position posLineStart, int xStart, + int subLine, ColourOptional background) const; +- void DrawForeground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int lineVisible, +- PRectangle rcLine, Range lineRange, int posLineStart, int xStart, ++ void DrawForeground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, Sci::Line lineVisible, ++ PRectangle rcLine, Range lineRange, Sci::Position posLineStart, int xStart, + int subLine, ColourOptional background); + void DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, int lineVisible, PRectangle rcLine, int xStart, int subLine); +- void DrawLine(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line, +- int lineVisible, int xStart, PRectangle rcLine, int subLine, DrawPhase phase); ++ Sci::Line line, Sci::Line lineVisible, PRectangle rcLine, int xStart, int subLine); ++ void DrawLine(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, Sci::Line line, ++ Sci::Line lineVisible, int xStart, PRectangle rcLine, int subLine, DrawPhase phase); + void PaintText(Surface *surfaceWindow, const EditModel &model, PRectangle rcArea, PRectangle rcClient, + const ViewStyle &vsDraw); + void FillLineRemainder(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, +- int line, PRectangle rcArea, int subLine) const; ++ Sci::Line line, PRectangle rcArea, int subLine) const; + long FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, Surface *surfaceMeasure, + const EditModel &model, const ViewStyle &vs); + }; +diff -r 1788f6795302 -r a0f26eaf474d src/Editor.cxx +--- a/src/Editor.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Editor.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -123,7 +123,7 @@ + ptMouseLast.y = 0; + inDragDrop = ddNone; + dropWentOutside = false; +- posDrop = SelectionPosition(invalidPosition); ++ posDrop = SelectionPosition(Sci::invalidPosition); + hotSpotClickPos = INVALID_POSITION; + selectionType = selChar; + +@@ -296,7 +296,7 @@ + return ptDocument; + } + +-int Editor::TopLineOfMain() const { ++Sci::Line Editor::TopLineOfMain() const { + if (wMargin.GetID()) + return 0; + else +@@ -319,25 +319,25 @@ + return rc; + } + +-int Editor::LinesOnScreen() const { ++Sci::Line Editor::LinesOnScreen() const { + PRectangle rcClient = GetClientRectangle(); + int htClient = static_cast<int>(rcClient.bottom - rcClient.top); + //Platform::DebugPrintf("lines on screen = %d\n", htClient / lineHeight + 1); + return htClient / vs.lineHeight; + } + +-int Editor::LinesToScroll() const { +- int retVal = LinesOnScreen() - 1; ++Sci::Line Editor::LinesToScroll() const { ++ Sci::Line retVal = LinesOnScreen() - 1; + if (retVal < 1) + return 1; + else + return retVal; + } + +-int Editor::MaxScrollPos() const { ++Sci::Line Editor::MaxScrollPos() const { + //Platform::DebugPrintf("Lines %d screen = %d maxScroll = %d\n", + //LinesTotal(), LinesOnScreen(), LinesTotal() - LinesOnScreen() + 1); +- int retVal = cs.LinesDisplayed(); ++ Sci::Line retVal = cs.LinesDisplayed(); + if (endAtLastLine) { + retVal -= LinesOnScreen(); + } else { +@@ -369,11 +369,11 @@ + return view.LocationFromPosition(surface, *this, pos, topLine, vs, pe); + } + +-Point Editor::LocationFromPosition(int pos, PointEnd pe) { ++Point Editor::LocationFromPosition(Sci::Position pos, PointEnd pe) { + return LocationFromPosition(SelectionPosition(pos), pe); + } + +-int Editor::XFromPosition(int pos) { ++int Editor::XFromPosition(Sci::Position pos) { + Point pt = LocationFromPosition(pos); + return static_cast<int>(pt.x) - vs.textStart + xOffset; + } +@@ -403,7 +403,7 @@ + return view.SPositionFromLocation(surface, *this, ptdoc, canReturnInvalid, charPosition, virtualSpace, vs); + } + +-int Editor::PositionFromLocation(Point pt, bool canReturnInvalid, bool charPosition) { ++Sci::Position Editor::PositionFromLocation(Point pt, bool canReturnInvalid, bool charPosition) { + return SPositionFromLocation(pt, canReturnInvalid, charPosition, false).Position(); + } + +@@ -412,7 +412,7 @@ + * Ensure is between whole characters when document is in multi-byte or UTF-8 mode. + * This method is used for rectangular selections and does not work on wrapped lines. + */ +-SelectionPosition Editor::SPositionFromLineX(int lineDoc, int x) { ++SelectionPosition Editor::SPositionFromLineX(Sci::Line lineDoc, int x) { + RefreshStyleData(); + if (lineDoc >= pdoc->LinesTotal()) + return SelectionPosition(pdoc->Length()); +@@ -421,15 +421,15 @@ + return view.SPositionFromLineX(surface, *this, lineDoc, x, vs); + } + +-int Editor::PositionFromLineX(int lineDoc, int x) { ++Sci::Position Editor::PositionFromLineX(Sci::Line lineDoc, int x) { + return SPositionFromLineX(lineDoc, x).Position(); + } + +-int Editor::LineFromLocation(Point pt) const { ++Sci::Line Editor::LineFromLocation(Point pt) const { + return cs.DocFromDisplay(static_cast<int>(pt.y) / vs.lineHeight + topLine); + } + +-void Editor::SetTopLine(int topLineNew) { ++void Editor::SetTopLine(Sci::Line topLineNew) { + if ((topLine != topLineNew) && (topLineNew >= 0)) { + topLine = topLineNew; + ContainerNeedsUpdate(SC_UPDATE_V_SCROLL); +@@ -480,7 +480,7 @@ + //wMain.InvalidateAll(); + } + +-void Editor::RedrawSelMargin(int line, bool allAfter) { ++void Editor::RedrawSelMargin(Sci::Line line, bool allAfter) { + const bool markersInText = vs.maskInLine || vs.maskDrawInText; + if (!wMargin.GetID() || markersInText) { // May affect text area so may need to abandon and retry + if (AbandonPaint()) { +@@ -526,8 +526,8 @@ + } + + PRectangle Editor::RectangleFromRange(Range r, int overlap) { +- const int minLine = cs.DisplayFromDoc(pdoc->LineFromPosition(r.First())); +- const int maxLine = cs.DisplayLastFromDoc(pdoc->LineFromPosition(r.Last())); ++ const Sci::Line minLine = cs.DisplayFromDoc(pdoc->LineFromPosition(r.First())); ++ const Sci::Line maxLine = cs.DisplayLastFromDoc(pdoc->LineFromPosition(r.Last())); + const PRectangle rcClientDrawing = GetClientDrawingRectangle(); + PRectangle rc; + const int leftTextOverlap = ((xOffset == 0) && (vs.leftMarginWidth > 0)) ? 1 : 0; +@@ -542,11 +542,11 @@ + return rc; + } + +-void Editor::InvalidateRange(int start, int end) { ++void Editor::InvalidateRange(Sci::Position start, Sci::Position end) { + RedrawRect(RectangleFromRange(Range(start, end), view.LinesOverlap() ? vs.lineOverlap : 0)); + } + +-int Editor::CurrentPosition() const { ++Sci::Position Editor::CurrentPosition() const { + return sel.MainCaret(); + } + +@@ -569,10 +569,10 @@ + if (sel.selType == Selection::selThin) { + xCaret = xAnchor; + } +- int lineAnchorRect = pdoc->LineFromPosition(sel.Rectangular().anchor.Position()); +- int lineCaret = pdoc->LineFromPosition(sel.Rectangular().caret.Position()); ++ Sci::Line lineAnchorRect = pdoc->LineFromPosition(sel.Rectangular().anchor.Position()); ++ Sci::Line lineCaret = pdoc->LineFromPosition(sel.Rectangular().caret.Position()); + int increment = (lineCaret > lineAnchorRect) ? 1 : -1; +- for (int line=lineAnchorRect; line != lineCaret+increment; line += increment) { ++ for (Sci::Line line=lineAnchorRect; line != lineCaret+increment; line += increment) { + SelectionRange range(SPositionFromLineX(line, xCaret), SPositionFromLineX(line, xAnchor)); + if ((virtualSpaceOptions & SCVS_RECTANGULARSELECTION) == 0) + range.ClearVirtualSpace(); +@@ -600,9 +600,9 @@ + if (sel.Count() > 1 || !(sel.RangeMain().anchor == newMain.anchor) || sel.IsRectangular()) { + invalidateWholeSelection = true; + } +- int firstAffected = Platform::Minimum(sel.RangeMain().Start().Position(), newMain.Start().Position()); ++ Sci::Position firstAffected = Platform::Minimum(sel.RangeMain().Start().Position(), newMain.Start().Position()); + // +1 for lastAffected ensures caret repainted +- int lastAffected = Platform::Maximum(newMain.caret.Position()+1, newMain.anchor.Position()); ++ Sci::Position lastAffected = Platform::Maximum(newMain.caret.Position()+1, newMain.anchor.Position()); + lastAffected = Platform::Maximum(lastAffected, sel.RangeMain().End().Position()); + if (invalidateWholeSelection) { + for (size_t r=0; r<sel.Count(); r++) { +@@ -623,7 +623,7 @@ + void Editor::SetSelection(SelectionPosition currentPos_, SelectionPosition anchor_) { + currentPos_ = ClampPositionIntoDocument(currentPos_); + anchor_ = ClampPositionIntoDocument(anchor_); +- int currentLine = pdoc->LineFromPosition(currentPos_.Position()); ++ Sci::Line currentLine = pdoc->LineFromPosition(currentPos_.Position()); + /* For Line selection - ensure the anchor and caret are always + at the beginning and end of the region lines. */ + if (sel.selType == Selection::selLines) { +@@ -650,14 +650,14 @@ + QueueIdleWork(WorkNeeded::workUpdateUI); + } + +-void Editor::SetSelection(int currentPos_, int anchor_) { ++void Editor::SetSelection(Sci::Position currentPos_, Sci::Position anchor_) { + SetSelection(SelectionPosition(currentPos_), SelectionPosition(anchor_)); + } + + // Just move the caret on the main selection + void Editor::SetSelection(SelectionPosition currentPos_) { + currentPos_ = ClampPositionIntoDocument(currentPos_); +- int currentLine = pdoc->LineFromPosition(currentPos_.Position()); ++ Sci::Line currentLine = pdoc->LineFromPosition(currentPos_.Position()); + if (sel.Count() > 1 || !(sel.RangeMain().caret == currentPos_)) { + InvalidateSelection(SelectionRange(currentPos_)); + } +@@ -683,7 +683,7 @@ + } + + void Editor::SetEmptySelection(SelectionPosition currentPos_) { +- int currentLine = pdoc->LineFromPosition(currentPos_.Position()); ++ Sci::Line currentLine = pdoc->LineFromPosition(currentPos_.Position()); + SelectionRange rangeNew(ClampPositionIntoDocument(currentPos_)); + if (sel.Count() > 1 || !(sel.RangeMain() == rangeNew)) { + InvalidateSelection(rangeNew); +@@ -700,15 +700,15 @@ + QueueIdleWork(WorkNeeded::workUpdateUI); + } + +-void Editor::SetEmptySelection(int currentPos_) { ++void Editor::SetEmptySelection(Sci::Position currentPos_) { + SetEmptySelection(SelectionPosition(currentPos_)); + } + + void Editor::MultipleSelectAdd(AddNumber addNumber) { + if (SelectionEmpty() || !multipleSelection) { + // Select word at caret +- const int startWord = pdoc->ExtendWordSelect(sel.MainCaret(), -1, true); +- const int endWord = pdoc->ExtendWordSelect(startWord, 1, true); ++ const Sci::Position startWord = pdoc->ExtendWordSelect(sel.MainCaret(), -1, true); ++ const Sci::Position endWord = pdoc->ExtendWordSelect(startWord, 1, true); + TrimAndSetSelection(endWord, startWord); + + } else { +@@ -736,11 +736,11 @@ + } + + for (std::vector<Range>::const_iterator it = searchRanges.begin(); it != searchRanges.end(); ++it) { +- int searchStart = it->start; +- const int searchEnd = it->end; ++ Sci::Position searchStart = it->start; ++ const Sci::Position searchEnd = it->end; + for (;;) { +- int lengthFound = static_cast<int>(selectedText.length()); +- int pos = static_cast<int>(pdoc->FindText(searchStart, searchEnd, ++ Sci::Position lengthFound = static_cast<Sci::Position>(selectedText.length()); ++ Sci::Position pos = static_cast<Sci::Position>(pdoc->FindText(searchStart, searchEnd, + selectedText.c_str(), searchFlags, &lengthFound)); + if (pos >= 0) { + sel.AddSelection(SelectionRange(pos + lengthFound, pos)); +@@ -757,14 +757,14 @@ + } + } + +-bool Editor::RangeContainsProtected(int start, int end) const { ++bool Editor::RangeContainsProtected(Sci::Position start, Sci::Position end) const { + if (vs.ProtectionActive()) { + if (start > end) { +- int t = start; ++ Sci::Position t = start; + start = end; + end = t; + } +- for (int pos = start; pos < end; pos++) { ++ for (Sci::Position pos = start; pos < end; pos++) { + if (vs.styles[pdoc->StyleIndexAt(pos)].IsProtected()) + return true; + } +@@ -785,12 +785,12 @@ + /** + * Asks document to find a good position and then moves out of any invisible positions. + */ +-int Editor::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) const { ++Sci::Position Editor::MovePositionOutsideChar(Sci::Position pos, Sci::Position moveDir, bool checkLineEnd) const { + return MovePositionOutsideChar(SelectionPosition(pos), moveDir, checkLineEnd).Position(); + } + +-SelectionPosition Editor::MovePositionOutsideChar(SelectionPosition pos, int moveDir, bool checkLineEnd) const { +- int posMoved = pdoc->MovePositionOutsideChar(pos.Position(), moveDir, checkLineEnd); ++SelectionPosition Editor::MovePositionOutsideChar(SelectionPosition pos, Sci::Position moveDir, bool checkLineEnd) const { ++ Sci::Position posMoved = pdoc->MovePositionOutsideChar(pos.Position(), moveDir, checkLineEnd); + if (posMoved != pos.Position()) + pos.SetPosition(posMoved); + if (vs.ProtectionActive()) { +@@ -812,7 +812,7 @@ + } + + void Editor::MovedCaret(SelectionPosition newPos, SelectionPosition previousPos, bool ensureVisible) { +- const int currentLine = pdoc->LineFromPosition(newPos.Position()); ++ const Sci::Line currentLine = pdoc->LineFromPosition(newPos.Position()); + if (ensureVisible) { + // In case in need of wrapping to ensure DisplayFromDoc works. + if (currentLine >= wrapPending.start) +@@ -844,7 +844,7 @@ + const SelectionPosition spCaret = ((sel.Count() == 1) && sel.Empty()) ? + sel.Last() : SelectionPosition(INVALID_POSITION); + +- int delta = newPos.Position() - sel.MainCaret(); ++ Sci::Position delta = newPos.Position() - sel.MainCaret(); + newPos = ClampPositionIntoDocument(newPos); + newPos = MovePositionOutsideChar(newPos, delta); + if (!multipleSelection && sel.IsRectangular() && (selt == Selection::selStream)) { +@@ -871,18 +871,18 @@ + MovedCaret(newPos, spCaret, ensureVisible); + } + +-void Editor::MovePositionTo(int newPos, Selection::selTypes selt, bool ensureVisible) { ++void Editor::MovePositionTo(Sci::Position newPos, Selection::selTypes selt, bool ensureVisible) { + MovePositionTo(SelectionPosition(newPos), selt, ensureVisible); + } + + SelectionPosition Editor::MovePositionSoVisible(SelectionPosition pos, int moveDir) { + pos = ClampPositionIntoDocument(pos); + pos = MovePositionOutsideChar(pos, moveDir); +- int lineDoc = pdoc->LineFromPosition(pos.Position()); ++ Sci::Line lineDoc = pdoc->LineFromPosition(pos.Position()); + if (cs.GetVisible(lineDoc)) { + return pos; + } else { +- int lineDisplay = cs.DisplayFromDoc(lineDoc); ++ Sci::Line lineDisplay = cs.DisplayFromDoc(lineDoc); + if (moveDir > 0) { + // lineDisplay is already line before fold as lines in fold use display line of line after fold + lineDisplay = Platform::Clamp(lineDisplay, 0, cs.LinesDisplayed()); +@@ -894,7 +894,7 @@ + } + } + +-SelectionPosition Editor::MovePositionSoVisible(int pos, int moveDir) { ++SelectionPosition Editor::MovePositionSoVisible(Sci::Position pos, int moveDir) { + return MovePositionSoVisible(SelectionPosition(pos), moveDir); + } + +@@ -908,15 +908,15 @@ + */ + void Editor::SetLastXChosen() { + Point pt = PointMainCaret(); +- lastXChosen = static_cast<int>(pt.x) + xOffset; +-} +- +-void Editor::ScrollTo(int line, bool moveThumb) { +- int topLineNew = Platform::Clamp(line, 0, MaxScrollPos()); ++ lastXChosen = static_cast<Sci::Position>(pt.x) + xOffset; ++} ++ ++void Editor::ScrollTo(Sci::Line line, bool moveThumb) { ++ Sci::Line topLineNew = Platform::Clamp(line, 0, MaxScrollPos()); + if (topLineNew != topLine) { + // Try to optimise small scrolls + #ifndef UNDER_CE +- int linesToMove = topLine - topLineNew; ++ Sci::Line linesToMove = topLine - topLineNew; + bool performBlit = (abs(linesToMove) <= 10) && (paintState == notPainting); + willRedrawAll = !performBlit; + #endif +@@ -941,7 +941,7 @@ + } + } + +-void Editor::ScrollText(int /* linesToMove */) { ++void Editor::ScrollText(Sci::Line /* linesToMove */) { + //Platform::DebugPrintf("Editor::ScrollText %d\n", linesToMove); + Redraw(); + } +@@ -959,9 +959,9 @@ + } + + void Editor::VerticalCentreCaret() { +- int lineDoc = pdoc->LineFromPosition(sel.IsRectangular() ? sel.Rectangular().caret.Position() : sel.MainCaret()); +- int lineDisplay = cs.DisplayFromDoc(lineDoc); +- int newTop = lineDisplay - (LinesOnScreen() / 2); ++ Sci::Line lineDoc = pdoc->LineFromPosition(sel.IsRectangular() ? sel.Rectangular().caret.Position() : sel.MainCaret()); ++ Sci::Line lineDisplay = cs.DisplayFromDoc(lineDoc); ++ Sci::Line newTop = lineDisplay - (LinesOnScreen() / 2); + if (topLine != newTop) { + SetTopLine(newTop > 0 ? newTop : 0); + RedrawRect(GetClientRectangle()); +@@ -977,16 +977,16 @@ + void Editor::MoveSelectedLines(int lineDelta) { + + // if selection doesn't start at the beginning of the line, set the new start +- int selectionStart = SelectionStart().Position(); +- int startLine = pdoc->LineFromPosition(selectionStart); +- int beginningOfStartLine = pdoc->LineStart(startLine); ++ Sci::Position selectionStart = SelectionStart().Position(); ++ Sci::Line startLine = pdoc->LineFromPosition(selectionStart); ++ Sci::Position beginningOfStartLine = pdoc->LineStart(startLine); + selectionStart = beginningOfStartLine; + + // if selection doesn't end at the beginning of a line greater than that of the start, + // then set it at the beginning of the next one +- int selectionEnd = SelectionEnd().Position(); +- int endLine = pdoc->LineFromPosition(selectionEnd); +- int beginningOfEndLine = pdoc->LineStart(endLine); ++ Sci::Position selectionEnd = SelectionEnd().Position(); ++ Sci::Line endLine = pdoc->LineFromPosition(selectionEnd); ++ Sci::Position beginningOfEndLine = pdoc->LineStart(endLine); + bool appendEol = false; + if (selectionEnd > beginningOfEndLine + || selectionStart == selectionEnd) { +@@ -1015,9 +1015,9 @@ + SelectionText selectedText; + CopySelectionRange(&selectedText); + +- int selectionLength = SelectionRange(selectionStart, selectionEnd).Length(); ++ Sci::Position selectionLength = SelectionRange(selectionStart, selectionEnd).Length(); + Point currentLocation = LocationFromPosition(CurrentPosition()); +- int currentLine = LineFromLocation(currentLocation); ++ Sci::Line currentLine = LineFromLocation(currentLocation); + + if (appendEol) + SetSelection(pdoc->MovePositionOutsideChar(selectionStart - 1, -1), selectionEnd); +@@ -1030,7 +1030,7 @@ + + selectionLength = pdoc->InsertString(CurrentPosition(), selectedText.Data(), selectionLength); + if (appendEol) { +- const int lengthInserted = pdoc->InsertString(CurrentPosition() + selectionLength, eol, istrlen(eol)); ++ const Sci::Position lengthInserted = pdoc->InsertString(CurrentPosition() + selectionLength, eol, istrlen(eol)); + selectionLength += lengthInserted; + } + SetSelection(CurrentPosition(), CurrentPosition() + selectionLength); +@@ -1053,7 +1053,7 @@ + false, false, UserVirtualSpace()), + Selection::noSel, ensureVisible); + } else if ((pt.y + vs.lineHeight - 1) > rcClient.bottom) { +- int yOfLastLineFullyDisplayed = static_cast<int>(rcClient.top) + (LinesOnScreen() - 1) * vs.lineHeight; ++ Sci::Position yOfLastLineFullyDisplayed = static_cast<Sci::Position>(rcClient.top) + (LinesOnScreen() - 1) * vs.lineHeight; + MovePositionTo(SPositionFromLocation( + Point::FromInts(lastXChosen - xOffset, static_cast<int>(rcClient.top) + yOfLastLineFullyDisplayed), + false, false, UserVirtualSpace()), +@@ -1061,7 +1061,7 @@ + } + } + +-int Editor::DisplayFromPosition(int pos) { ++Sci::Line Editor::DisplayFromPosition(Sci::Position pos) { + AutoSurface surface(this); + return view.DisplayFromPosition(surface, *this, pos, vs); + } +@@ -1130,9 +1130,9 @@ + + // Vertical positioning + if ((options & xysVertical) && (pt.y < rcClient.top || ptBottomCaret.y >= rcClient.bottom || (caretYPolicy & CARET_STRICT) != 0)) { +- const int lineCaret = DisplayFromPosition(range.caret.Position()); +- const int linesOnScreen = LinesOnScreen(); +- const int halfScreen = Platform::Maximum(linesOnScreen - 1, 2) / 2; ++ const Sci::Line lineCaret = DisplayFromPosition(range.caret.Position()); ++ const Sci::Line linesOnScreen = LinesOnScreen(); ++ const Sci::Line halfScreen = Platform::Maximum(linesOnScreen - 1, 2) / 2; + const bool bSlop = (caretYPolicy & CARET_SLOP) != 0; + const bool bStrict = (caretYPolicy & CARET_STRICT) != 0; + const bool bJump = (caretYPolicy & CARET_JUMPS) != 0; +@@ -1141,9 +1141,9 @@ + // It should be possible to scroll the window to show the caret, + // but this fails to remove the caret on GTK+ + if (bSlop) { // A margin is defined +- int yMoveT, yMoveB; ++ Sci::Line yMoveT, yMoveB; + if (bStrict) { +- int yMarginT, yMarginB; ++ Sci::Line yMarginT, yMarginB; + if (!(options & xysUseMargin)) { + // In drag mode, avoid moves + // otherwise, a double click will select several lines. +@@ -1215,7 +1215,7 @@ + } + } + if (!(range.caret == range.anchor)) { +- const int lineAnchor = DisplayFromPosition(range.anchor.Position()); ++ const Sci::Line lineAnchor = DisplayFromPosition(range.anchor.Position()); + if (lineAnchor < lineCaret) { + // Shift up to show anchor or as much of range as possible + newXY.topLine = std::min(newXY.topLine, lineAnchor); +@@ -1339,8 +1339,8 @@ + newXY.xOffset = std::max(newXY.xOffset, minOffset); + } else { + // Shift to right to show anchor or as much of range as possible +- int minOffset = static_cast<int>(ptAnchor.x + xOffset - rcClient.right) + 1; +- int maxOffset = static_cast<int>(pt.x + xOffset - rcClient.left) - 1; ++ int minOffset = static_cast<Sci::Position>(ptAnchor.x + xOffset - rcClient.right) + 1; ++ int maxOffset = static_cast<Sci::Position>(pt.x + xOffset - rcClient.left) - 1; + newXY.xOffset = std::max(newXY.xOffset, minOffset); + newXY.xOffset = std::min(newXY.xOffset, maxOffset); + } +@@ -1366,7 +1366,7 @@ + PRectangle rcText = GetTextRectangle(); + if (horizontalScrollBarVisible && + rcText.Width() + xOffset > scrollWidth) { +- scrollWidth = xOffset + static_cast<int>(rcText.Width()); ++ scrollWidth = xOffset + static_cast<Sci::Position>(rcText.Width()); + SetScrollBars(); + } + } +@@ -1449,7 +1449,7 @@ + return vs.wrapState != eWrapNone; + } + +-void Editor::NeedWrapping(int docLineStart, int docLineEnd) { ++void Editor::NeedWrapping(Sci::Line docLineStart, Sci::Line docLineEnd) { + //Platform::DebugPrintf("\nNeedWrapping: %0d..%0d\n", docLineStart, docLineEnd); + if (wrapPending.AddRange(docLineStart, docLineEnd)) { + view.llc.Invalidate(LineLayout::llPositions); +@@ -1460,7 +1460,7 @@ + } + } + +-bool Editor::WrapOneLine(Surface *surface, int lineToWrap) { ++bool Editor::WrapOneLine(Surface *surface, Sci::Line lineToWrap) { + AutoLineLayout ll(view.llc, view.RetrieveLineLayout(lineToWrap, *this)); + int linesWrapped = 1; + if (ll) { +@@ -1477,12 +1477,12 @@ + // wsIdle: wrap one page + 100 lines + // Return true if wrapping occurred. + bool Editor::WrapLines(enum wrapScope ws) { +- int goodTopLine = topLine; ++ Sci::Line goodTopLine = topLine; + bool wrapOccurred = false; + if (!Wrapping()) { + if (wrapWidth != LineLayout::wrapWidthInfinite) { + wrapWidth = LineLayout::wrapWidthInfinite; +- for (int lineDoc = 0; lineDoc < pdoc->LinesTotal(); lineDoc++) { ++ for (Sci::Line lineDoc = 0; lineDoc < pdoc->LinesTotal(); lineDoc++) { + cs.SetHeight(lineDoc, 1 + + (vs.annotationVisible ? pdoc->AnnotationLines(lineDoc) : 0)); + } +@@ -1497,9 +1497,9 @@ + ws = WrapScope::wsAll; + } + // Decide where to start wrapping +- int lineToWrap = wrapPending.start; +- int lineToWrapEnd = std::min(wrapPending.end, pdoc->LinesTotal()); +- const int lineDocTop = cs.DocFromDisplay(topLine); ++ Sci::Line lineToWrap = wrapPending.start; ++ Sci::Line lineToWrapEnd = std::min(wrapPending.end, pdoc->LinesTotal()); ++ const Sci::Line lineDocTop = cs.DocFromDisplay(topLine); + const int subLineTop = topLine - cs.DisplayFromDoc(lineDocTop); + if (ws == WrapScope::wsVisible) { + lineToWrap = Platform::Clamp(lineDocTop-5, wrapPending.start, pdoc->LinesTotal()); +@@ -1507,7 +1507,7 @@ + // Since wrapping could reduce display lines, treat each + // as taking only one display line. + lineToWrapEnd = lineDocTop; +- int lines = LinesOnScreen() + 1; ++ Sci::Line lines = LinesOnScreen() + 1; + while ((lineToWrapEnd < cs.LinesInDoc()) && (lines>0)) { + if (cs.GetVisible(lineToWrapEnd)) + lines--; +@@ -1521,7 +1521,7 @@ + } else if (ws == WrapScope::wsIdle) { + lineToWrapEnd = lineToWrap + LinesOnScreen() + 100; + } +- const int lineEndNeedWrap = std::min(wrapPending.end, pdoc->LinesTotal()); ++ const Sci::Line lineEndNeedWrap = std::min(wrapPending.end, pdoc->LinesTotal()); + lineToWrapEnd = std::min(lineToWrapEnd, lineEndNeedWrap); + + // Ensure all lines being wrapped are styled. +@@ -1569,13 +1569,13 @@ + if (!RangeContainsProtected(targetStart, targetEnd)) { + UndoGroup ug(pdoc); + bool prevNonWS = true; +- for (int pos = targetStart; pos < targetEnd; pos++) { ++ for (Sci::Position pos = targetStart; pos < targetEnd; pos++) { + if (pdoc->IsPositionInLineEnd(pos)) { + targetEnd -= pdoc->LenChar(pos); + pdoc->DelChar(pos); + if (prevNonWS) { + // Ensure at least one space separating previous lines +- const int lengthInserted = pdoc->InsertString(pos, " ", 1); ++ const Sci::Position lengthInserted = pdoc->InsertString(pos, " ", 1); + targetEnd += lengthInserted; + } + } else { +@@ -1601,19 +1601,19 @@ + PRectangle rcText = GetTextRectangle(); + pixelWidth = static_cast<int>(rcText.Width()); + } +- int lineStart = pdoc->LineFromPosition(targetStart); +- int lineEnd = pdoc->LineFromPosition(targetEnd); ++ Sci::Line lineStart = pdoc->LineFromPosition(targetStart); ++ Sci::Line lineEnd = pdoc->LineFromPosition(targetEnd); + const char *eol = StringFromEOLMode(pdoc->eolMode); + UndoGroup ug(pdoc); +- for (int line = lineStart; line <= lineEnd; line++) { ++ for (Sci::Line line = lineStart; line <= lineEnd; line++) { + AutoSurface surface(this); + AutoLineLayout ll(view.llc, view.RetrieveLineLayout(line, *this)); + if (surface && ll) { +- unsigned int posLineStart = pdoc->LineStart(line); ++ Sci::Position posLineStart = pdoc->LineStart(line); + view.LayoutLine(*this, line, surface, vs, ll, pixelWidth); +- int lengthInsertedTotal = 0; ++ Sci::Position lengthInsertedTotal = 0; + for (int subLine = 1; subLine < ll->lines; subLine++) { +- const int lengthInserted = pdoc->InsertString( ++ const Sci::Position lengthInserted = pdoc->InsertString( + static_cast<int>(posLineStart + lengthInsertedTotal + + ll->LineStart(subLine)), + eol, istrlen(eol)); +@@ -1803,8 +1803,8 @@ + void Editor::SetScrollBars() { + RefreshStyleData(); + +- int nMax = MaxScrollPos(); +- int nPage = LinesOnScreen(); ++ Sci::Line nMax = MaxScrollPos(); ++ Sci::Line nPage = LinesOnScreen(); + bool modified = ModifyScrollBars(nMax + nPage - 1, nPage); + if (modified) { + DwellEnd(true); +@@ -1838,15 +1838,15 @@ + } + } + +-int Editor::RealizeVirtualSpace(int position, unsigned int virtualSpace) { ++Sci::Position Editor::RealizeVirtualSpace(Sci::Position position, Sci::Position virtualSpace) { + if (virtualSpace > 0) { +- const int line = pdoc->LineFromPosition(position); +- const int indent = pdoc->GetLineIndentPosition(line); ++ const Sci::Line line = pdoc->LineFromPosition(position); ++ const Sci::Position 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); ++ const Sci::Position lengthInserted = pdoc->InsertString(position, spaceText.c_str(), virtualSpace); + position += lengthInserted; + } + } +@@ -1893,7 +1893,7 @@ + SelectionRange *currentSel = *rit; + if (!RangeContainsProtected(currentSel->Start().Position(), + currentSel->End().Position())) { +- int positionInsert = currentSel->Start().Position(); ++ Sci::Position positionInsert = currentSel->Start().Position(); + if (!currentSel->Empty()) { + if (currentSel->Length()) { + pdoc->DeleteChars(positionInsert, currentSel->Length()); +@@ -1911,7 +1911,7 @@ + } + } + positionInsert = RealizeVirtualSpace(positionInsert, currentSel->caret.VirtualSpace()); +- const int lengthInserted = pdoc->InsertString(positionInsert, s, len); ++ const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, s, len); + if (lengthInserted > 0) { + currentSel->caret.SetPosition(positionInsert + lengthInserted); + currentSel->anchor.SetPosition(positionInsert + lengthInserted); +@@ -1974,7 +1974,7 @@ + for (size_t r = 0; r<sel.Count(); r++) { + if (!RangeContainsProtected(sel.Range(r).Start().Position(), + sel.Range(r).End().Position())) { +- int positionInsert = sel.Range(r).Start().Position(); ++ Sci::Position positionInsert = sel.Range(r).Start().Position(); + if (!sel.Range(r).Empty()) { + if (sel.Range(r).Length()) { + pdoc->DeleteChars(positionInsert, sel.Range(r).Length()); +@@ -1994,7 +1994,7 @@ + if (multiPasteMode == SC_MULTIPASTE_ONCE) { + SelectionPosition selStart = sel.Start(); + selStart = RealizeVirtualSpace(selStart); +- const int lengthInserted = pdoc->InsertString(selStart.Position(), text, len); ++ const Sci::Position lengthInserted = pdoc->InsertString(selStart.Position(), text, len); + if (lengthInserted > 0) { + SetEmptySelection(selStart.Position() + lengthInserted); + } +@@ -2003,7 +2003,7 @@ + for (size_t r=0; r<sel.Count(); r++) { + if (!RangeContainsProtected(sel.Range(r).Start().Position(), + sel.Range(r).End().Position())) { +- int positionInsert = sel.Range(r).Start().Position(); ++ Sci::Position positionInsert = sel.Range(r).Start().Position(); + if (!sel.Range(r).Empty()) { + if (sel.Range(r).Length()) { + pdoc->DeleteChars(positionInsert, sel.Range(r).Length()); +@@ -2014,7 +2014,7 @@ + } + } + positionInsert = RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace()); +- const int lengthInserted = pdoc->InsertString(positionInsert, text, len); ++ const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text, len); + if (lengthInserted > 0) { + sel.Range(r).caret.SetPosition(positionInsert + lengthInserted); + sel.Range(r).anchor.SetPosition(positionInsert + lengthInserted); +@@ -2037,8 +2037,8 @@ + PasteRectangular(sel.Start(), text, len); + } else { + if (shape == pasteLine) { +- int insertPos = pdoc->LineStart(pdoc->LineFromPosition(sel.MainCaret())); +- int lengthInserted = pdoc->InsertString(insertPos, text, len); ++ Sci::Position insertPos = pdoc->LineStart(pdoc->LineFromPosition(sel.MainCaret())); ++ Sci::Position lengthInserted = pdoc->InsertString(insertPos, text, len); + // add the newline if necessary + if ((len > 0) && (text[len - 1] != '\n' && text[len - 1] != '\r')) { + const char *endline = StringFromEOLMode(pdoc->eolMode); +@@ -2127,20 +2127,20 @@ + } + } + +-void Editor::PasteRectangular(SelectionPosition pos, const char *ptr, int len) { ++void Editor::PasteRectangular(SelectionPosition pos, const char *ptr, Sci::Position len) { + if (pdoc->IsReadOnly() || SelectionContainsProtected()) { + return; + } + sel.Clear(); + sel.RangeMain() = SelectionRange(pos); +- int line = pdoc->LineFromPosition(sel.MainCaret()); ++ Sci::Line line = pdoc->LineFromPosition(sel.MainCaret()); + UndoGroup ug(pdoc); + sel.RangeMain().caret = RealizeVirtualSpace(sel.RangeMain().caret); + int xInsert = XFromPosition(sel.RangeMain().caret); + bool prevCr = false; + while ((len > 0) && IsEOLChar(ptr[len-1])) + len--; +- for (int i = 0; i < len; i++) { ++ for (Sci::Position i = 0; i < len; i++) { + if (IsEOLChar(ptr[i])) { + if ((ptr[i] == '\r') || (!prevCr)) + line++; +@@ -2155,13 +2155,13 @@ + if ((XFromPosition(sel.MainCaret()) < xInsert) && (i + 1 < len)) { + while (XFromPosition(sel.MainCaret()) < xInsert) { + assert(pdoc); +- const int lengthInserted = pdoc->InsertString(sel.MainCaret(), " ", 1); ++ const Sci::Position lengthInserted = pdoc->InsertString(sel.MainCaret(), " ", 1); + sel.RangeMain().caret.Add(lengthInserted); + } + } + prevCr = ptr[i] == '\r'; + } else { +- const int lengthInserted = pdoc->InsertString(sel.MainCaret(), ptr + i, 1); ++ const Sci::Position lengthInserted = pdoc->InsertString(sel.MainCaret(), ptr + i, 1); + sel.RangeMain().caret.Add(lengthInserted); + prevCr = false; + } +@@ -2215,7 +2215,7 @@ + void Editor::Undo() { + if (pdoc->CanUndo()) { + InvalidateCaret(); +- int newPos = pdoc->Undo(); ++ Sci::Position newPos = pdoc->Undo(); + if (newPos >= 0) + SetEmptySelection(newPos); + EnsureCaretVisible(); +@@ -2224,7 +2224,7 @@ + + void Editor::Redo() { + if (pdoc->CanRedo()) { +- int newPos = pdoc->Redo(); ++ Sci::Position newPos = pdoc->Redo(); + if (newPos >= 0) + SetEmptySelection(newPos); + EnsureCaretVisible(); +@@ -2245,7 +2245,7 @@ + sel.Range(r).caret.SetVirtualSpace(sel.Range(r).caret.VirtualSpace() - 1); + sel.Range(r).anchor.SetVirtualSpace(sel.Range(r).caret.VirtualSpace()); + } else { +- int lineCurrentPos = pdoc->LineFromPosition(sel.Range(r).caret.Position()); ++ Sci::Line lineCurrentPos = pdoc->LineFromPosition(sel.Range(r).caret.Position()); + if (allowLineStartDeletion || (pdoc->LineStart(lineCurrentPos) != sel.Range(r).caret.Position())) { + if (pdoc->GetColumn(sel.Range(r).caret.Position()) <= pdoc->GetLineIndentation(lineCurrentPos) && + pdoc->GetColumn(sel.Range(r).caret.Position()) > 0 && pdoc->backspaceUnindents) { +@@ -2255,7 +2255,7 @@ + int indentationChange = indentation % indentationStep; + if (indentationChange == 0) + indentationChange = indentationStep; +- const int posSelect = pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationChange); ++ const Sci::Position posSelect = pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationChange); + // SetEmptySelection + sel.Range(r) = SelectionRange(posSelect); + } else { +@@ -2296,14 +2296,14 @@ + ctrlID = identifier; + } + +-void Editor::NotifyStyleToNeeded(int endStyleNeeded) { ++void Editor::NotifyStyleToNeeded(Sci::Position endStyleNeeded) { + SCNotification scn = {}; + scn.nmhdr.code = SCN_STYLENEEDED; + scn.position = endStyleNeeded; + NotifyParent(scn); + } + +-void Editor::NotifyStyleNeeded(Document *, void *, int endStyleNeeded) { ++void Editor::NotifyStyleNeeded(Document *, void *, Sci::Position endStyleNeeded) { + NotifyStyleToNeeded(endStyleNeeded); + } + +@@ -2350,7 +2350,7 @@ + NotifyDoubleClick(pt, ModifierFlags(shift, ctrl, alt)); + } + +-void Editor::NotifyHotSpotDoubleClicked(int position, int modifiers) { ++void Editor::NotifyHotSpotDoubleClicked(Sci::Position position, int modifiers) { + SCNotification scn = {}; + scn.nmhdr.code = SCN_HOTSPOTDOUBLECLICK; + scn.position = position; +@@ -2358,11 +2358,11 @@ + NotifyParent(scn); + } + +-void Editor::NotifyHotSpotDoubleClicked(int position, bool shift, bool ctrl, bool alt) { ++void Editor::NotifyHotSpotDoubleClicked(Sci::Position position, bool shift, bool ctrl, bool alt) { + NotifyHotSpotDoubleClicked(position, ModifierFlags(shift, ctrl, alt)); + } + +-void Editor::NotifyHotSpotClicked(int position, int modifiers) { ++void Editor::NotifyHotSpotClicked(Sci::Position position, int modifiers) { + SCNotification scn = {}; + scn.nmhdr.code = SCN_HOTSPOTCLICK; + scn.position = position; +@@ -2370,11 +2370,11 @@ + NotifyParent(scn); + } + +-void Editor::NotifyHotSpotClicked(int position, bool shift, bool ctrl, bool alt) { ++void Editor::NotifyHotSpotClicked(Sci::Position position, bool shift, bool ctrl, bool alt) { + NotifyHotSpotClicked(position, ModifierFlags(shift, ctrl, alt)); + } + +-void Editor::NotifyHotSpotReleaseClick(int position, int modifiers) { ++void Editor::NotifyHotSpotReleaseClick(Sci::Position position, int modifiers) { + SCNotification scn = {}; + scn.nmhdr.code = SCN_HOTSPOTRELEASECLICK; + scn.position = position; +@@ -2382,7 +2382,7 @@ + NotifyParent(scn); + } + +-void Editor::NotifyHotSpotReleaseClick(int position, bool shift, bool ctrl, bool alt) { ++void Editor::NotifyHotSpotReleaseClick(Sci::Position position, bool shift, bool ctrl, bool alt) { + NotifyHotSpotReleaseClick(position, ModifierFlags(shift, ctrl, alt)); + } + +@@ -2404,7 +2404,7 @@ + NotifyParent(scn); + } + +-void Editor::NotifyIndicatorClick(bool click, int position, int modifiers) { ++void Editor::NotifyIndicatorClick(bool click, Sci::Position position, int modifiers) { + int mask = pdoc->decorations.AllOnFor(position); + if ((click && mask) || pdoc->decorations.clickNotified) { + SCNotification scn = {}; +@@ -2416,18 +2416,18 @@ + } + } + +-void Editor::NotifyIndicatorClick(bool click, int position, bool shift, bool ctrl, bool alt) { ++void Editor::NotifyIndicatorClick(bool click, Sci::Position position, bool shift, bool ctrl, bool alt) { + NotifyIndicatorClick(click, position, ModifierFlags(shift, ctrl, alt)); + } + + bool Editor::NotifyMarginClick(Point pt, int modifiers) { + const int marginClicked = vs.MarginFromLocation(pt); + if ((marginClicked >= 0) && vs.ms[marginClicked].sensitive) { +- int position = pdoc->LineStart(LineFromLocation(pt)); ++ Sci::Position position = pdoc->LineStart(LineFromLocation(pt)); + if ((vs.ms[marginClicked].mask & SC_MASK_FOLDERS) && (foldAutomatic & SC_AUTOMATICFOLD_CLICK)) { + const bool ctrl = (modifiers & SCI_CTRL) != 0; + const bool shift = (modifiers & SCI_SHIFT) != 0; +- int lineClick = pdoc->LineFromPosition(position); ++ Sci::Line lineClick = pdoc->LineFromPosition(position); + if (shift && ctrl) { + FoldAll(SC_FOLDACTION_TOGGLE); + } else { +@@ -2465,7 +2465,7 @@ + bool Editor::NotifyMarginRightClick(Point pt, int modifiers) { + int marginRightClicked = vs.MarginFromLocation(pt); + if ((marginRightClicked >= 0) && vs.ms[marginRightClicked].sensitive) { +- int position = pdoc->LineStart(LineFromLocation(pt)); ++ Sci::Position position = pdoc->LineStart(LineFromLocation(pt)); + SCNotification scn = {}; + scn.nmhdr.code = SCN_MARGINRIGHTCLICK; + scn.modifiers = modifiers; +@@ -2478,7 +2478,7 @@ + } + } + +-void Editor::NotifyNeedShown(int pos, int len) { ++void Editor::NotifyNeedShown(Sci::Position pos, Sci::Position len) { + SCNotification scn = {}; + scn.nmhdr.code = SCN_NEEDSHOWN; + scn.position = pos; +@@ -2515,8 +2515,8 @@ + void Editor::CheckModificationForWrap(DocModification mh) { + if (mh.modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) { + view.llc.Invalidate(LineLayout::llCheckTextAndStyle); +- int lineDoc = pdoc->LineFromPosition(mh.position); +- int lines = Platform::Maximum(0, mh.linesAdded); ++ Sci::Line lineDoc = pdoc->LineFromPosition(mh.position); ++ Sci::Line lines = std::max(static_cast<Sci::Line>(0), mh.linesAdded); + if (Wrapping()) { + NeedWrapping(lineDoc, lineDoc + lines + 1); + } +@@ -2527,7 +2527,7 @@ + } + + // Move a position so it is still after the same character as before the insertion. +-static inline int MovePositionForInsertion(int position, int startInsertion, int length) { ++static inline Sci::Position MovePositionForInsertion(Sci::Position position, Sci::Position startInsertion, Sci::Position length) { + if (position > startInsertion) { + return position + length; + } +@@ -2536,9 +2536,9 @@ + + // Move a position so it is still after the same character as before the deletion if that + // character is still present else after the previous surviving character. +-static inline int MovePositionForDeletion(int position, int startDeletion, int length) { ++static inline Sci::Position MovePositionForDeletion(Sci::Position position, Sci::Position startDeletion, Sci::Position length) { + if (position > startDeletion) { +- int endDeletion = startDeletion + length; ++ Sci::Position endDeletion = startDeletion + length; + if (position > endDeletion) { + return position - length; + } else { +@@ -2602,17 +2602,17 @@ + } + if ((mh.modificationType & (SC_MOD_BEFOREINSERT | SC_MOD_BEFOREDELETE)) && cs.HiddenLines()) { + // Some lines are hidden so may need shown. +- const int lineOfPos = pdoc->LineFromPosition(mh.position); +- int endNeedShown = mh.position; ++ const Sci::Line lineOfPos = pdoc->LineFromPosition(mh.position); ++ Sci::Position endNeedShown = mh.position; + if (mh.modificationType & SC_MOD_BEFOREINSERT) { + if (pdoc->ContainsLineEnd(mh.text, mh.length) && (mh.position != pdoc->LineStart(lineOfPos))) + endNeedShown = pdoc->LineStart(lineOfPos+1); + } else if (mh.modificationType & SC_MOD_BEFOREDELETE) { + // If the deletion includes any EOL then we extend the need shown area. + endNeedShown = mh.position + mh.length; +- int lineLast = pdoc->LineFromPosition(mh.position+mh.length); +- for (int line = lineOfPos + 1; line <= lineLast; line++) { +- const int lineMaxSubord = pdoc->GetLastChild(line, -1, -1); ++ Sci::Line lineLast = pdoc->LineFromPosition(mh.position+mh.length); ++ for (Sci::Line line = lineOfPos + 1; line <= lineLast; line++) { ++ const Sci::Line lineMaxSubord = pdoc->GetLastChild(line, -1, -1); + if (lineLast < lineMaxSubord) { + lineLast = lineMaxSubord; + endNeedShown = pdoc->LineEnd(lineLast); +@@ -2624,7 +2624,7 @@ + if (mh.linesAdded != 0) { + // Update contraction state for inserted and removed lines + // lineOfPos should be calculated in context of state before modification, shouldn't it +- int lineOfPos = pdoc->LineFromPosition(mh.position); ++ Sci::Line lineOfPos = pdoc->LineFromPosition(mh.position); + if (mh.position > pdoc->LineStart(lineOfPos)) + lineOfPos++; // Affecting subsequent lines + if (mh.linesAdded > 0) { +@@ -2635,7 +2635,7 @@ + view.LinesAddedOrRemoved(lineOfPos, mh.linesAdded); + } + if (mh.modificationType & SC_MOD_CHANGEANNOTATION) { +- int lineDoc = pdoc->LineFromPosition(mh.position); ++ Sci::Line lineDoc = pdoc->LineFromPosition(mh.position); + if (vs.annotationVisible) { + cs.SetHeight(lineDoc, cs.GetHeight(lineDoc) + mh.annotationLinesAdded); + Redraw(); +@@ -2645,7 +2645,7 @@ + if (mh.linesAdded != 0) { + // Avoid scrolling of display if change before current display + if (mh.position < posTopLine && !CanDeferToLastStep(mh)) { +- int newTop = Platform::Clamp(topLine + mh.linesAdded, 0, MaxScrollPos()); ++ Sci::Line newTop = Platform::Clamp(topLine + mh.linesAdded, 0, MaxScrollPos()); + if (newTop != topLine) { + SetTopLine(newTop); + SetVerticalScrollPos(); +@@ -2857,12 +2857,12 @@ + * If stuttered = true and already at first/last row, scroll as normal. + */ + void Editor::PageMove(int direction, Selection::selTypes selt, bool stuttered) { +- int topLineNew; ++ Sci::Line topLineNew; + SelectionPosition newPos; + +- int currentLine = pdoc->LineFromPosition(sel.MainCaret()); +- int topStutterLine = topLine + caretYSlop; +- int bottomStutterLine = ++ Sci::Line currentLine = pdoc->LineFromPosition(sel.MainCaret()); ++ Sci::Line topStutterLine = topLine + caretYSlop; ++ Sci::Line bottomStutterLine = + pdoc->LineFromPosition(PositionFromLocation( + Point::FromInts(lastXChosen - xOffset, direction * vs.lineHeight * LinesToScroll()))) + - caretYSlop - 1; +@@ -2921,15 +2921,15 @@ + } + size_t endDifferenceText = sText.size() - 1 - lastDifferenceText; + pdoc->DeleteChars( +- static_cast<int>(currentNoVS.Start().Position() + firstDifference), +- static_cast<int>(rangeBytes - firstDifference - endDifferenceText)); +- const int lengthChange = static_cast<int>(lastDifferenceMapped - firstDifference + 1); +- const int lengthInserted = pdoc->InsertString( ++ static_cast<Sci::Position>(currentNoVS.Start().Position() + firstDifference), ++ static_cast<Sci::Position>(rangeBytes - firstDifference - endDifferenceText)); ++ const Sci::Position lengthChange = static_cast<Sci::Position>(lastDifferenceMapped - firstDifference + 1); ++ const Sci::Position lengthInserted = pdoc->InsertString( + static_cast<int>(currentNoVS.Start().Position() + firstDifference), + sMapped.c_str() + firstDifference, + lengthChange); + // Automatic movement changes selection so reset to exactly the same as it was. +- int diffSizes = static_cast<int>(sMapped.size() - sText.size()) + lengthInserted - lengthChange; ++ Sci::Position diffSizes = static_cast<Sci::Position>(sMapped.size() - sText.size()) + lengthInserted - lengthChange; + if (diffSizes != 0) { + if (current.anchor > current.caret) + current.anchor.Add(diffSizes); +@@ -2943,24 +2943,24 @@ + } + + void Editor::LineTranspose() { +- int line = pdoc->LineFromPosition(sel.MainCaret()); ++ Sci::Line line = pdoc->LineFromPosition(sel.MainCaret()); + if (line > 0) { + UndoGroup ug(pdoc); + +- const int startPrevious = pdoc->LineStart(line - 1); ++ const Sci::Position startPrevious = pdoc->LineStart(line - 1); + const std::string linePrevious = RangeText(startPrevious, pdoc->LineEnd(line - 1)); + +- int startCurrent = pdoc->LineStart(line); ++ Sci::Position startCurrent = pdoc->LineStart(line); + const std::string lineCurrent = RangeText(startCurrent, pdoc->LineEnd(line)); + +- pdoc->DeleteChars(startCurrent, static_cast<int>(lineCurrent.length())); +- pdoc->DeleteChars(startPrevious, static_cast<int>(linePrevious.length())); +- startCurrent -= static_cast<int>(linePrevious.length()); ++ pdoc->DeleteChars(startCurrent, static_cast<Sci::Position>(lineCurrent.length())); ++ pdoc->DeleteChars(startPrevious, static_cast<Sci::Position>(linePrevious.length())); ++ startCurrent -= static_cast<Sci::Position>(linePrevious.length()); + + startCurrent += pdoc->InsertString(startPrevious, lineCurrent.c_str(), +- static_cast<int>(lineCurrent.length())); ++ static_cast<Sci::Position>(lineCurrent.length())); + pdoc->InsertString(startCurrent, linePrevious.c_str(), +- static_cast<int>(linePrevious.length())); ++ static_cast<Sci::Position>(linePrevious.length())); + // Move caret to start of current line + MovePositionTo(SelectionPosition(startCurrent)); + } +@@ -2981,20 +2981,20 @@ + SelectionPosition start = sel.Range(r).Start(); + SelectionPosition end = sel.Range(r).End(); + if (forLine) { +- int line = pdoc->LineFromPosition(sel.Range(r).caret.Position()); ++ Sci::Line line = pdoc->LineFromPosition(sel.Range(r).caret.Position()); + start = SelectionPosition(pdoc->LineStart(line)); + end = SelectionPosition(pdoc->LineEnd(line)); + } + std::string text = RangeText(start.Position(), end.Position()); +- int lengthInserted = eolLen; ++ Sci::Position lengthInserted = eolLen; + if (forLine) + lengthInserted = pdoc->InsertString(end.Position(), eol, eolLen); +- pdoc->InsertString(end.Position() + lengthInserted, text.c_str(), static_cast<int>(text.length())); ++ pdoc->InsertString(end.Position() + lengthInserted, text.c_str(), static_cast<Sci::Position>(text.length())); + } + if (sel.Count() && sel.IsRectangular()) { + SelectionPosition last = sel.Last(); + if (forLine) { +- int line = pdoc->LineFromPosition(last.Position()); ++ Sci::Line line = pdoc->LineFromPosition(last.Position()); + last = SelectionPosition(last.Position() + pdoc->LineStart(line+1) - pdoc->LineStart(line)); + } + if (sel.Rectangular().anchor > sel.Rectangular().caret) +@@ -3028,8 +3028,8 @@ + for (size_t r = 0; r < sel.Count(); r++) { + sel.Range(r).ClearVirtualSpace(); + const char *eol = StringFromEOLMode(pdoc->eolMode); +- const int positionInsert = sel.Range(r).caret.Position(); +- const int insertLength = pdoc->InsertString(positionInsert, eol, istrlen(eol)); ++ const Sci::Position positionInsert = sel.Range(r).caret.Position(); ++ const Sci::Position insertLength = pdoc->InsertString(positionInsert, eol, istrlen(eol)); + if (insertLength > 0) { + sel.Range(r) = SelectionRange(positionInsert + insertLength); + countInsertions++; +@@ -3064,12 +3064,12 @@ + int skipLines = 0; + + if (vs.annotationVisible) { +- const int lineDoc = pdoc->LineFromPosition(spStart.Position()); ++ const Sci::Line lineDoc = pdoc->LineFromPosition(spStart.Position()); + const Point ptStartLine = LocationFromPosition(pdoc->LineStart(lineDoc)); + const int subLine = static_cast<int>(pt.y - ptStartLine.y) / vs.lineHeight; + + if (direction < 0 && subLine == 0) { +- const int lineDisplay = cs.DisplayFromDoc(lineDoc); ++ const Sci::Line lineDisplay = cs.DisplayFromDoc(lineDoc); + if (lineDisplay > 0) { + skipLines = pdoc->AnnotationLines(cs.DocFromDisplay(lineDisplay - 1)); + } +@@ -3078,9 +3078,9 @@ + } + } + +- const int newY = static_cast<int>(pt.y) + (1 + skipLines) * direction * vs.lineHeight; ++ const Sci::Line newY = static_cast<Sci::Line>(pt.y) + (1 + skipLines) * direction * vs.lineHeight; + if (lastX < 0) { +- lastX = static_cast<int>(pt.x) + xOffset; ++ lastX = static_cast<Sci::Position>(pt.x) + xOffset; + } + SelectionPosition posNew = SPositionFromLocation( + Point::FromInts(lastX - xOffset, newY), false, false, UserVirtualSpace()); +@@ -3151,7 +3151,8 @@ + } + + void Editor::ParaUpOrDown(int direction, Selection::selTypes selt) { +- int lineDoc, savedPos = sel.MainCaret(); ++ Sci::Line lineDoc; ++ Sci::Position savedPos = sel.MainCaret(); + do { + MovePositionTo(SelectionPosition(direction > 0 ? pdoc->ParaDown(sel.MainCaret()) : pdoc->ParaUp(sel.MainCaret())), selt); + lineDoc = pdoc->LineFromPosition(sel.MainCaret()); +@@ -3166,16 +3167,16 @@ + } while (!cs.GetVisible(lineDoc)); + } + +-Range Editor::RangeDisplayLine(int lineVisible) { ++Range Editor::RangeDisplayLine(Sci::Line lineVisible) { + RefreshStyleData(); + AutoSurface surface(this); + return view.RangeDisplayLine(surface, *this, lineVisible, vs); + } + +-int Editor::StartEndDisplayLine(int pos, bool start) { ++Sci::Position Editor::StartEndDisplayLine(Sci::Position pos, bool start) { + RefreshStyleData(); + AutoSurface surface(this); +- int posRet = view.StartEndDisplayLine(surface, *this, pos, start, vs); ++ Sci::Position posRet = view.StartEndDisplayLine(surface, *this, pos, start, vs); + if (posRet == INVALID_POSITION) { + return pos; + } else { +@@ -3258,27 +3259,27 @@ + + } + +-int Editor::VCHomeDisplayPosition(int position) { +- const int homePos = pdoc->VCHomePosition(position); +- const int viewLineStart = StartEndDisplayLine(position, true); ++Sci::Position Editor::VCHomeDisplayPosition(Sci::Position position) { ++ const Sci::Position homePos = pdoc->VCHomePosition(position); ++ const Sci::Position viewLineStart = StartEndDisplayLine(position, true); + if (viewLineStart > homePos) + return viewLineStart; + else + return homePos; + } + +-int Editor::VCHomeWrapPosition(int position) { +- const int homePos = pdoc->VCHomePosition(position); +- const int viewLineStart = StartEndDisplayLine(position, true); ++Sci::Position Editor::VCHomeWrapPosition(Sci::Position position) { ++ const Sci::Position homePos = pdoc->VCHomePosition(position); ++ const Sci::Position viewLineStart = StartEndDisplayLine(position, true); + if ((viewLineStart < position) && (viewLineStart > homePos)) + return viewLineStart; + else + return homePos; + } + +-int Editor::LineEndWrapPosition(int position) { +- const int endPos = StartEndDisplayLine(position, false); +- const int realEndPos = pdoc->LineEndPosition(position); ++Sci::Position Editor::LineEndWrapPosition(Sci::Position position) { ++ const Sci::Position endPos = StartEndDisplayLine(position, false); ++ const Sci::Position realEndPos = pdoc->LineEndPosition(position); + if (endPos > realEndPos // if moved past visible EOLs + || position >= endPos) // if at end of display line already + return realEndPos; +@@ -3781,26 +3782,26 @@ + return DelWordOrLine(iMessage); + + case SCI_LINECOPY: { +- int lineStart = pdoc->LineFromPosition(SelectionStart().Position()); +- int lineEnd = pdoc->LineFromPosition(SelectionEnd().Position()); ++ Sci::Line lineStart = pdoc->LineFromPosition(SelectionStart().Position()); ++ Sci::Line lineEnd = pdoc->LineFromPosition(SelectionEnd().Position()); + CopyRangeToClipboard(pdoc->LineStart(lineStart), + pdoc->LineStart(lineEnd + 1)); + } + break; + case SCI_LINECUT: { +- int lineStart = pdoc->LineFromPosition(SelectionStart().Position()); +- int lineEnd = pdoc->LineFromPosition(SelectionEnd().Position()); +- int start = pdoc->LineStart(lineStart); +- int end = pdoc->LineStart(lineEnd + 1); ++ Sci::Line lineStart = pdoc->LineFromPosition(SelectionStart().Position()); ++ Sci::Line lineEnd = pdoc->LineFromPosition(SelectionEnd().Position()); ++ Sci::Position start = pdoc->LineStart(lineStart); ++ Sci::Position end = pdoc->LineStart(lineEnd + 1); + SetSelection(start, end); + Cut(); + SetLastXChosen(); + } + break; + case SCI_LINEDELETE: { +- int line = pdoc->LineFromPosition(sel.MainCaret()); +- int start = pdoc->LineStart(line); +- int end = pdoc->LineStart(line + 1); ++ Sci::Line line = pdoc->LineFromPosition(sel.MainCaret()); ++ Sci::Position start = pdoc->LineStart(line); ++ Sci::Position end = pdoc->LineStart(line + 1); + pdoc->DeleteChars(start, end - start); + } + break; +@@ -3854,9 +3855,9 @@ + void Editor::Indent(bool forwards) { + UndoGroup ug(pdoc); + for (size_t r=0; r<sel.Count(); r++) { +- int lineOfAnchor = pdoc->LineFromPosition(sel.Range(r).anchor.Position()); +- int caretPosition = sel.Range(r).caret.Position(); +- int lineCurrentPos = pdoc->LineFromPosition(caretPosition); ++ Sci::Line lineOfAnchor = pdoc->LineFromPosition(sel.Range(r).anchor.Position()); ++ Sci::Position caretPosition = sel.Range(r).caret.Position(); ++ Sci::Line lineCurrentPos = pdoc->LineFromPosition(caretPosition); + if (lineOfAnchor == lineCurrentPos) { + if (forwards) { + pdoc->DeleteChars(sel.Range(r).Start().Position(), sel.Range(r).Length()); +@@ -3865,12 +3866,12 @@ + pdoc->tabIndents) { + int indentation = pdoc->GetLineIndentation(lineCurrentPos); + int indentationStep = pdoc->IndentSize(); +- const int posSelect = pdoc->SetLineIndentation( ++ const Sci::Position posSelect = pdoc->SetLineIndentation( + lineCurrentPos, indentation + indentationStep - indentation % indentationStep); + sel.Range(r) = SelectionRange(posSelect); + } else { + if (pdoc->useTabs) { +- const int lengthInserted = pdoc->InsertString(caretPosition, "\t", 1); ++ const Sci::Position lengthInserted = pdoc->InsertString(caretPosition, "\t", 1); + sel.Range(r) = SelectionRange(caretPosition + lengthInserted); + } else { + int numSpaces = (pdoc->tabInChars) - +@@ -3878,8 +3879,8 @@ + if (numSpaces < 1) + numSpaces = pdoc->tabInChars; + const std::string spaceText(numSpaces, ' '); +- const int lengthInserted = pdoc->InsertString(caretPosition, spaceText.c_str(), +- static_cast<int>(spaceText.length())); ++ const Sci::Position lengthInserted = pdoc->InsertString(caretPosition, spaceText.c_str(), ++ static_cast<Sci::Position>(spaceText.length())); + sel.Range(r) = SelectionRange(caretPosition + lengthInserted); + } + } +@@ -3888,25 +3889,25 @@ + pdoc->tabIndents) { + int indentation = pdoc->GetLineIndentation(lineCurrentPos); + int indentationStep = pdoc->IndentSize(); +- const int posSelect = pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationStep); ++ const Sci::Position posSelect = pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationStep); + sel.Range(r) = SelectionRange(posSelect); + } else { +- int newColumn = ((pdoc->GetColumn(caretPosition) - 1) / pdoc->tabInChars) * ++ Sci::Position newColumn = ((pdoc->GetColumn(caretPosition) - 1) / pdoc->tabInChars) * + pdoc->tabInChars; + if (newColumn < 0) + newColumn = 0; +- int newPos = caretPosition; ++ Sci::Position newPos = caretPosition; + while (pdoc->GetColumn(newPos) > newColumn) + newPos--; + sel.Range(r) = SelectionRange(newPos); + } + } + } else { // Multiline +- int anchorPosOnLine = sel.Range(r).anchor.Position() - pdoc->LineStart(lineOfAnchor); +- int currentPosPosOnLine = caretPosition - pdoc->LineStart(lineCurrentPos); ++ Sci::Position anchorPosOnLine = sel.Range(r).anchor.Position() - pdoc->LineStart(lineOfAnchor); ++ Sci::Position currentPosPosOnLine = caretPosition - pdoc->LineStart(lineCurrentPos); + // Multiple lines selected so indent / dedent +- int lineTopSel = Platform::Minimum(lineOfAnchor, lineCurrentPos); +- int lineBottomSel = Platform::Maximum(lineOfAnchor, lineCurrentPos); ++ Sci::Line lineTopSel = Platform::Minimum(lineOfAnchor, lineCurrentPos); ++ Sci::Line lineBottomSel = Platform::Maximum(lineOfAnchor, lineCurrentPos); + if (pdoc->LineStart(lineBottomSel) == sel.Range(r).anchor.Position() || pdoc->LineStart(lineBottomSel) == caretPosition) + lineBottomSel--; // If not selecting any characters on a line, do not indent + pdoc->Indent(forwards, lineBottomSel, lineTopSel); +@@ -3951,13 +3952,13 @@ + sptr_t lParam) { ///< @c Sci_TextToFind structure: The text to search for in the given range. + + Sci_TextToFind *ft = reinterpret_cast<Sci_TextToFind *>(lParam); +- int lengthFound = istrlen(ft->lpstrText); ++ Sci::Position lengthFound = istrlen(ft->lpstrText); + if (!pdoc->HasCaseFolder()) + pdoc->SetCaseFolder(CaseFolderForEncoding()); + try { + long pos = pdoc->FindText( +- static_cast<int>(ft->chrg.cpMin), +- static_cast<int>(ft->chrg.cpMax), ++ static_cast<Sci::Position>(ft->chrg.cpMin), ++ static_cast<Sci::Position>(ft->chrg.cpMax), + ft->lpstrText, + static_cast<int>(wParam), + &lengthFound); +@@ -4000,7 +4001,7 @@ + + const char *txt = reinterpret_cast<char *>(lParam); + long pos; +- int lengthFound = istrlen(txt); ++ Sci::Position lengthFound = istrlen(txt); + if (!pdoc->HasCaseFolder()) + pdoc->SetCaseFolder(CaseFolderForEncoding()); + try { +@@ -4045,8 +4046,8 @@ + * Search for text in the target range of the document. + * @return The position of the found text, -1 if not found. + */ +-long Editor::SearchInTarget(const char *text, int length) { +- int lengthFound = length; ++long Editor::SearchInTarget(const char *text, Sci::Position length) { ++ Sci::Position lengthFound = length; + + if (!pdoc->HasCaseFolder()) + pdoc->SetCaseFolder(CaseFolderForEncoding()); +@@ -4065,7 +4066,7 @@ + } + } + +-void Editor::GoToLine(int lineNo) { ++void Editor::GoToLine(Sci::Line lineNo) { + if (lineNo > pdoc->LinesTotal()) + lineNo = pdoc->LinesTotal(); + if (lineNo < 0) +@@ -4083,9 +4084,9 @@ + return true; + } + +-std::string Editor::RangeText(int start, int end) const { ++std::string Editor::RangeText(Sci::Position start, Sci::Position end) const { + if (start < end) { +- int len = end - start; ++ Sci::Position len = end - start; + std::string ret(len, '\0'); + for (int i = 0; i < len; i++) { + ret[i] = pdoc->CharAt(start + i); +@@ -4098,9 +4099,9 @@ + void Editor::CopySelectionRange(SelectionText *ss, bool allowLineCopy) { + if (sel.Empty()) { + if (allowLineCopy) { +- int currentLine = pdoc->LineFromPosition(sel.MainCaret()); +- int start = pdoc->LineStart(currentLine); +- int end = pdoc->LineEnd(currentLine); ++ Sci::Line currentLine = pdoc->LineFromPosition(sel.MainCaret()); ++ Sci::Position start = pdoc->LineStart(currentLine); ++ Sci::Position end = pdoc->LineEnd(currentLine); + + std::string text = RangeText(start, end); + if (pdoc->eolMode != SC_EOL_LF) +@@ -4130,7 +4131,7 @@ + } + } + +-void Editor::CopyRangeToClipboard(int start, int end) { ++void Editor::CopyRangeToClipboard(Sci::Position start, Sci::Position end) { + start = pdoc->ClampPositionIntoDocument(start); + end = pdoc->ClampPositionIntoDocument(end); + SelectionText selectedText; +@@ -4230,13 +4231,13 @@ + std::string convertedText = Document::TransformLineEnds(value, lengthValue, pdoc->eolMode); + + if (rectangular) { +- PasteRectangular(position, convertedText.c_str(), static_cast<int>(convertedText.length())); ++ PasteRectangular(position, convertedText.c_str(), static_cast<Sci::Position>(convertedText.length())); + // Should try to select new rectangle but it may not be a rectangle now so just select the drop position + SetEmptySelection(position); + } else { + position = MovePositionOutsideChar(position, sel.MainCaret() - position.Position()); + position = RealizeVirtualSpace(position); +- const int lengthInserted = pdoc->InsertString( ++ const Sci::Position lengthInserted = pdoc->InsertString( + position.Position(), convertedText.c_str(), static_cast<int>(convertedText.length())); + if (lengthInserted > 0) { + SelectionPosition posAfterInsertion = position; +@@ -4256,7 +4257,7 @@ + /** + * @return true if given position is inside the selection, + */ +-bool Editor::PositionInSelection(int pos) { ++bool Editor::PositionInSelection(Sci::Position pos) { + pos = MovePositionOutsideChar(pos, sel.MainCaret() - pos); + for (size_t r=0; r<sel.Count(); r++) { + if (sel.Range(r).Contains(pos)) +@@ -4313,16 +4314,16 @@ + return Window::cursorReverseArrow; + } + +-void Editor::TrimAndSetSelection(int currentPos_, int anchor_) { ++void Editor::TrimAndSetSelection(Sci::Position currentPos_, Sci::Position anchor_) { + sel.TrimSelection(SelectionRange(currentPos_, anchor_)); + SetSelection(currentPos_, anchor_); + } + +-void Editor::LineSelection(int lineCurrentPos_, int lineAnchorPos_, bool wholeLine) { +- int selCurrentPos, selAnchorPos; ++void Editor::LineSelection(Sci::Position lineCurrentPos_, Sci::Position lineAnchorPos_, bool wholeLine) { ++ Sci::Position selCurrentPos, selAnchorPos; + if (wholeLine) { +- int lineCurrent_ = pdoc->LineFromPosition(lineCurrentPos_); +- int lineAnchor_ = pdoc->LineFromPosition(lineAnchorPos_); ++ Sci::Line lineCurrent_ = pdoc->LineFromPosition(lineCurrentPos_); ++ Sci::Line lineAnchor_ = pdoc->LineFromPosition(lineAnchorPos_); + if (lineAnchorPos_ < lineCurrentPos_) { + selCurrentPos = pdoc->LineStart(lineCurrent_ + 1); + selAnchorPos = pdoc->LineStart(lineAnchor_); +@@ -4351,7 +4352,7 @@ + TrimAndSetSelection(selCurrentPos, selAnchorPos); + } + +-void Editor::WordSelection(int pos) { ++void Editor::WordSelection(Sci::Position pos) { + if (pos < wordSelectAnchorStartPos) { + // Extend backward to the word containing pos. + // Skip ExtendWordSelect if the line is empty or if pos is after the last character. +@@ -4472,13 +4473,13 @@ + } + + if (selectionType == selWord) { +- int charPos = originalAnchorPos; ++ Sci::Position charPos = originalAnchorPos; + if (sel.MainCaret() == originalAnchorPos) { + charPos = PositionFromLocation(pt, false, true); + charPos = MovePositionOutsideChar(charPos, -1); + } + +- int startWord, endWord; ++ Sci::Position startWord, endWord; + if ((sel.MainCaret() >= originalAnchorPos) && !pdoc->IsLineEndPosition(charPos)) { + startWord = pdoc->ExtendWordSelect(pdoc->MovePositionOutsideChar(charPos + 1, 1), -1); + endWord = pdoc->ExtendWordSelect(charPos, 1); +@@ -4539,7 +4540,7 @@ + LineSelection(newPos.Position(), lineAnchorPos, selectionType == selWholeLine); + } + +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + SetMouseCapture(true); + if (FineTickerAvailable()) { + FineTickerStart(tickScroll, 100, 10); +@@ -4560,7 +4561,7 @@ + FineTickerStart(tickScroll, 100, 10); + } + if (inDragDrop != ddInitial) { +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + if (!shift) { + if (ctrl && multipleSelection) { + SelectionRange range(newPos); +@@ -4603,19 +4604,19 @@ + return ButtonDownWithModifiers(pt, curTime, ModifierFlags(shift, ctrl, alt)); + } + +-bool Editor::PositionIsHotspot(int position) const { ++bool Editor::PositionIsHotspot(Sci::Position position) const { + return vs.styles[pdoc->StyleIndexAt(position)].hotspot; + } + + bool Editor::PointIsHotspot(Point pt) { +- int pos = PositionFromLocation(pt, true, true); ++ Sci::Position pos = PositionFromLocation(pt, true, true); + if (pos == INVALID_POSITION) + return false; + return PositionIsHotspot(pos); + } + +-void Editor::SetHoverIndicatorPosition(int position) { +- int hoverIndicatorPosPrev = hoverIndicatorPos; ++void Editor::SetHoverIndicatorPosition(Sci::Position position) { ++ Sci::Position hoverIndicatorPosPrev = hoverIndicatorPos; + hoverIndicatorPos = INVALID_POSITION; + if (vs.indicatorsDynamic == 0) + return; +@@ -4643,7 +4644,7 @@ + + void Editor::SetHotSpotRange(Point *pt) { + if (pt) { +- int pos = PositionFromLocation(*pt, false, true); ++ Sci::Position pos = PositionFromLocation(*pt, false, true); + + // If we don't limit this to word characters then the + // range can encompass more than the run range and then +@@ -4664,7 +4665,7 @@ + if (hotspot.Valid()) { + InvalidateRange(hotspot.start, hotspot.end); + } +- hotspot = Range(invalidPosition); ++ hotspot = Range(Sci::invalidPosition); + } + } + +@@ -4752,7 +4753,7 @@ + } + + // Autoscroll +- int lineMove = DisplayFromPosition(movePos.Position()); ++ Sci::Line lineMove = DisplayFromPosition(movePos.Position()); + if (pt.y > rcClient.bottom) { + ScrollTo(lineMove - LinesOnScreen() + 1); + Redraw(); +@@ -4789,7 +4790,7 @@ + DisplayCursor(Window::cursorHand); + SetHotSpotRange(&pt); + } else { +- if (hoverIndicatorPos != invalidPosition) ++ if (hoverIndicatorPos != Sci::invalidPosition) + DisplayCursor(Window::cursorHand); + else + DisplayCursor(Window::cursorText); +@@ -4842,14 +4843,14 @@ + if (drag.Length()) { + const int length = static_cast<int>(drag.Length()); + if (ctrl) { +- const int lengthInserted = pdoc->InsertString( ++ const Sci::Position lengthInserted = pdoc->InsertString( + newPos.Position(), drag.Data(), length); + if (lengthInserted > 0) { + SetSelection(newPos.Position(), newPos.Position() + lengthInserted); + } + } else if (newPos < selStart) { + pdoc->DeleteChars(selStart.Position(), static_cast<int>(drag.Length())); +- const int lengthInserted = pdoc->InsertString( ++ const Sci::Position lengthInserted = pdoc->InsertString( + newPos.Position(), drag.Data(), length); + if (lengthInserted > 0) { + SetSelection(newPos.Position(), newPos.Position() + lengthInserted); +@@ -4857,7 +4858,7 @@ + } else if (newPos > selEnd) { + pdoc->DeleteChars(selStart.Position(), static_cast<int>(drag.Length())); + newPos.Add(-static_cast<int>(drag.Length())); +- const int lengthInserted = pdoc->InsertString( ++ const Sci::Position lengthInserted = pdoc->InsertString( + newPos.Position(), drag.Data(), length); + if (lengthInserted > 0) { + SetSelection(newPos.Position(), newPos.Position() + lengthInserted); +@@ -5017,11 +5018,11 @@ + ShowCaretAtCurrentPosition(); + } + +-int Editor::PositionAfterArea(PRectangle rcArea) const { ++Sci::Position Editor::PositionAfterArea(PRectangle rcArea) const { + // The start of the document line after the display line after the area + // This often means that the line after a modification is restyled which helps + // detect multiline comment additions and heals single line comments +- int lineAfter = TopLineOfMain() + static_cast<int>(rcArea.bottom - 1) / vs.lineHeight + 1; ++ Sci::Line lineAfter = TopLineOfMain() + static_cast<Sci::Line>(rcArea.bottom - 1) / vs.lineHeight + 1; + if (lineAfter < cs.LinesDisplayed()) + return pdoc->LineStart(cs.DocFromDisplay(lineAfter) + 1); + else +@@ -5030,8 +5031,8 @@ + + // Style to a position within the view. If this causes a change at end of last line then + // affects later lines so style all the viewed text. +-void Editor::StyleToPositionInView(Position pos) { +- int endWindow = PositionAfterArea(GetClientDrawingRectangle()); ++void Editor::StyleToPositionInView(Sci::Position pos) { ++ Sci::Position endWindow = PositionAfterArea(GetClientDrawingRectangle()); + if (pos > endWindow) + pos = endWindow; + const int styleAtEnd = pdoc->StyleIndexAt(pos-1); +@@ -5046,7 +5047,7 @@ + } + } + +-int Editor::PositionAfterMaxStyling(int posMax, bool scrolling) const { ++Sci::Position Editor::PositionAfterMaxStyling(Sci::Position posMax, bool scrolling) const { + if ((idleStyling == SC_IDLESTYLING_NONE) || (idleStyling == SC_IDLESTYLING_AFTERVISIBLE)) { + // Both states do not limit styling + return posMax; +@@ -5056,12 +5057,12 @@ + // When scrolling, allow less time to ensure responsive + const double secondsAllowed = scrolling ? 0.005 : 0.02; + +- const int linesToStyle = Platform::Clamp(static_cast<int>(secondsAllowed / pdoc->durationStyleOneLine), ++ const Sci::Line linesToStyle = Platform::Clamp(static_cast<int>(secondsAllowed / pdoc->durationStyleOneLine), + 10, 0x10000); +- const int stylingMaxLine = std::min( +- static_cast<int>(pdoc->LineFromPosition(pdoc->GetEndStyled()) + linesToStyle), ++ const Sci::Line stylingMaxLine = std::min( ++ static_cast<Sci::Line>(pdoc->LineFromPosition(pdoc->GetEndStyled()) + linesToStyle), + pdoc->LinesTotal()); +- return std::min(static_cast<int>(pdoc->LineStart(stylingMaxLine)), posMax); ++ return std::min(static_cast<Sci::Position>(pdoc->LineStart(stylingMaxLine)), posMax); + } + + void Editor::StartIdleStyling(bool truncatedLastStyling) { +@@ -5081,8 +5082,8 @@ + + // Style for an area but bound the amount of styling to remain responsive + void Editor::StyleAreaBounded(PRectangle rcArea, bool scrolling) { +- const int posAfterArea = PositionAfterArea(rcArea); +- const int posAfterMax = PositionAfterMaxStyling(posAfterArea, scrolling); ++ const Sci::Position posAfterArea = PositionAfterArea(rcArea); ++ const Sci::Position posAfterMax = PositionAfterMaxStyling(posAfterArea, scrolling); + if (posAfterMax < posAfterArea) { + // Idle styling may be performed before current visible area + // Style a bit now then style further in idle time +@@ -5095,10 +5096,10 @@ + } + + void Editor::IdleStyling() { +- const int posAfterArea = PositionAfterArea(GetClientRectangle()); +- const int endGoal = (idleStyling >= SC_IDLESTYLING_AFTERVISIBLE) ? ++ const Sci::Position posAfterArea = PositionAfterArea(GetClientRectangle()); ++ const Sci::Position endGoal = (idleStyling >= SC_IDLESTYLING_AFTERVISIBLE) ? + pdoc->Length() : posAfterArea; +- const int posAfterMax = PositionAfterMaxStyling(endGoal, false); ++ const Sci::Position posAfterMax = PositionAfterMaxStyling(endGoal, false); + pdoc->StyleToAdjustingLineDuration(posAfterMax); + if (pdoc->GetEndStyled() >= endGoal) { + needIdleStyling = false; +@@ -5115,7 +5116,7 @@ + workNeeded.Reset(); + } + +-void Editor::QueueIdleWork(WorkNeeded::workItems items, int upTo) { ++void Editor::QueueIdleWork(WorkNeeded::workItems items, Sci::Position upTo) { + workNeeded.Need(items, upTo); + } + +@@ -5160,7 +5161,7 @@ + } + } + +-void Editor::SetBraceHighlight(Position pos0, Position pos1, int matchStyle) { ++void Editor::SetBraceHighlight(Sci::Position pos0, Sci::Position pos1, int matchStyle) { + if ((pos0 != braces[0]) || (pos1 != braces[1]) || (matchStyle != bracesMatchStyle)) { + if ((braces[0] != pos0) || (matchStyle != bracesMatchStyle)) { + CheckForChangeOutsidePaint(Range(braces[0])); +@@ -5179,11 +5180,11 @@ + } + } + +-void Editor::SetAnnotationHeights(int start, int end) { ++void Editor::SetAnnotationHeights(Sci::Line start, Sci::Line end) { + if (vs.annotationVisible) { + RefreshStyleData(); + bool changedHeight = false; +- for (int line=start; line<end && line<pdoc->LinesTotal(); line++) { ++ for (Sci::Line line=start; line<end && line<pdoc->LinesTotal(); line++) { + int linesWrapped = 1; + if (Wrapping()) { + AutoSurface surface(this); +@@ -5218,8 +5219,8 @@ + targetStart = 0; + targetEnd = 0; + +- braces[0] = invalidPosition; +- braces[1] = invalidPosition; ++ braces[0] = Sci::invalidPosition; ++ braces[1] = Sci::invalidPosition; + + vs.ReleaseAllExtendedStyles(); + +@@ -5232,8 +5233,8 @@ + view.llc.Deallocate(); + NeedWrapping(); + +- hotspot = Range(invalidPosition); +- hoverIndicatorPos = invalidPosition; ++ hotspot = Range(Sci::invalidPosition); ++ hoverIndicatorPos = Sci::invalidPosition; + + view.ClearAllTabstops(); + +@@ -5248,7 +5249,7 @@ + vs.annotationVisible = visible; + if (changedFromOrToHidden) { + int dir = vs.annotationVisible ? 1 : -1; +- for (int line=0; line<pdoc->LinesTotal(); line++) { ++ for (Sci::Line line=0; line<pdoc->LinesTotal(); line++) { + int annotationLines = pdoc->AnnotationLines(line); + if (annotationLines > 0) { + cs.SetHeight(line, cs.GetHeight(line) + annotationLines * dir); +@@ -5262,8 +5263,8 @@ + /** + * Recursively expand a fold, making lines visible except where they have an unexpanded parent. + */ +-int Editor::ExpandLine(int line) { +- int lineMaxSubord = pdoc->GetLastChild(line); ++Sci::Line Editor::ExpandLine(Sci::Line line) { ++ Sci::Line lineMaxSubord = pdoc->GetLastChild(line); + line++; + while (line <= lineMaxSubord) { + cs.SetVisible(line, line, true); +@@ -5280,13 +5281,13 @@ + return lineMaxSubord; + } + +-void Editor::SetFoldExpanded(int lineDoc, bool expanded) { ++void Editor::SetFoldExpanded(Sci::Line lineDoc, bool expanded) { + if (cs.SetExpanded(lineDoc, expanded)) { + RedrawSelMargin(); + } + } + +-void Editor::FoldLine(int line, int action) { ++void Editor::FoldLine(Sci::Line line, int action) { + if (line >= 0) { + if (action == SC_FOLDACTION_TOGGLE) { + if ((pdoc->GetLevel(line) & SC_FOLDLEVELHEADERFLAG) == 0) { +@@ -5298,12 +5299,12 @@ + } + + if (action == SC_FOLDACTION_CONTRACT) { +- int lineMaxSubord = pdoc->GetLastChild(line); ++ Sci::Line lineMaxSubord = pdoc->GetLastChild(line); + if (lineMaxSubord > line) { + cs.SetExpanded(line, 0); + cs.SetVisible(line + 1, lineMaxSubord, false); + +- int lineCurrent = pdoc->LineFromPosition(sel.MainCaret()); ++ Sci::Line lineCurrent = pdoc->LineFromPosition(sel.MainCaret()); + if (lineCurrent > line && lineCurrent <= lineMaxSubord) { + // This does not re-expand the fold + EnsureCaretVisible(); +@@ -5324,7 +5325,7 @@ + } + } + +-void Editor::FoldExpand(int line, int action, int level) { ++void Editor::FoldExpand(Sci::Line line, int action, int level) { + bool expanding = action == SC_FOLDACTION_EXPAND; + if (action == SC_FOLDACTION_TOGGLE) { + expanding = !cs.GetExpanded(line); +@@ -5336,7 +5337,7 @@ + if (expanding && (cs.HiddenLines() == 0)) + // Nothing to do + return; +- int lineMaxSubord = pdoc->GetLastChild(line, LevelNumber(level)); ++ Sci::Line lineMaxSubord = pdoc->GetLastChild(line, LevelNumber(level)); + line++; + cs.SetVisible(line, lineMaxSubord, expanding); + while (line <= lineMaxSubord) { +@@ -5350,8 +5351,8 @@ + Redraw(); + } + +-int Editor::ContractedFoldNext(int lineStart) const { +- for (int line = lineStart; line<pdoc->LinesTotal();) { ++Sci::Line Editor::ContractedFoldNext(Sci::Line lineStart) const { ++ for (Sci::Line line = lineStart; line<pdoc->LinesTotal();) { + if (!cs.GetExpanded(line) && (pdoc->GetLevel(line) & SC_FOLDLEVELHEADERFLAG)) + return line; + line = cs.ContractedNext(line+1); +@@ -5366,7 +5367,7 @@ + * Recurse up from this line to find any folds that prevent this line from being visible + * and unfold them all. + */ +-void Editor::EnsureLineVisible(int lineDoc, bool enforcePolicy) { ++void Editor::EnsureLineVisible(Sci::Line lineDoc, bool enforcePolicy) { + + // In case in need of wrapping to ensure DisplayFromDoc works. + if (lineDoc >= wrapPending.start) +@@ -5374,12 +5375,12 @@ + + if (!cs.GetVisible(lineDoc)) { + // Back up to find a non-blank line +- int lookLine = lineDoc; ++ Sci::Line lookLine = lineDoc; + int lookLineLevel = pdoc->GetLevel(lookLine); + while ((lookLine > 0) && (lookLineLevel & SC_FOLDLEVELWHITEFLAG)) { + lookLineLevel = pdoc->GetLevel(--lookLine); + } +- int lineParent = pdoc->GetFoldParent(lookLine); ++ Sci::Line lineParent = pdoc->GetFoldParent(lookLine); + if (lineParent < 0) { + // Backed up to a top level line, so try to find parent of initial line + lineParent = pdoc->GetFoldParent(lineDoc); +@@ -5396,7 +5397,7 @@ + Redraw(); + } + if (enforcePolicy) { +- int lineDisplay = cs.DisplayFromDoc(lineDoc); ++ Sci::Line lineDisplay = cs.DisplayFromDoc(lineDoc); + if (visiblePolicy & VISIBLE_SLOP) { + if ((topLine > lineDisplay) || ((visiblePolicy & VISIBLE_STRICT) && (topLine + visibleSlop > lineDisplay))) { + SetTopLine(Platform::Clamp(lineDisplay - visibleSlop, 0, MaxScrollPos())); +@@ -5420,7 +5421,7 @@ + + void Editor::FoldAll(int action) { + pdoc->EnsureStyledTo(pdoc->Length()); +- int maxLine = pdoc->LinesTotal(); ++ Sci::Line maxLine = pdoc->LinesTotal(); + bool expanding = action == SC_FOLDACTION_EXPAND; + if (action == SC_FOLDACTION_TOGGLE) { + // Discover current state +@@ -5445,7 +5446,7 @@ + if ((level & SC_FOLDLEVELHEADERFLAG) && + (SC_FOLDLEVELBASE == LevelNumber(level))) { + SetFoldExpanded(line, false); +- int lineMaxSubord = pdoc->GetLastChild(line, -1); ++ Sci::Line lineMaxSubord = pdoc->GetLastChild(line, -1); + if (lineMaxSubord > line) { + cs.SetVisible(line + 1, lineMaxSubord, false); + } +@@ -5456,7 +5457,7 @@ + Redraw(); + } + +-void Editor::FoldChanged(int line, int levelNow, int levelPrev) { ++void Editor::FoldChanged(Sci::Line line, int levelNow, int levelPrev) { + if (levelNow & SC_FOLDLEVELHEADERFLAG) { + if (!(levelPrev & SC_FOLDLEVELHEADERFLAG)) { + // Adding a fold point. +@@ -5466,7 +5467,7 @@ + FoldExpand(line, SC_FOLDACTION_EXPAND, levelPrev); + } + } else if (levelPrev & SC_FOLDLEVELHEADERFLAG) { +- const int prevLine = line - 1; ++ const Sci::Line prevLine = line - 1; + const int prevLineLevel = pdoc->GetLevel(prevLine); + + // Combining two blocks where the first block is collapsed (e.g. by deleting the line(s) which separate(s) the two blocks) +@@ -5487,7 +5488,7 @@ + (LevelNumber(levelPrev) > LevelNumber(levelNow))) { + if (cs.HiddenLines()) { + // See if should still be hidden +- int parentLine = pdoc->GetFoldParent(line); ++ Sci::Line parentLine = pdoc->GetFoldParent(line); + if ((parentLine < 0) || (cs.GetExpanded(parentLine) && cs.GetVisible(parentLine))) { + cs.SetVisible(line, line, true); + SetScrollBars(); +@@ -5499,18 +5500,18 @@ + // Combining two blocks where the first one is collapsed (e.g. by adding characters in the line which separates the two blocks) + if (!(levelNow & SC_FOLDLEVELWHITEFLAG) && (LevelNumber(levelPrev) < LevelNumber(levelNow))) { + if (cs.HiddenLines()) { +- const int parentLine = pdoc->GetFoldParent(line); ++ const Sci::Line parentLine = pdoc->GetFoldParent(line); + if (!cs.GetExpanded(parentLine) && cs.GetVisible(line)) + FoldLine(parentLine, SC_FOLDACTION_EXPAND); + } + } + } + +-void Editor::NeedShown(int pos, int len) { ++void Editor::NeedShown(Sci::Position pos, Sci::Position len) { + if (foldAutomatic & SC_AUTOMATICFOLD_SHOW) { +- int lineStart = pdoc->LineFromPosition(pos); +- int lineEnd = pdoc->LineFromPosition(pos+len); +- for (int line = lineStart; line <= lineEnd; line++) { ++ Sci::Line lineStart = pdoc->LineFromPosition(pos); ++ Sci::Line lineEnd = pdoc->LineFromPosition(pos+len); ++ for (Sci::Line line = lineStart; line <= lineEnd; line++) { + EnsureLineVisible(line, false); + } + } else { +@@ -5518,9 +5519,9 @@ + } + } + +-int Editor::GetTag(char *tagValue, int tagNumber) { ++Sci::Position Editor::GetTag(char *tagValue, int tagNumber) { + const char *text = 0; +- int length = 0; ++ Sci::Position length = 0; + if ((tagNumber >= 1) && (tagNumber <= 9)) { + char name[3] = "\\?"; + name[1] = static_cast<char>(tagNumber + '0'); +@@ -5536,7 +5537,7 @@ + return length; + } + +-int Editor::ReplaceTarget(bool replacePatterns, const char *text, int length) { ++Sci::Position Editor::ReplaceTarget(bool replacePatterns, const char *text, Sci::Position length) { + UndoGroup ug(pdoc); + if (length == -1) + length = istrlen(text); +@@ -5549,7 +5550,7 @@ + if (targetStart != targetEnd) + pdoc->DeleteChars(targetStart, targetEnd - targetStart); + targetEnd = targetStart; +- const int lengthInserted = pdoc->InsertString(targetStart, text, length); ++ const Sci::Position lengthInserted = pdoc->InsertString(targetStart, text, length); + targetEnd = targetStart + lengthInserted; + return length; + } +@@ -5577,15 +5578,15 @@ + } + } + +-void Editor::AddStyledText(char *buffer, int appendLength) { ++void Editor::AddStyledText(char *buffer, Sci::Position appendLength) { + // The buffer consists of alternating character bytes and style bytes +- int textLength = appendLength / 2; ++ Sci::Position textLength = appendLength / 2; + std::string text(textLength, '\0'); +- int i; ++ Sci::Position i; + for (i = 0; i < textLength; i++) { + text[i] = buffer[i*2]; + } +- const int lengthInserted = pdoc->InsertString(CurrentPosition(), text.c_str(), textLength); ++ const Sci::Position lengthInserted = pdoc->InsertString(CurrentPosition(), text.c_str(), textLength); + for (i = 0; i < textLength; i++) { + text[i] = buffer[i*2+1]; + } +@@ -5854,14 +5855,14 @@ + break; + + case SCI_GETLINE: { // Risk of overwriting the end of the buffer +- int lineStart = pdoc->LineStart(static_cast<int>(wParam)); +- int lineEnd = pdoc->LineStart(static_cast<int>(wParam + 1)); ++ Sci::Position lineStart = pdoc->LineStart(static_cast<Sci::Line>(wParam)); ++ Sci::Position lineEnd = pdoc->LineStart(static_cast<Sci::Line>(wParam + 1)); + if (lParam == 0) { + return lineEnd - lineStart; + } + char *ptr = CharPtrFromSPtr(lParam); +- int iPlace = 0; +- for (int iChar = lineStart; iChar < lineEnd; iChar++) { ++ Sci::Position iPlace = 0; ++ for (Sci::Position iChar = lineStart; iChar < lineEnd; iChar++) { + ptr[iPlace++] = pdoc->CharAt(iChar); + } + return iPlace; +@@ -5877,8 +5878,8 @@ + return !pdoc->IsSavePoint(); + + case SCI_SETSEL: { +- int nStart = static_cast<int>(wParam); +- int nEnd = static_cast<int>(lParam); ++ Sci::Position nStart = static_cast<Sci::Position>(wParam); ++ Sci::Position nEnd = static_cast<Sci::Position>(lParam); + if (nEnd < 0) + nEnd = pdoc->Length(); + if (nStart < 0) +@@ -5919,7 +5920,7 @@ + wParam = pdoc->LineFromPosition(SelectionStart().Position()); + if (wParam == 0) + return 0; // Even if there is no text, there is a first line that starts at 0 +- if (static_cast<int>(wParam) > pdoc->LinesTotal()) ++ if (static_cast<Sci::Line>(wParam) > pdoc->LinesTotal()) + return -1; + //if (wParam > pdoc->LineFromPosition(pdoc->Length())) // Useful test, anyway... + // return -1; +@@ -5938,7 +5939,7 @@ + UndoGroup ug(pdoc); + ClearSelection(); + char *replacement = CharPtrFromSPtr(lParam); +- const int lengthInserted = pdoc->InsertString( ++ const Sci::Position lengthInserted = pdoc->InsertString( + sel.MainCaret(), replacement, istrlen(replacement)); + SetEmptySelection(sel.MainCaret() + lengthInserted); + EnsureCaretVisible(); +@@ -5986,15 +5987,15 @@ + + case SCI_REPLACETARGET: + PLATFORM_ASSERT(lParam); +- return ReplaceTarget(false, CharPtrFromSPtr(lParam), static_cast<int>(wParam)); ++ return ReplaceTarget(false, CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam)); + + case SCI_REPLACETARGETRE: + PLATFORM_ASSERT(lParam); +- return ReplaceTarget(true, CharPtrFromSPtr(lParam), static_cast<int>(wParam)); ++ return ReplaceTarget(true, CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam)); + + case SCI_SEARCHINTARGET: + PLATFORM_ASSERT(lParam); +- return SearchInTarget(CharPtrFromSPtr(lParam), static_cast<int>(wParam)); ++ return SearchInTarget(CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam)); + + case SCI_SETSEARCHFLAGS: + searchFlags = static_cast<int>(wParam); +@@ -6016,8 +6017,8 @@ + return Platform::Clamp(pdoc->GetRelativePosition(static_cast<int>(wParam), static_cast<int>(lParam)), 0, pdoc->Length()); + + case SCI_LINESCROLL: +- ScrollTo(topLine + static_cast<int>(lParam)); +- HorizontalScrollTo(xOffset + static_cast<int>(wParam)* static_cast<int>(vs.spaceWidth)); ++ ScrollTo(topLine + static_cast<Sci::Line>(lParam)); ++ HorizontalScrollTo(xOffset + static_cast<int>(wParam) * static_cast<int>(vs.spaceWidth)); + return 1; + + case SCI_SETXOFFSET: +@@ -6072,7 +6073,7 @@ + if (lParam == 0) + return 0; + Sci_TextRange *tr = reinterpret_cast<Sci_TextRange *>(lParam); +- int cpMax = static_cast<int>(tr->chrg.cpMax); ++ Sci::Position cpMax = static_cast<Sci::Position>(tr->chrg.cpMax); + if (cpMax == -1) + cpMax = pdoc->Length(); + PLATFORM_ASSERT(cpMax <= pdoc->Length()); +@@ -6113,26 +6114,26 @@ + case SCI_ADDTEXT: { + if (lParam == 0) + return 0; +- const int lengthInserted = pdoc->InsertString( +- CurrentPosition(), CharPtrFromSPtr(lParam), static_cast<int>(wParam)); ++ const Sci::Position lengthInserted = pdoc->InsertString( ++ CurrentPosition(), CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam)); + SetEmptySelection(sel.MainCaret() + lengthInserted); + return 0; + } + + case SCI_ADDSTYLEDTEXT: + if (lParam) +- AddStyledText(CharPtrFromSPtr(lParam), static_cast<int>(wParam)); ++ AddStyledText(CharPtrFromSPtr(lParam), static_cast<Sci::Position>(wParam)); + return 0; + + case SCI_INSERTTEXT: { + if (lParam == 0) + return 0; +- int insertPos = static_cast<int>(wParam); ++ Sci::Position insertPos = static_cast<Sci::Position>(wParam); + if (static_cast<int>(wParam) == -1) + insertPos = CurrentPosition(); +- int newCurrent = CurrentPosition(); ++ Sci::Position newCurrent = CurrentPosition(); + char *sz = CharPtrFromSPtr(lParam); +- const int lengthInserted = pdoc->InsertString(insertPos, sz, istrlen(sz)); ++ const Sci::Position lengthInserted = pdoc->InsertString(insertPos, sz, istrlen(sz)); + if (newCurrent > insertPos) + newCurrent += lengthInserted; + SetEmptySelection(newCurrent); +@@ -6221,11 +6222,11 @@ + return pdoc->Length(); + + case SCI_ALLOCATE: +- pdoc->Allocate(static_cast<int>(wParam)); ++ pdoc->Allocate(static_cast<Sci::Position>(wParam)); + break; + + case SCI_GETCHARAT: +- return pdoc->CharAt(static_cast<int>(wParam)); ++ return pdoc->CharAt(static_cast<Sci::Position>(wParam)); + + case SCI_SETCURRENTPOS: + if (sel.IsRectangular()) { +@@ -6233,7 +6234,7 @@ + SetRectangularRange(); + Redraw(); + } else { +- SetSelection(static_cast<int>(wParam), sel.MainAnchor()); ++ SetSelection(static_cast<Sci::Position>(wParam), sel.MainAnchor()); + } + break; + +@@ -6242,11 +6243,11 @@ + + case SCI_SETANCHOR: + if (sel.IsRectangular()) { +- sel.Rectangular().anchor.SetPosition(static_cast<int>(wParam)); ++ sel.Rectangular().anchor.SetPosition(static_cast<Sci::Position>(wParam)); + SetRectangularRange(); + Redraw(); + } else { +- SetSelection(sel.MainCaret(), static_cast<int>(wParam)); ++ SetSelection(sel.MainCaret(), static_cast<Sci::Position>(wParam)); + } + break; + +@@ -6254,14 +6255,14 @@ + return sel.IsRectangular() ? sel.Rectangular().anchor.Position() : sel.MainAnchor(); + + case SCI_SETSELECTIONSTART: +- SetSelection(Platform::Maximum(sel.MainCaret(), static_cast<int>(wParam)), static_cast<int>(wParam)); ++ SetSelection(std::max(sel.MainCaret(), static_cast<Sci::Position>(wParam)), static_cast<Sci::Position>(wParam)); + break; + + case SCI_GETSELECTIONSTART: + return sel.LimitsForRectangularElseMain().start.Position(); + + case SCI_SETSELECTIONEND: +- SetSelection(static_cast<int>(wParam), Platform::Minimum(sel.MainAnchor(), static_cast<int>(wParam))); ++ SetSelection(static_cast<Sci::Position>(wParam), Platform::Minimum(sel.MainAnchor(), static_cast<Sci::Position>(wParam))); + break; + + case SCI_GETSELECTIONEND: +@@ -6384,16 +6385,16 @@ + break; + + case SCI_GETCURLINE: { +- int lineCurrentPos = pdoc->LineFromPosition(sel.MainCaret()); +- int lineStart = pdoc->LineStart(lineCurrentPos); +- unsigned int lineEnd = pdoc->LineStart(lineCurrentPos + 1); ++ const Sci::Line lineCurrentPos = pdoc->LineFromPosition(sel.MainCaret()); ++ const Sci::Position lineStart = pdoc->LineStart(lineCurrentPos); ++ const Sci::Position lineEnd = pdoc->LineStart(lineCurrentPos + 1); + if (lParam == 0) { + return 1 + lineEnd - lineStart; + } + PLATFORM_ASSERT(wParam > 0); + char *ptr = CharPtrFromSPtr(lParam); + unsigned int iPlace = 0; +- for (unsigned int iChar = lineStart; iChar < lineEnd && iPlace < wParam - 1; iChar++) { ++ for (Sci::Position iChar = lineStart; iChar < lineEnd && iPlace < wParam - 1; iChar++) { + ptr[iPlace++] = pdoc->CharAt(iChar); + } + ptr[iPlace] = '\0'; +diff -r 1788f6795302 -r a0f26eaf474d src/Editor.h +--- a/src/Editor.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Editor.h Fri Mar 31 18:19:38 2017 +1100 +@@ -47,14 +47,14 @@ + workUpdateUI=2 + }; + enum workItems items; +- Position upTo; ++ Sci::Position upTo; + + WorkNeeded() : items(workNone), upTo(0) {} + void Reset() { + items = workNone; + upTo = 0; + } +- void Need(workItems items_, Position pos) { ++ void Need(workItems items_, Sci::Position pos) { + if ((items_ & workStyle) && (upTo < pos)) + upTo = pos; + items = static_cast<workItems>(items | items_); +@@ -115,8 +115,8 @@ + struct WrapPending { + // The range of lines that need to be wrapped + enum { lineLarge = 0x7ffffff }; +- int start; // When there are wraps pending, will be in document range +- int end; // May be lineLarge to indicate all of document after start ++ Sci::Line start; // When there are wraps pending, will be in document range ++ Sci::Line end; // May be lineLarge to indicate all of document after start + WrapPending() { + start = lineLarge; + end = lineLarge; +@@ -125,14 +125,14 @@ + start = lineLarge; + end = lineLarge; + } +- void Wrapped(int line) { ++ void Wrapped(Sci::Line line) { + if (start == line) + start++; + } + bool NeedsWrap() const { + return start < end; + } +- bool AddRange(int lineStart, int lineEnd) { ++ bool AddRange(Sci::Line lineStart, Sci::Line lineEnd) { + const bool neededWrap = NeedsWrap(); + bool changed = false; + if (start > lineStart) { +@@ -211,19 +211,19 @@ + enum { ddNone, ddInitial, ddDragging } inDragDrop; + bool dropWentOutside; + SelectionPosition posDrop; +- int hotSpotClickPos; ++ Sci::Position hotSpotClickPos; + int lastXChosen; +- int lineAnchorPos; +- int originalAnchorPos; +- int wordSelectAnchorStartPos; +- int wordSelectAnchorEndPos; +- int wordSelectInitialCaretPos; +- int targetStart; +- int targetEnd; ++ Sci::Position lineAnchorPos; ++ Sci::Position originalAnchorPos; ++ Sci::Position wordSelectAnchorStartPos; ++ Sci::Position wordSelectAnchorEndPos; ++ Sci::Position wordSelectInitialCaretPos; ++ Sci::Position targetStart; ++ Sci::Position targetEnd; + int searchFlags; +- int topLine; +- int posTopLine; +- int lengthForEncode; ++ Sci::Line topLine; ++ Sci::Position posTopLine; ++ Sci::Position lengthForEncode; + + int needUpdateUI; + +@@ -249,7 +249,7 @@ + int visiblePolicy; + int visibleSlop; + +- int searchAnchor; ++ Sci::Position searchAnchor; + + bool recordingMacro; + +@@ -276,38 +276,38 @@ + // scroll views where it will be equivalent to the current scroll position. + virtual Point GetVisibleOriginInMain() const; + PointDocument DocumentPointFromView(Point ptView) const; // Convert a point from view space to document +- int TopLineOfMain() const; // Return the line at Main's y coordinate 0 ++ Sci::Line TopLineOfMain() const; // Return the line at Main's y coordinate 0 + virtual PRectangle GetClientRectangle() const; + virtual PRectangle GetClientDrawingRectangle(); + PRectangle GetTextRectangle() const; + +- virtual int LinesOnScreen() const; +- int LinesToScroll() const; +- int MaxScrollPos() const; ++ virtual Sci::Line LinesOnScreen() const; ++ Sci::Line LinesToScroll() const; ++ Sci::Line MaxScrollPos() const; + SelectionPosition ClampPositionIntoDocument(SelectionPosition sp) const; + Point LocationFromPosition(SelectionPosition pos, PointEnd pe=peDefault); +- Point LocationFromPosition(int pos, PointEnd pe=peDefault); +- int XFromPosition(int pos); ++ Point LocationFromPosition(Sci::Position pos, PointEnd pe=peDefault); ++ int XFromPosition(Sci::Position pos); + int XFromPosition(SelectionPosition sp); + SelectionPosition SPositionFromLocation(Point pt, bool canReturnInvalid=false, bool charPosition=false, bool virtualSpace=true); +- int PositionFromLocation(Point pt, bool canReturnInvalid = false, bool charPosition = false); +- SelectionPosition SPositionFromLineX(int lineDoc, int x); +- int PositionFromLineX(int line, int x); +- int LineFromLocation(Point pt) const; +- void SetTopLine(int topLineNew); ++ Sci::Position PositionFromLocation(Point pt, bool canReturnInvalid = false, bool charPosition = false); ++ SelectionPosition SPositionFromLineX(Sci::Line lineDoc, int x); ++ Sci::Position PositionFromLineX(Sci::Line line, int x); ++ Sci::Line LineFromLocation(Point pt) const; ++ void SetTopLine(Sci::Line topLineNew); + + virtual bool AbandonPaint(); + virtual void RedrawRect(PRectangle rc); + virtual void DiscardOverdraw(); + virtual void Redraw(); +- void RedrawSelMargin(int line=-1, bool allAfter=false); ++ void RedrawSelMargin(Sci::Line line=-1, bool allAfter=false); + PRectangle RectangleFromRange(Range r, int overlap); +- void InvalidateRange(int start, int end); ++ void InvalidateRange(Sci::Position start, Sci::Position end); + + bool UserVirtualSpace() const { + return ((virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0); + } +- int CurrentPosition() const; ++ Sci::Position CurrentPosition() const; + bool SelectionEmpty() const; + SelectionPosition SelectionStart(); + SelectionPosition SelectionEnd(); +@@ -316,39 +316,39 @@ + void InvalidateSelection(SelectionRange newMain, bool invalidateWholeSelection=false); + void InvalidateWholeSelection(); + void SetSelection(SelectionPosition currentPos_, SelectionPosition anchor_); +- void SetSelection(int currentPos_, int anchor_); ++ void SetSelection(Sci::Position currentPos_, Sci::Position anchor_); + void SetSelection(SelectionPosition currentPos_); + void SetSelection(int currentPos_); + void SetEmptySelection(SelectionPosition currentPos_); +- void SetEmptySelection(int currentPos_); ++ void SetEmptySelection(Sci::Position currentPos_); + enum AddNumber { addOne, addEach }; + void MultipleSelectAdd(AddNumber addNumber); +- bool RangeContainsProtected(int start, int end) const; ++ bool RangeContainsProtected(Sci::Position start, Sci::Position end) const; + bool SelectionContainsProtected(); +- int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true) const; +- SelectionPosition MovePositionOutsideChar(SelectionPosition pos, int moveDir, bool checkLineEnd=true) const; ++ Sci::Position MovePositionOutsideChar(Sci::Position pos, Sci::Position moveDir, bool checkLineEnd=true) const; ++ SelectionPosition MovePositionOutsideChar(SelectionPosition pos, Sci::Position moveDir, bool checkLineEnd=true) const; + void MovedCaret(SelectionPosition newPos, SelectionPosition previousPos, bool ensureVisible); + void MovePositionTo(SelectionPosition newPos, Selection::selTypes selt=Selection::noSel, bool ensureVisible=true); +- void MovePositionTo(int newPos, Selection::selTypes selt=Selection::noSel, bool ensureVisible=true); ++ void MovePositionTo(Sci::Position newPos, Selection::selTypes selt=Selection::noSel, bool ensureVisible=true); + SelectionPosition MovePositionSoVisible(SelectionPosition pos, int moveDir); +- SelectionPosition MovePositionSoVisible(int pos, int moveDir); ++ SelectionPosition MovePositionSoVisible(Sci::Position pos, int moveDir); + Point PointMainCaret(); + void SetLastXChosen(); + +- void ScrollTo(int line, bool moveThumb=true); +- virtual void ScrollText(int linesToMove); ++ void ScrollTo(Sci::Line line, bool moveThumb=true); ++ virtual void ScrollText(Sci::Line linesToMove); + void HorizontalScrollTo(int xPos); + void VerticalCentreCaret(); + void MoveSelectedLines(int lineDelta); + void MoveSelectedLinesUp(); + void MoveSelectedLinesDown(); + void MoveCaretInsideView(bool ensureVisible=true); +- int DisplayFromPosition(int pos); ++ Sci::Line DisplayFromPosition(Sci::Position pos); + + struct XYScrollPosition { + int xOffset; +- int topLine; +- XYScrollPosition(int xOffset_, int topLine_) : xOffset(xOffset_), topLine(topLine_) {} ++ Sci::Line topLine; ++ XYScrollPosition(int xOffset_, Sci::Line topLine_) : xOffset(xOffset_), topLine(topLine_) {} + bool operator==(const XYScrollPosition &other) const { + return (xOffset == other.xOffset) && (topLine == other.topLine); + } +@@ -370,8 +370,8 @@ + virtual void UpdateSystemCaret(); + + bool Wrapping() const; +- void NeedWrapping(int docLineStart=0, int docLineEnd=WrapPending::lineLarge); +- bool WrapOneLine(Surface *surface, int lineToWrap); ++ void NeedWrapping(Sci::Line docLineStart=0, Sci::Line docLineEnd=WrapPending::lineLarge); ++ bool WrapOneLine(Surface *surface, Sci::Line lineToWrap); + enum wrapScope {wsAll, wsVisible, wsIdle}; + bool WrapLines(enum wrapScope ws); + void LinesJoin(); +@@ -385,13 +385,13 @@ + + virtual void SetVerticalScrollPos() = 0; + virtual void SetHorizontalScrollPos() = 0; +- virtual bool ModifyScrollBars(int nMax, int nPage) = 0; ++ virtual bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) = 0; + virtual void ReconfigureScrollBars(); + void SetScrollBars(); + void ChangeSize(); + + void FilterSelections(); +- int RealizeVirtualSpace(int position, unsigned int virtualSpace); ++ Sci::Position RealizeVirtualSpace(Sci::Position position, Sci::Position virtualSpace); + SelectionPosition RealizeVirtualSpace(const SelectionPosition &position); + void AddChar(char ch); + virtual void AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS=false); +@@ -403,7 +403,7 @@ + void ClearAll(); + void ClearDocumentStyle(); + void Cut(); +- void PasteRectangular(SelectionPosition pos, const char *ptr, int len); ++ void PasteRectangular(SelectionPosition pos, const char *ptr, Sci::Position len); + virtual void Copy() = 0; + virtual void CopyAllowLine(); + virtual bool CanPaste(); +@@ -421,26 +421,26 @@ + virtual void SetCtrlID(int identifier); + virtual int GetCtrlID() { return ctrlID; } + virtual void NotifyParent(SCNotification scn) = 0; +- virtual void NotifyStyleToNeeded(int endStyleNeeded); ++ virtual void NotifyStyleToNeeded(Sci::Position endStyleNeeded); + void NotifyChar(int ch); + void NotifySavePoint(bool isSavePoint); + void NotifyModifyAttempt(); + virtual void NotifyDoubleClick(Point pt, int modifiers); + virtual void NotifyDoubleClick(Point pt, bool shift, bool ctrl, bool alt); +- void NotifyHotSpotClicked(int position, int modifiers); +- void NotifyHotSpotClicked(int position, bool shift, bool ctrl, bool alt); +- void NotifyHotSpotDoubleClicked(int position, int modifiers); +- void NotifyHotSpotDoubleClicked(int position, bool shift, bool ctrl, bool alt); +- void NotifyHotSpotReleaseClick(int position, int modifiers); +- void NotifyHotSpotReleaseClick(int position, bool shift, bool ctrl, bool alt); ++ void NotifyHotSpotClicked(Sci::Position position, int modifiers); ++ void NotifyHotSpotClicked(Sci::Position position, bool shift, bool ctrl, bool alt); ++ void NotifyHotSpotDoubleClicked(Sci::Position position, int modifiers); ++ void NotifyHotSpotDoubleClicked(Sci::Position position, bool shift, bool ctrl, bool alt); ++ void NotifyHotSpotReleaseClick(Sci::Position position, int modifiers); ++ void NotifyHotSpotReleaseClick(Sci::Position position, bool shift, bool ctrl, bool alt); + bool NotifyUpdateUI(); + void NotifyPainted(); +- void NotifyIndicatorClick(bool click, int position, int modifiers); +- void NotifyIndicatorClick(bool click, int position, bool shift, bool ctrl, bool alt); ++ void NotifyIndicatorClick(bool click, Sci::Position position, int modifiers); ++ void NotifyIndicatorClick(bool click, Sci::Position position, bool shift, bool ctrl, bool alt); + bool NotifyMarginClick(Point pt, int modifiers); + bool NotifyMarginClick(Point pt, bool shift, bool ctrl, bool alt); + bool NotifyMarginRightClick(Point pt, int modifiers); +- void NotifyNeedShown(int pos, int len); ++ void NotifyNeedShown(Sci::Position pos, Sci::Position len); + void NotifyDwelling(Point pt, bool state); + void NotifyZoom(); + +@@ -449,7 +449,7 @@ + void CheckModificationForWrap(DocModification mh); + void NotifyModified(Document *document, DocModification mh, void *userData); + void NotifyDeleted(Document *document, void *userData); +- void NotifyStyleNeeded(Document *doc, void *userData, int endPos); ++ void NotifyStyleNeeded(Document *doc, void *userData, Sci::Position endPos); + void NotifyLexerChanged(Document *doc, void *userData); + void NotifyErrorOccurred(Document *doc, void *userData, int status); + void NotifyMacroRecord(unsigned int iMessage, uptr_t wParam, sptr_t lParam); +@@ -466,11 +466,11 @@ + SelectionPosition PositionUpOrDown(SelectionPosition spStart, int direction, int lastX); + void CursorUpOrDown(int direction, Selection::selTypes selt); + void ParaUpOrDown(int direction, Selection::selTypes selt); +- Range RangeDisplayLine(int lineVisible); +- int StartEndDisplayLine(int pos, bool start); +- int VCHomeDisplayPosition(int position); +- int VCHomeWrapPosition(int position); +- int LineEndWrapPosition(int position); ++ Range RangeDisplayLine(Sci::Line lineVisible); ++ Sci::Position StartEndDisplayLine(Sci::Position pos, bool start); ++ Sci::Position VCHomeDisplayPosition(Sci::Position position); ++ Sci::Position VCHomeWrapPosition(Sci::Position position); ++ Sci::Position LineEndWrapPosition(Sci::Position position); + int HorizontalMove(unsigned int iMessage); + int DelWordOrLine(unsigned int iMessage); + virtual int KeyCommand(unsigned int iMessage); +@@ -484,13 +484,13 @@ + long FindText(uptr_t wParam, sptr_t lParam); + void SearchAnchor(); + long SearchText(unsigned int iMessage, uptr_t wParam, sptr_t lParam); +- long SearchInTarget(const char *text, int length); +- void GoToLine(int lineNo); ++ long SearchInTarget(const char *text, Sci::Position length); ++ void GoToLine(Sci::Line lineNo); + + virtual void CopyToClipboard(const SelectionText &selectedText) = 0; +- std::string RangeText(int start, int end) const; ++ std::string RangeText(Sci::Position start, Sci::Position end) const; + void CopySelectionRange(SelectionText *ss, bool allowLineCopy=false); +- void CopyRangeToClipboard(int start, int end); ++ void CopyRangeToClipboard(Sci::Position start, Sci::Position end); + void CopyText(int length, const char *text); + void SetDragPosition(SelectionPosition newPos); + virtual void DisplayCursor(Window::Cursor c); +@@ -499,13 +499,13 @@ + void DropAt(SelectionPosition position, const char *value, size_t lengthValue, bool moving, bool rectangular); + void DropAt(SelectionPosition position, const char *value, bool moving, bool rectangular); + /** PositionInSelection returns true if position in selection. */ +- bool PositionInSelection(int pos); ++ bool PositionInSelection(Sci::Position pos); + bool PointInSelection(Point pt); + bool PointInSelMargin(Point pt) const; + Window::Cursor GetMarginCursor(Point pt) const; +- void TrimAndSetSelection(int currentPos_, int anchor_); +- void LineSelection(int lineCurrentPos_, int lineAnchorPos_, bool wholeLine); +- void WordSelection(int pos); ++ void TrimAndSetSelection(Sci::Position currentPos_, Sci::Position anchor_); ++ void LineSelection(Sci::Position lineCurrentPos_, Sci::Position lineAnchorPos_, bool wholeLine); ++ void WordSelection(Sci::Position pos); + void DwellEnd(bool mouseMoved); + void MouseLeave(); + virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers); +@@ -529,49 +529,49 @@ + virtual bool HaveMouseCapture() = 0; + void SetFocusState(bool focusState); + +- int PositionAfterArea(PRectangle rcArea) const; +- void StyleToPositionInView(Position pos); +- int PositionAfterMaxStyling(int posMax, bool scrolling) const; ++ Sci::Position PositionAfterArea(PRectangle rcArea) const; ++ void StyleToPositionInView(Sci::Position pos); ++ Sci::Position PositionAfterMaxStyling(Sci::Position posMax, bool scrolling) const; + void StartIdleStyling(bool truncatedLastStyling); + void StyleAreaBounded(PRectangle rcArea, bool scrolling); + void IdleStyling(); + virtual void IdleWork(); +- virtual void QueueIdleWork(WorkNeeded::workItems items, int upTo=0); ++ virtual void QueueIdleWork(WorkNeeded::workItems items, Sci::Position upTo=0); + + virtual bool PaintContains(PRectangle rc); + bool PaintContainsMargin(); + void CheckForChangeOutsidePaint(Range r); +- void SetBraceHighlight(Position pos0, Position pos1, int matchStyle); ++ void SetBraceHighlight(Sci::Position pos0, Sci::Position pos1, int matchStyle); + +- void SetAnnotationHeights(int start, int end); ++ void SetAnnotationHeights(Sci::Line start, Sci::Line end); + virtual void SetDocPointer(Document *document); + + void SetAnnotationVisible(int visible); + +- int ExpandLine(int line); +- void SetFoldExpanded(int lineDoc, bool expanded); +- void FoldLine(int line, int action); +- void FoldExpand(int line, int action, int level); +- int ContractedFoldNext(int lineStart) const; +- void EnsureLineVisible(int lineDoc, bool enforcePolicy); +- void FoldChanged(int line, int levelNow, int levelPrev); +- void NeedShown(int pos, int len); ++ Sci::Line ExpandLine(Sci::Line line); ++ void SetFoldExpanded(Sci::Line lineDoc, bool expanded); ++ void FoldLine(Sci::Line line, int action); ++ void FoldExpand(Sci::Line line, int action, int level); ++ Sci::Line ContractedFoldNext(Sci::Line lineStart) const; ++ void EnsureLineVisible(Sci::Line lineDoc, bool enforcePolicy); ++ void FoldChanged(Sci::Line line, int levelNow, int levelPrev); ++ void NeedShown(Sci::Position pos, Sci::Position len); + void FoldAll(int action); + +- int GetTag(char *tagValue, int tagNumber); +- int ReplaceTarget(bool replacePatterns, const char *text, int length=-1); ++ Sci::Position GetTag(char *tagValue, int tagNumber); ++ Sci::Position ReplaceTarget(bool replacePatterns, const char *text, Sci::Position length=-1); + +- bool PositionIsHotspot(int position) const; ++ bool PositionIsHotspot(Sci::Position position) const; + bool PointIsHotspot(Point pt); + void SetHotSpotRange(Point *pt); + Range GetHotSpotRange() const; +- void SetHoverIndicatorPosition(int position); ++ void SetHoverIndicatorPosition(Sci::Position position); + void SetHoverIndicatorPoint(Point pt); + + int CodePage() const; + virtual bool ValidCodePage(int /* codePage */) const { return true; } + int WrapCount(int line); +- void AddStyledText(char *buffer, int appendLength); ++ void AddStyledText(char *buffer, Sci::Position appendLength); + + virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0; + bool ValidMargin(uptr_t wParam) const; +diff -r 1788f6795302 -r a0f26eaf474d src/MarginView.cxx +--- a/src/MarginView.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/MarginView.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -183,7 +183,7 @@ + return markerCheck; + } + +-void MarginView::PaintMargin(Surface *surface, int topLine, PRectangle rc, PRectangle rcMargin, ++void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcMargin, + const EditModel &model, const ViewStyle &vs) { + + PRectangle rcSelMargin = rcMargin; +@@ -230,8 +230,8 @@ + } + + const int lineStartPaint = static_cast<int>(rcMargin.top + ptOrigin.y) / vs.lineHeight; +- int visibleLine = model.TopLineOfMain() + lineStartPaint; +- int yposScreen = lineStartPaint * vs.lineHeight - static_cast<int>(ptOrigin.y); ++ Sci::Line visibleLine = model.TopLineOfMain() + lineStartPaint; ++ Sci::Position yposScreen = lineStartPaint * vs.lineHeight - static_cast<Sci::Position>(ptOrigin.y); + // Work out whether the top line is whitespace located after a + // lessening of fold level which implies a 'fold tail' but which should not + // be displayed until the last of a sequence of whitespace. +@@ -239,7 +239,7 @@ + if (vs.ms[margin].mask & SC_MASK_FOLDERS) { + int level = model.pdoc->GetLevel(model.cs.DocFromDisplay(visibleLine)); + if (level & SC_FOLDLEVELWHITEFLAG) { +- int lineBack = model.cs.DocFromDisplay(visibleLine); ++ Sci::Line lineBack = model.cs.DocFromDisplay(visibleLine); + int levelPrev = level; + while ((lineBack > 0) && (levelPrev & SC_FOLDLEVELWHITEFLAG)) { + lineBack--; +@@ -251,7 +251,7 @@ + } + } + if (highlightDelimiter.isEnabled) { +- int lastLine = model.cs.DocFromDisplay(topLine + model.LinesOnScreen()) + 1; ++ Sci::Line lastLine = model.cs.DocFromDisplay(topLine + model.LinesOnScreen()) + 1; + model.pdoc->GetHighlightDelimiters(highlightDelimiter, model.pdoc->LineFromPosition(model.sel.MainCaret()), lastLine); + } + } +@@ -265,10 +265,10 @@ + while ((visibleLine < model.cs.LinesDisplayed()) && yposScreen < rc.bottom) { + + PLATFORM_ASSERT(visibleLine < model.cs.LinesDisplayed()); +- const int lineDoc = model.cs.DocFromDisplay(visibleLine); ++ const Sci::Line lineDoc = model.cs.DocFromDisplay(visibleLine); + PLATFORM_ASSERT(model.cs.GetVisible(lineDoc)); +- const int firstVisibleLine = model.cs.DisplayFromDoc(lineDoc); +- const int lastVisibleLine = model.cs.DisplayLastFromDoc(lineDoc); ++ const Sci::Line firstVisibleLine = model.cs.DisplayFromDoc(lineDoc); ++ const Sci::Line lastVisibleLine = model.cs.DisplayLastFromDoc(lineDoc); + const bool firstSubLine = visibleLine == firstVisibleLine; + const bool lastSubLine = visibleLine == lastVisibleLine; + +@@ -313,7 +313,7 @@ + } + } + needWhiteClosure = false; +- const int firstFollowupLine = model.cs.DocFromDisplay(model.cs.DisplayFromDoc(lineDoc + 1)); ++ const Sci::Line firstFollowupLine = model.cs.DocFromDisplay(model.cs.DisplayFromDoc(lineDoc + 1)); + const int firstFollowupLineLevel = model.pdoc->GetLevel(firstFollowupLine); + const int secondFollowupLineLevelNum = LevelNumber(model.pdoc->GetLevel(firstFollowupLine + 1)); + if (!model.cs.GetExpanded(lineDoc)) { +diff -r 1788f6795302 -r a0f26eaf474d src/MarginView.h +--- a/src/MarginView.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/MarginView.h Fri Mar 31 18:19:38 2017 +1100 +@@ -39,7 +39,7 @@ + void DropGraphics(bool freeObjects); + void AllocateGraphics(const ViewStyle &vsDraw); + void RefreshPixMaps(Surface *surfaceWindow, WindowID wid, const ViewStyle &vsDraw); +- void PaintMargin(Surface *surface, int topLine, PRectangle rc, PRectangle rcMargin, ++ void PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcMargin, + const EditModel &model, const ViewStyle &vs); + }; + +diff -r 1788f6795302 -r a0f26eaf474d src/PerLine.cxx +--- a/src/PerLine.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/PerLine.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -131,13 +131,13 @@ + markers.DeleteAll(); + } + +-void LineMarkers::InsertLine(int line) { ++void LineMarkers::InsertLine(Sci::Line line) { + if (markers.Length()) { + markers.Insert(line, 0); + } + } + +-void LineMarkers::RemoveLine(int line) { ++void LineMarkers::RemoveLine(Sci::Line line) { + // Retain the markers from the deleted line by oring them into the previous line + if (markers.Length()) { + if (line > 0) { +@@ -147,9 +147,9 @@ + } + } + +-int LineMarkers::LineFromHandle(int markerHandle) { ++Sci::Line LineMarkers::LineFromHandle(int markerHandle) { + if (markers.Length()) { +- for (int line = 0; line < markers.Length(); line++) { ++ for (Sci::Line line = 0; line < markers.Length(); line++) { + if (markers[line]) { + if (markers[line]->Contains(markerHandle)) { + return line; +@@ -160,28 +160,28 @@ + return -1; + } + +-void LineMarkers::MergeMarkers(int pos) { +- if (markers[pos + 1] != NULL) { +- if (markers[pos] == NULL) +- markers[pos] = new MarkerHandleSet; +- markers[pos]->CombineWith(markers[pos + 1]); +- delete markers[pos + 1]; +- markers[pos + 1] = NULL; ++void LineMarkers::MergeMarkers(Sci::Line line) { ++ if (markers[line + 1] != NULL) { ++ if (markers[line] == NULL) ++ markers[line] = new MarkerHandleSet; ++ markers[line]->CombineWith(markers[line + 1]); ++ delete markers[line + 1]; ++ markers[line + 1] = NULL; + } + } + +-int LineMarkers::MarkValue(int line) { ++int LineMarkers::MarkValue(Sci::Line line) { + if (markers.Length() && (line >= 0) && (line < markers.Length()) && markers[line]) + return markers[line]->MarkValue(); + else + return 0; + } + +-int LineMarkers::MarkerNext(int lineStart, int mask) const { ++Sci::Line LineMarkers::MarkerNext(Sci::Line lineStart, int mask) const { + if (lineStart < 0) + lineStart = 0; +- int length = markers.Length(); +- for (int iLine = lineStart; iLine < length; iLine++) { ++ Sci::Line length = markers.Length(); ++ for (Sci::Line iLine = lineStart; iLine < length; iLine++) { + MarkerHandleSet *onLine = markers[iLine]; + if (onLine && ((onLine->MarkValue() & mask) != 0)) + //if ((pdoc->GetMark(iLine) & lParam) != 0) +@@ -190,7 +190,7 @@ + return -1; + } + +-int LineMarkers::AddMark(int line, int markerNum, int lines) { ++int LineMarkers::AddMark(Sci::Line line, int markerNum, Sci::Line lines) { + handleCurrent++; + if (!markers.Length()) { + // No existing markers so allocate one element per line +@@ -208,7 +208,7 @@ + return handleCurrent; + } + +-bool LineMarkers::DeleteMark(int line, int markerNum, bool all) { ++bool LineMarkers::DeleteMark(Sci::Line line, int markerNum, bool all) { + bool someChanges = false; + if (markers.Length() && (line >= 0) && (line < markers.Length()) && markers[line]) { + if (markerNum == -1) { +@@ -227,7 +227,7 @@ + } + + void LineMarkers::DeleteMarkFromHandle(int markerHandle) { +- int line = LineFromHandle(markerHandle); ++ Sci::Line line = LineFromHandle(markerHandle); + if (line >= 0) { + markers[line]->RemoveHandle(markerHandle); + if (markers[line]->Length() == 0) { +@@ -244,14 +244,14 @@ + levels.DeleteAll(); + } + +-void LineLevels::InsertLine(int line) { ++void LineLevels::InsertLine(Sci::Line line) { + if (levels.Length()) { + int level = (line < levels.Length()) ? levels[line] : SC_FOLDLEVELBASE; + levels.InsertValue(line, 1, level); + } + } + +-void LineLevels::RemoveLine(int line) { ++void LineLevels::RemoveLine(Sci::Line line) { + if (levels.Length()) { + // Move up following lines but merge header flag from this line + // to line before to avoid a temporary disappearence causing expansion. +@@ -264,7 +264,7 @@ + } + } + +-void LineLevels::ExpandLevels(int sizeNew) { ++void LineLevels::ExpandLevels(Sci::Line sizeNew) { + levels.InsertValue(levels.Length(), sizeNew - levels.Length(), SC_FOLDLEVELBASE); + } + +@@ -272,7 +272,7 @@ + levels.DeleteAll(); + } + +-int LineLevels::SetLevel(int line, int level, int lines) { ++int LineLevels::SetLevel(Sci::Line line, int level, Sci::Line lines) { + int prev = 0; + if ((line >= 0) && (line < lines)) { + if (!levels.Length()) { +@@ -286,7 +286,7 @@ + return prev; + } + +-int LineLevels::GetLevel(int line) const { ++int LineLevels::GetLevel(Sci::Line line) const { + if (levels.Length() && (line >= 0) && (line < levels.Length())) { + return levels[line]; + } else { +@@ -301,7 +301,7 @@ + lineStates.DeleteAll(); + } + +-void LineState::InsertLine(int line) { ++void LineState::InsertLine(Sci::Line line) { + if (lineStates.Length()) { + lineStates.EnsureLength(line); + int val = (line < lineStates.Length()) ? lineStates[line] : 0; +@@ -309,27 +309,27 @@ + } + } + +-void LineState::RemoveLine(int line) { ++void LineState::RemoveLine(Sci::Line line) { + if (lineStates.Length() > line) { + lineStates.Delete(line); + } + } + +-int LineState::SetLineState(int line, int state) { ++int LineState::SetLineState(Sci::Line line, int state) { + lineStates.EnsureLength(line + 1); + int stateOld = lineStates[line]; + lineStates[line] = state; + return stateOld; + } + +-int LineState::GetLineState(int line) { ++int LineState::GetLineState(Sci::Line line) { + if (line < 0) + return 0; + lineStates.EnsureLength(line + 1); + return lineStates[line]; + } + +-int LineState::GetMaxLineState() const { ++Sci::Line LineState::GetMaxLineState() const { + return lineStates.Length(); + } + +@@ -366,42 +366,42 @@ + ClearAll(); + } + +-void LineAnnotation::InsertLine(int line) { ++void LineAnnotation::InsertLine(Sci::Line line) { + if (annotations.Length()) { + annotations.EnsureLength(line); + annotations.Insert(line, 0); + } + } + +-void LineAnnotation::RemoveLine(int line) { ++void LineAnnotation::RemoveLine(Sci::Line line) { + if (annotations.Length() && (line > 0) && (line <= annotations.Length())) { + delete []annotations[line-1]; + annotations.Delete(line-1); + } + } + +-bool LineAnnotation::MultipleStyles(int line) const { ++bool LineAnnotation::MultipleStyles(Sci::Line line) const { + if (annotations.Length() && (line >= 0) && (line < annotations.Length()) && annotations[line]) + return reinterpret_cast<AnnotationHeader *>(annotations[line])->style == IndividualStyles; + else + return 0; + } + +-int LineAnnotation::Style(int line) const { ++int LineAnnotation::Style(Sci::Line line) const { + if (annotations.Length() && (line >= 0) && (line < annotations.Length()) && annotations[line]) + return reinterpret_cast<AnnotationHeader *>(annotations[line])->style; + else + return 0; + } + +-const char *LineAnnotation::Text(int line) const { ++const char *LineAnnotation::Text(Sci::Line line) const { + if (annotations.Length() && (line >= 0) && (line < annotations.Length()) && annotations[line]) + return annotations[line]+sizeof(AnnotationHeader); + else + return 0; + } + +-const unsigned char *LineAnnotation::Styles(int line) const { ++const unsigned char *LineAnnotation::Styles(Sci::Line line) const { + if (annotations.Length() && (line >= 0) && (line < annotations.Length()) && annotations[line] && MultipleStyles(line)) + return reinterpret_cast<unsigned char *>(annotations[line] + sizeof(AnnotationHeader) + Length(line)); + else +@@ -414,7 +414,7 @@ + return ret; + } + +-void LineAnnotation::SetText(int line, const char *text) { ++void LineAnnotation::SetText(Sci::Line line, const char *text) { + if (text && (line >= 0)) { + annotations.EnsureLength(line+1); + int style = Style(line); +@@ -443,7 +443,7 @@ + annotations.DeleteAll(); + } + +-void LineAnnotation::SetStyle(int line, int style) { ++void LineAnnotation::SetStyle(Sci::Line line, int style) { + annotations.EnsureLength(line+1); + if (!annotations[line]) { + annotations[line] = AllocateAnnotation(0, style); +@@ -451,7 +451,7 @@ + reinterpret_cast<AnnotationHeader *>(annotations[line])->style = static_cast<short>(style); + } + +-void LineAnnotation::SetStyles(int line, const unsigned char *styles) { ++void LineAnnotation::SetStyles(Sci::Line line, const unsigned char *styles) { + if (line >= 0) { + annotations.EnsureLength(line+1); + if (!annotations[line]) { +@@ -474,14 +474,14 @@ + } + } + +-int LineAnnotation::Length(int line) const { ++int LineAnnotation::Length(Sci::Line line) const { + if (annotations.Length() && (line >= 0) && (line < annotations.Length()) && annotations[line]) + return reinterpret_cast<AnnotationHeader *>(annotations[line])->length; + else + return 0; + } + +-int LineAnnotation::Lines(int line) const { ++int LineAnnotation::Lines(Sci::Line line) const { + if (annotations.Length() && (line >= 0) && (line < annotations.Length()) && annotations[line]) + return reinterpret_cast<AnnotationHeader *>(annotations[line])->lines; + else +@@ -499,21 +499,21 @@ + tabstops.DeleteAll(); + } + +-void LineTabstops::InsertLine(int line) { ++void LineTabstops::InsertLine(Sci::Line line) { + if (tabstops.Length()) { + tabstops.EnsureLength(line); + tabstops.Insert(line, 0); + } + } + +-void LineTabstops::RemoveLine(int line) { ++void LineTabstops::RemoveLine(Sci::Line line) { + if (tabstops.Length() > line) { + delete tabstops[line]; + tabstops.Delete(line); + } + } + +-bool LineTabstops::ClearTabstops(int line) { ++bool LineTabstops::ClearTabstops(Sci::Line line) { + if (line < tabstops.Length()) { + TabstopList *tl = tabstops[line]; + if (tl) { +@@ -524,7 +524,7 @@ + return false; + } + +-bool LineTabstops::AddTabstop(int line, int x) { ++bool LineTabstops::AddTabstop(Sci::Line line, int x) { + tabstops.EnsureLength(line + 1); + if (!tabstops[line]) { + tabstops[line] = new TabstopList(); +@@ -543,7 +543,7 @@ + return false; + } + +-int LineTabstops::GetNextTabstop(int line, int x) const { ++int LineTabstops::GetNextTabstop(Sci::Line line, int x) const { + if (line < tabstops.Length()) { + TabstopList *tl = tabstops[line]; + if (tl) { +diff -r 1788f6795302 -r a0f26eaf474d src/PerLine.h +--- a/src/PerLine.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/PerLine.h Fri Mar 31 18:19:38 2017 +1100 +@@ -49,16 +49,16 @@ + } + virtual ~LineMarkers(); + virtual void Init(); +- virtual void InsertLine(int line); +- virtual void RemoveLine(int line); ++ virtual void InsertLine(Sci::Line line); ++ virtual void RemoveLine(Sci::Line line); + +- int MarkValue(int line); +- int MarkerNext(int lineStart, int mask) const; +- int AddMark(int line, int marker, int lines); +- void MergeMarkers(int pos); +- bool DeleteMark(int line, int markerNum, bool all); ++ int MarkValue(Sci::Line line); ++ Sci::Line MarkerNext(Sci::Line lineStart, int mask) const; ++ int AddMark(Sci::Line line, int marker, Sci::Line lines); ++ void MergeMarkers(Sci::Line line); ++ bool DeleteMark(Sci::Line line, int markerNum, bool all); + void DeleteMarkFromHandle(int markerHandle); +- int LineFromHandle(int markerHandle); ++ Sci::Line LineFromHandle(int markerHandle); + }; + + class LineLevels : public PerLine { +@@ -66,13 +66,13 @@ + public: + virtual ~LineLevels(); + virtual void Init(); +- virtual void InsertLine(int line); +- virtual void RemoveLine(int line); ++ virtual void InsertLine(Sci::Line line); ++ virtual void RemoveLine(Sci::Line line); + +- void ExpandLevels(int sizeNew=-1); ++ void ExpandLevels(Sci::Line sizeNew=-1); + void ClearLevels(); +- int SetLevel(int line, int level, int lines); +- int GetLevel(int line) const; ++ int SetLevel(Sci::Line line, int level, Sci::Line lines); ++ int GetLevel(Sci::Line line) const; + }; + + class LineState : public PerLine { +@@ -82,12 +82,12 @@ + } + virtual ~LineState(); + virtual void Init(); +- virtual void InsertLine(int line); +- virtual void RemoveLine(int line); ++ virtual void InsertLine(Sci::Line line); ++ virtual void RemoveLine(Sci::Line line); + +- int SetLineState(int line, int state); +- int GetLineState(int line); +- int GetMaxLineState() const; ++ int SetLineState(Sci::Line line, int state); ++ int GetLineState(Sci::Line line); ++ Sci::Line GetMaxLineState() const; + }; + + class LineAnnotation : public PerLine { +@@ -97,19 +97,19 @@ + } + virtual ~LineAnnotation(); + virtual void Init(); +- virtual void InsertLine(int line); +- virtual void RemoveLine(int line); ++ virtual void InsertLine(Sci::Line line); ++ virtual void RemoveLine(Sci::Line line); + +- bool MultipleStyles(int line) const; +- int Style(int line) const; +- const char *Text(int line) const; +- const unsigned char *Styles(int line) const; +- void SetText(int line, const char *text); ++ bool MultipleStyles(Sci::Line line) const; ++ int Style(Sci::Line line) const; ++ const char *Text(Sci::Line line) const; ++ const unsigned char *Styles(Sci::Line line) const; ++ void SetText(Sci::Line line, const char *text); + void ClearAll(); +- void SetStyle(int line, int style); +- void SetStyles(int line, const unsigned char *styles); +- int Length(int line) const; +- int Lines(int line) const; ++ void SetStyle(Sci::Line line, int style); ++ void SetStyles(Sci::Line line, const unsigned char *styles); ++ int Length(Sci::Line line) const; ++ int Lines(Sci::Line line) const; + }; + + typedef std::vector<int> TabstopList; +@@ -121,12 +121,12 @@ + } + virtual ~LineTabstops(); + virtual void Init(); +- virtual void InsertLine(int line); +- virtual void RemoveLine(int line); ++ virtual void InsertLine(Sci::Line line); ++ virtual void RemoveLine(Sci::Line line); + +- bool ClearTabstops(int line); +- bool AddTabstop(int line, int x); +- int GetNextTabstop(int line, int x) const; ++ bool ClearTabstops(Sci::Line line); ++ bool AddTabstop(Sci::Line line, int x); ++ int GetNextTabstop(Sci::Line line, int x) const; + }; + + #ifdef SCI_NAMESPACE +diff -r 1788f6795302 -r a0f26eaf474d src/Position.h +--- a/src/Position.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Position.h Fri Mar 31 18:19:38 2017 +1100 +@@ -16,6 +16,7 @@ + namespace Sci { + + typedef int Position; ++typedef int Line; + + // A later version (4.x) of this file may: + //#if defined(SCI_LARGE_FILE_SUPPORT) +diff -r 1788f6795302 -r a0f26eaf474d src/PositionCache.cxx +--- a/src/PositionCache.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/PositionCache.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -149,7 +149,7 @@ + lineStarts[line] = start; + } + +-void LineLayout::SetBracesHighlight(Range rangeLine, const Position braces[], ++void LineLayout::SetBracesHighlight(Range rangeLine, const Sci::Position braces[], + char bracesMatchStyle, int xHighlight, bool ignoreStyle) { + if (!ignoreStyle && rangeLine.ContainsCharacter(braces[0])) { + int braceOffset = braces[0] - rangeLine.start; +@@ -171,7 +171,7 @@ + } + } + +-void LineLayout::RestoreBracesHighlight(Range rangeLine, const Position braces[], bool ignoreStyle) { ++void LineLayout::RestoreBracesHighlight(Range rangeLine, const Sci::Position braces[], bool ignoreStyle) { + if (!ignoreStyle && rangeLine.ContainsCharacter(braces[0])) { + int braceOffset = braces[0] - rangeLine.start; + if (braceOffset < numCharsInLine) { +@@ -267,7 +267,7 @@ + cache.resize(length_); + } + +-void LineLayoutCache::AllocateForLevel(int linesOnScreen, int linesInDoc) { ++void LineLayoutCache::AllocateForLevel(Sci::Line linesOnScreen, Sci::Line linesInDoc) { + PLATFORM_ASSERT(useCount == 0); + size_t lengthForLevel = 0; + if (level == llcCaret) { +@@ -320,15 +320,15 @@ + } + } + +-LineLayout *LineLayoutCache::Retrieve(int lineNumber, int lineCaret, int maxChars, int styleClock_, +- int linesOnScreen, int linesInDoc) { ++LineLayout *LineLayoutCache::Retrieve(Sci::Line lineNumber, Sci::Line lineCaret, int maxChars, int styleClock_, ++ Sci::Line linesOnScreen, Sci::Line linesInDoc) { + AllocateForLevel(linesOnScreen, linesInDoc); + if (styleClock != styleClock_) { + Invalidate(LineLayout::llCheckTextAndStyle); + styleClock = styleClock_; + } + allInvalidated = false; +- int pos = -1; ++ Sci::Position pos = -1; + LineLayout *ret = 0; + if (level == llcCaret) { + pos = 0; +@@ -447,7 +447,7 @@ + } + } + +-BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lineRange_, int posLineStart_, ++BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lineRange_, Sci::Position posLineStart_, + int xStart, bool breakForSelection, const Document *pdoc_, const SpecialRepresentations *preprs_, const ViewStyle *pvsDraw) : + ll(ll_), + lineRange(lineRange_), +@@ -486,7 +486,7 @@ + if (pvsDraw && pvsDraw->indicatorsSetFore > 0) { + for (Decoration *deco = pdoc->decorations.root; deco; deco = deco->next) { + if (pvsDraw->indicators[deco->indicator].OverridesTextFore()) { +- int startPos = deco->rs.EndRun(posLineStart); ++ Sci::Position startPos = deco->rs.EndRun(posLineStart); + while (startPos < (posLineStart + lineRange.end)) { + Insert(startPos - posLineStart); + startPos = deco->rs.EndRun(startPos); +diff -r 1788f6795302 -r a0f26eaf474d src/PositionCache.h +--- a/src/PositionCache.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/PositionCache.h Fri Mar 31 18:19:38 2017 +1100 +@@ -50,7 +50,7 @@ + int *lineStarts; + int lenLineStarts; + /// Drawing is only performed for @a maxLineLength characters on each line. +- int lineNumber; ++ Sci::Line lineNumber; + bool inCache; + public: + enum { wrapWidthInfinite = 0x7ffffff }; +@@ -86,9 +86,9 @@ + Range SubLineRange(int line) const; + bool InLine(int offset, int line) const; + void SetLineStart(int line, int start); +- void SetBracesHighlight(Range rangeLine, const Position braces[], ++ void SetBracesHighlight(Range rangeLine, const Sci::Position braces[], + char bracesMatchStyle, int xHighlight, bool ignoreStyle); +- void RestoreBracesHighlight(Range rangeLine, const Position braces[], bool ignoreStyle); ++ void RestoreBracesHighlight(Range rangeLine, const Sci::Position braces[], bool ignoreStyle); + int FindBefore(XYPOSITION x, int lower, int upper) const; + int FindPositionFromX(XYPOSITION x, Range range, bool charPosition) const; + Point PointFromPosition(int posInLine, int lineHeight, PointEnd pe) const; +@@ -104,7 +104,7 @@ + int styleClock; + int useCount; + void Allocate(size_t length_); +- void AllocateForLevel(int linesOnScreen, int linesInDoc); ++ void AllocateForLevel(Sci::Line linesOnScreen, Sci::Line linesInDoc); + public: + LineLayoutCache(); + virtual ~LineLayoutCache(); +@@ -118,8 +118,8 @@ + void Invalidate(LineLayout::validLevel validity_); + void SetLevel(int level_); + int GetLevel() const { return level; } +- LineLayout *Retrieve(int lineNumber, int lineCaret, int maxChars, int styleClock_, +- int linesOnScreen, int linesInDoc); ++ LineLayout *Retrieve(Sci::Line lineNumber, Sci::Line lineCaret, int maxChars, int styleClock_, ++ Sci::Line linesOnScreen, Sci::Line linesInDoc); + void Dispose(LineLayout *ll); + }; + +@@ -176,7 +176,7 @@ + class BreakFinder { + const LineLayout *ll; + Range lineRange; +- int posLineStart; ++ Sci::Position posLineStart; + int nextBreak; + std::vector<int> selAndEdge; + unsigned int saeCurrentPos; +@@ -194,7 +194,7 @@ + enum { lengthStartSubdivision = 300 }; + // Try to make each subdivided run lengthEachSubdivision or shorter. + enum { lengthEachSubdivision = 100 }; +- BreakFinder(const LineLayout *ll_, const Selection *psel, Range rangeLine_, int posLineStart_, ++ BreakFinder(const LineLayout *ll_, const Selection *psel, Range rangeLine_, Sci::Position posLineStart_, + int xStart, bool breakForSelection, const Document *pdoc_, const SpecialRepresentations *preprs_, const ViewStyle *pvsDraw); + ~BreakFinder(); + TextSegment Next(); +diff -r 1788f6795302 -r a0f26eaf474d src/RESearch.cxx +--- a/src/RESearch.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/RESearch.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -277,9 +277,9 @@ + void RESearch::GrabMatches(CharacterIndexer &ci) { + for (unsigned int i = 0; i < MAXTAG; i++) { + if ((bopat[i] != NOTFOUND) && (eopat[i] != NOTFOUND)) { +- unsigned int len = eopat[i] - bopat[i]; ++ Sci::Position len = eopat[i] - bopat[i]; + pat[i].resize(len); +- for (unsigned int j = 0; j < len; j++) ++ for (Sci::Position j = 0; j < len; j++) + pat[i][j] = ci.CharAt(bopat[i] + j); + } + } +@@ -434,7 +434,7 @@ + return result; + } + +-const char *RESearch::Compile(const char *pattern, int length, bool caseSensitive, bool posix) { ++const char *RESearch::Compile(const char *pattern, Sci::Position length, bool caseSensitive, bool posix) { + char *mp=nfa; /* nfa pointer */ + char *lp; /* saved pointer */ + char *sp=nfa; /* another one */ +@@ -755,9 +755,9 @@ + * respectively. + * + */ +-int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) { ++int RESearch::Execute(CharacterIndexer &ci, Sci::Position lp, Sci::Position endp) { + unsigned char c; +- int ep = NOTFOUND; ++ Sci::Position ep = NOTFOUND; + char *ap = nfa; + + bol = lp; +@@ -844,13 +844,13 @@ + #define CHRSKIP 3 /* [CLO] CHR chr END */ + #define CCLSKIP 34 /* [CLO] CCL 32 bytes END */ + +-int RESearch::PMatch(CharacterIndexer &ci, int lp, int endp, char *ap) { ++Sci::Position RESearch::PMatch(CharacterIndexer &ci, Sci::Position lp, Sci::Position endp, char *ap) { + int op, c, n; +- int e; /* extra pointer for CLO */ +- int bp; /* beginning of subpat... */ +- int ep; /* ending of subpat... */ +- int are; /* to save the line ptr. */ +- int llp; /* lazy lp for LCLO */ ++ Sci::Position e; /* extra pointer for CLO */ ++ Sci::Position bp; /* beginning of subpat... */ ++ Sci::Position ep; /* ending of subpat... */ ++ Sci::Position are; /* to save the line ptr. */ ++ Sci::Position llp; /* lazy lp for LCLO */ + + while ((op = *ap++) != END) + switch (op) { +@@ -940,7 +940,7 @@ + llp = lp; + e = NOTFOUND; + while (llp >= are) { +- int q; ++ Sci::Position q; + if ((q = PMatch(ci, llp, endp, ap)) != NOTFOUND) { + e = q; + lp = llp; +diff -r 1788f6795302 -r a0f26eaf474d src/RESearch.h +--- a/src/RESearch.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/RESearch.h Fri Mar 31 18:19:38 2017 +1100 +@@ -23,7 +23,7 @@ + + class CharacterIndexer { + public: +- virtual char CharAt(int index)=0; ++ virtual char CharAt(Sci::Position index)=0; + virtual ~CharacterIndexer() { + } + }; +@@ -35,15 +35,15 @@ + ~RESearch(); + void Clear(); + void GrabMatches(CharacterIndexer &ci); +- const char *Compile(const char *pattern, int length, bool caseSensitive, bool posix); +- int Execute(CharacterIndexer &ci, int lp, int endp); ++ const char *Compile(const char *pattern, Sci::Position length, bool caseSensitive, bool posix); ++ int Execute(CharacterIndexer &ci, Sci::Position lp, Sci::Position endp); + + enum { MAXTAG=10 }; + enum { MAXNFA=4096 }; + enum { NOTFOUND=-1 }; + +- int bopat[MAXTAG]; +- int eopat[MAXTAG]; ++ Sci::Position bopat[MAXTAG]; ++ Sci::Position eopat[MAXTAG]; + std::string pat[MAXTAG]; + + private: +@@ -51,10 +51,10 @@ + void ChSetWithCase(unsigned char c, bool caseSensitive); + int GetBackslashExpression(const char *pattern, int &incr); + +- int PMatch(CharacterIndexer &ci, int lp, int endp, char *ap); ++ Sci::Position PMatch(CharacterIndexer &ci, Sci::Position lp, Sci::Position endp, char *ap); + +- int bol; +- int tagstk[MAXTAG]; /* subpat tag stack */ ++ Sci::Position bol; ++ Sci::Position tagstk[MAXTAG]; /* subpat tag stack */ + char nfa[MAXNFA]; /* automaton */ + int sta; + unsigned char bittab[BITBLK]; /* bit table for CCL pre-set bits */ +diff -r 1788f6795302 -r a0f26eaf474d src/ScintillaBase.cxx +--- a/src/ScintillaBase.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/ScintillaBase.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -207,24 +207,24 @@ + sci->AutoCompleteCompleted(0, SC_AC_DOUBLECLICK); + } + +-void ScintillaBase::AutoCompleteInsert(Position startPos, int removeLen, const char *text, int textLen) { ++void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, int removeLen, const char *text, int textLen) { + UndoGroup ug(pdoc); + if (multiAutoCMode == SC_MULTIAUTOC_ONCE) { + pdoc->DeleteChars(startPos, removeLen); +- const int lengthInserted = pdoc->InsertString(startPos, text, textLen); ++ const Sci::Position lengthInserted = pdoc->InsertString(startPos, text, textLen); + SetEmptySelection(startPos + lengthInserted); + } else { + // SC_MULTIAUTOC_EACH + for (size_t r=0; r<sel.Count(); r++) { + if (!RangeContainsProtected(sel.Range(r).Start().Position(), + sel.Range(r).End().Position())) { +- int positionInsert = sel.Range(r).Start().Position(); ++ Sci::Position positionInsert = sel.Range(r).Start().Position(); + positionInsert = RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace()); + if (positionInsert - removeLen >= 0) { + positionInsert -= removeLen; + pdoc->DeleteChars(positionInsert, removeLen); + } +- const int lengthInserted = pdoc->InsertString(positionInsert, text, textLen); ++ const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text, textLen); + if (lengthInserted > 0) { + sel.Range(r).caret.SetPosition(positionInsert + lengthInserted); + sel.Range(r).anchor.SetPosition(positionInsert + lengthInserted); +@@ -382,7 +382,7 @@ + scn.listCompletionMethod = completionMethod; + scn.wParam = listType; + scn.listType = listType; +- Position firstPos = ac.posStart - ac.startLen; ++ Sci::Position firstPos = ac.posStart - ac.startLen; + scn.position = firstPos; + scn.lParam = firstPos; + scn.text = selected.c_str(); +@@ -395,7 +395,7 @@ + if (listType > 0) + return; + +- Position endPos = sel.MainCaret(); ++ Sci::Position endPos = sel.MainCaret(); + if (ac.dropRestOfWord) + endPos = pdoc->ExtendWordSelect(endPos, 1, true); + if (endPos < firstPos) +@@ -771,11 +771,11 @@ + + #endif + +-void ScintillaBase::NotifyStyleToNeeded(int endStyleNeeded) { ++void ScintillaBase::NotifyStyleToNeeded(Sci::Position endStyleNeeded) { + #ifdef SCI_LEXER + if (DocumentLexState()->lexLanguage != SCLEX_CONTAINER) { +- int lineEndStyled = pdoc->LineFromPosition(pdoc->GetEndStyled()); +- int endStyled = pdoc->LineStart(lineEndStyled); ++ Sci::Line lineEndStyled = pdoc->LineFromPosition(pdoc->GetEndStyled()); ++ Sci::Position endStyled = pdoc->LineStart(lineEndStyled); + DocumentLexState()->Colourise(endStyled, endStyleNeeded); + return; + } +@@ -994,10 +994,10 @@ + + case SCI_COLOURISE: + if (DocumentLexState()->lexLanguage == SCLEX_CONTAINER) { +- pdoc->ModifiedAt(static_cast<int>(wParam)); +- NotifyStyleToNeeded((lParam == -1) ? pdoc->Length() : static_cast<int>(lParam)); ++ pdoc->ModifiedAt(static_cast<Sci::Position>(wParam)); ++ NotifyStyleToNeeded((lParam == -1) ? pdoc->Length() : static_cast<Sci::Position>(lParam)); + } else { +- DocumentLexState()->Colourise(static_cast<int>(wParam), static_cast<int>(lParam)); ++ DocumentLexState()->Colourise(static_cast<Sci::Position>(wParam), static_cast<Sci::Position>(lParam)); + } + Redraw(); + break; +diff -r 1788f6795302 -r a0f26eaf474d src/ScintillaBase.h +--- a/src/ScintillaBase.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/ScintillaBase.h Fri Mar 31 18:19:38 2017 +1100 +@@ -67,7 +67,7 @@ + virtual void CancelModes(); + virtual int KeyCommand(unsigned int iMessage); + +- void AutoCompleteInsert(Position startPos, int removeLen, const char *text, int textLen); ++ void AutoCompleteInsert(Sci::Position startPos, int removeLen, const char *text, int textLen); + void AutoCompleteStart(int lenEntered, const char *list); + void AutoCompleteCancel(); + void AutoCompleteMove(int delta); +@@ -91,7 +91,7 @@ + virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); + virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers); + +- void NotifyStyleToNeeded(int endStyleNeeded); ++ void NotifyStyleToNeeded(Sci::Position endStyleNeeded); + void NotifyLexerChanged(Document *doc, void *userData); + + public: +diff -r 1788f6795302 -r a0f26eaf474d src/Selection.cxx +--- a/src/Selection.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Selection.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -22,10 +22,10 @@ + using namespace Scintilla; + #endif + +-void SelectionPosition::MoveForInsertDelete(bool insertion, int startChange, int length) { ++void SelectionPosition::MoveForInsertDelete(bool insertion, Sci::Position startChange, Sci::Position length) { + if (insertion) { + if (position == startChange) { +- int virtualLengthRemove = std::min(length, virtualSpace); ++ Sci::Position virtualLengthRemove = std::min(length, virtualSpace); + virtualSpace -= virtualLengthRemove; + position += virtualLengthRemove; + } else if (position > startChange) { +@@ -36,7 +36,7 @@ + virtualSpace = 0; + } + if (position > startChange) { +- int endDeletion = startChange + length; ++ Sci::Position endDeletion = startChange + length; + if (position > endDeletion) { + position -= length; + } else { +@@ -75,7 +75,7 @@ + return *this > other; + } + +-int SelectionRange::Length() const { ++Sci::Position SelectionRange::Length() const { + if (anchor > caret) { + return anchor.Position() - caret.Position(); + } else { +@@ -83,12 +83,12 @@ + } + } + +-void SelectionRange::MoveForInsertDelete(bool insertion, int startChange, int length) { ++void SelectionRange::MoveForInsertDelete(bool insertion, Sci::Position startChange, Sci::Position length) { + caret.MoveForInsertDelete(insertion, startChange, length); + anchor.MoveForInsertDelete(insertion, startChange, length); + } + +-bool SelectionRange::Contains(int pos) const { ++bool SelectionRange::Contains(Sci::Position pos) const { + if (anchor > caret) + return (pos >= caret.Position()) && (pos <= anchor.Position()); + else +@@ -102,7 +102,7 @@ + return (sp >= anchor) && (sp <= caret); + } + +-bool SelectionRange::ContainsCharacter(int posCharacter) const { ++bool SelectionRange::ContainsCharacter(Sci::Position posCharacter) const { + if (anchor > caret) + return (posCharacter >= caret.Position()) && (posCharacter < anchor.Position()); + else +@@ -168,7 +168,7 @@ + // If range is all virtual collapse to start of virtual space + void SelectionRange::MinimizeVirtualSpace() { + if (caret.Position() == anchor.Position()) { +- int virtualSpace = caret.VirtualSpace(); ++ Sci::Position virtualSpace = caret.VirtualSpace(); + if (virtualSpace > anchor.VirtualSpace()) + virtualSpace = anchor.VirtualSpace(); + caret.SetVirtualSpace(virtualSpace); +@@ -187,11 +187,11 @@ + return (selType == selRectangle) || (selType == selThin); + } + +-int Selection::MainCaret() const { ++Sci::Position Selection::MainCaret() const { + return ranges[mainRange].caret.Position(); + } + +-int Selection::MainAnchor() const { ++Sci::Position Selection::MainAnchor() const { + return ranges[mainRange].anchor.Position(); + } + +@@ -284,15 +284,15 @@ + return lastPosition; + } + +-int Selection::Length() const { +- int len = 0; ++Sci::Position Selection::Length() const { ++ Sci::Position len = 0; + for (size_t i=0; i<ranges.size(); i++) { + len += ranges[i].Length(); + } + return len; + } + +-void Selection::MovePositions(bool insertion, int startChange, int length) { ++void Selection::MovePositions(bool insertion, Sci::Position startChange, Sci::Position length) { + for (size_t i=0; i<ranges.size(); i++) { + ranges[i].MoveForInsertDelete(insertion, startChange, length); + } +@@ -376,7 +376,7 @@ + tentativeMain = false; + } + +-int Selection::CharacterInSelection(int posCharacter) const { ++int Selection::CharacterInSelection(Sci::Position posCharacter) const { + for (size_t i=0; i<ranges.size(); i++) { + if (ranges[i].ContainsCharacter(posCharacter)) + return i == mainRange ? 1 : 2; +@@ -384,7 +384,7 @@ + return 0; + } + +-int Selection::InSelectionForEOL(int pos) const { ++int Selection::InSelectionForEOL(Sci::Position pos) const { + for (size_t i=0; i<ranges.size(); i++) { + if (!ranges[i].Empty() && (pos > ranges[i].Start().Position()) && (pos <= ranges[i].End().Position())) + return i == mainRange ? 1 : 2; +@@ -392,8 +392,8 @@ + return 0; + } + +-int Selection::VirtualSpaceFor(int pos) const { +- int virtualSpace = 0; ++Sci::Position Selection::VirtualSpaceFor(Sci::Position pos) const { ++ Sci::Position virtualSpace = 0; + for (size_t i=0; i<ranges.size(); i++) { + if ((ranges[i].caret.Position() == pos) && (virtualSpace < ranges[i].caret.VirtualSpace())) + virtualSpace = ranges[i].caret.VirtualSpace(); +diff -r 1788f6795302 -r a0f26eaf474d src/Selection.h +--- a/src/Selection.h Thu Mar 30 09:11:48 2017 +1100 ++++ b/src/Selection.h Fri Mar 31 18:19:38 2017 +1100 +@@ -13,10 +13,10 @@ + #endif + + class SelectionPosition { +- int position; +- int virtualSpace; ++ Sci::Position position; ++ Sci::Position virtualSpace; + public: +- explicit SelectionPosition(int position_=INVALID_POSITION, int virtualSpace_=0) : position(position_), virtualSpace(virtualSpace_) { ++ explicit SelectionPosition(Sci::Position position_=INVALID_POSITION, Sci::Position virtualSpace_=0) : position(position_), virtualSpace(virtualSpace_) { + PLATFORM_ASSERT(virtualSpace < 800000); + if (virtualSpace < 0) + virtualSpace = 0; +@@ -25,7 +25,7 @@ + position = 0; + virtualSpace = 0; + } +- void MoveForInsertDelete(bool insertion, int startChange, int length); ++ void MoveForInsertDelete(bool insertion, Sci::Position startChange, Sci::Position length); + bool operator ==(const SelectionPosition &other) const { + return position == other.position && virtualSpace == other.virtualSpace; + } +@@ -33,22 +33,22 @@ + bool operator >(const SelectionPosition &other) const; + bool operator <=(const SelectionPosition &other) const; + bool operator >=(const SelectionPosition &other) const; +- int Position() const { ++ Sci::Position Position() const { + return position; + } +- void SetPosition(int position_) { ++ void SetPosition(Sci::Position position_) { + position = position_; + virtualSpace = 0; + } +- int VirtualSpace() const { ++ Sci::Position VirtualSpace() const { + return virtualSpace; + } +- void SetVirtualSpace(int virtualSpace_) { ++ void SetVirtualSpace(Sci::Position virtualSpace_) { + PLATFORM_ASSERT(virtualSpace_ < 800000); + if (virtualSpace_ >= 0) + virtualSpace = virtualSpace_; + } +- void Add(int increment) { ++ void Add(Sci::Position increment) { + position = position + increment; + } + bool IsValid() const { +@@ -90,17 +90,17 @@ + } + explicit SelectionRange(SelectionPosition single) : caret(single), anchor(single) { + } +- explicit SelectionRange(int single) : caret(single), anchor(single) { ++ explicit SelectionRange(Sci::Position single) : caret(single), anchor(single) { + } + SelectionRange(SelectionPosition caret_, SelectionPosition anchor_) : caret(caret_), anchor(anchor_) { + } +- SelectionRange(int caret_, int anchor_) : caret(caret_), anchor(anchor_) { ++ SelectionRange(Sci::Position caret_, Sci::Position anchor_) : caret(caret_), anchor(anchor_) { + } + bool Empty() const { + return anchor == caret; + } +- int Length() const; +- // int Width() const; // Like Length but takes virtual space into account ++ Sci::Position Length() const; ++ // Sci::Position Width() const; // Like Length but takes virtual space into account + bool operator ==(const SelectionRange &other) const { + return caret == other.caret && anchor == other.anchor; + } +@@ -115,10 +115,10 @@ + anchor.SetVirtualSpace(0); + caret.SetVirtualSpace(0); + } +- void MoveForInsertDelete(bool insertion, int startChange, int length); +- bool Contains(int pos) const; ++ void MoveForInsertDelete(bool insertion, Sci::Position startChange, Sci::Position length); ++ bool Contains(Sci::Position pos) const; + bool Contains(SelectionPosition sp) const; +- bool ContainsCharacter(int posCharacter) const; ++ bool ContainsCharacter(Sci::Position posCharacter) const; + SelectionSegment Intersect(SelectionSegment check) const; + SelectionPosition Start() const { + return (anchor < caret) ? anchor : caret; +@@ -146,8 +146,8 @@ + Selection(); + ~Selection(); + bool IsRectangular() const; +- int MainCaret() const; +- int MainAnchor() const; ++ Sci::Position MainCaret() const; ++ Sci::Position MainAnchor() const; + SelectionRange &Rectangular(); + SelectionSegment Limits() const; + // This is for when you want to move the caret in response to a +@@ -166,8 +166,8 @@ + void SetMoveExtends(bool moveExtends_); + bool Empty() const; + SelectionPosition Last() const; +- int Length() const; +- void MovePositions(bool insertion, int startChange, int length); ++ Sci::Position Length() const; ++ void MovePositions(bool insertion, Sci::Position startChange, Sci::Position length); + void TrimSelection(SelectionRange range); + void TrimOtherSelections(size_t r, SelectionRange range); + void SetSelection(SelectionRange range); +@@ -177,9 +177,9 @@ + void DropAdditionalRanges(); + void TentativeSelection(SelectionRange range); + void CommitTentative(); +- int CharacterInSelection(int posCharacter) const; +- int InSelectionForEOL(int pos) const; +- int VirtualSpaceFor(int pos) const; ++ int CharacterInSelection(Sci::Position posCharacter) const; ++ int InSelectionForEOL(Sci::Position pos) const; ++ Sci::Position VirtualSpaceFor(Sci::Position pos) const; + void Clear(); + void RemoveDuplicates(); + void RotateMain(); +diff -r 1788f6795302 -r a0f26eaf474d win32/ScintillaWin.cxx +--- a/win32/ScintillaWin.cxx Thu Mar 30 09:11:48 2017 +1100 ++++ b/win32/ScintillaWin.cxx Fri Mar 31 18:19:38 2017 +1100 +@@ -294,15 +294,15 @@ + + bool DragThreshold(Point ptStart, Point ptNow) override; + void StartDrag() override; +- int TargetAsUTF8(char *text); ++ Sci::Position TargetAsUTF8(char *text); + void AddCharUTF16(wchar_t const *wcs, unsigned int wclen); +- int EncodedFromUTF8(char *utf8, char *encoded) const; ++ Sci::Position EncodedFromUTF8(char *utf8, char *encoded) const; + sptr_t WndPaint(uptr_t wParam); + + sptr_t HandleCompositionWindowed(uptr_t wParam, sptr_t lParam); + sptr_t HandleCompositionInline(uptr_t wParam, sptr_t lParam); + static bool KoreanIME(); +- void MoveImeCarets(int offset); ++ void MoveImeCarets(Sci::Position offset); + void DrawImeIndicator(int indicator, int len); + void SetCandidateWindowPos(); + void SelectionToHangul(); +@@ -323,12 +323,12 @@ + bool HaveMouseCapture() override; + void SetTrackMouseLeaveEvent(bool on); + bool PaintContains(PRectangle rc) override; +- void ScrollText(int linesToMove) override; ++ void ScrollText(Sci::Line linesToMove) override; + void NotifyCaretMove() override; + void UpdateSystemCaret() override; + void SetVerticalScrollPos() override; + void SetHorizontalScrollPos() override; +- bool ModifyScrollBars(int nMax, int nPage) override; ++ bool ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) override; + void NotifyChange() override; + void NotifyFocus(bool focus) override; + void SetCtrlID(int identifier) override; +@@ -361,7 +361,7 @@ + + int SetScrollInfo(int nBar, LPCSCROLLINFO lpsi, BOOL bRedraw); + bool GetScrollInfo(int nBar, LPSCROLLINFO lpsi); +- void ChangeScrollPos(int barType, int pos); ++ void ChangeScrollPos(int barType, Sci::Position pos); + sptr_t GetTextLength(); + sptr_t GetText(uptr_t wParam, sptr_t lParam); + +@@ -618,7 +618,7 @@ + } + } + inDragDrop = ddNone; +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + } + + // Avoid warnings everywhere for old style casts by concentrating them here +@@ -730,8 +730,8 @@ + + // Returns the target converted to UTF8. + // Return the length in bytes. +-int ScintillaWin::TargetAsUTF8(char *text) { +- int targetLength = targetEnd - targetStart; ++Sci::Position ScintillaWin::TargetAsUTF8(char *text) { ++ Sci::Position targetLength = targetEnd - targetStart; + if (IsUnicodeMode()) { + if (text) { + pdoc->GetCharRange(text, targetStart, targetLength); +@@ -752,8 +752,8 @@ + + // Translates a nul terminated UTF8 string into the document encoding. + // Return the length of the result in bytes. +-int ScintillaWin::EncodedFromUTF8(char *utf8, char *encoded) const { +- int inputLength = (lengthForEncode >= 0) ? lengthForEncode : static_cast<int>(strlen(utf8)); ++Sci::Position ScintillaWin::EncodedFromUTF8(char *utf8, char *encoded) const { ++ Sci::Position inputLength = (lengthForEncode >= 0) ? lengthForEncode : static_cast<Sci::Position>(strlen(utf8)); + if (IsUnicodeMode()) { + if (encoded) { + memcpy(encoded, utf8, inputLength); +@@ -889,10 +889,10 @@ + return codePage == 949 || codePage == 1361; + } + +-void ScintillaWin::MoveImeCarets(int offset) { ++void ScintillaWin::MoveImeCarets(Sci::Position offset) { + // Move carets relatively by bytes. + for (size_t r=0; r<sel.Count(); r++) { +- int positionInsert = sel.Range(r).Start().Position(); ++ Sci::Position positionInsert = sel.Range(r).Start().Position(); + sel.Range(r).caret.SetPosition(positionInsert + offset); + sel.Range(r).anchor.SetPosition(positionInsert + offset); + } +@@ -908,7 +908,7 @@ + } + pdoc->decorations.SetCurrentIndicator(indicator); + for (size_t r=0; r<sel.Count(); r++) { +- int positionInsert = sel.Range(r).Start().Position(); ++ Sci::Position positionInsert = sel.Range(r).Start().Position(); + pdoc->DecorationFillRange(positionInsert - len, 1, len); + } + } +@@ -928,10 +928,10 @@ + + void ScintillaWin::SelectionToHangul() { + // Convert every hanja to hangul within the main range. +- const int selStart = sel.RangeMain().Start().Position(); +- const int documentStrLen = sel.RangeMain().Length(); +- const int selEnd = selStart + documentStrLen; +- const int utf16Len = pdoc->CountUTF16(selStart, selEnd); ++ const Sci::Position selStart = sel.RangeMain().Start().Position(); ++ const Sci::Position documentStrLen = sel.RangeMain().Length(); ++ const Sci::Position selEnd = selStart + documentStrLen; ++ const Sci::Position utf16Len = pdoc->CountUTF16(selStart, selEnd); + + if (utf16Len > 0) { + std::string documentStr(documentStrLen, '\0'); +@@ -957,7 +957,7 @@ + if (sel.Count() > 1) { + return; // Do not allow multi carets. + } +- int currentPos = CurrentPosition(); ++ Sci::Position currentPos = CurrentPosition(); + int oneCharLen = pdoc->LenChar(currentPos); + + if (oneCharLen < 2) { +@@ -1091,7 +1091,7 @@ + + // Move IME caret from current last position to imeCaretPos. + int imeEndToImeCaretU16 = imc.GetImeCaretPos() - static_cast<unsigned int>(wcs.size()); +- int imeCaretPosDoc = pdoc->GetRelativePositionUTF16(CurrentPosition(), imeEndToImeCaretU16); ++ Sci::Position imeCaretPosDoc = pdoc->GetRelativePositionUTF16(CurrentPosition(), imeEndToImeCaretU16); + + MoveImeCarets(- CurrentPosition() + imeCaretPosDoc); + +@@ -1298,7 +1298,7 @@ + // Either SCROLL or ZOOM. We handle the wheel steppings calculation + wheelDelta -= static_cast<short>(HiWord(wParam)); + if (abs(wheelDelta) >= WHEEL_DELTA && linesPerScroll > 0) { +- int linesToScroll = linesPerScroll; ++ Sci::Line linesToScroll = linesPerScroll; + if (linesPerScroll == WHEEL_PAGESCROLL) + linesToScroll = LinesOnScreen() - 1; + if (linesToScroll == 0) { +@@ -1663,8 +1663,8 @@ + break; + + case EM_SETSEL: { +- int nStart = static_cast<int>(wParam); +- int nEnd = static_cast<int>(lParam); ++ Sci::Position nStart = static_cast<Sci::Position>(wParam); ++ Sci::Position nEnd = static_cast<Sci::Position>(lParam); + if (nStart == 0 && nEnd == -1) { + nEnd = pdoc->Length(); + } +@@ -1850,7 +1850,7 @@ + return true; + } + +-void ScintillaWin::ScrollText(int /* linesToMove */) { ++void ScintillaWin::ScrollText(Sci::Line /* linesToMove */) { + //Platform::DebugPrintf("ScintillaWin::ScrollText %d\n", linesToMove); + //::ScrollWindow(MainHWND(), 0, + // vs.lineHeight * linesToMove, 0, 0); +@@ -1883,7 +1883,7 @@ + } + + // Change the scroll position but avoid repaint if changing to same value +-void ScintillaWin::ChangeScrollPos(int barType, int pos) { ++void ScintillaWin::ChangeScrollPos(int barType, Sci::Position pos) { + SCROLLINFO sci = { + sizeof(sci), 0, 0, 0, 0, 0, 0 + }; +@@ -1904,14 +1904,14 @@ + ChangeScrollPos(SB_HORZ, xOffset); + } + +-bool ScintillaWin::ModifyScrollBars(int nMax, int nPage) { ++bool ScintillaWin::ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) { + bool modified = false; + SCROLLINFO sci = { + sizeof(sci), 0, 0, 0, 0, 0, 0 + }; + sci.fMask = SIF_PAGE | SIF_RANGE; + GetScrollInfo(SB_VERT, &sci); +- int vertEndPreferred = nMax; ++ Sci::Line vertEndPreferred = nMax; + if (!verticalScrollBarVisible) + nPage = vertEndPreferred + 1; + if ((sci.nMin != 0) || +@@ -1932,14 +1932,14 @@ + int horizEndPreferred = scrollWidth; + if (horizEndPreferred < 0) + horizEndPreferred = 0; +- unsigned int pageWidth = static_cast<unsigned int>(rcText.Width()); ++ int pageWidth = static_cast<int>(rcText.Width()); + if (!horizontalScrollBarVisible || Wrapping()) + pageWidth = horizEndPreferred + 1; + sci.fMask = SIF_PAGE | SIF_RANGE; + GetScrollInfo(SB_HORZ, &sci); + if ((sci.nMin != 0) || + (sci.nMax != horizEndPreferred) || +- (sci.nPage != pageWidth) || ++ (sci.nPage != static_cast<unsigned int>(pageWidth)) || + (sci.nPos != 0)) { + sci.fMask = SIF_PAGE | SIF_RANGE; + sci.nMin = 0; +@@ -1949,7 +1949,7 @@ + sci.nTrackPos = 1; + SetScrollInfo(SB_HORZ, &sci, TRUE); + modified = true; +- if (scrollWidth < static_cast<int>(pageWidth)) { ++ if (scrollWidth < pageWidth) { + HorizontalScrollTo(0); + } + } +@@ -2673,13 +2673,13 @@ + LRESULT ScintillaWin::ImeOnReconvert(LPARAM lParam) { + // Reconversion on windows limits within one line without eol. + // Look around: baseStart <-- (|mainStart| -- mainEnd) --> baseEnd. +- const int mainStart = sel.RangeMain().Start().Position(); +- const int mainEnd = sel.RangeMain().End().Position(); +- const int curLine = pdoc->LineFromPosition(mainStart); ++ const Sci::Position mainStart = sel.RangeMain().Start().Position(); ++ const Sci::Position mainEnd = sel.RangeMain().End().Position(); ++ const Sci::Line curLine = pdoc->LineFromPosition(mainStart); + if (curLine != pdoc->LineFromPosition(mainEnd)) + return 0; +- const int baseStart = pdoc->LineStart(curLine); +- const int baseEnd = pdoc->LineEnd(curLine); ++ const Sci::Position baseStart = pdoc->LineStart(curLine); ++ const Sci::Position baseEnd = pdoc->LineEnd(curLine); + if ((baseStart == baseEnd) || (mainEnd > baseEnd)) + return 0; + +@@ -2730,8 +2730,8 @@ + + // Make place for next composition string to sit in. + for (size_t r=0; r<sel.Count(); r++) { +- int rBase = sel.Range(r).Start().Position(); +- int docCompStart = rBase + adjust; ++ Sci::Position rBase = sel.Range(r).Start().Position(); ++ Sci::Position docCompStart = rBase + adjust; + + if (inOverstrike) { // the docCompLen of bytes will be overstriked. + sel.Range(r).caret.SetPosition(docCompStart); +@@ -2739,8 +2739,8 @@ + } else { + // Ensure docCompStart+docCompLen be not beyond lineEnd. + // since docCompLen by byte might break eol. +- int lineEnd = pdoc->LineEnd(pdoc->LineFromPosition(rBase)); +- int overflow = (docCompStart + docCompLen) - lineEnd; ++ Sci::Position lineEnd = pdoc->LineEnd(pdoc->LineFromPosition(rBase)); ++ Sci::Position overflow = (docCompStart + docCompLen) - lineEnd; + if (overflow > 0) { + pdoc->DeleteChars(docCompStart, docCompLen - overflow); + } else { +@@ -2833,7 +2833,7 @@ + //Platform::DebugPrintf("ScrollInfo %d mask=%x min=%d max=%d page=%d pos=%d track=%d\n", b,sci.fMask, + //sci.nMin, sci.nMax, sci.nPage, sci.nPos, sci.nTrackPos); + +- int topLineNew = topLine; ++ Sci::Line topLineNew = topLine; + switch (LoWord(wParam)) { + case SB_LINEUP: + topLineNew -= 1; +@@ -3038,7 +3038,7 @@ + + STDMETHODIMP ScintillaWin::DragLeave() { + try { +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + return S_OK; + } catch (...) { + errorStatus = SC_STATUS_FAILURE; +@@ -3054,7 +3054,7 @@ + if (pIDataSource == NULL) + return E_POINTER; + +- SetDragPosition(SelectionPosition(invalidPosition)); ++ SetDragPosition(SelectionPosition(Sci::invalidPosition)); + + STGMEDIUM medium = {0, {0}, 0}; + |