Skip to content

Commit 7fb8043

Browse files
committed
Prefer SCI_REPLACETARGETMINIMAL where possible
Also: * re-position caret *after* decoded Unicode text for greater consistency with entity decoding -- i.e., smooth over the differenc ebetween SCI_REPLACETARGET(MINIMAL) and SCI_REPLACESEL * assume zero-padded version words for N++ >=8.4.1; prevents mistaking 8.4.1/2 as supporting SCI_GETTEXTRANGEFULL due to 5951d5b; also prevents mistaking 8.4.1-8.4.8 as depending on the Vista-era graphics API, due to c4d621b, so to avoid adjusting the About dialog's height when not necessary
1 parent bfcf374 commit 7fb8043

4 files changed

Lines changed: 63 additions & 22 deletions

File tree

src/Include/SciApi.inc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{$IFNDEF SCIAPI_INC}
22
{$DEFINE SCIAPI_INC}
33
{
4-
Copyright (c) 2022 Robert Di Pardo <dipardo.r@gmail.com>
4+
Copyright (c) 2022, 2023 Robert Di Pardo <dipardo.r@gmail.com>
55
66
This Source Code Form is subject to the terms of the Mozilla Public License,
77
v. 2.0. If a copy of the MPL was not distributed with this file, You can
@@ -21,7 +21,12 @@ type
2121
/// >= v5.2.3
2222
/// SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL and SCI_FORMATRANGEFULL introduced
2323
/// https://groups.google.com/g/scintilla-interest/c/mPLwYdC0-FE
24-
sciApi_GTE_523
24+
sciApi_GTE_523,
25+
26+
/// >= v5.3.2
27+
/// SCI_REPLACETARGETMINIMAL introduced
28+
/// https://groups.google.com/g/scintilla-interest/c/9OG2VdnWJ5I
29+
sciApi_GTE_532
2530
);
2631

2732
{$ENDIF ~SCIAPI_INC}

src/Include/SciSupport.inc

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ type
7070
end;
7171

7272
const
73-
// Definitions for Scintilla 5.2.3
74-
// https://github.com/notepad-plus-plus/notepad-plus-plus/commit/ed4bb1a93e763001aac842698fcde0856ba8b0bc
73+
// Definitions for Scintilla 5.3.2
74+
// https://github.com/notepad-plus-plus/notepad-plus-plus/commit/fc61868cf2e317bfb7384502f80b6476fda6ddc8
7575
INVALID_POSITION = -1;
7676
SCI_START = 2000;
7777
SCI_OPTIONAL_START = 3000;
@@ -94,6 +94,7 @@ const
9494
SCI_SELECTALL = 2013;
9595
SCI_SETSAVEPOINT = 2014;
9696
SCI_GETSTYLEDTEXT = 2015;
97+
SCI_GETSTYLEDTEXTFULL = 2778;
9798
SCI_CANREDO = 2016;
9899
SCI_MARKERLINEFROMHANDLE = 2017;
99100
SCI_MARKERDELETEHANDLE = 2018;
@@ -183,7 +184,12 @@ const
183184
SC_MARK_RGBAIMAGE = 30;
184185
SC_MARK_BOOKMARK = 31;
185186
SC_MARK_VERTICALBOOKMARK = 32;
187+
SC_MARK_BAR = 33;
186188
SC_MARK_CHARACTER = 10000;
189+
SC_MARKNUM_HISTORY_REVERTED_TO_ORIGIN = 21;
190+
SC_MARKNUM_HISTORY_SAVED = 22;
191+
SC_MARKNUM_HISTORY_MODIFIED = 23;
192+
SC_MARKNUM_HISTORY_REVERTED_TO_MODIFIED = 24;
187193
SC_MARKNUM_FOLDEREND = 25;
188194
SC_MARKNUM_FOLDEROPENMID = 26;
189195
SC_MARKNUM_FOLDERMIDTAIL = 27;
@@ -306,6 +312,8 @@ const
306312
SCI_STYLESETHOTSPOT = 2409;
307313
SCI_STYLESETCHECKMONOSPACED = 2254;
308314
SCI_STYLEGETCHECKMONOSPACED = 2255;
315+
SCI_STYLESETINVISIBLEREPRESENTATION = 2256;
316+
SCI_STYLEGETINVISIBLEREPRESENTATION = 2257;
309317
SC_ELEMENT_LIST = 0;
310318
SC_ELEMENT_LIST_BACK = 1;
311319
SC_ELEMENT_LIST_SELECTED = 2;
@@ -384,15 +392,24 @@ const
384392
INDIC_POINTCHARACTER = 19;
385393
INDIC_GRADIENT = 20;
386394
INDIC_GRADIENTCENTRE = 21;
387-
INDIC_EXPLORERLINK = 22;
395+
INDIC_POINT_TOP = 22;
396+
INDIC_EXPLORERLINK = 23;
388397
INDIC_CONTAINER = 8;
389398
INDIC_IME = 32;
390399
INDIC_IME_MAX = 35;
391400
INDIC_MAX = 35;
392401
INDICATOR_CONTAINER = 8;
393402
INDICATOR_IME = 32;
394403
INDICATOR_IME_MAX = 35;
395-
INDICATOR_MAX = 35;
404+
INDICATOR_HISTORY_REVERTED_TO_ORIGIN_INSERTION = 36;
405+
INDICATOR_HISTORY_REVERTED_TO_ORIGIN_DELETION = 37;
406+
INDICATOR_HISTORY_SAVED_INSERTION = 38;
407+
INDICATOR_HISTORY_SAVED_DELETION = 39;
408+
INDICATOR_HISTORY_MODIFIED_INSERTION = 40;
409+
INDICATOR_HISTORY_MODIFIED_DELETION =41;
410+
INDICATOR_HISTORY_REVERTED_TO_MODIFIED_INSERTION = 42;
411+
INDICATOR_HISTORY_REVERTED_TO_MODIFIED_DELETION = 43;
412+
INDICATOR_MAX = 43;
396413
SCI_INDICSETSTYLE = 2080;
397414
SCI_INDICGETSTYLE = 2081;
398415
SCI_INDICSETFORE = 2082;
@@ -509,6 +526,12 @@ const
509526
SCI_FINDTEXTFULL = 2196;
510527
SCI_FORMATRANGE = 2151;
511528
SCI_FORMATRANGEFULL = 2777;
529+
SC_CHANGE_HISTORY_DISABLED = 0;
530+
SC_CHANGE_HISTORY_ENABLED = 1;
531+
SC_CHANGE_HISTORY_MARKERS = 2;
532+
SC_CHANGE_HISTORY_INDICATORS = 4;
533+
SCI_SETCHANGEHISTORY = 2780;
534+
SCI_GETCHANGEHISTORY = 2781;
512535
SCI_GETFIRSTVISIBLELINE = 2152;
513536
SCI_GETLINE = 2153;
514537
SCI_GETLINECOUNT = 2154;
@@ -523,6 +546,7 @@ const
523546
SCI_GETTEXTRANGE = 2162;
524547
SCI_GETTEXTRANGEFULL = 2039;
525548
SCI_HIDESELECTION = 2163;
549+
SCI_GETSELECTIONHIDDEN = 2088;
526550
SCI_POINTXFROMPOSITION = 2164;
527551
SCI_POINTYFROMPOSITION = 2165;
528552
SCI_LINEFROMPOSITION = 2166;
@@ -565,6 +589,7 @@ const
565589
SCI_TARGETWHOLEDOCUMENT = 2690;
566590
SCI_REPLACETARGET = 2194;
567591
SCI_REPLACETARGETRE = 2195;
592+
SCI_REPLACETARGETMINIMAL = 2779;
568593
SCI_SEARCHINTARGET = 2197;
569594
SCI_SETSEARCHFLAGS = 2198;
570595
SCI_GETSEARCHFLAGS = 2199;
@@ -609,6 +634,7 @@ const
609634
SC_FOLDACTION_CONTRACT = 0;
610635
SC_FOLDACTION_EXPAND = 1;
611636
SC_FOLDACTION_TOGGLE = 2;
637+
SC_FOLDACTION_CONTRACT_EVERY_LEVEL = 4;
612638
SCI_FOLDLINE = 2237;
613639
SCI_FOLDCHILDREN = 2238;
614640
SCI_EXPANDCHILDREN = 2239;
@@ -1247,6 +1273,7 @@ const
12471273
SC_AC_TAB = 3;
12481274
SC_AC_NEWLINE = 4;
12491275
SC_AC_COMMAND = 5;
1276+
SC_AC_SINGLE_CHOICE = 6;
12501277
SC_CHARACTERSOURCE_DIRECT_INPUT = 0;
12511278
SC_CHARACTERSOURCE_TENTATIVE_INPUT = 1;
12521279
SC_CHARACTERSOURCE_IME_RESULT = 2;

src/LibNppPlugin/NppSimpleObjects.pas

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -345,12 +345,9 @@ function TTextRange.GetText: WideString;
345345
tr: RSciTextRange;
346346
Chars: AnsiString;
347347
begin
348-
case FEditor.ApiLevel of
349-
sciApi_GTE_523:
350-
SciMsg := SCI_GETTEXTRANGEFULL;
351-
else
348+
SciMsg := SCI_GETTEXTRANGEFULL;
349+
if FEditor.ApiLevel < sciApi_GTE_523 then
352350
SciMsg := SCI_GETTEXTRANGE;
353-
end;
354351
Chars := AnsiString(StringOfChar(#0, GetLength + 1));
355352
tr.chrg.cpMin := FStartPos;
356353
tr.chrg.cpMax := FEndPos;
@@ -361,9 +358,13 @@ function TTextRange.GetText: WideString;
361358
{ ------------------------------------------------------------------------------------------------ }
362359
procedure TTextRange.SetText(const AValue: WideString);
363360
var
361+
SciMsg: UINT;
364362
Chars: AnsiString;
365363
TxtRng: Integer;
366364
begin
365+
SciMsg := SCI_REPLACETARGETMINIMAL;
366+
if FEditor.ApiLevel < sciApi_GTE_532 then
367+
SciMsg := SCI_REPLACETARGET;
367368
case FEditor.SendMessage(SCI_GETCODEPAGE) of
368369
SC_CP_UTF8:
369370
Chars := UTF8Encode(AValue)
@@ -373,7 +374,7 @@ procedure TTextRange.SetText(const AValue: WideString);
373374
TxtRng := System.Length(Chars);
374375
FEditor.SendMessage(SCI_SETTARGETSTART, FStartPos);
375376
FEditor.SendMessage(SCI_SETTARGETEND, FEndPos);
376-
Dec(FEndPos, (FEndPos - FStartPos) - Integer(FEditor.SendMessage(SCI_REPLACETARGET, TxtRng, PAnsiChar(Chars))));
377+
Inc(FStartPos, Sci_Position(FEditor.SendMessage(SciMsg, TxtRng, PAnsiChar(Chars))));
377378
end;
378379

379380

@@ -665,12 +666,9 @@ procedure TActiveDocument.Find(const AText: WideString; var ATarget: TTextRange;
665666
TTF: RSciTextToFind;
666667
StartPos: LRESULT;
667668
begin
668-
case Self.ApiLevel of
669-
sciApi_GTE_523:
670-
SciMsg := SCI_FINDTEXTFULL;
671-
else
669+
SciMsg := SCI_FINDTEXTFULL;
670+
if Self.ApiLevel < sciApi_GTE_523 then
672671
SciMsg := SCI_FINDTEXT;
673-
end;
674672
TTF := Default(RSciTextToFind);
675673
if AStartPos < 0 then
676674
TTF.chrg.cpMin := 0

src/LibNppPlugin/nppplugin.pas

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ TNppPlugin = class(TObject)
5353
function SupportsBigFiles: Boolean;
5454
function HasV5Apis: Boolean;
5555
function HasFullRangeApis: Boolean;
56+
function HasMinimalReplacementApi: Boolean;
5657
function GetApiLevel: TSciApiLevel;
5758
function GetNppVersion: Cardinal;
5859
function GetPluginsConfigDir: string;
@@ -332,8 +333,10 @@ function TNppPlugin.GetApiLevel: TSciApiLevel;
332333
Result := sciApi_LT_5
333334
else if (not self.HasFullRangeApis) then
334335
Result := sciApi_GTE_515
336+
else if (not self.HasMinimalReplacementApi) then
337+
Result := sciApi_GTE_523
335338
else
336-
Result := sciApi_GTE_523;
339+
Result := sciApi_GTE_532;
337340
end;
338341

339342
function TNppPlugin.GetNppVersion: Cardinal;
@@ -385,8 +388,7 @@ function TNppPlugin.HasFullRangeApis: Boolean;
385388
NppVersion := GetNppVersion;
386389
Result :=
387390
(HIWORD(NppVersion) > 8) or
388-
((HIWORD(NppVersion) = 8) and
389-
((LOWORD(NppVersion) >= 43) and (not (LOWORD(NppVersion) in [191, 192, 193]))));
391+
((HIWORD(NppVersion) = 8) and (LOWORD(NppVersion) >= 430));
390392
end;
391393

392394
function TNppPlugin.IsDarkModeEnabled: Boolean;
@@ -409,15 +411,24 @@ function TNppPlugin.HasNarrowDialogBorders: Boolean;
409411
(TWinVer(SendMessage(self.NppData.NppHandle, NPPM_GETWINDOWSVERSION, 0, 0)) >= WV_WIN8);
410412
end;
411413

414+
function TNppPlugin.HasMinimalReplacementApi: Boolean;
415+
var
416+
NppVersion: Cardinal;
417+
begin
418+
NppVersion := GetNppVersion;
419+
Result :=
420+
((HIWORD(NppVersion) > 8) or
421+
((HIWORD(NppVersion) = 8) and (LOWORD(NppVersion) >= 480)));
422+
end;
423+
412424
function TNppPlugin.MinSubsystemIsVista: Boolean;
413425
var
414426
NppVersion: Cardinal;
415427
begin
416428
NppVersion := GetNppVersion;
417429
Result :=
418430
((HIWORD(NppVersion) > 8) or
419-
((HIWORD(NppVersion) = 8) and
420-
(((LOWORD(NppVersion) >= 49) and (not (LOWORD(NppVersion) in [191, 192, 193]))))));
431+
((HIWORD(NppVersion) = 8) and (LOWORD(NppVersion) >= 490)));
421432
end;
422433

423434
end.

0 commit comments

Comments
 (0)