mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 18:39:10 +02:00
started position highlighter
git-svn-id: trunk@3683 -
This commit is contained in:
parent
10e045f319
commit
9a4f7c76ac
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -71,6 +71,7 @@ components/synedit/synhighlighterlfm.pas svneol=native#text/pascal
|
|||||||
components/synedit/synhighlightermulti.pas svneol=native#text/pascal
|
components/synedit/synhighlightermulti.pas svneol=native#text/pascal
|
||||||
components/synedit/synhighlighterpas.pp svneol=native#text/pascal
|
components/synedit/synhighlighterpas.pp svneol=native#text/pascal
|
||||||
components/synedit/synhighlighterperl.pas svneol=native#text/pascal
|
components/synedit/synhighlighterperl.pas svneol=native#text/pascal
|
||||||
|
components/synedit/synhighlighterposition.pas svneol=native#text/pascal
|
||||||
components/synedit/synhighlighterxml.pas svneol=native#text/pascal
|
components/synedit/synhighlighterxml.pas svneol=native#text/pascal
|
||||||
components/synedit/synmacrorecorder.pas svneol=native#text/pascal
|
components/synedit/synmacrorecorder.pas svneol=native#text/pascal
|
||||||
components/synedit/synmemo.pas svneol=native#text/pascal
|
components/synedit/synmemo.pas svneol=native#text/pascal
|
||||||
|
@ -209,7 +209,7 @@ endif
|
|||||||
endif
|
endif
|
||||||
export LCL_PLATFORM
|
export LCL_PLATFORM
|
||||||
override TARGET_UNITS+=allunits
|
override TARGET_UNITS+=allunits
|
||||||
override TARGET_IMPLICITUNITS+=syntextdrawer syneditkeycmds synedittypes syneditstrconst syneditsearch syneditmiscprocs syneditmiscclasses synedittextbuffer synedit synedithighlighter synhighlightermulti synregexpr synexporthtml syneditexport synmemo synmacrorecorder syneditplugins syneditregexsearch
|
override TARGET_IMPLICITUNITS+=syntextdrawer syneditkeycmds synedittypes syneditstrconst syneditsearch syneditmiscprocs syneditmiscclasses synedittextbuffer synedit synedithighlighter synhighlightermulti synregexpr synexporthtml syneditexport synmemo synmacrorecorder syneditplugins syneditregexsearch synhighlighterposition
|
||||||
override CLEAN_FILES+=$(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
|
override CLEAN_FILES+=$(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
|
||||||
override COMPILER_OPTIONS+=-gl
|
override COMPILER_OPTIONS+=-gl
|
||||||
override COMPILER_UNITDIR+=../../lcl/units/$(LCL_PLATFORM) ../../lcl/units .
|
override COMPILER_UNITDIR+=../../lcl/units/$(LCL_PLATFORM) ../../lcl/units .
|
||||||
|
@ -17,7 +17,8 @@ units=allunits
|
|||||||
implicitunits=syntextdrawer syneditkeycmds synedittypes syneditstrconst \
|
implicitunits=syntextdrawer syneditkeycmds synedittypes syneditstrconst \
|
||||||
syneditsearch syneditmiscprocs syneditmiscclasses synedittextbuffer \
|
syneditsearch syneditmiscprocs syneditmiscclasses synedittextbuffer \
|
||||||
synedit synedithighlighter synhighlightermulti synregexpr synexporthtml \
|
synedit synedithighlighter synhighlightermulti synregexpr synexporthtml \
|
||||||
syneditexport synmemo synmacrorecorder syneditplugins syneditregexsearch
|
syneditexport synmemo synmacrorecorder syneditplugins syneditregexsearch \
|
||||||
|
synhighlighterposition
|
||||||
|
|
||||||
[require]
|
[require]
|
||||||
packages=fcl regexpr
|
packages=fcl regexpr
|
||||||
|
@ -20,7 +20,7 @@ uses
|
|||||||
SynEditAutoComplete, SynhighlighterHTML, SynhighlighterCPP, SynHighlighterXML,
|
SynEditAutoComplete, SynhighlighterHTML, SynhighlighterCPP, SynHighlighterXML,
|
||||||
SynHighlighterLFM, SynHighlighterPerl, SynHighlighterMulti, SynRegExpr,
|
SynHighlighterLFM, SynHighlighterPerl, SynHighlighterMulti, SynRegExpr,
|
||||||
SynEditExport, SynExportHTML, SynMemo, SynMacroRecorder, SynEditPlugins,
|
SynEditExport, SynExportHTML, SynMemo, SynMacroRecorder, SynEditPlugins,
|
||||||
SynEditRegexSearch;
|
SynEditRegexSearch, SynHighlighterPosition;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -29,6 +29,9 @@ end.
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.14 2002/12/02 16:38:13 mattias
|
||||||
|
started position highlighter
|
||||||
|
|
||||||
Revision 1.13 2002/11/29 19:59:40 mattias
|
Revision 1.13 2002/11/29 19:59:40 mattias
|
||||||
added syneditregexsearch.pas
|
added syneditregexsearch.pas
|
||||||
|
|
||||||
|
317
components/synedit/synhighlighterposition.pas
Normal file
317
components/synedit/synhighlighterposition.pas
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
{-------------------------------------------------------------------------------
|
||||||
|
The contents of this file are subject to the Mozilla Public License
|
||||||
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
http://www.mozilla.org/MPL/
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
||||||
|
the specific language governing rights and limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
This is a basic synedit highlighter that does not pasre text to create the
|
||||||
|
attributes, but stores a list of ranges.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------}
|
||||||
|
unit SynHighlighterPosition;
|
||||||
|
|
||||||
|
{$I synedit.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, SynEditStrConst, SynEditTypes, SynEditHighlighter;
|
||||||
|
|
||||||
|
const
|
||||||
|
tkNone = 0;
|
||||||
|
tkText = 1;
|
||||||
|
|
||||||
|
MaxColumns = 100000;
|
||||||
|
|
||||||
|
type
|
||||||
|
TtkTokenKind = integer;
|
||||||
|
|
||||||
|
TPositionToken = record
|
||||||
|
Kind: TtkTokenKind;
|
||||||
|
Column: integer;
|
||||||
|
end;
|
||||||
|
PPositionToken = ^TPositionToken;
|
||||||
|
|
||||||
|
TPositionTokens = record
|
||||||
|
Count: integer;
|
||||||
|
Tokens: array[0..MaxColumns] of TPositionToken;
|
||||||
|
end;
|
||||||
|
PPositionTokens = ^TPositionTokens;
|
||||||
|
|
||||||
|
TSynPositionHighlighter = class(TSynCustomHighlighter)
|
||||||
|
private
|
||||||
|
fLine: string;
|
||||||
|
fLineLen: integer;
|
||||||
|
fLineNumber: Integer;
|
||||||
|
Run: LongInt; // end of current token
|
||||||
|
fTextAttri: TSynHighlighterAttributes;
|
||||||
|
fTokenPos: Integer;
|
||||||
|
FTokenID: integer;
|
||||||
|
FTokenKind: TtkTokenKind;
|
||||||
|
fTokens: TList; // list of PPositionTokens
|
||||||
|
function GetTokens(TheLineNumber: integer): PPositionTokens;
|
||||||
|
protected
|
||||||
|
function GetIdentChars: TSynIdentChars; override;
|
||||||
|
function IsFilterStored: boolean; override; //mh 2000-10-08
|
||||||
|
function GetPositionTokensSize(ItemCount: integer): integer;
|
||||||
|
public
|
||||||
|
{$IFNDEF SYN_CPPB_1} class {$ENDIF}
|
||||||
|
function GetLanguageName: string; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function GetEol: Boolean; override;
|
||||||
|
function GetRange: Pointer; override;
|
||||||
|
function GetToken: string; override;
|
||||||
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
procedure GetTokenEx(var TokenStart: PChar; var TokenLength: integer); override;
|
||||||
|
{$ENDIF}
|
||||||
|
function GetTokenAttribute: TSynHighlighterAttributes; override;
|
||||||
|
function GetTokenKind: integer; override;
|
||||||
|
function GetTokenPos: Integer; override;
|
||||||
|
procedure Next; override;
|
||||||
|
procedure ResetRange; override;
|
||||||
|
procedure SetLine({$IFDEF FPC}const {$ENDIF}NewValue: string;
|
||||||
|
LineNumber:Integer); override;
|
||||||
|
procedure SetRange(Value: Pointer); override;
|
||||||
|
function UseUserSettings(settingIndex: integer): boolean; override;
|
||||||
|
procedure EnumUserSettings(settings: TStrings); override;
|
||||||
|
property IdentChars;
|
||||||
|
public
|
||||||
|
procedure AddToken(Line, Col: integer; TokenKind: TtkTokenKind);
|
||||||
|
procedure ClearTokens(Line: integer);
|
||||||
|
procedure ClearAllTokens;
|
||||||
|
property Tokens[TheLineNumber: integer]: PPositionTokens read GetTokens;
|
||||||
|
published
|
||||||
|
property TextAttri: TSynHighlighterAttributes read fTextAttri write fTextAttri;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{ TSynPositionHighlighter }
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetTokens(TheLineNumber: integer
|
||||||
|
): PPositionTokens;
|
||||||
|
begin
|
||||||
|
if (TheLineNumber>=1) and (TheLineNumber<=fTokens.Count) then
|
||||||
|
Result:=PPositionTokens(fTokens[TheLineNumber-1])
|
||||||
|
else
|
||||||
|
Result:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetIdentChars: TSynIdentChars;
|
||||||
|
begin
|
||||||
|
Result := ['_', '0'..'9', 'a'..'z', 'A'..'Z'];
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.IsFilterStored: boolean;
|
||||||
|
begin
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetPositionTokensSize(ItemCount: integer
|
||||||
|
): integer;
|
||||||
|
begin
|
||||||
|
Result:=SizeOf(integer)+SizeOf(TPositionToken)*ItemCount;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetLanguageName: string;
|
||||||
|
begin
|
||||||
|
Result:='Position based highlighter';
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TSynPositionHighlighter.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
fTokens:=TList.Create;
|
||||||
|
fTextAttri := TSynHighlighterAttributes.Create(SYNS_AttrText);
|
||||||
|
AddAttribute(fTextAttri);
|
||||||
|
SetAttributesOnChange({$IFDEF FPC}@{$ENDIF}DefHighlightChange);
|
||||||
|
|
||||||
|
fDefaultFilter := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TSynPositionHighlighter.Destroy;
|
||||||
|
begin
|
||||||
|
ClearAllTokens;
|
||||||
|
fTokens.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetEol: Boolean;
|
||||||
|
begin
|
||||||
|
Result := fTokenKind = tkNone;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetRange: Pointer;
|
||||||
|
begin
|
||||||
|
Result := Pointer(fLineNumber);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetToken: string;
|
||||||
|
var
|
||||||
|
Len: LongInt;
|
||||||
|
begin
|
||||||
|
Len := Run - fTokenPos;
|
||||||
|
SetLength(Result,Len);
|
||||||
|
System.Move(fLine[fTokenPos],Result[1],Len);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
procedure TSynPositionHighlighter.GetTokenEx(var TokenStart: PChar;
|
||||||
|
var TokenLength: integer);
|
||||||
|
begin
|
||||||
|
TokenLength:=Run-fTokenPos;
|
||||||
|
if TokenLength>0 then begin
|
||||||
|
TokenStart:=@fLine[fTokenPos];
|
||||||
|
end else begin
|
||||||
|
TokenStart:=nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetTokenAttribute: TSynHighlighterAttributes;
|
||||||
|
begin
|
||||||
|
if GetTokenKind=tkText then
|
||||||
|
Result:=fTextAttri
|
||||||
|
else
|
||||||
|
Result:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetTokenKind: integer;
|
||||||
|
begin
|
||||||
|
Result:=fTokenKind;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.GetTokenPos: Integer;
|
||||||
|
begin
|
||||||
|
Result:=fTokenPos-1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.Next;
|
||||||
|
var
|
||||||
|
p: PPositionTokens;
|
||||||
|
begin
|
||||||
|
fTokenPos := Run;
|
||||||
|
if Run>fLineLen then begin
|
||||||
|
fTokenKind := tkNone;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
inc(fTokenID);
|
||||||
|
p:=Tokens[fLineNumber];
|
||||||
|
if (p<>nil) and (p^.Count>fTokenID) then begin
|
||||||
|
Run := p^.Tokens[fTokenID].Column;
|
||||||
|
if Run>fLineLen+1 then
|
||||||
|
Run := fLineLen+1;
|
||||||
|
if Run>fTokenPos then
|
||||||
|
fTokenKind := p^.Tokens[fTokenID].Kind
|
||||||
|
else
|
||||||
|
fTokenKind := tkText;
|
||||||
|
end else begin
|
||||||
|
Run := fLineLen+1;
|
||||||
|
fTokenKind := tkText;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.ResetRange;
|
||||||
|
begin
|
||||||
|
inherited ResetRange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.SetLine(const NewValue: string;
|
||||||
|
LineNumber: Integer);
|
||||||
|
var
|
||||||
|
p: PPositionTokens;
|
||||||
|
begin
|
||||||
|
fLine := NewValue;
|
||||||
|
fLineLen := length(fLine);
|
||||||
|
fLineNumber := LineNumber;
|
||||||
|
FTokenID := 0;
|
||||||
|
fTokenPos := 1;
|
||||||
|
p:=Tokens[fLineNumber];
|
||||||
|
if p<>nil then begin
|
||||||
|
Run := p^.Tokens[0].Column;
|
||||||
|
FTokenKind := p^.Tokens[0].Kind;
|
||||||
|
end else begin
|
||||||
|
Run := fLineLen+1;
|
||||||
|
FTokenKind := tkText;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.SetRange(Value: Pointer);
|
||||||
|
begin
|
||||||
|
inherited SetRange(Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPositionHighlighter.UseUserSettings(settingIndex: integer
|
||||||
|
): boolean;
|
||||||
|
begin
|
||||||
|
Result:=inherited UseUserSettings(settingIndex);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.EnumUserSettings(settings: TStrings);
|
||||||
|
begin
|
||||||
|
inherited EnumUserSettings(settings);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.AddToken(Line, Col: integer;
|
||||||
|
TokenKind: TtkTokenKind);
|
||||||
|
var
|
||||||
|
p: PPositionTokens;
|
||||||
|
TokenIndex, TokenCount: integer;
|
||||||
|
begin
|
||||||
|
// fill up lines
|
||||||
|
while (Line>fTokens.Count) do fTokens.Add(nil);
|
||||||
|
// resize Token array
|
||||||
|
p:=Tokens[Line];
|
||||||
|
TokenIndex:=0;
|
||||||
|
if p<>nil then
|
||||||
|
TokenCount:=p^.Count+1
|
||||||
|
else
|
||||||
|
TokenCount:=1;
|
||||||
|
ReAllocMem(p,GetPositionTokensSize(TokenCount));
|
||||||
|
fTokens[Line-1]:=p;
|
||||||
|
p^.Count:=TokenCount;
|
||||||
|
// insert Token
|
||||||
|
TokenIndex:=TokenCount-1;
|
||||||
|
while (TokenIndex>0)
|
||||||
|
and (p^.Tokens[TokenIndex].Column>Col) do
|
||||||
|
dec(TokenIndex);
|
||||||
|
if TokenIndex<TokenCount-1 then begin
|
||||||
|
System.Move(p^.Tokens[TokenIndex],p^.Tokens[TokenIndex+1],
|
||||||
|
SizeOf(TPositionToken)*(TokenCount-TokenIndex-1));
|
||||||
|
end;
|
||||||
|
with p^.Tokens[TokenIndex] do begin
|
||||||
|
Kind:=TokenKind;
|
||||||
|
Column:=Col;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.ClearTokens(Line: integer);
|
||||||
|
var
|
||||||
|
p: pointer;
|
||||||
|
begin
|
||||||
|
if (Line>=1) and (Line<=fTokens.Count) then begin
|
||||||
|
p:=fTokens[Line-1];
|
||||||
|
FreeMem(p);
|
||||||
|
fTokens[Line-1]:=nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynPositionHighlighter.ClearAllTokens;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:=0 to fTokens.Count-1 do
|
||||||
|
ClearTokens(i);
|
||||||
|
fTokens.Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -212,7 +212,7 @@ type
|
|||||||
|
|
||||||
{ TMenu }
|
{ TMenu }
|
||||||
|
|
||||||
TMenu = class(TComponent) //TWinControl)
|
TMenu = class(TComponent)
|
||||||
private
|
private
|
||||||
FImageChangeLink: TChangeLink;
|
FImageChangeLink: TChangeLink;
|
||||||
FImages: TCustomImageList;
|
FImages: TCustomImageList;
|
||||||
@ -282,7 +282,7 @@ type
|
|||||||
|
|
||||||
|
|
||||||
// will be removed
|
// will be removed
|
||||||
TMenuBar = class(TComponent) //TWinControl)
|
TMenuBar = class(TComponent)
|
||||||
private
|
private
|
||||||
//fMenu: TMenuItem;
|
//fMenu: TMenuItem;
|
||||||
//fOwner : TControl;
|
//fOwner : TControl;
|
||||||
@ -361,6 +361,9 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.35 2002/12/02 16:38:13 mattias
|
||||||
|
started position highlighter
|
||||||
|
|
||||||
Revision 1.34 2002/11/12 10:16:14 lazarus
|
Revision 1.34 2002/11/12 10:16:14 lazarus
|
||||||
MG: fixed TMainMenu creation
|
MG: fixed TMainMenu creation
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user