SynEdit: added out param AStartBytePos and ALineByteLen to TLazSynDisplayView.SetHighlighterTokensLine

git-svn-id: trunk@63285 -
This commit is contained in:
martin 2020-06-03 23:28:19 +00:00
parent 1e0f270b8f
commit ee7d180202
6 changed files with 35 additions and 21 deletions

View File

@ -215,7 +215,7 @@ type
property NextView: TLazSynDisplayView read FNextView write FNextView;
public
procedure InitHighlighterTokens(AHighlighter: TSynCustomHighlighter); virtual;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx); virtual;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer); virtual;
procedure FinishHighlighterTokens; virtual;
function GetNextHighlighterToken(out ATokenInfo: TLazSynDisplayTokenInfo): Boolean; virtual;
function GetLinesCount: Integer; virtual;
@ -630,10 +630,12 @@ begin
FNextView.InitHighlighterTokens(AHighlighter);
end;
procedure TLazSynDisplayView.SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx);
procedure TLazSynDisplayView.SetHighlighterTokensLine(ALine: TLineIdx; out
ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer);
begin
//AStartBytePos := 1;
if assigned(FNextView) then
FNextView.SetHighlighterTokensLine(ALine, ARealLine);
FNextView.SetHighlighterTokensLine(ALine, ARealLine, AStartBytePos, ALineByteLen);
end;
procedure TLazSynDisplayView.FinishHighlighterTokens;

View File

@ -57,6 +57,7 @@ type
FCharWidths: TPhysicalCharWidths;
FCharWidthsLen: Integer;
FCurTxtLineIdx : Integer;
FCurLineByteLen: Integer;
// Fields for GetNextHighlighterTokenFromView
// Info about the token (from highlighter)
@ -310,13 +311,16 @@ end;
procedure TLazSynPaintTokenBreaker.SetHighlighterTokensLine(ALine: TLineIdx; out
ARealLine: TLineIdx);
var
LogLeftPos: Integer;
begin
FDisplayView.SetHighlighterTokensLine(ALine, ARealLine);
FDisplayView.SetHighlighterTokensLine(ALine, ARealLine, LogLeftPos, FCurLineByteLen);
FCharWidths := FLinesView.GetPhysicalCharWidths(ARealLine);
FCharWidthsLen := Length(FCharWidths);
FCurLineByteLen := FCurLineByteLen + LogLeftPos - 1;
FCurViewToken.TokenLength := 0;
FCurViewScannerPos.Logical := 1;
FCurViewScannerPos.Logical := LogLeftPos;
FCurViewScannerPos.Physical := 1;
FCurViewScannerPos.Offset := 0;
FCurViewScannerPhysCharPos := 1;
@ -495,7 +499,7 @@ function TLazSynPaintTokenBreaker.GetNextHighlighterTokenFromView(out
function GetCharWidthData(AIdx: Integer): TPhysicalCharWidth; inline;
begin
if AIdx >= FCharWidthsLen
if (AIdx >= FCharWidthsLen) or (AIdx >= FCurLineByteLen)
then Result := 1
else Result := FCharWidths[AIdx];
end;
@ -590,7 +594,7 @@ function TLazSynPaintTokenBreaker.GetNextHighlighterTokenFromView(out
repeat
inc(ALogicIdx);
until (ALogicIdx >= ALogicEnd) or
(ALogicIdx >= FCharWidthsLen) or ((FCharWidths[ALogicIdx] and PCWMask) <> 0);
(ALogicIdx >= FCharWidthsLen) or ((FCharWidths[ALogicIdx] and PCWMask) <> 0);
pcw := GetCharWidthData(ALogicIdx);
j := pcw and PCWMask;
@ -622,7 +626,7 @@ function TLazSynPaintTokenBreaker.GetNextHighlighterTokenFromView(out
j := (pcw and PCWMask);
// must go over token bounds
//while (ALogicIdx < ALogicEnd) and (pcw and PCWFlagRTL <> 0) do begin
while (ALogicIdx < FCharWidthsLen) and (pcw and PCWFlagRTL <> 0) do begin
while (ALogicIdx < FCharWidthsLen) and (ALogicIdx < FCurLineByteLen) and (pcw and PCWFlagRTL <> 0) do begin
inc(RtlRunPhysWidth, j);
if j <> 0 then begin
@ -641,7 +645,7 @@ function TLazSynPaintTokenBreaker.GetNextHighlighterTokenFromView(out
repeat
inc(ALogicIdx);
inc(i);
until //(ALogicIdx >= ALogicEnd) or
until (ALogicIdx >= FCurLineByteLen) or
(ALogicIdx >= FCharWidthsLen) or ((FCharWidths[ALogicIdx] and PCWMask) <> 0);
pcw := GetCharWidthData(ALogicIdx);

View File

@ -354,7 +354,7 @@ type
public
constructor Create(AFoldView: TSynEditFoldedView);
destructor Destroy; override;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx); override;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer); override;
function GetNextHighlighterToken(out ATokenInfo: TLazSynDisplayTokenInfo): Boolean; override;
function GetLinesCount: Integer; override;
@ -718,7 +718,8 @@ begin
inherited Destroy;
end;
procedure TLazSynDisplayFold.SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx);
procedure TLazSynDisplayFold.SetHighlighterTokensLine(ALine: TLineIdx; out
ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer);
begin
FLineState := 0;
CurrentTokenLine := ALine;
@ -735,7 +736,7 @@ begin
FFoldView.MarkupInfoHiddenCodeLine.SetFrameBoundsLog(1, MaxInt, 0);
end;
inherited SetHighlighterTokensLine(FFoldView.InternViewToTextIndex(ALine), ARealLine);
inherited SetHighlighterTokensLine(FFoldView.InternViewToTextIndex(ALine), ARealLine, AStartBytePos, ALineByteLen);
end;
function TLazSynDisplayFold.GetNextHighlighterToken(out ATokenInfo: TLazSynDisplayTokenInfo): Boolean;

View File

@ -126,7 +126,7 @@ type
FAtLineStart: Boolean;
public
constructor Create(ABuffer: TSynEditStringList);
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx); override;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer); override;
function GetNextHighlighterToken(out ATokenInfo: TLazSynDisplayTokenInfo): Boolean; override;
function GetDrawDividerInfo: TSynDividerDrawConfigSetting; override;
function GetLinesCount: Integer; override;
@ -363,10 +363,13 @@ begin
FBuffer := ABuffer;
end;
procedure TLazSynDisplayBuffer.SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx);
procedure TLazSynDisplayBuffer.SetHighlighterTokensLine(ALine: TLineIdx; out
ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer);
begin
CurrentTokenLine := ALine;
ARealLine := ALine;
AStartBytePos := 1;
ALineByteLen := Length(FBuffer[ARealLine]);
FAtLineStart := True;
end;

View File

@ -48,7 +48,7 @@ type
public
constructor Create(ATrimer: TSynEditStringTrimmingList);
procedure FinishHighlighterTokens; override;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx); override;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer); override;
function GetNextHighlighterToken(out ATokenInfo: TLazSynDisplayTokenInfo): Boolean; override;
end;
@ -321,11 +321,15 @@ begin
FTempLineStringForPChar := '';
end;
procedure TLazSynDisplayTrim.SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx);
procedure TLazSynDisplayTrim.SetHighlighterTokensLine(ALine: TLineIdx; out
ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer);
begin
CurrentTokenLine := ALine;
FAtLineStart := True;
inherited SetHighlighterTokensLine(ALine, ARealLine);
if (CurrentTokenHighlighter = nil) and (FTrimer.Spaces(CurrentTokenLine) <> '') then begin
ALineByteLen := Length(FTrimer[CurrentTokenLine]);
end;
inherited SetHighlighterTokensLine(ALine, ARealLine, AStartBytePos, ALineByteLen);
end;
function TLazSynDisplayTrim.GetNextHighlighterToken(out ATokenInfo: TLazSynDisplayTokenInfo): Boolean;

View File

@ -79,7 +79,7 @@ type
procedure SetLineMap(Index: Integer; AValue: Integer);
procedure SetLineMapCount(AValue: integer);
public
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx); override;
procedure SetHighlighterTokensLine(ALine: TLineIdx; out ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer); override;
function GetLinesCount: Integer; override;
function TextToViewIndex(AIndex: TLineIdx): TLineRange; override;
function ViewToTextIndex(AIndex: TLineIdx): TLineIdx; override;
@ -1206,11 +1206,11 @@ begin
SetLength(FLineMap, AValue);
end;
procedure TSourceLazSynTopInfoView.SetHighlighterTokensLine(ALine: TLineIdx; out
ARealLine: TLineIdx);
procedure TSourceLazSynTopInfoView.SetHighlighterTokensLine(ALine: TLineIdx;
out ARealLine: TLineIdx; out AStartBytePos, ALineByteLen: Integer);
begin
CurrentTokenLine := ALine;
inherited SetHighlighterTokensLine(FLineMap[ALine], ARealLine);
inherited SetHighlighterTokensLine(FLineMap[ALine], ARealLine, AStartBytePos, ALineByteLen);
end;
function TSourceLazSynTopInfoView.GetLinesCount: Integer;