+ fix: document end position calculation

This commit is contained in:
Rainer Kottenhoff 2019-05-03 23:15:50 +02:00
parent 9d50b778d9
commit cf68540906
6 changed files with 39 additions and 46 deletions

View File

@ -1 +1 @@
1689
1690

View File

@ -3,7 +3,7 @@
<assemblyIdentity
name="Notepad3"
processorArchitecture="*"
version="5.19.503.1689"
version="5.19.503.1690"
type="win32"
/>
<description>Notepad3 RC</description>

View File

@ -3610,7 +3610,6 @@ void EditCompressBlanks(HWND hwnd)
const DocPos iCurPos = SciCall_GetCurrentPos();
const DocPos iAnchorPos = SciCall_GetAnchor();
const DocPos iSelLength = (iSelEndPos - iSelStartPos);
const DocPos iTxtLength = SciCall_GetTextLength();
bool bIsLineStart = true;
bool bIsLineEnd = true;
@ -3620,7 +3619,7 @@ void EditCompressBlanks(HWND hwnd)
DocPos cch = 0;
if (bIsSelEmpty) {
pszIn = (const char*)SciCall_GetCharacterPointer();
cch = iTxtLength;
cch = SciCall_GetTextLength();
pszOut = AllocMem(cch + 1, HEAP_ZERO_MEMORY);
}
else {
@ -3670,7 +3669,7 @@ void EditCompressBlanks(HWND hwnd)
SciCall_TargetFromSelection();
}
else {
SciCall_SetTargetRange(0, iTxtLength-1);
SciCall_SetTargetRange(0, Sci_GetDocEndPosition());
}
SciCall_ReplaceTarget(-1, pszOut);
@ -3712,7 +3711,7 @@ void EditRemoveBlankLines(HWND hwnd, bool bMerge, bool bRemoveWhiteSpace)
}
const DocPos iSelStart = (SciCall_IsSelectionEmpty() ? 0 : SciCall_GetSelectionStart());
const DocPos iSelEnd = (SciCall_IsSelectionEmpty() ? Sci_GetDocEndPosition() : SciCall_GetSelectionEnd());
const DocPos iSelEnd = (SciCall_IsSelectionEmpty() ? (Sci_GetDocEndPosition()-1) : SciCall_GetSelectionEnd());
DocLn iBegLine = SciCall_LineFromPosition(iSelStart);
DocLn iEndLine = SciCall_LineFromPosition(iSelEnd);
@ -3858,7 +3857,7 @@ void EditWrapToColumn(HWND hwnd,DocPos nColumn/*,int nTabWidth*/)
DocPos iSelStart = 0;
DocPos iSelEnd = Sci_GetDocEndPosition();
DocPos iSelCount = Sci_GetDocEndPosition();
DocPos iSelCount = iSelEnd;
if (!SciCall_IsSelectionEmpty()) {
iSelStart = SciCall_GetSelectionStart();
@ -4529,7 +4528,7 @@ void EditFixPositions(HWND hwnd)
DocPos iNewPos = iCurrentPos;
if ((iCurrentPos > 0) && (iCurrentPos < iMaxPos))
if ((iCurrentPos > 0) && (iCurrentPos <= iMaxPos))
{
iNewPos = SciCall_PositionAfter(SciCall_PositionBefore(iCurrentPos));
@ -4538,7 +4537,7 @@ void EditFixPositions(HWND hwnd)
}
}
if ((iAnchorPos != iNewPos) && (iAnchorPos > 0) && (iAnchorPos < iMaxPos))
if ((iAnchorPos != iNewPos) && (iAnchorPos > 0) && (iAnchorPos <= iMaxPos))
{
iNewPos = SciCall_PositionAfter(SciCall_PositionBefore(iAnchorPos));
if (iNewPos != iAnchorPos) {
@ -5956,14 +5955,14 @@ bool EditFindNext(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
if (bFocusWnd)
SetFocus(hwnd);
DocPos iTextLength = SciCall_GetTextLength();
DocPos const iDocEndPos = Sci_GetDocEndPosition();
DocPos start = SciCall_GetCurrentPos();
DocPos end = iTextLength;
DocPos end = iDocEndPos;
if (start >= end) {
if (IDOK == InfoBoxLng(MB_OKCANCEL, L"MsgFindWrap1", IDS_MUI_FIND_WRAPFW)) {
end = min_p(start, iTextLength); start = 0;
end = min_p(start, iDocEndPos); start = 0;
}
else
bSuppressNotFound = true;
@ -5982,7 +5981,7 @@ bool EditFindNext(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
UpdateStatusbar(false);
if (!lpefr->bNoFindWrap && !bSuppressNotFound) {
if (IDOK == InfoBoxLng(MB_OKCANCEL, L"MsgFindWrap2", IDS_MUI_FIND_WRAPFW)) {
end = min_p(start, iTextLength); start = 0;
end = min_p(start, iDocEndPos); start = 0;
iPos = _FindInTarget(hwnd, szFind, slen, (int)(lpefr->fuFlags), &start, &end, false, FRMOD_WRAPED);
@ -6036,8 +6035,7 @@ bool EditFindPrev(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
if (slen <= 0)
return false;
const DocPos iTextLength = SciCall_GetTextLength();
DocPos const iTextLength = Sci_GetDocEndPosition() + 1;
DocPos start = SciCall_GetCurrentPos();
DocPos end = 0;
@ -6204,7 +6202,7 @@ bool EditReplace(HWND hwnd, LPCEDITFINDREPLACE lpefr) {
// redo find to get group ranges filled
DocPos start = (SciCall_IsSelectionEmpty() ? SciCall_GetCurrentPos() : selBeg);
DocPos end = SciCall_GetTextLength();
DocPos end = Sci_GetDocEndPosition();
DocPos _start = start;
Globals.iReplacedOccurrences = 0;
@ -6366,8 +6364,8 @@ int EditReplaceAllInRange(HWND hwnd, LPCEDITFINDREPLACE lpefr, DocPos iStartPos,
//
bool EditReplaceAll(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bShowInfo)
{
const DocPos start = 0;
const DocPos end = SciCall_GetTextLength();
DocPos const start = 0;
DocPos const end = Sci_GetDocEndPosition();
DocPos enlargement = 0;
BeginWaitCursor(NULL);
@ -6445,9 +6443,9 @@ void EditClearAllOccurrenceMarkers()
_IGNORE_NOTIFY_CHANGE_;
SciCall_SetIndicatorCurrent(INDIC_NP3_MARK_OCCURANCE);
SciCall_IndicatorClearRange(0, SciCall_GetTextLength());
SciCall_IndicatorClearRange(0, Sci_GetDocEndPosition());
SciCall_SetIndicatorCurrent(INDIC_NP3_FOCUS_VIEW);
SciCall_IndicatorClearRange(0, SciCall_GetTextLength());
SciCall_IndicatorClearRange(0, Sci_GetDocEndPosition());
_OBSERVE_NOTIFY_CHANGE_;
@ -6669,7 +6667,7 @@ bool EditAutoCompleteWord(HWND hwnd, bool autoInsert)
DocPos iPos = iWordStartPos;
bool bWordAllNumbers = true;
while ((iPos < iCurrentPos) && bWordAllNumbers && (iPos != iDocEndPos)) {
while ((iPos < iCurrentPos) && bWordAllNumbers && (iPos <= iDocEndPos)) {
char const ch = SciCall_GetCharAt(iPos);
if (ch < '0' || ch > '9') {
bWordAllNumbers = false;
@ -6831,7 +6829,7 @@ static void _FinalizeStyling(DocPos iEndPos)
void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActiveHotspot)
{
if (endPos < 0) {
endPos = Sci_GetDocEndPosition() - 1;
endPos = Sci_GetDocEndPosition();
}
else if (endPos < startPos) {
swapos(&startPos, &endPos);
@ -6844,13 +6842,18 @@ void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActi
}
if (endPos == startPos) { return; }
if (!bActiveHotspot) {
SciCall_StartStyling(startPos);
Sci_ApplyLexerStyle(startPos, endPos);
return;
}
const char* pszUrlRegEx = "\\b(?:(?:https?|ftp|file)://|www\\.|ftp\\.)"
"(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*"
"(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[A-Z0-9+&@#/%=~_|$])";
int const iRegExLen = (int)StringCchLenA(pszUrlRegEx,0);
if (!bActiveHotspot) { _FinalizeStyling(startPos); }
SciCall_StartStyling(startPos);
_ENTER_TARGET_TRANSACTION_;
@ -6870,14 +6873,8 @@ void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActi
break; // wrong match
}
// mark this match
if (!bActiveHotspot) { _FinalizeStyling(iPos); }
SciCall_StartStyling(iPos);
if (bActiveHotspot) {
SciCall_SetStyling((DocPosCR)mlen, Style_GetHotspotStyleID());
}
else {
_FinalizeStyling(end);
}
SciCall_SetStyling((DocPosCR)mlen, Style_GetHotspotStyleID());
// next occurrence
start = end + 1;
@ -6887,9 +6884,7 @@ void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActi
_LEAVE_TARGET_TRANSACTION_;
if (!bActiveHotspot) { _FinalizeStyling(endPos); }
//SciCall_StartStyling(endPos + 1);
SciCall_StartStyling(Sci_GetDocEndPosition() - 1);
SciCall_StartStyling(Sci_GetDocEndPosition());
}
@ -6910,8 +6905,8 @@ void EditHideNotMarkedLineRange(HWND hwnd, bool bHideLines)
Style_SetFolding(hwnd, FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding);
SciCall_FoldAll(EXPAND);
Sci_ApplyLexerStyle(0, -1);
EditMarkAllOccurrences(hwnd, true);
EditUpdateUrlHotspots(hwnd, 0, -1, Settings.HyperlinkHotspot);
EditMarkAllOccurrences(hwnd, true);
}
else // ===== hide lines without marker =====
{
@ -6923,9 +6918,8 @@ void EditHideNotMarkedLineRange(HWND hwnd, bool bHideLines)
Style_SetFolding(hwnd, true);
Sci_ApplyLexerStyle(0, -1);
EditMarkAllOccurrences(hwnd, false);
EditUpdateUrlHotspots(hwnd, 0, -1, Settings.HyperlinkHotspot);
EditMarkAllOccurrences(hwnd, false);
DocLn const iStartLine = SciCall_LineFromPosition(iStartPos);
DocLn const iEndLine = SciCall_LineFromPosition(iEndPos);

View File

@ -443,7 +443,7 @@ static void _SetSaveNeededFlag(const bool setSaveNeeded)
// Force trigger modified (e.g. RelaunchElevated)
if (!SciCall_GetModify()) {
SciCall_AppendText(1, " "); // trigger dirty flag
SciCall_DeleteRange(SciCall_GetTextLength() - 1, 1);
SciCall_DeleteRange(Sci_GetDocEndPosition(), 1);
}
// notify Search/Replace dialog
if (IsWindow(Globals.hwndDlgFindReplace)) {
@ -4649,8 +4649,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SELTONEXT:
case IDM_EDIT_SELTOPREV:
if (SciCall_GetTextLength() == 0)
break;
if (SciCall_GetTextLength() == 0) { break; }
if (IsFindPatternEmpty() && !StringCchLenA(Settings.EFR_Data.szFind, COUNTOF(Settings.EFR_Data.szFind)))
{
@ -6172,13 +6171,13 @@ bool HandleHotSpotURL(DocPos position, HYPERLINK_OPS operation)
while ((cNewStyle == cStyle) && (--pos > 0)) {
cNewStyle = SciCall_GetStyleAt(pos);
}
DocPos firstPos = (pos != 0) ? (pos + 1) : 0;
DocPos const firstPos = (pos != 0) ? (pos + 1) : 0;
// get right most position of style
pos = position;
cNewStyle = cStyle;
DocPos posTextLength = SciCall_GetTextLength();
while ((cNewStyle == cStyle) && (++pos < posTextLength)) {
DocPos const docEndPos = Sci_GetDocEndPosition();
while ((cNewStyle == cStyle) && (++pos <= docEndPos)) {
cNewStyle = SciCall_GetStyleAt(pos);
}
DocPos lastPos = pos;

View File

@ -505,10 +505,10 @@ DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool)
#define Sci_GetLineStartPosition(position) SciCall_PositionFromLine(SciCall_LineFromPosition(position))
// length of line w/o line-end chars (full use SciCall_LineLength()
#define Sci_GetNetLineLength(line) (SciCall_GetLineEndPosition(line) - SciCall_PositionFromLine(line))
#define Sci_GetNetLineLength(line) (SciCall_GetLineEndPosition(line) - SciCall_PositionFromLine(line))
///~#define Sci_GetDocEndPosition() (SciCall_GetTextLength() - 1)
#define Sci_GetDocEndPosition() SciCall_GetTextLength()
//~#define Sci_GetDocEndPosition() (SciCall_GetTextLength() - 1)
#define Sci_GetDocEndPosition() SciCall_GetLineEndPosition(SciCall_GetLineCount() - 1)
// max. line length in range (incl. line-breaks)
inline DocPos Sci_GetRangeMaxLineLength(DocLn iBeginLine, DocLn iEndLine) {

View File

@ -8,7 +8,7 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
#define VERSION_REV 503
#define VERSION_BUILD 1689
#define VERSION_BUILD 1690
#define SCINTILLA_VER 415
#define ONIGMO_REGEX_VER 6.2.0
#define VERSION_PATCH RC