mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
UPD: SynUniHighlighter - clean up
This commit is contained in:
parent
bb843448fb
commit
bf64771da5
4 changed files with 74 additions and 379 deletions
|
|
@ -63,7 +63,7 @@ type
|
|||
Name: string; Extensions: string; Other: Boolean
|
||||
end;
|
||||
|
||||
TSynInfo = class //Vitalik 2004
|
||||
TSynInfo = class
|
||||
Author: TAuthorInfo;
|
||||
Version: TVerInfo;
|
||||
General: THighInfo;
|
||||
|
|
@ -77,15 +77,15 @@ type
|
|||
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload;
|
||||
end;
|
||||
|
||||
TSynEditProperties = class //Vitalik 2004
|
||||
TSynEditProperties = class
|
||||
|
||||
end;
|
||||
|
||||
TSymbStartType = (stUnspecified, stAny, stTerm); //Vitalik 2004
|
||||
TSymbStartType = (stUnspecified, stAny, stTerm);
|
||||
TSymbBrakeType = (btUnspecified, btAny, btTerm);
|
||||
TSymbStartLine = (slNotFirst, slFirst, slFirstNonSpace); //Vitalik 2004
|
||||
TSymbStartLine = (slNotFirst, slFirst, slFirstNonSpace);
|
||||
|
||||
TStreamWriter = class //Vitalik 2004
|
||||
TStreamWriter = class
|
||||
Stream: TStream;
|
||||
constructor Create(aStream: TStream);
|
||||
procedure WriteString(const Str: string);
|
||||
|
|
@ -95,15 +95,13 @@ type
|
|||
procedure WriteBoolParam(Key: string; Value, Default: boolean; CloseTag: string = '');
|
||||
end;
|
||||
|
||||
TSynAttributes = class (TSynHighlighterAttributes) //Vitalik 2004
|
||||
TSynAttributes = class (TSynHighlighterAttributes)
|
||||
public
|
||||
// UseStyle: boolean;
|
||||
OldColorForeground: TColor;
|
||||
OldColorBackground: TColor;
|
||||
ParentForeground: boolean;
|
||||
ParentBackground: boolean;
|
||||
constructor Create(Name: string);
|
||||
// destructor Destroy(); override;
|
||||
function ToString: String; override;
|
||||
function GetHashCode: PtrInt; override;
|
||||
procedure LoadFromString(Value: string);
|
||||
|
|
@ -116,9 +114,9 @@ type
|
|||
public
|
||||
Symbol: string;
|
||||
fOpenRule: TAbstractRule;
|
||||
StartType: TSymbStartType; //Vitalik 2004
|
||||
StartType: TSymbStartType;
|
||||
BrakeType: TSymbBrakeType;
|
||||
StartLine: TSymbStartLine; //Vitalik 2004
|
||||
StartLine: TSymbStartLine;
|
||||
Attributes: TSynHighlighterAttributes;
|
||||
constructor Create(st: string; Attribs: TSynHighlighterAttributes); virtual;
|
||||
destructor Destroy(); override;
|
||||
|
|
@ -127,7 +125,7 @@ type
|
|||
TSymbolNode = class
|
||||
ch: char;
|
||||
BrakeType: TSymbBrakeType;
|
||||
StartType: TSymbStartType; //Vitalik 2004
|
||||
StartType: TSymbStartType;
|
||||
NextSymbs: TSymbolList;
|
||||
tkSynSymbol: TSynSymbol;
|
||||
constructor Create(AC: char; SynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); overload; virtual;
|
||||
|
|
@ -136,7 +134,7 @@ type
|
|||
end;
|
||||
|
||||
TSymbolList = class
|
||||
SymbList: TList; //Vitalik 2004
|
||||
SymbList: TList;
|
||||
procedure AddSymbol(symb: TSymbolNode);
|
||||
procedure SetSymbolNode(Index: Integer; Value: TSymbolNode);
|
||||
function FindSymbol(ch: char): TSymbolNode;
|
||||
|
|
@ -153,8 +151,8 @@ type
|
|||
FileName: string;
|
||||
constructor Create();
|
||||
destructor Destroy(); override;
|
||||
function GetStyle(const Name: string): {TSynHighlighter}TSynAttributes;
|
||||
function GetStyleDef(const Name: string; const Def: {TSynHighlighter}TSynAttributes): {TSynHighlighter}TSynAttributes;
|
||||
function GetStyle(const Name: string): TSynAttributes;
|
||||
function GetStyleDef(const Name: string; const Def: TSynAttributes): TSynAttributes;
|
||||
procedure AddStyle(Name: string; Foreground, Background: TColor; FontStyle: TFontStyles);
|
||||
procedure ListStylesNames(const AList: TStrings);
|
||||
function GetStylesAsXML(): string;
|
||||
|
|
@ -162,12 +160,12 @@ type
|
|||
procedure Save();
|
||||
end;
|
||||
|
||||
TAbstractRule = class //Vitalik 2004
|
||||
TAbstractRule = class
|
||||
Enabled: boolean;
|
||||
constructor Create();
|
||||
end;
|
||||
|
||||
TSynRule = class(TAbstractRule) //Vitalik 2004
|
||||
TSynRule = class(TAbstractRule)
|
||||
public
|
||||
Ind: integer; //temp
|
||||
Name: string;
|
||||
|
|
@ -455,38 +453,12 @@ end;
|
|||
WriteString(Format('%s<%s>%s</%s>'+EOL, [Indent(Ind), Name, GetValidValue(Value), Name]));
|
||||
end;
|
||||
|
||||
{ procedure OpenTag(Ind: integer; Name: string; Param: string = ''; ParamValue: string = '');
|
||||
begin
|
||||
if Param = '' then
|
||||
WriteString(Format('%s<%s>', [Indent(Ind), Name]))
|
||||
else
|
||||
WriteString(Format('%s<%s %s="%s">', [Indent(Ind), Name, Param, GetValidValue(ParamValue)]));
|
||||
end;}
|
||||
|
||||
procedure TStreamWriter.WriteTag(Ind: integer; Name: string; EndLine: boolean = False);
|
||||
begin
|
||||
WriteString(Format('%s<%s', [Indent(Ind), Name]));
|
||||
if EndLine then WriteString('>' + EOL);
|
||||
end;
|
||||
|
||||
{ procedure SaveColor(MainTag: string; Ind, Fore, Back: integer; Style: TFontStyles; PFore, PBack: boolean);
|
||||
procedure InsertTagBool(Ind: integer; Name: string; Value: Boolean);
|
||||
begin
|
||||
if Value then
|
||||
WriteString(Format('%s<%s>True</%s>', [Indent(Ind), Name, Name]))
|
||||
else
|
||||
WriteString(Format('%s<%s>False</%s>', [Indent(Ind), Name, Name]))
|
||||
end;
|
||||
begin
|
||||
OpenTag(Ind, MainTag);
|
||||
InsertTag(Ind+1, 'Back', Inttostr(Back));
|
||||
InsertTag(Ind+1, 'Fore', Inttostr(Fore));
|
||||
InsertTag(Ind+1, 'Style', Fs2String(Style));
|
||||
InsertTagBool(Ind+1, 'ParentForeground', PFore);
|
||||
InsertTagBool(Ind+1, 'ParentBackground', PBack);
|
||||
OpenTag(Ind, '/'+MainTag);
|
||||
end;}
|
||||
|
||||
procedure TStreamWriter.WriteParam(Key, Value: string; CloseTag: string = '');
|
||||
begin
|
||||
WriteString(Format(' %s="%s"', [Key, GetValidValue(Value)]));
|
||||
|
|
@ -502,9 +474,7 @@ end;
|
|||
//==== TAttributes ===========================================================
|
||||
constructor TSynAttributes.Create(Name: String);
|
||||
begin
|
||||
// Std := TSynHighlighterAttributes.Create(SYNS_AttrDefaultPackage);
|
||||
inherited Create(Name{SYNS_AttrDefaultPackage});
|
||||
// UseStyle := False;
|
||||
end;
|
||||
|
||||
function TSynAttributes.ToString: String;
|
||||
|
|
@ -527,16 +497,6 @@ begin
|
|||
Result:= PtrInt(CRC32(ACrc, @ParentBackground, SizeOf(Boolean)));
|
||||
end;
|
||||
|
||||
{destructor TSynAttributes.Destroy;
|
||||
//var xml: TXMLParser;
|
||||
begin
|
||||
// if not UseStyle then
|
||||
//Std.Free;
|
||||
// xml := TXMLParser.Create;
|
||||
// xml.Standalone
|
||||
inherited;
|
||||
end;
|
||||
}
|
||||
procedure TSynAttributes.LoadFromString(Value: string);
|
||||
begin
|
||||
ParentForeground := False;
|
||||
|
|
@ -548,14 +508,6 @@ begin
|
|||
ParentForeground := LowerCase(Copy(Value, pos(';',Value)+1, pos(':',Value)-pos(';',Value)-1)) = 'true';
|
||||
ParentBackground := LowerCase(Copy(Value, pos(':',Value)+1, pos('.',Value)-pos(':',Value)-1)) = 'true';
|
||||
Style := StrToFontStyle(Copy(Value, pos('.',Value)+1, Length(Value)-pos('.',Value)));
|
||||
// '12345,0;true:false.'
|
||||
{ Std.Background := StrToIntDef(Value, $FFFFFF);
|
||||
OldColorBackground := Std.Background;
|
||||
Std.Foreground := StrToIntDef(Value, 0);
|
||||
OldColorForeground := Std.Foreground;
|
||||
Std.Style := String2Fs(Value)
|
||||
ParentForeground := LoweValue = 'true'
|
||||
ParentBackground := LowerValue = 'true';}
|
||||
end;
|
||||
|
||||
procedure TSynAttributes.SaveToStream(StreamWriter: TStreamWriter);
|
||||
|
|
@ -666,115 +618,19 @@ begin
|
|||
end;
|
||||
|
||||
//==== TSynRule ==============================================================
|
||||
{function TSynRule.GetAttribs: TAttributes;
|
||||
begin
|
||||
if (Ind < 0) or (Ind >= AttribsList.Count) then
|
||||
raise Exception.CreateFmt ('Invalid index: %d', [Ind]);
|
||||
Result := TAttributes(AttribsList[Ind]);
|
||||
end;
|
||||
|
||||
function TSynRule.GetAttribsByIndex(Index: integer): TAttributes;
|
||||
begin
|
||||
if (Index < 0) or (Index >= AttribsList.Count) then
|
||||
raise Exception.CreateFmt ('Invalid index: %d', [Ind]);
|
||||
Result := TAttributes(AttribsList[Index]);
|
||||
end;
|
||||
}
|
||||
constructor TSynRule.Create;
|
||||
begin
|
||||
inherited;
|
||||
ind := -1;
|
||||
Attribs := TSynAttributes.Create('unknown');
|
||||
// AttribsList := TList.Create;
|
||||
end;
|
||||
|
||||
destructor TSynRule.Destroy;
|
||||
begin
|
||||
// FreeList(AttribsList);
|
||||
Attribs.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{function TSynRule.AddAttribute(): integer;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
ind := AttribsList.Add(TAttributes.Create);
|
||||
Attribs.ParentForeground := True;
|
||||
Attribs.ParentBackground := True;
|
||||
Attribs.Std.Foreground := clBlack;
|
||||
Attribs.Std.Background := clWhite;
|
||||
Attribs.OldColorForeground := Attribs.Std.Foreground;
|
||||
Attribs.OldColorBackground := Attribs.Std.Background;
|
||||
Attribs.Std.Style := [];
|
||||
Result := ind;
|
||||
|
||||
if self is TSynRange then
|
||||
with self as TSynRange do begin
|
||||
for i := 0 to RangeCount-1 do
|
||||
Ranges[i].AddAttribute();
|
||||
for i := 0 to KeyListCount-1 do
|
||||
KeyLists[i].AddAttribute();
|
||||
for i := 0 to SetCount-1 do
|
||||
Sets[i].AddAttribute();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynRule.DeleteAttributes(Index: integer);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
AttribsList.Delete(Index);
|
||||
if AttribsList.Count = Index then
|
||||
ind := Index-1
|
||||
else
|
||||
ind := Index;
|
||||
if self is TSynRange then
|
||||
with self as TSynRange do begin
|
||||
for i := 0 to RangeCount-1 do
|
||||
Ranges[i].DeleteAttributes(Index);
|
||||
for i := 0 to KeyListCount-1 do
|
||||
KeyLists[i].DeleteAttributes(Index);
|
||||
for i := 0 to SetCount-1 do
|
||||
Sets[i].DeleteAttributes(Index);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynRule.ClearAttributes();
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
ClearList(AttribsList);
|
||||
ind := -1;
|
||||
|
||||
if self is TSynRange then
|
||||
with self as TSynRange do begin
|
||||
for i := 0 to RangeCount-1 do
|
||||
Ranges[i].ClearAttributes();
|
||||
for i := 0 to KeyListCount-1 do
|
||||
KeyLists[i].ClearAttributes();
|
||||
for i := 0 to SetCount-1 do
|
||||
Sets[i].ClearAttributes();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynRule.SetAttributesIndex(Index: integer);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
ind := Index;
|
||||
|
||||
if self is TSynRange then
|
||||
with self as TSynRange do begin
|
||||
for i := 0 to RangeCount-1 do
|
||||
Ranges[i].SetAttributesIndex(Index);
|
||||
for i := 0 to KeyListCount-1 do
|
||||
KeyLists[i].SetAttributesIndex(Index);
|
||||
for i := 0 to SetCount-1 do
|
||||
Sets[i].SetAttributesIndex(Index);
|
||||
end;
|
||||
end;}
|
||||
|
||||
function TSynRule.GetAsStream: TMemoryStream;
|
||||
begin
|
||||
Result := TMemoryStream.Create;
|
||||
|
|
@ -840,20 +696,20 @@ begin
|
|||
inherited;
|
||||
end;
|
||||
|
||||
function TSynUniStyles.GetStyle(const Name: string): {TSynHighlighter}TSynAttributes;
|
||||
function TSynUniStyles.GetStyle(const Name: string): TSynAttributes;
|
||||
begin
|
||||
Result := GetStyleDef(Name, nil);
|
||||
end;
|
||||
|
||||
function TSynUniStyles.GetStyleDef(const Name: string;
|
||||
const Def: {TSynHighlighter}TSynAttributes): {TSynHighlighter}TSynAttributes;
|
||||
const Def: TSynAttributes): TSynAttributes;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
Result := Def;
|
||||
for i := 0 to Self.Count-1 do
|
||||
if SameText({TSynHighlighter}TSynAttributes(Self.Items[i]).Name, Name) then begin
|
||||
Result := {TSynHighlighter}TSynAttributes(Self.Items[i]);
|
||||
if SameText(TSynAttributes(Self.Items[i]).Name, Name) then begin
|
||||
Result := TSynAttributes(Self.Items[i]);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -861,9 +717,9 @@ end;
|
|||
procedure TSynUniStyles.AddStyle(Name: string; Foreground, Background: TColor;
|
||||
FontStyle: TFontStyles);
|
||||
var
|
||||
Atr: {TSynHighlighter}TSynAttributes;
|
||||
Atr: TSynAttributes;
|
||||
begin
|
||||
Atr := {TSynHighlighter}TSynAttributes.Create(Name);
|
||||
Atr := TSynAttributes.Create(Name);
|
||||
Atr.Foreground := Foreground;
|
||||
Atr.Background := Background;
|
||||
Atr.Style := FontStyle;
|
||||
|
|
@ -878,7 +734,7 @@ begin
|
|||
try
|
||||
aList.Clear;
|
||||
for i := 0 to Self.Count-1 do
|
||||
aList.Add({TSynHighlighter}TSynAttributes(Self.Items[i]).Name);
|
||||
aList.Add(TSynAttributes(Self.Items[i]).Name);
|
||||
finally
|
||||
aList.EndUpdate;
|
||||
end;
|
||||
|
|
@ -892,7 +748,7 @@ begin
|
|||
Result := '<Schemes>'#13#10;
|
||||
Result := Result + ' <Scheme Name="Default">'#13#10;
|
||||
for i := 0 to Self.Count-1 do
|
||||
with {TSynHighlighter}TSynAttributes(Self.Items[I]) do
|
||||
with TSynAttributes(Self.Items[I]) do
|
||||
Result := Result + ' <Style Name="' + Name +
|
||||
'" Fg="' + IntToStr(Foreground) +
|
||||
'" Bg="' + IntToStr(Background) +
|
||||
|
|
|
|||
|
|
@ -59,8 +59,6 @@ type
|
|||
private
|
||||
FFileName: String;
|
||||
|
||||
procedure ReadSyntax(Reader: TReader);
|
||||
procedure WriteSyntax(Writer: TWriter);
|
||||
protected
|
||||
fMainRules: TSynRange;
|
||||
fEol: boolean;
|
||||
|
|
@ -75,15 +73,10 @@ type
|
|||
SymbolList: array[char] of TAbstractSymbol; //???
|
||||
fPrepared: boolean;
|
||||
|
||||
fSchemes: TStringList; //Vitalik 2004
|
||||
fSchemeIndex: integer; //Vitalik 2004
|
||||
fSchemes: TStringList;
|
||||
fSchemeIndex: integer;
|
||||
|
||||
fImportFormats: TList;
|
||||
|
||||
procedure SpaceProc;
|
||||
procedure NullProc;
|
||||
function GetIdentChars: TSynIdentChars; override;
|
||||
procedure DefineProperties(Filer: TFiler); override;
|
||||
function GetSampleSource: string; override;
|
||||
procedure SetSampleSource(Value: string); override;
|
||||
function GetDefaultFilter: string; override;
|
||||
|
|
@ -102,7 +95,6 @@ type
|
|||
function GetToken: string; override; {Abstract}
|
||||
procedure GetTokenEx(out TokenStart: PChar; out TokenLength: integer); override; {Abstract}
|
||||
function GetTokenAttribute: TSynHighlighterAttributes; override; {Abstract}
|
||||
function GetTokenID: Integer;
|
||||
function GetTokenKind: integer; override; {Abstract}
|
||||
function GetTokenPos: Integer; override; {Abstract}
|
||||
function IsKeyword(const AKeyword: string): boolean; override;
|
||||
|
|
@ -139,8 +131,8 @@ type
|
|||
SchemeName: string;
|
||||
property FileName: String read FFileName;
|
||||
property MainRules: TSynRange read fMainRules;
|
||||
property SchemesList: TStringList read fSchemes write fSchemes; //Vitalik 2004
|
||||
property SchemeIndex: integer read fSchemeIndex write fSchemeIndex; //Vitalik 2004
|
||||
property SchemesList: TStringList read fSchemes write fSchemes;
|
||||
property SchemeIndex: integer read fSchemeIndex write fSchemeIndex;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
|
@ -148,13 +140,8 @@ implementation
|
|||
uses
|
||||
LazUTF8Classes, Laz2_XMLRead;
|
||||
|
||||
const
|
||||
SYNS_AttrTest = 'Test';
|
||||
|
||||
//==== TSynUniSyn ============================================================
|
||||
constructor TSynUniSyn.Create(AOwner: TComponent);
|
||||
var
|
||||
fTestAttri: TSynHighlighterAttributes;
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
Info := TSynInfo.Create;
|
||||
|
|
@ -162,13 +149,6 @@ begin
|
|||
Info.Sample := TStringList.Create;
|
||||
fPrepared := False;
|
||||
|
||||
//Вот так вот нужно все атрибуты будет добавлять! Потому как нужно еще и обработать [Underline + Italic]
|
||||
fTestAttri := TSynHighLighterAttributes.Create(SYNS_AttrTest);
|
||||
fTestAttri.Style := [fsUnderline, fsItalic];
|
||||
fTestAttri.Foreground := clBlue;
|
||||
fTestAttri.Background := clSilver;
|
||||
AddAttribute(fTestAttri);
|
||||
|
||||
fSchemes := TStringList.Create;
|
||||
fSchemeIndex := -1;
|
||||
|
||||
|
|
@ -177,8 +157,6 @@ begin
|
|||
fEol := False;
|
||||
fPrEol := False;
|
||||
fCurrentRule := MainRules;
|
||||
// AddNewScheme('Noname');
|
||||
fImportFormats := TList.Create;
|
||||
end;
|
||||
|
||||
destructor TSynUniSyn.Destroy;
|
||||
|
|
@ -189,7 +167,6 @@ begin
|
|||
Info.Sample.Free;
|
||||
Info.Free;
|
||||
fSchemes.Free;
|
||||
fImportFormats.Free;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
|
|
@ -277,17 +254,10 @@ begin
|
|||
fCurrentRule.HasNodeAnyStart[char(i)] := HaveNodeAnyStart(TSymbols(SymbolList[fCurrentRule.CaseFunct(char(i))]).HeadNode);
|
||||
(*}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}*)
|
||||
end;
|
||||
{begin} //Vitalik 2004
|
||||
{was:
|
||||
fTrueLine := PChar(NewValue);
|
||||
l := Length(NewValue);
|
||||
ReallocMem(fLine, l+1);
|
||||
for i := 0 to l do
|
||||
fLine[i] := fCurrentRule.CaseFunct(fTrueLine[i]);
|
||||
}
|
||||
|
||||
fTrueLine := NewValue;
|
||||
fLine := PChar(NewValue); //: Current string of SynEdit
|
||||
{end} //Vitalik 2004
|
||||
|
||||
Run := 0; //: Set Position of "parser" at the first char of string
|
||||
fTokenPos := 0; //: Set Position of current token at the first char of string
|
||||
fLineNumber := LineNumber; //: Number of current line in SynEdit
|
||||
|
|
@ -340,7 +310,7 @@ begin
|
|||
end;
|
||||
|
||||
//: if we can't find token from current position:
|
||||
if not fCurrentRule.SymbolList[fCurrentRule.CaseFunct(fLine[Run])].GetToken(fCurrentRule, fLine, Run, fCurrToken) then //Vitalik 2004
|
||||
if not fCurrentRule.SymbolList[fCurrentRule.CaseFunct(fLine[Run])].GetToken(fCurrentRule, fLine, Run, fCurrToken) then
|
||||
begin
|
||||
fCurrToken := fCurrentRule.fDefaultSynSymbol; //: Current token is just default symbol
|
||||
while not ((fLine[Run] in fCurrentRule.fTermSymbols) or fCurrentRule.HasNodeAnyStart[fCurrentRule.CaseFunct(fLine[Run])]) do
|
||||
|
|
@ -400,14 +370,6 @@ begin
|
|||
|
||||
end;
|
||||
|
||||
procedure TSynUniSyn.SpaceProc;
|
||||
//! Never used!!! SSS
|
||||
begin
|
||||
repeat
|
||||
Inc(Run);
|
||||
until (fLine[Run] > #32) or (fLine[Run] in [#0, #10, #13]);
|
||||
end;
|
||||
|
||||
function TSynUniSyn.IsKeyword(const AKeyword: string): boolean;
|
||||
//! Never used!!!! ??? SSS
|
||||
begin
|
||||
|
|
@ -455,21 +417,10 @@ begin
|
|||
TokenStart := PAnsiChar(fTrueLine) + fTokenPos;
|
||||
end;
|
||||
|
||||
function TSynUniSyn.GetTokenID: Integer;
|
||||
//: Return ID of current token
|
||||
//: ??? Оставлена для непонятной совместимости? Нигде же не вызывается и не используется!
|
||||
//: Можено что-нить с ней сделать...
|
||||
begin
|
||||
Result := 1; //# CODE_REVIEW fCurrToken.ID;
|
||||
end;
|
||||
|
||||
function TSynUniSyn.GetTokenAttribute: TSynHighlighterAttributes;
|
||||
//: Returns attribute of current token
|
||||
begin
|
||||
// fCurrToken.Attr.Style := fCurrToken.Attr.Style + [fsUnderline];
|
||||
// if GetEol then
|
||||
// Result := nil
|
||||
Result := fCurrToken.Attributes;
|
||||
Result := fCurrToken.Attributes;
|
||||
end;
|
||||
|
||||
function TSynUniSyn.GetTokenKind: integer;
|
||||
|
|
@ -596,61 +547,12 @@ begin
|
|||
MainRules.HasNodeAnyStart[char(i)] := HaveNodeAnyStart(TSymbols(MainRules.SymbolList[MainRules.CaseFunct(char(i))]).HeadNode);
|
||||
end;
|
||||
|
||||
procedure TSynUniSyn.NullProc;
|
||||
//: Never used!!! SSS ???
|
||||
begin
|
||||
// fEol := True;
|
||||
end;
|
||||
|
||||
procedure TSynUniSyn.Reset;
|
||||
//: Reset of SynUniSyn is Reset of SynUniSyn.MainRules
|
||||
begin
|
||||
MainRules.Reset;
|
||||
end;
|
||||
|
||||
procedure TSynUniSyn.DefineProperties(Filer: TFiler);
|
||||
//! Never used ????
|
||||
var
|
||||
iHasData: boolean;
|
||||
begin
|
||||
inherited;
|
||||
if Filer.Ancestor <> nil then
|
||||
iHasData := True
|
||||
else
|
||||
iHasData := MainRules.RangeCount > 0;
|
||||
Filer.DefineProperty( 'Syntax', ReadSyntax, WriteSyntax, {True}iHasData );
|
||||
end;
|
||||
|
||||
procedure TSynUniSyn.ReadSyntax(Reader: TReader);
|
||||
//: This is some metods for reading ??? ??? ???
|
||||
var
|
||||
iBuffer: TStringStream;
|
||||
begin
|
||||
// iBuffer := nil;
|
||||
// try
|
||||
iBuffer := TStringStream.Create( Reader.ReadString );
|
||||
iBuffer.Position := 0;
|
||||
LoadFromStream( iBuffer );
|
||||
// finally
|
||||
// iBuffer.Free;
|
||||
// end;
|
||||
end;
|
||||
|
||||
procedure TSynUniSyn.WriteSyntax(Writer: TWriter);
|
||||
//: This is some metods for writing ??? ??? ???
|
||||
var
|
||||
iBuffer: TStringStream;
|
||||
begin
|
||||
iBuffer := TStringStream.Create( '' );
|
||||
try
|
||||
SaveToStream( iBuffer );
|
||||
iBuffer.Position := 0;
|
||||
Writer.WriteString( iBuffer.DataString );
|
||||
finally
|
||||
iBuffer.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSynUniSyn.GetIdentChars: TSynIdentChars;
|
||||
//: Return IdentChars - hmm... What for ??? word selection?
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ uses
|
|||
|
||||
type
|
||||
TSynRange = class;
|
||||
TSynSet = class; //Vitalik 2004
|
||||
TSynSet = class;
|
||||
|
||||
TAbstractSymbol = class
|
||||
function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; virtual; abstract;
|
||||
|
|
@ -47,13 +47,13 @@ type
|
|||
|
||||
TSymbols = class(TAbstractSymbol)
|
||||
HeadNode: TSymbolNode;
|
||||
SynSets: TList; //Vitalik 2004
|
||||
SynSets: TList;
|
||||
function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; override;
|
||||
function FindSymbol(st: string): TSymbolNode;
|
||||
procedure AddSymbol(st: string; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType);
|
||||
procedure AddSet(SymbolSet: TSynSet); //Vitalik 2004
|
||||
procedure AddSet(SymbolSet: TSynSet);
|
||||
constructor Create(ch: char; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); reintroduce; overload; virtual;
|
||||
constructor Create(SymbolSet: TSynSet); reintroduce; overload; virtual; //Vitalik 2004
|
||||
constructor Create(SymbolSet: TSynSet); reintroduce; overload; virtual;
|
||||
destructor Destroy(); override;
|
||||
end;
|
||||
|
||||
|
|
@ -75,16 +75,16 @@ type
|
|||
KeyList: TStringList;
|
||||
constructor Create(st: string = '');
|
||||
destructor Destroy(); override;
|
||||
procedure LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer); //Vitalik 2004
|
||||
procedure LoadFromXml(xml: TDOMNode); override; //Vitalik 2004
|
||||
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; //Vitalik 2004
|
||||
procedure LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer);
|
||||
procedure LoadFromXml(xml: TDOMNode); override;
|
||||
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override;
|
||||
end;
|
||||
|
||||
TSynKeyListLink = class(TAbstractRule) //Vitalik 2004
|
||||
TSynKeyListLink = class(TAbstractRule)
|
||||
KeyList: TSynKeyList;
|
||||
end;
|
||||
|
||||
TSynSet = class (TSynRule) //Vitalik 2004
|
||||
TSynSet = class (TSynRule)
|
||||
SymbSet: TSymbSet;
|
||||
StartType: TSymbStartType;
|
||||
BrakeType: TSymbBrakeType;
|
||||
|
|
@ -95,11 +95,11 @@ type
|
|||
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override;
|
||||
end;
|
||||
|
||||
TSynSetLink = class(TAbstractRule) //Vitalik 2004
|
||||
TSynSetLink = class(TAbstractRule)
|
||||
SynSet: TSynSet;
|
||||
end;
|
||||
|
||||
TSynRangeLink = class(TAbstractRule) //Vitalik 2004
|
||||
TSynRangeLink = class(TAbstractRule)
|
||||
Range: TSynRange;
|
||||
Parent: TSynRange;
|
||||
constructor Create(aRange: TSynRange); virtual;
|
||||
|
|
@ -110,7 +110,7 @@ type
|
|||
fOpenSymbol: TSynSymbol;
|
||||
fCloseOnTerm: boolean;
|
||||
fCloseOnEol: boolean;
|
||||
fAllowPredClose: boolean; //Vitalik 2004
|
||||
fAllowPredClose: boolean;
|
||||
constructor Create(OpenSymbs: string = ''; CloseSymbs: string = '');
|
||||
destructor Destroy(); override;
|
||||
end;
|
||||
|
|
@ -123,7 +123,7 @@ type
|
|||
fSynSymbols: TList;
|
||||
fSynRanges: TList;
|
||||
fSynKeyLists: TList;
|
||||
fSynSets: TList; //Vitalik 2004
|
||||
fSynSets: TList;
|
||||
|
||||
StringCaseFunct: function (const st: string): string;
|
||||
fPrepared: boolean;
|
||||
|
|
@ -144,7 +144,7 @@ type
|
|||
|
||||
CaseFunct: function (ch: char): char;
|
||||
fTermSymbols: TSymbSet;
|
||||
HasNodeAnyStart: array[char] of boolean; //Vitalik 2004
|
||||
HasNodeAnyStart: array[char] of boolean;
|
||||
SymbolList: array[char] of TAbstractSymbol;
|
||||
private
|
||||
function GetSynSymbol(Index: Integer): TSynSymbol;
|
||||
|
|
@ -152,22 +152,22 @@ type
|
|||
function GetSynRangeLink(Index: Integer): TSynRangeLink;
|
||||
function GetSynRange(Index: Integer): TSynRange;
|
||||
function GetSynKeyList(Index: Integer): TSynKeyList;
|
||||
function GetSynSet(Index: Integer): TSynSet; //Vitalik 2004
|
||||
function GetSynSet(Index: Integer): TSynSet;
|
||||
|
||||
function GetSynSymbolCount(): Integer;
|
||||
function GetCommonSynRangeCount(): Integer;
|
||||
function GetSynRangeLinkCount(): Integer;
|
||||
function GetSynRangeCount(): Integer;
|
||||
function GetSynKeyListCount(): Integer;
|
||||
function GetSynSetCount(): Integer; //Vitalik 2004
|
||||
function GetSynSetCount(): Integer;
|
||||
|
||||
function GetCaseSensitive: boolean;
|
||||
procedure SetCaseSensitive(const Value: boolean);
|
||||
|
||||
public {temp}
|
||||
procedure LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer); //Vitalik 2004
|
||||
procedure LoadFromXml(xml: TDOMNode); override; //Vitalik 2004
|
||||
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; //Vitalik 2004
|
||||
procedure LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer);
|
||||
procedure LoadFromXml(xml: TDOMNode); override;
|
||||
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override;
|
||||
public
|
||||
constructor Create(OpenSymbs: string = ''; CloseSymbs: string = ''); virtual;
|
||||
destructor Destroy(); override;
|
||||
|
|
@ -181,7 +181,7 @@ type
|
|||
function AddRange(aOpen, aClose, aName: string; aColor: TColor): TSynRange; overload;
|
||||
procedure AddKeyList(NewKeyList: TSynKeyList); overload;
|
||||
function AddKeyList(aName: string; aColor: TColor): TSynKeyList; overload;
|
||||
procedure AddSet(NewSet: TSynSet); overload; //Vitalik 2004
|
||||
procedure AddSet(NewSet: TSynSet); overload;
|
||||
function AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; overload;//Vitalik 2004
|
||||
|
||||
function FindSymbol(st: string): TSynSymbol;
|
||||
|
|
@ -195,14 +195,14 @@ type
|
|||
procedure DeleteRange(Range: TSynRange); overload;
|
||||
procedure DeleteKeyList(index: integer); overload;
|
||||
procedure DeleteKeyList(KeyList: TSynKeyList); overload;
|
||||
procedure DeleteSet(index: integer); overload; //Vitalik 2004
|
||||
procedure DeleteSet(SynSet: TSynSet); overload; //Vitalik 2004
|
||||
procedure DeleteSet(index: integer); overload;
|
||||
procedure DeleteSet(SynSet: TSynSet); overload;
|
||||
|
||||
{ procedure SetParentColor;
|
||||
procedure RestoreOldColor; }
|
||||
procedure SetDelimiters(Delimiters: TSymbSet);
|
||||
// procedure SetStyles(aStyles: TSynUniStyles);
|
||||
procedure SetColorForChilds(); //Vitalik 2004
|
||||
procedure SetColorForChilds();
|
||||
|
||||
procedure ClearParsingFields();
|
||||
procedure ResetParents(aParent: TSynRange);
|
||||
|
|
@ -218,7 +218,7 @@ type
|
|||
// property CloseSymbol: TSynSymbol read fCloseSymbol;
|
||||
// property CloseOnTerm: boolean read fCloseOnTerm write fCloseOnTerm;
|
||||
// property CloseOnEol: boolean read fCloseOnEol write fCloseOnEol;
|
||||
// property AllowPredClose: boolean read fAllowPredClose write fAllowPredClose; //Vitalik 2004
|
||||
// property AllowPredClose: boolean read fAllowPredClose write fAllowPredClose;
|
||||
|
||||
property CommonRanges[index: integer]: TSynRange read GetCommonSynRange;
|
||||
property CommonRangeCount: integer read GetCommonSynRangeCount;
|
||||
|
|
@ -230,8 +230,8 @@ type
|
|||
property SymbolCount: integer read GetSynSymbolCount;
|
||||
property KeyLists[index: integer]: TSynKeyList read GetSynKeyList;
|
||||
property KeyListCount: Integer read GetSynKeyListCount;
|
||||
property Sets[index: integer]: TSynSet read GetSynSet; //Vitalik 2004
|
||||
property SetCount: Integer read GetSynSetCount; //Vitalik 2004
|
||||
property Sets[index: integer]: TSynSet read GetSynSet;
|
||||
property SetCount: Integer read GetSynSetCount;
|
||||
|
||||
property CaseSensitive: boolean read GetCaseSensitive write SetCaseSensitive;
|
||||
property Prepared: boolean read fPrepared;
|
||||
|
|
@ -365,7 +365,7 @@ var
|
|||
end;
|
||||
end;
|
||||
|
||||
begin //Vitalik 2004
|
||||
begin
|
||||
Result := False;
|
||||
posStart := Run;
|
||||
if Assigned(HeadNode) then begin
|
||||
|
|
@ -428,10 +428,8 @@ begin //Vitalik 2004
|
|||
end;
|
||||
until nxtStart = nil;
|
||||
end;
|
||||
//l1:
|
||||
{begin}
|
||||
|
||||
Run := posStart;
|
||||
// Result := False;
|
||||
AllowedTermSymbols := CurRule.fTermSymbols;
|
||||
for i := 0 to SynSets.Count-1 do begin
|
||||
AllowedTermSymbols := AllowedTermSymbols - TSynSet(SynSets[i]).SymbSet;
|
||||
|
|
@ -455,44 +453,6 @@ begin //Vitalik 2004
|
|||
end;
|
||||
end;
|
||||
Run := succ(posStart);
|
||||
{end}
|
||||
|
||||
{ was:
|
||||
Result := false;
|
||||
curNode := HeadNode;
|
||||
nxtNode := nil;
|
||||
while (curNode.NextSymbs.Count > 0) and (parser.fLine[parser.Run] <> #0) do begin
|
||||
inc(parser.Run);
|
||||
nxtNode := curNode.NextSymbs.FindSymbol(parser.fCurrentRule.CaseFunct(parser.fLine[parser.Run])); //: Ищем этот символ среди текущих веток
|
||||
if nxtNode = nil then begin
|
||||
dec(parser.Run);
|
||||
break;
|
||||
end;
|
||||
curNode := nxtNode;
|
||||
end;
|
||||
|
||||
if curNode.tkSynSymbol = nil then
|
||||
exit;
|
||||
|
||||
if (nxtNode = nil) and (curNode.NextSymbs.Count > 0) then
|
||||
dec(parser.Run);
|
||||
|
||||
if parser.fLine[parser.Run] <> #0 then
|
||||
inc(parser.Run);
|
||||
|
||||
if curNode.BrakeType = btAny then
|
||||
begin
|
||||
Result := True;
|
||||
tkSynSymbol := curNode.tkSynSymbol;
|
||||
exit;
|
||||
end;
|
||||
|
||||
if parser.fLine[parser.Run] in parser.fCurrentRule.fTermSymbols then
|
||||
begin
|
||||
Result := True;
|
||||
tkSynSymbol := curNode.tkSynSymbol;
|
||||
end;
|
||||
}
|
||||
end;
|
||||
|
||||
//==== TDefaultSymbols =======================================================
|
||||
|
|
@ -546,7 +506,7 @@ end;
|
|||
constructor TSynKeyList.Create(st: string);
|
||||
begin
|
||||
inherited Create;
|
||||
// AddAttribute();
|
||||
|
||||
KeyList := TStringList.Create;
|
||||
KeyList.Text := st;
|
||||
end;
|
||||
|
|
@ -558,14 +518,14 @@ begin
|
|||
end;
|
||||
|
||||
//==== TSynSet =========================================================
|
||||
constructor TSynSet.Create(aSymbSet: TSymbSet = []); //Vitalik 2004
|
||||
constructor TSynSet.Create(aSymbSet: TSymbSet = []);
|
||||
begin
|
||||
inherited Create;
|
||||
// AddAttribute();
|
||||
|
||||
SymbSet := aSymbSet;
|
||||
end;
|
||||
|
||||
destructor TSynSet.Destroy; //Vitalik 2004
|
||||
destructor TSynSet.Destroy;
|
||||
begin
|
||||
inherited;
|
||||
end;
|
||||
|
|
@ -611,7 +571,6 @@ begin
|
|||
fSynRangeLinks := TList.Create;
|
||||
|
||||
fTermSymbols := DefaultTermSymbols;
|
||||
// AddAttribute();
|
||||
end;
|
||||
|
||||
destructor TSynRange.Destroy;
|
||||
|
|
@ -623,7 +582,6 @@ begin
|
|||
fRule.fOpenSymbol.Free;
|
||||
if Assigned(fRule.fCloseSymbol) then
|
||||
fRule.fCloseSymbol.Free;}
|
||||
// Attribs.Free;
|
||||
FreeList(fSynKeyLists);
|
||||
FreeList(fSynSets);
|
||||
FreeList(fSynSymbols);
|
||||
|
|
@ -742,12 +700,12 @@ begin
|
|||
AddKeyList(Result);
|
||||
end;
|
||||
|
||||
procedure TSynRange.AddSet(NewSet: TSynSet); //Vitalik 2004
|
||||
procedure TSynRange.AddSet(NewSet: TSynSet);
|
||||
begin
|
||||
fSynSets.Add(NewSet);
|
||||
end;
|
||||
|
||||
function TSynRange.AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; //Vitalik 2004
|
||||
function TSynRange.AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet;
|
||||
begin
|
||||
Result := TSynSet.Create(aSymbSet);
|
||||
with Result do begin
|
||||
|
|
@ -806,13 +764,13 @@ begin
|
|||
fSynKeyLists.Delete(index);
|
||||
end;
|
||||
|
||||
procedure TSynRange.DeleteSet(SynSet: TSynSet); //Vitalik 2004
|
||||
procedure TSynRange.DeleteSet(SynSet: TSynSet);
|
||||
begin
|
||||
fSynSets.Remove(SynSet);
|
||||
SynSet.Free;
|
||||
end;
|
||||
|
||||
procedure TSynRange.DeleteSet(index: integer); //Vitalik 2004
|
||||
procedure TSynRange.DeleteSet(index: integer);
|
||||
begin
|
||||
TSynSet(fSynSets[index]).Free;
|
||||
fSynSets.Delete(index);
|
||||
|
|
@ -844,7 +802,7 @@ begin
|
|||
Result := fSynKeyLists.Count;
|
||||
end;
|
||||
|
||||
function TSynRange.GetSynSetCount: Integer; //Vitalik 2004
|
||||
function TSynRange.GetSynSetCount: Integer;
|
||||
begin
|
||||
Result := fSynSets.Count;
|
||||
end;
|
||||
|
|
@ -875,7 +833,7 @@ begin
|
|||
Result := TSynKeyList(fSynKeyLists[Index]);
|
||||
end;
|
||||
|
||||
function TSynRange.GetSynSet(Index: Integer): TSynSet; //Vitalik 2004
|
||||
function TSynRange.GetSynSet(Index: Integer): TSynSet;
|
||||
begin
|
||||
Result := TSynSet(fSynSets[Index]);
|
||||
end;
|
||||
|
|
@ -949,27 +907,6 @@ Begin
|
|||
end;
|
||||
end;
|
||||
|
||||
// Used in prepare
|
||||
(* replaced by quicksort... arb2004
|
||||
procedure SortSymbolList(List: TList);
|
||||
//: Sort list fSynSymbols
|
||||
var
|
||||
i: integer;
|
||||
fin: boolean;
|
||||
begin
|
||||
fin := False;
|
||||
while not fin do
|
||||
begin
|
||||
fin := True;
|
||||
for i := 0 to List.Count-2 do
|
||||
if TSynSymbol(List[i]).Symbol > TSynSymbol(List[i+1]).Symbol then
|
||||
begin
|
||||
List.Exchange(i, i+1);
|
||||
fin := False;
|
||||
end;
|
||||
end;
|
||||
end;*)
|
||||
|
||||
procedure TSynRange.ClearParsingFields();
|
||||
var
|
||||
i: integer;
|
||||
|
|
@ -1120,7 +1057,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
{begin} //Vitalik 2004
|
||||
{begin}
|
||||
if fSynSets.Count > 0 then
|
||||
for i := 0 to 255 do
|
||||
for j := 0 to fSynSets.Count-1 do begin
|
||||
|
|
@ -1132,7 +1069,7 @@ begin
|
|||
end;
|
||||
// SymbolList[char(i)] := fSetSymbols;
|
||||
// TSetSymbols(SymbolList[char(i)]).AddSetfSetSymbols;
|
||||
{end} //Vitalik 2004
|
||||
{end}
|
||||
end;
|
||||
//Fill remaining table
|
||||
for i := 0 to 255 do
|
||||
|
|
@ -1197,7 +1134,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TSynRange.SetColorForChilds; //Vitalik 2004
|
||||
procedure TSynRange.SetColorForChilds;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<Package Version="4">
|
||||
<Package Version="5">
|
||||
<Name Value="SynUni"/>
|
||||
<AddToProjectUsesSection Value="True"/>
|
||||
<Author Value="Vitaly Nevzorov (aka Vit); Kirill Burtsev (aka Fantasist); Vitaly Lyapota (aka Vitalik); eastorwest; Alexander Koblov"/>
|
||||
|
|
@ -37,7 +37,7 @@ https://www.mozilla.org/en-US/MPL/1.1/
|
|||
or
|
||||
GNU General Public License, version 2
|
||||
https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/>
|
||||
<Version Major="1" Minor="8" Release="1"/>
|
||||
<Version Major="1" Minor="8" Release="2"/>
|
||||
<Files Count="3">
|
||||
<Item1>
|
||||
<Filename Value="source/SynUniClasses.pas"/>
|
||||
|
|
@ -52,6 +52,7 @@ https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/>
|
|||
<UnitName Value="SynUniRules"/>
|
||||
</Item3>
|
||||
</Files>
|
||||
<CompatibilityMode Value="True"/>
|
||||
<RequiredPkgs Count="3">
|
||||
<Item1>
|
||||
<PackageName Value="FCL"/>
|
||||
|
|
@ -69,7 +70,6 @@ https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/>
|
|||
</UsageOptions>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
</PublishOptions>
|
||||
</Package>
|
||||
</CONFIG>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue