浏览代码

Add comment & cleanup.

Martijn Laan 1 年之前
父节点
当前提交
b02b421f8d
共有 2 个文件被更改,包括 25 次插入25 次删除
  1. 23 24
      Components/ScintEdit.pas
  2. 2 1
      Projects/Src/CompForm.pas

+ 23 - 24
Components/ScintEdit.pas

@@ -121,6 +121,8 @@ type
     function GetRawSelText: TScintRawString;
     function GetRawText: TScintRawString;
     function GetReadOnly: Boolean;
+    function GetSearchFlags(const Options: TScintFindOptions): Integer; overload;
+    function GetSearchFlags(const MatchCase: Boolean): Integer; overload;
     function GetSelection: TScintRange;
     function GetSelectionAnchorPosition(Selection: Integer): Integer;
     function GetSelectionCaretPosition(Selection: Integer): Integer;
@@ -723,17 +725,9 @@ end;
 function TScintEdit.FindRawText(const StartPos, EndPos: Integer;
   const S: TScintRawString; const Options: TScintFindOptions;
   out MatchRange: TScintRange): Boolean;
-var
-  Flags: Integer;
 begin
-  Flags := 0;
-  if sfoMatchCase in Options then
-    Flags := Flags or SCFIND_MATCHCASE;
-  if sfoWholeWord in Options then
-    Flags := Flags or SCFIND_WHOLEWORD;
-
   SetTarget(StartPos, EndPos);
-  Call(SCI_SETSEARCHFLAGS, Flags, 0);
+  Call(SCI_SETSEARCHFLAGS, GetSearchFlags(Options), 0);
   Result := Call(SCI_SEARCHINTARGET, Length(S), LPARAM(PAnsiChar(S))) >= 0;
   if Result then
     MatchRange := GetTarget;
@@ -1002,6 +996,23 @@ begin
   Result := Call(SCI_GETREADONLY, 0, 0) <> 0;
 end;
 
+function TScintEdit.GetSearchFlags(const Options: TScintFindOptions): Integer;
+begin
+  Result := 0;
+  if sfoMatchCase in Options then
+    Result := Result or SCFIND_MATCHCASE;
+  if sfoWholeWord in Options then
+    Result := Result or SCFIND_WHOLEWORD;
+end;
+
+function TScintEdit.GetSearchFlags(const MatchCase: Boolean): Integer;
+begin
+  if MatchCase then
+    Result := GetSearchFlags([sfoMatchCase])
+  else
+    Result := GetSearchFlags([]);
+end;
+
 function TScintEdit.GetSelection: TScintRange;
 begin
   Result.StartPos := Call(SCI_GETSELECTIONSTART, 0, 0);
@@ -1156,12 +1167,8 @@ end;
 function TScintEdit.RawSelTextEquals(const S: TScintRawString;
   const MatchCase: Boolean): Boolean;
 begin
-  var SearchFlags := 0;
-  if MatchCase then
-    SearchFlags := SearchFlags or SCFIND_MATCHCASE;
-
   Call(SCI_TARGETFROMSELECTION, 0, 0);
-  Call(SCI_SETSEARCHFLAGS, SearchFlags, 0);
+  Call(SCI_SETSEARCHFLAGS, GetSearchFlags(MatchCase), 0);
   Result := False;
   if Call(SCI_SEARCHINTARGET, Length(S), LPARAM(PAnsiChar(S))) >= 0 then begin
     var Target := GetTarget;
@@ -1220,23 +1227,15 @@ end;
 
 procedure TScintEdit.SelectAllOccurrences(const MatchCase: Boolean);
 begin
-  var SearchFlags := 0;
-  if MatchCase then
-    SearchFlags := SearchFlags or SCFIND_MATCHCASE;
-
   Call(SCI_TARGETWHOLEDOCUMENT, 0, 0);
-  Call(SCI_SETSEARCHFLAGS, SearchFlags, 0);
+  Call(SCI_SETSEARCHFLAGS, GetSearchFlags(MatchCase), 0);
   Call(SCI_MULTIPLESELECTADDEACH, 0, 0);
 end;
 
 procedure TScintEdit.SelectNextOccurrence(const MatchCase: Boolean);
 begin
-  var SearchFlags := 0;
-  if MatchCase then
-    SearchFlags := SearchFlags or SCFIND_MATCHCASE;
-
   Call(SCI_TARGETWHOLEDOCUMENT, 0, 0);
-  Call(SCI_SETSEARCHFLAGS, SearchFlags, 0);
+  Call(SCI_SETSEARCHFLAGS, GetSearchFlags(MatchCase), 0);
   Call(SCI_MULTIPLESELECTADDNEXT, 0, 0);
 end;
 

+ 2 - 1
Projects/Src/CompForm.pas

@@ -1048,7 +1048,8 @@ begin
     else begin
       { The built in Esc (SCI_CANCEL) simply drops all additional selections
         and does not empty the main selection, It doesn't matter if Esc is
-        pressed once or twice. Implement our own behaviour, same as VSCode. }
+        pressed once or twice. Implement our own behaviour, same as VSCode.
+        Also see https://github.com/microsoft/vscode/issues/118835. }
       if FActiveMemo.SelectionCount > 1 then
         FActiveMemo.RemoveAdditionalSelections
       else if not FActiveMemo.SelEmpty then